小台回測時未按腳本出場

  •   118 
  • 最後發表   無情卻慈悲  2022 三月 08
無情卻慈悲 發文於   2022/03/06

你好,

我想請小幫手幫我看一下我回測的疑問,

問題1:

我以回測商品小台期結果 2022/3/2 15:10 (下圖序號106)為例,

15:10下空單後(15:05觸發空單訊號,在15:10開盤買進),按照腳本規則,應在 15:30 自動反手多單(並非停損,而是觸發了多單訊號SetPosition(1)  ),

但回測的結果,卻在19:40才買進轉多單,我覺得有問題,連同序號2、序41也是一樣,

這邊就拿序號106的日期比較近來發問。

問題2:

承問題1,我也有print出來,發現「在15:10下空單後(15:05觸發空單說號,在15:10開盤買進)」,印來的記錄,它的成本價是0,但我在腳本中有寫到 :

Print(Date,Time,"空單進場2","成本",FilledAvgPrice);

也不知為何成本是0,而且可以在記事本看到到多個時間點的成本也是0,會不會這就是問題1的主因。

問題3:

腳本中我有幫日盤、下午、夜盤分成三個時段有不同的停利點數,但如下圖,會同時觸發兩個時段的停利,但明明我已用「currenttime」去區分了,請問這是可能哪裡有問題?謝

20220223.000000 130000.000000 多單停利:點數停利:日 + 60.000000 點 
20220223.000000 130000.000000 多單停利:點數停利:夜+  60.000000 點 

可否請小幫手幫我看一下為何如此。

LOG檔與自動交易給寄到您們的信箱。

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

Hello 無情卻慈悲,

 

1.您的多單進場1裡有條件一定不會達成。

close > highest(close,5)。

highest(close,5)會回傳近5根Bar中的最大值。

就算當下的close就是最大值,也不會大於此值。

建議您可以修改成 close > highest(close[1], 5) 收盤價大於前5根收盤價的最大值。

而至於多單進場2的 TrueAll(value50  > -20, 2) 則是到 19:35 才轉為True。

 

2.FilledAvgPrice為0代表著很簡單的意義,就是目前沒有庫存。

您的腳本寫法都是條件符合後下達setposition指令並print出FilledAvgPrice。

可是在同次執行中交易指令還沒下出去,故print時就沒有庫存價格。

您可以在有庫存後才print該指令。

舉例來說:

if filled <> filled[1] and filled <> 0 then Print(Date,Time,"成本",FilledAvgPrice);

這樣印出來的資訊就不會是0。

 

3.如果您有仔細看print出來的資訊的話,就會發現同時觸發的都會是夜。

(currenttime >= 000000 and currenttime < 0500000)

您後面 currenttime < 0500000 的條件有誤,多了一個0。

應該是 currenttime < 050000 才對。

無情卻慈悲 發文於   2022/03/08

謝謝小幫手的指導,我第一、第三點沒問題了,第二點我再仔細思考一下,非常感謝指導。

 

發表回覆
Close