收K後下根開盤進場的問題

  •   278 
  • 最後發表   charlie1234  2022 十月 13
charlie1234 發文於   2022/09/24

小幫手好,以下有幾個問題再麻煩回覆

問題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:頁面跟回測報告都附上了

 

 

附加文件

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/09/29

Hello charlie1234,

 

1.小幫手認為應該是因為您不是用市價 (保證進場),而是用限價來回測,導致進場點變慢。

小幫手這邊回測是會在 7/28 12:00 時進場,而 7/28 11:55 是符合條件的。(參考附圖)

至於為什麼您的回測會到 12:20 才進場,這跟您在回測的設定有關。

您可以試試看使用市價來回測,或是將買進/賣出價設為觸發價 +- 1檔,就會是 12:00 進場。

 

2.這應該是資料錯誤,跟[0]和[1]沒關。

您可以將回測的相關數值print出來,會和指標上的不同。

9/23 09:35 印出的TW50創新高家數/TW50創新低家數 2/-3

                  指標畫出的TW50創新高家數/TW50創新低家數  1/5

看起來應該是回測的數值有誤,會請相關人員確認。

 

3.您可以設為逐筆洗價,然後用 condition1[1] 的方式進場,就相當於要等Bar完成才判斷進場。

出場則是當根Bar判斷條件符合就出場。

 

附加文件

XQ小幫手 發文於   2022/10/13

Hello charlie1234,

 

TW50創新高家數/TW50創新低家數 回測資料錯誤的問題已修正。

小幫手這邊測試是正常的。

發表回覆
Close