自動交易回測_陣列的使用問題

  •   124 
  • 最後發表   老王837  2022 二月 21
老王837 發文於   2022/02/17

這是一個網格交易的程式利用陣列來做紀錄

看了好幾次log, 還是看不出程式哪裡有問題, 怎麼都覺得是陣列使用的bug

請先看print 的 log

20210825.000000 222500.000000 買入,_i,close,bar,position,filled 17108.000000 5.000000 9801.000000 -1.000000 -1.000000 

我的程式邏輯是有買才賣, 所以不應該出現這種情形

請協助一下

附加文件

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

Hello 老王837,

 

您的錯誤是發生於複數的 setposition 同時符合條件時,只會執行第一個。

但是就算 setposition 沒有執行,變數的值卻改變了。

小幫手在您執行買入與執行賣出的部份加上print來檢查。(參考附圖)

在記事本中反白且用黃色框起的部分是在同一次洗價中執行的。

該次洗價中雖然把之前買入 _i = 3 的部分賣出,但在迴圈執行下一次 _i = 4 時符合買入條件。

此時就發生兩個 setposition 都符合,但只有執行第一個的狀況。

而 _i = 4 的 _G_rec 也因為符合而被改成 True。

所以接下來就變成賣出1張進場。

小幫手建議您在迴圈中不要使用 Setposition,而是用變數紀錄應有的部位,最後在迴圈外才用setposition設為該變數紀錄的部位。

附加文件

老王837 發文於   2022/02/18

我的問題是_G_rec[5]紀錄買入指標並沒有變成true, 可是卻在賣出迴圈檢查時出現true的情況, 所以執行Setposition賣出

XQ小幫手 發文於   2022/02/21

Hello 老王837,

 

如同小幫手上面所說,是因為在2021/08/25 21:56這一分鐘時同時有兩筆符合進出場條件因此 _G_rec[3] 改回False 且 _G_rec[4] 改成 True,但只有 _G_rec[3] 執行賣出交易。

此時您的陣列已經不符合預期,沒有部位但 _G_rec[4] 為True。

接著在 2021/08/25 22:19 的時候 _G_rec[4] 符合條件所以改回False執行賣出放空,接著在 2021/08/25 22:26 時執行買進回補,並將 _G_rec[5] 改成 True。

細節可以參考附圖和print輸出檔。

附加文件

發表回覆
Close