個股儀表板step by step

By | 2017-11-20

每個人總有不只一個的進場標準,如何讓多個標準協同作業? 大家都有不同的自由心證法,透過程式語法,我們可以把不同的進場標準在K線圖中標示出來,從圖上進場點的標示分佈及密度來作決策。

有些程式交易者,認為交易愈簡單愈好,所以找出一個進場的標準就夠了,剩下的交給交易紀律及資金管理即可,加上其他的濾網往往僅是為了回測的最佳化,甚至可能過度最佳化。

我個人的經驗則是,如果有幾個彼些不相關的進場標準,都同時或相繼出現交易訊號,其可信度是會提高的,最常舉的例子是當我們感冒的時候,可能發燒,喉嚨痛,流鼻涕,咳嗽,全身無力,冒冷汗,如果只是發燒,或只是咳嗽,那麼不一定是感冒,但如果上面的症狀都相繼發作,那麼感冒的機率就大增了。

 

基於這樣的思考,我在三週學會程式交易這本書的實戰篇裡,提出了一個”個股儀表板”的概念,透過自訂指標的程式撰寫,在個股的K線圖上,把不同的進場訊號標示出來,讓我們可以隨時檢視,那些股票相繼且密集的出現進場訊號。

 

我在書裡舉了以下的例子

1{
2指標說明
3<blockquote class="wp-embedded-content" data-secret="pSrKHcfYzi"><a href="https://www.xq.com.tw/xstrader/%e5%80%8b%e8%82%a1%e5%84%80%e8%a1%a8%e6%9d%bf%e6%bc%94%e5%8c%96%e7%9a%84%e4%ba%a4%e6%98%93%e7%ad%96%e7%95%a5/">個股儀表板演化的交易策略</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" title="個股儀表板演化的交易策略 — XQ官方部落格" src="https://www.xq.com.tw/xstrader/%e5%80%8b%e8%82%a1%e5%84%80%e8%a1%a8%e6%9d%bf%e6%bc%94%e5%8c%96%e7%9a%84%e4%ba%a4%e6%98%93%e7%ad%96%e7%95%a5/embed/#?secret=4SL9QFoDBz#?secret=pSrKHcfYzi" data-secret="pSrKHcfYzi" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
4收錄於「三週學會程式交易:打造你的第一筆自動化交易」 3305https://www.ipci.com.tw/books_in.php?book_id=724
6}
7
8condition1=false;
9condition2=false;
10condition3=false;
11condition4=false;
12condition5=false;
13condition6=false;
14condition7=false;
15condition8=false;
16condition9=false;
17condition10=false;
18
19switch(close)
20begin
21 case >150: value5=low*0.9;
22 case <50 : value5=low*0.98;
23 default: value5=low*0.95;
24end;
25
26//==========日KD黃金交叉================
27input: _TEXT1("===============","KD參數");
28input: Length_D(9,"日KD期間");
29
30variable:rsv_d(0),kk_d(0),dd_d(0),c5(0);
31
32stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d);
33c5=barslast(kk_d crosses over dd_d);
34if c5=0 and c5[1]>20 then 
35 condition1=true;
36if condition1 then
37 plot1(value5,"月KD高檔鈍化且日KD黃金交叉");
38
39//============內外盤量比差====================
40variable:c3(0);
41value6=GetField("內盤量");//單位:元
42value7=GetField("外盤量");//單位:元
43if volume<>0 then begin
44 value8=value7/volume*100;//外盤量比
45 value9=value6/volume*100;//內盤量比
46end;
47value10=average(value8,5);
48value11=average(value9,5);
49value7=value10-value11+5;
50c3=barslast(value7 crosses over 0);
51if c3=0 and c3[1]>20 then
52 condition2=true;
53if condition2 then
54 plot2(value5*0.99,"內外盤量比差");
55
56//===========淨力指標==============
57input: _TEXT2("===============","淨力指標參數");
58input:period2(10,"長期參數");
59
60variable:c4(0);
61
62value12=summation(high-close,period2);//上檔賣壓
63value13=summation(close-open,period2); //多空實績
64value14=summation(close-low,period2);//下檔支撐
65value15=summation(open-close[1],period2);//隔夜力道
66if close<>0 then
67 value16=(value13+value14+value15-value12)/close*100;
68c4=barslast(value16 crosses over -4);
69if c4=0 and c4[1]>20 then
70 condition3=true;
71if condition3 then
72 plot3(value5*0.98,"淨力指標");
73
74//===========多頭起漲前的籌碼收集================
75variable:c2(0);
76value1=GetField("分公司買進家數");
77value2=GetField("分公司賣出家數");
78value3=value2-value1;
79value4=countif(value3>20,10);
80c2=barslast(value4>6);
81if c2=0 and c2[1]>20 then
82 condition4=true;
83if condition4=true then
84 plot4(value5*0.97,"籌碼收集");
85
86//===========法人同步買超====================
87variable: v1(0),v2(0),v3(0),c1(0);
88v1=GetField("外資買賣超");
89v2=GetField("投信買賣超");
90v3=GetField("自營商買賣超");
91c1= barslast(maxlist2(v1,v2,v3)>100);
92if c1=0 and c1[1]>20 then
93 condition5=true;
94if condition5=true then
95 plot5(value5*0.96,"法人同步買超");
96
97//========DIF-MACD 翻正=============
98input: _TEXT3("===============","MACD參數");
99input: FastLength(12,"DIF短天數"), SlowLength(26, "DIF長天數"), MACDLength(9, "MACD天數");
100variable: difValue(0), macdValue(0), oscValue(0);
101MACD(weightedclose(), FastLength, SlowLength,MACDLength, difValue, macdValue, oscValue);
102variable:c6(0);
103c6=barslast(oscValue Crosses Above 0);
104if c6=0 and c6[1]>20 then
105 condition6=true;
106if condition6 then
107 plot6(value5*0.95,"DIF-MACD 翻正");
108
109//========資金流向======================
110variable: m1(0),ma1(0),c7(0);
111m1=GetField("資金流向");
112ma1=average(m1,20)*1.5;
113c7=barslast(m1 crosses over ma1 and close>close[1]);
114if c7=0 and c7[1]>20 then
115 condition7=true;
116if condition7 then
117 plot7(value5*0.94,"資金流向");
118 
119//=========總成交次數================
120variable: t1(0),mat1(0),c8(0);
121t1=GetField("總成交次數","D");
122mat1=average(t1,20)*1.5;
123c8=barslast(t1 crosses over mat1 and close>close[1]);
124if c8=0 and c8[1]>20 then
125 condition8=true;
126if condition8 then 
127 plot8(value5*0.93,"成交次數");
128 
129//=========強弱指標==================
130variable:s1(0),c9(0);
131s1=GetField("強弱指標","D");
132c9=barslast(trueall(s1>0,3));
133if c9=0 and c9[1]>20 then
134 condition9=true;
135if condition9 then
136 plot9(value5*0.92,"強弱指標");
137 
138//============開盤委買================
139variable:b1(0),mab1(0),c10(0);
140b1=GetField("主力買張");
141mab1=average(b1,10);
142c10=barslast(b1 crosses over mab1);
143if c10=0 and c10[1]>10 then
144 condition10=true;
145if condition10 then 
146 plot10(value5*0.91,"主力買張");

