請教計數器的問題

  •   203 
  • 最後發表   POP  2023 八月 29
POP 發文於   2023/08/19

Hi 小幫手

交易程式有用停損計數器,程式如下. 用print 讀取計數值, 發現第一筆停損發生時值是從0跳3 ,

之後就正常加1累計, 請問有什麼方法可以改善這個問題?

程式:

var: intrabarpersist stoploss(0);

if 停損條件 then 

begin 

setposition(0);

stoploss=stoploss+1; 

end;

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

Hello POP,

 

小幫手不知道您的停損條件為何,print 什麼時候執行,推測可能是停損條件符合,但 setposition 因為部位為0所以不用執行 (ex. 上次洗價時就已經設為0),此時 stoploss 還是會增加。

建議您可以嘗試在停損條件中加上 position 和 filled 當作條件,確保只有在有庫存和部位的時候執行。

可參考 自動交易語法介紹 裡的 position 和 filled 的說明。

 

如果還是有問題的話,麻煩更詳細說明您使用的情境,並提供腳本、相關設定 (回測設定或交易策略設定) 以及 XQ Log 來確認。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以保存到雲端後將連結Mail至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小幫手才能盡早處理)。

感謝。

POP 發文於   2023/08/23

Hi 小幫手 ,

停損條件執行是在 判斷 filled 不等於0的條件後 ,  我是猜測是否未成交但已執行 count +1 , 直到下第3次才成交 .

於是把記數器改到確認 filled =0 後再加 1 , 結果還是無動作.

比較怪是用原本的寫法在回測時是可以動作的 , 但在實際交易卻沒有動作 .

程式 :

判斷 filled <>0 後 ,

var: intrabarpersist stoploss(0);

if 停損條件 then 

begin 

setposition(0);

stoploss=stoploss+1; 

end;

XQ小幫手 發文於   2023/08/29

Hello POP,

 

請注意若您的條件是先判斷 filled <>0 接著判斷停損的話,有可能發生這次洗價完執行 setposition 後,到下次洗價時委託單尚未完全成交。

此時 filled 一樣不為0,故若停損條件符合的話,一樣會執行 stoploss=stoploss+1; 。

建議您可以修改為判斷 filled <> 0 and position <> 0,確保執行過一次停損委託後就算尚未完全成交也不會再進入判斷式中。

細節可參考 自動交易語法介紹 裡的 Position和Filled有什麼差別

 

發表回覆
Close