自訂指標Step by Step

By | 2015-10-08

市場上有非常多的技術指標,學都學不完,但如果大家用的武器都一樣,總覺得很難能夠見人所未見,賺人所未賺,特別是有時候就是會有靈光乍現,電光火石的那一刻,當下如果能把靈感化為交易的策略,這快樂是我輩程式交易者,千金難換之快樂也。 容我舉個例子,跟大家分享這樣的快樂。

 

昨天同事來跟我借K線的書,我聊到其實有不少指標是本著K線的精神發明出來的。 我一直以來的體會是,每一根的K線都是那段時間多空爭戰的痕跡,

100701

以前一根K棒收盤價為基點,所能測到的最高與最低點,就是當日多空雙方角力的最大範圍,在技術分析上我們稱之為真實區間

100702

那麼在這樣的多空角力區間裡,我們怎麼知道多方與空方的力道各是多大呢?
我們常用的DMI指標,他的發明者是這麼計算的
071003

他認為如果今天的高點比前一天高點多出來的部份就是正的向上力量,今天的低點比前一天低點低的部份就是向下的力量。

然後它拿這兩股力量去相比,那邊強,另一邊就只能以零計算,然後再去跟這樣的力量跟真實區間相除,看向上的力量佔真實波動區間的比例是多少

1// DirectionMovement function (for DMI相關指標)
2// Input: length
3// Return: pdi_value(+di), ndi_value(-di), adx_value(adx)
4//
5input:
6length(numericsimple),
7pdi_value(numericref),
8ndi_value(numericref),
9adx_value(numericref);
10
11variable:
12padm(0), nadm(0), radx(0),
13atr(0), pdm(0), ndm(0), tr(0),
14dValue0(0), dValue1(0), dx(0),
15idx(0);
16
17if currentbar = 1 then
18begin
19padm = close / 10000;
20nadm = padm;
21atr = padm * 5;
22radx = 20;
23end
24else
25begin
26pdm = maxlist(High - High[1], 0);
27ndm = maxlist(Low[1] - Low, 0);
28
29if pdm < ndm then
30pdm = 0
31else
32begin
33if pdm > ndm then
34ndm = 0
35else
36begin
37pdm = 0;
38ndm = 0;
39end;
40end;
41
42if Close[1] > High then
43tr = Close[1] - Low
44else
45begin
46if Close[1] < Low then
47tr = High - Close[1]
48else
49tr = High - Low;
50end;
51
52padm = padm[1] + (pdm - padm[1]) / length;
53nadm = nadm[1] + (ndm - nadm[1]) / length;
54atr = atr[1] + (tr - atr[1]) / length;
55
56dValue0 = 100 * padm / atr;
57dValue1 = 100 * nadm / atr;
58
59if dValue0 + dValue1 <> 0 then
60dx = AbsValue(100 * (dValue0 - dValue1) / (dValue0 + dValue1));
61
62radx = radx[1] + (dx - radx[1]) / length;
63end;
64
65pdi_value = dValue0;
66ndi_value = dValue1;
67adx_value = radx;

 

上面的程式碼就是DMI的計算過程

 

但我對這個指標有個想法,每天都有向上的力量跟向下的力量,不能因為其中一股力量大於另一股,就把另一邊計算為零,兩邊的力量應該要都被計算到,然後看那一邊的力量比較大

所以我就寫了以下的腳本:

1input:sd(5);
2input:ld(20);
3
4setinputname(1,"短天期");
5setinputname(2,"長天期");
6
7variable:h1(0),l1(0),nf(0),snf(0),lnf(0),dd(0);
8
9H1=HIGH-HIGH[1];
10L1=LOW-LOW[1];
11
12if truerange<>0
13then
14begin
15NF=(H1+L1)/truerange;
16SNF=average(NF,sd);
17lnf=average(nf,ld);
18dd=snf-lnf;
19end;
20plot1(dd,"多空淨力");

我去計算一檔股票每天多空角力的差距,佔真實波動區間的比重,然後看看短天期平均跟長天期平均之間的差。

以下這張圖就是我拿這個指標來畫在加權指數上的對應圖

100901

 

這樣的指標,比起K線圖,更清楚地可以判斷現在是該站在多方還是空方。

上述的過程,是一個一步一步發展自訂指標的過程,我們可以透過這樣的過程,逐漸完備我們對一檔股票的多空判斷體系,當我們透過一連串自訂的指標來研判一檔股票的多空方向時,其實就像是透過多樣的儀器來做身體檢查,當我們發展出愈多愈觀察細微的健康檢查儀器,我們對於一檔股票的多空方向,就會有更高的掌握度。

以上是這些日子以來,我使用XS發展各種自訂指標的小小心得

野人獻曝,祝大家找到自己的股票多空檢查體系。