用這個腳本畫出來的圖如下圖

個股儀表板

這個程式它的步驟有幾個

一,把每一個進場標準都視為一個condition,有多少個標準就設多少個,每一個condition的default值都是false。

二,依不同價位設置進場點的標示位置,

三,開始根據進場標準,在condition從false變成true時把進場標示標在當根K棒的底下,用Barslast來過濾同一個訊號必須是20天來第一次出現的

 

根據這些步驟,舉一個更容易理解的例子,如果把移動平均線黃金交叉,動能指標突破零,9K突破9D,以及6日RSI突破12日RSI,DIF-MACD轉正視為五個不同的進場標準,那麼包含這四個進場標準的個股儀表板就可以像下面這個腳本的寫法

1//把每一個進場標準都視為一個condition,
2//有多少個標準就設多少個,
3//每一個condition的default值都是false。
4condition1=false;
5condition2=false;
6condition3=false;
7condition4=false;
8condition5=false;
9//依不同價位設置進場點的標示位置
10switch(close)
11begin
12 case >150: value5=low*0.9;
13 case <50 : value5=low*0.98;
14 default: value5=low*0.95;
15end;
16//開始根據進場標準,
17//在condition從false變成true時
18//把進場標示標在當根K棒的底下。
19//用Barslast來過濾同一個訊號必須是20天來第一次出現的
20
21//==========日KD黃金交叉================
22input: _TEXT1("===============","KD參數");
23input: Length_D(9,"日KD期間");
24
25variable:rsv_d(0),kk_d(0),dd_d(0),c1(0);
26
27stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d);
28c1=barslast(kk_d crosses over dd_d);
29if c1=0 and c1[1]>20 then 
30 condition1=true;
31if condition1 then
32 plot1(value5,"月KD高檔鈍化且日KD黃金交叉");
33
34//========DIF-MACD 翻正=============
35input: _TEXT3("===============","MACD參數");
36input: FastLength(12,"DIF短天數"), SlowLength(26, "DIF長天數"), MACDLength(9, "MACD天數");
37variable: difValue(0), macdValue(0), oscValue(0);
38MACD(weightedclose(), FastLength, SlowLength,MACDLength, difValue, macdValue, oscValue);
39variable:c2(0);
40c2=barslast(oscValue Crosses Above 0);
41if c2=0 and c2[1]>20 then
42 condition2=true;
43if condition2 then
44 plot2(value5*0.99,"DIF-MACD 翻正");
45
46//========移動平均線黃金交叉======================
47variable: c3(0);
48c3=barslast(average(close,5)cross over average(close,20));
49if c3=0 and c3[1]>20 then
50 condition3=true;
51if condition3 then
52 plot3(value5*0.98,"移動平均線黃金交叉");
53 
54//=========RSI黃金交叉================
55variable: c4(0);
56
57c4=barslast(RSI(close,6) crosses over rsi(close,12));
58if c4=0 and c4[1]>20 then
59 condition4=true;
60if condition4 then 
61 plot4(value5*0.97,"RSI黃金交叉");
62 
63//=========動能指標==================
64variable:c5(0);
65c5=barslast( momentum(close,10) crosses over 0);
66if c5=0 and c5[1]>20 then
67 condition5=true;
68if condition5 then
69 plot5(value5*0.96,"動能指標");

這樣的腳本可以畫出下面這樣的圖

121

透過這樣的視覺化作法,就可以把您私房的進場標準,一一標示在K線圖上,這樣就隨時可以檢視自選股符合那些您自設的進場標準了。