圖1. 近五百個交易日交易明細
2010年6月29日 星期二
2010年6月25日 星期五
[策略驗證] 2010/06/25 訊號
今天於11:55分出現賣出訊號,賣出價位為7317,於13:15分當沖出場,出場價位為7330,虧損13點,自6/14日至今獲利32點。
圖1. 近五百個交易日交易明細
2010年6月24日 星期四
判斷結算日的函式
在策略進行回測時,常會需要判斷當天是否為結算日,以進行策略的微調,台股在2008年12月以前是在每個月的第三個星期三為最後交易日,星期四開盤時進 行結算,而2008年12月起,每個月的第三個星期三為最後交易日,亦為結算日,結算時以13:00至13:30的加權平均為結算價,但是2010年2月 與2010年6月因為假日的關係,結算日並非在第三個星期三,因此無法以程式自動推算結算日,筆者就利用查表的方式,將結算日寫成一個函式,當需要判斷結 算日時,則呼叫此函式即可判斷。以下即為此函式的原始碼:
函式名稱:IsSettleDay
回傳值:true or false
Input : ExDate(NumericSimple);
Variables : Counter(0), IsFound(false);
Arrays : SettleDate[113](0);
SettleDate[0] = 1010117;
SettleDate[1] = 1010221;
SettleDate[2] = 1010321;
SettleDate[3] = 1010418;
SettleDate[4] = 1010516;
SettleDate[5] = 1010620;
SettleDate[6] = 1010718;
SettleDate[7] = 1010815;
SettleDate[8] = 1010919;
SettleDate[9] = 1011017;
SettleDate[10] = 1011121;
SettleDate[11] = 1011219;
SettleDate[12] = 1020116;
SettleDate[13] = 1020220;
SettleDate[14] = 1020320;
SettleDate[15] = 1020417;
SettleDate[16] = 1020515;
SettleDate[17] = 1020619;
SettleDate[18] = 1020717;
SettleDate[19] = 1020821;
SettleDate[20] = 1020918;
SettleDate[21] = 1021016;
SettleDate[22] = 1021120;
SettleDate[23] = 1021218;
SettleDate[24] = 1030115;
SettleDate[25] = 1030219;
SettleDate[26] = 1030319;
SettleDate[27] = 1030416;
SettleDate[28] = 1030521;
SettleDate[29] = 1030618;
SettleDate[30] = 1030716;
SettleDate[31] = 1030820;
SettleDate[32] = 1030917;
SettleDate[33] = 1031015;
SettleDate[34] = 1031119;
SettleDate[35] = 1031217;
SettleDate[36] = 1040127;
SettleDate[37] = 1040218;
SettleDate[38] = 1040317;
SettleDate[39] = 1040421;
SettleDate[40] = 1040519;
SettleDate[41] = 1040616;
SettleDate[42] = 1040721;
SettleDate[43] = 1040818;
SettleDate[44] = 1040915;
SettleDate[45] = 1041020;
SettleDate[46] = 1041117;
SettleDate[47] = 1041215;
SettleDate[48] = 1050119;
SettleDate[49] = 1050203;
SettleDate[50] = 1050316;
SettleDate[51] = 1050420;
SettleDate[52] = 1050518;
SettleDate[53] = 1050615;
SettleDate[54] = 1050720;
SettleDate[55] = 1050817;
SettleDate[56] = 1050921;
SettleDate[57] = 1051019;
SettleDate[58] = 1051116;
SettleDate[59] = 1051221;
SettleDate[60] = 1060118;
SettleDate[61] = 1060215;
SettleDate[62] = 1060315;
SettleDate[63] = 1060419;
SettleDate[64] = 1060517;
SettleDate[65] = 1060621;
SettleDate[66] = 1060719;
SettleDate[67] = 1060816;
SettleDate[68] = 1060920;
SettleDate[69] = 1061018;
SettleDate[70] = 1061115;
SettleDate[71] = 1061220;
SettleDate[72] = 1070117;
SettleDate[73] = 1070226;
SettleDate[74] = 1070321;
SettleDate[75] = 1070418;
SettleDate[76] = 1070516;
SettleDate[77] = 1070620;
SettleDate[78] = 1070718;
SettleDate[79] = 1070815;
SettleDate[80] = 1070919;
SettleDate[81] = 1071017;
SettleDate[82] = 1071121;
SettleDate[83] = 1071219;
SettleDate[84] = 1080116;
SettleDate[85] = 1080220;
SettleDate[86] = 1080319;
SettleDate[87] = 1080416;
SettleDate[88] = 1080521;
SettleDate[89] = 1080618;
SettleDate[90] = 1080716;
SettleDate[91] = 1080820;
SettleDate[92] = 1080917;
SettleDate[93] = 1081015;
SettleDate[94] = 1081119;
SettleDate[95] = 1081217;
SettleDate[96] = 1090121;
SettleDate[97] = 1090218;
SettleDate[98] = 1090318;
SettleDate[99] = 1090415;
SettleDate[100] = 1090520;
SettleDate[101] = 1090617;
SettleDate[102] = 1090715;
SettleDate[103] = 1090819;
SettleDate[104] = 1090916;
SettleDate[105] = 1091021;
SettleDate[106] = 1091118;
SettleDate[107] = 1091216;
SettleDate[108] = 1100120;
SettleDate[109] = 1100222;
SettleDate[110] = 1100317;
SettleDate[111] = 1100421;
SettleDate[112] = 1100519;
SettleDate[113] = 1100617;
IsFound = false;
For Counter = 0 To 113
Begin
If SettleDate[Counter] = ExDate Then
IsFound = true;
End;
IsSettleDay = IsFound;
在圖1中,是畫出日K線圖,然後寫一個指標,若為結算日則值為1,否則為0,以驗證函式的正確性。
函式名稱:IsSettleDay
回傳值:true or false
Input : ExDate(NumericSimple);
Variables : Counter(0), IsFound(false);
Arrays : SettleDate[113](0);
SettleDate[0] = 1010117;
SettleDate[1] = 1010221;
SettleDate[2] = 1010321;
SettleDate[3] = 1010418;
SettleDate[4] = 1010516;
SettleDate[5] = 1010620;
SettleDate[6] = 1010718;
SettleDate[7] = 1010815;
SettleDate[8] = 1010919;
SettleDate[9] = 1011017;
SettleDate[10] = 1011121;
SettleDate[11] = 1011219;
SettleDate[12] = 1020116;
SettleDate[13] = 1020220;
SettleDate[14] = 1020320;
SettleDate[15] = 1020417;
SettleDate[16] = 1020515;
SettleDate[17] = 1020619;
SettleDate[18] = 1020717;
SettleDate[19] = 1020821;
SettleDate[20] = 1020918;
SettleDate[21] = 1021016;
SettleDate[22] = 1021120;
SettleDate[23] = 1021218;
SettleDate[24] = 1030115;
SettleDate[25] = 1030219;
SettleDate[26] = 1030319;
SettleDate[27] = 1030416;
SettleDate[28] = 1030521;
SettleDate[29] = 1030618;
SettleDate[30] = 1030716;
SettleDate[31] = 1030820;
SettleDate[32] = 1030917;
SettleDate[33] = 1031015;
SettleDate[34] = 1031119;
SettleDate[35] = 1031217;
SettleDate[36] = 1040127;
SettleDate[37] = 1040218;
SettleDate[38] = 1040317;
SettleDate[39] = 1040421;
SettleDate[40] = 1040519;
SettleDate[41] = 1040616;
SettleDate[42] = 1040721;
SettleDate[43] = 1040818;
SettleDate[44] = 1040915;
SettleDate[45] = 1041020;
SettleDate[46] = 1041117;
SettleDate[47] = 1041215;
SettleDate[48] = 1050119;
SettleDate[49] = 1050203;
SettleDate[50] = 1050316;
SettleDate[51] = 1050420;
SettleDate[52] = 1050518;
SettleDate[53] = 1050615;
SettleDate[54] = 1050720;
SettleDate[55] = 1050817;
SettleDate[56] = 1050921;
SettleDate[57] = 1051019;
SettleDate[58] = 1051116;
SettleDate[59] = 1051221;
SettleDate[60] = 1060118;
SettleDate[61] = 1060215;
SettleDate[62] = 1060315;
SettleDate[63] = 1060419;
SettleDate[64] = 1060517;
SettleDate[65] = 1060621;
SettleDate[66] = 1060719;
SettleDate[67] = 1060816;
SettleDate[68] = 1060920;
SettleDate[69] = 1061018;
SettleDate[70] = 1061115;
SettleDate[71] = 1061220;
SettleDate[72] = 1070117;
SettleDate[73] = 1070226;
SettleDate[74] = 1070321;
SettleDate[75] = 1070418;
SettleDate[76] = 1070516;
SettleDate[77] = 1070620;
SettleDate[78] = 1070718;
SettleDate[79] = 1070815;
SettleDate[80] = 1070919;
SettleDate[81] = 1071017;
SettleDate[82] = 1071121;
SettleDate[83] = 1071219;
SettleDate[84] = 1080116;
SettleDate[85] = 1080220;
SettleDate[86] = 1080319;
SettleDate[87] = 1080416;
SettleDate[88] = 1080521;
SettleDate[89] = 1080618;
SettleDate[90] = 1080716;
SettleDate[91] = 1080820;
SettleDate[92] = 1080917;
SettleDate[93] = 1081015;
SettleDate[94] = 1081119;
SettleDate[95] = 1081217;
SettleDate[96] = 1090121;
SettleDate[97] = 1090218;
SettleDate[98] = 1090318;
SettleDate[99] = 1090415;
SettleDate[100] = 1090520;
SettleDate[101] = 1090617;
SettleDate[102] = 1090715;
SettleDate[103] = 1090819;
SettleDate[104] = 1090916;
SettleDate[105] = 1091021;
SettleDate[106] = 1091118;
SettleDate[107] = 1091216;
SettleDate[108] = 1100120;
SettleDate[109] = 1100222;
SettleDate[110] = 1100317;
SettleDate[111] = 1100421;
SettleDate[112] = 1100519;
SettleDate[113] = 1100617;
IsFound = false;
For Counter = 0 To 113
Begin
If SettleDate[Counter] = ExDate Then
IsFound = true;
End;
IsSettleDay = IsFound;
在圖1中,是畫出日K線圖,然後寫一個指標,若為結算日則值為1,否則為0,以驗證函式的正確性。
圖1. 標示結算日
2010年6月21日 星期一
策略修正-多空趨勢之修正
今天下午利用了一些時間,將原策略的趨勢指標修正了一下,將多方與空方的指標分開計算,以求得更加細緻的進場判斷,結果發現總獲利增加了,圖1為二者的比 較表,圖2與圖3分別為修正前與修正後的績效報表,由此可發現將多空的趨勢指標分開,可以有效增加策略的績效。
圖1.修正前後比較表
圖2.修正前的績效
圖3.修正後的績效
[策略驗證] 2010/06/21 訊號
今日已確定不會再有訊號了,所以先把結果貼上來,今日訊號在11:35分以7518買進,於12:30跌破轉折低點,以7496停損平倉出場,此次虧損22點,6/14日至今累計獲利45點。
圖1. 近五百日交易紀錄
2010年6月18日 星期五
[策略驗證] 2010/06/18 訊號
今天9:20於7362出現放空訊號,10:55於7368出現回補訊號,此次交易虧損6點,6/14至今共計獲利67點。
針對此問題進行檢討,問題出現在波動不夠時就進場,修改程式增加波動的判斷後測試,可避免掉波動不夠而進場的問題,修正後的程式,今日則不會進場交易。
修正過後,2001/01/02至2010/05/31期間,獲利提昇至2204000元,交易次數降為947次,最大獲利折返降為55800,獲利因子提昇為2.22。
2010年6月15日 星期二
2010年6月14日 星期一
[策略驗證] 2010/06/14 訊號
上週驗證完停利策略後, 在單口下單方面停利並沒有比較好, 所以今天決定以不停利的方式, 來進行策略的驗證. 以下是今日的訊號圖,進場訊號出現在11:33, 所以在下根的開盤價進行買進一口, 買進價位在7384, 出場訊號出現在13:09, 所以在下根的開盤價進行平倉賣出一口, 賣出價位在7395, 獲利11點。
圖1. Tracking Center訊號
圖2. 近五百日交易訊號
2010年6月11日 星期五
停利效果的驗證
大賺小賠是存活在這個市場上最基本的原則,要達到這個原則,最重要的是停損,避免單次的虧損侵蝕掉長期的獲利,而在停利的部份,就見人見智了,停利並不會增加資金的效率,但會增加投資人對策略的信心度,以下就同一策略,單口停利/不停利及二口停利/不停利,進行驗證。
首先我們先來看TradeStation策略回測的基本設定,原始保證金設定為100000元,手續費設定為600元,驗證期間為2001/01/02 至2010/05/31 ,五分鐘的K線當沖策略,參數最佳化期間為2003/01/02 至2007/12/31 ,前後各留約二年時間來驗證策略的有效性。
圖 1策略的基本設定
假設我們只用一口大台來進行操作,盤中不進行固定點數停利出場,圖2中顯示淨利為2064000元,總勝率為55.14%,最大連錯次數為6次,最大連對次數為9次,多方勝率為56.04%,最大連錯次數為4次,最大連對次數為14次,空方勝率為54.18%,最大連錯次數為6次,最大連對次數為8次。
圖 2一口沒有停利的績效
假設我們只用一口大台來進行操作,盤中進行33點固定點數停利出場,圖3中顯示淨利為1658600元,總勝率為52.35%,最大連錯次數為7次,最大連對次數為9次,多方勝率為51.08%,最大連錯次數為5次,最大連對次數為6次,空方勝率為54.18%,最大連錯次數為6次,最大連對次數為8次。
圖 3一口有停利的績效
假設我們用二口大台來進行操作,盤中不進行固定點數停利出場,圖4中顯示淨利為4128000元,總勝率為55.14%,最大連錯次數為6次,最大連對次數為9次,多方勝率為56.04%,最大連錯次數為4次,最大連對次數為14次,空方勝率為54.18%,最大連錯次數為6次,最大連對次數為8次。除了淨利為一口的二倍外,其他的數據均與一口同。
圖 4二口沒有停利的績效
假設我們用二口大台來進行操作,盤中進行33點固定點數停利出場一口,圖5中顯示淨利為3629600元,總勝率為55.85%,最大連錯次數為4次,最大連對次數為14次,多方勝率為57.39%,最大連錯次數為5次,最大連對次數為6次,空方勝率為54.18%,最大連錯次數為6次,最大連對次數為8次。
圖 5二口有停利的績效
由以上的比較可以發現,若只有單一部位數,那就不應該採取固停利的方式出場,而是應該將此波段的點數吃到出場訊號出現或是當沖時間到才出場,會有較佳的表現,但若有二口以上的部份時,採用停利方式雖無法將資金效能提到最高,但是會提高勝率,而增加投資人對策略的信心。
訂閱:
意見 (Atom)