每個人總有不只一個的進場標準,如何讓多個標準協同作業? 大家都有不同的自由心證法,透過程式語法,我們可以把不同的進場標準在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收錄於「三週學會程式交易:打造你的第一筆自動化交易」 330頁 5https://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,"動能指標");
這樣的腳本可以畫出下面這樣的圖
透過這樣的視覺化作法,就可以把您私房的進場標準,一一標示在K線圖上,這樣就隨時可以檢視自選股符合那些您自設的進場標準了。