小幫手好,以下有幾個問題再麻煩回覆
問題1: 數據錯誤還是腳本錯誤?
用下面腳本,要找出當根是紅K,且紅K之前連續出現三根黑K的狀況後,下一根開盤價進場,進場後,收K出場
回測設定為5分K,無逐筆洗價,回測結果,大多數都是正確的在下根開盤價進場,但發現2022/7/28 不符合條件,卻進場,原因為何,請小幫手協助了解

//進場的判斷
condition1=close>open; //當根為紅K
condition2=trueall(close[1]<open[1],3); //紅K之前連續3黑K
condition3=currenttime>=090500 and currenttime<=133000;
if position=0 then begin
if condition1 and condition2 and condition3 then begin
setposition(1);
value1=currentbar;
end;
end;
if position=1 and filled=1 then begin
if currentbar-value1>=1 then setposition(0);
end;
問題2: 同樣是去取當根數據,為何一個用[0],一個卻要用到[1]
我真常搞不懂,為何有時用[0]可以,有時用[1]就不行,上面用condition1去判斷當根是否為紅K沒問題,
但是當我要計算台灣50創新高數據的差異來判斷進場就有問題了,
回測設定為5分K,無逐筆洗價,當根應該是收K判斷出符合條件,但進場竟會也是當根開盤價,而不是下一根開盤價進場,如圖2022/9/23 09:40收K是符合條件的,但進場竟也是在9:40,且是開盤價,這就有點感覺取到未來值
而當我把condtion3改為condition3=value1[1]-value1[2]=3;,進場的位置就正確了,9/23變成是在9:45開盤進場,但寫法還是有點讓人困擾,為何condition1用[0]-[1],這邊condition3卻要用[1]-[2],且這個應該是當根符合,才會在下一根開盤進場的,當根的資料,怎麼會是用[1]呢? 是否在資料的對齊上有問題? 這樣的寫法,在實際模擬交易,是不是又要改回[0]-[1]?

有問題的寫法
//進場
value1=getsymbolfield("TSE50.SJ","TW50創新高家數")-getsymbolfield("TSE50.SJ","TW50創新低家數");
condition3=value1-value1[1]=3;
if position=0 then begin
if condition3 then begin
setposition(1);
value1=currentbar;
end;
end;
if position=1 and filled=1 then begin
if currentbar-value1>=1 then setposition(0);
end;
問題3: 五分K收K下一根進場,但逐筆洗價出場
上面問題的延伸,如果我想要用5分K收K來判斷進場,但進場後,採用即時洗價的方式判斷出場,如賺賠5點出場,不知道該如何設定,或是程式碼該如何修改才能實現
以上三個問題,麻煩小幫手了
PS:頁面跟回測報告都附上了
2 評論