急!!! GetInfo("TradeMode") 在自動交易下判斷不一致

  •   330 
  • 最後發表   MakeMoneyFromStock  2025 三月 26
MakeMoneyFromStock 發文於   2025/03/25

請問我有兩個股票自動交易當沖策略A & B,大框架架構跟判斷都是一模一樣的,除了下單條件不同以外:

if GetInfo("TradeMode") = 1 then begin

//-------- 檢查最晚可進場時間

if Time > EndEntryTime) and Position = 0 and Filled = 0 then begin  //例如EndEntryTime: 091000

RaiseRunTimeError("[結束] 已超過最晚可進場時間");

end;

end;

兩隻策略都是8點30分透過排程啟動,

結果策略A在8:35時就遇到了RunTimeError結束了,但策略B卻能運算正常並沒有在開盤前就遇到RunTimeError...

請問為甚麼?

一直以為GetInfo("TradeMode") = 1成立後,就是當日開盤後實際的K棒 (貴司說明也是這樣: https://www.xq.com.tw/learn/xsat/parameters/#learn03)

如果我想要在9:00開盤前,先不要進到下單條件的判斷,應該要怎麼寫才適用於實單與回測使用?

除了用Time>090000這種方法以外?

謝謝。

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/03/25

策略A的策略部位是否選擇由腳本計算?若是,則可能在跑策略部位計算區間時,因為歷史K棒的時間超過9點10分且沒有部位,所以中斷策略執行。

MakeMoneyFromStock 發文於   2025/03/26

報告教授,兩個策略預期都是跑當沖,所以策略部位都設成"不設定";

另外review後發現,策略B沒有設定EndEntryTime,原始程式有先判斷EndEntryTime是否有設定,所以不會跑進RaiseRunTimeError,這樣屬正常。

那重點在於策略A需要怎麼調整,才可以忽略在真正開盤前,不要進到下單條件的判斷?(可適用於實單與回測使用)

感謝教授!!!

MakeMoneyFromStock 發文於   2025/03/26

另外也想請教 Time > EndEntryTime,

這邊用Time(K棒時間)比較好,還是用CurrentTime?分別有甚麼考量嗎?(如果預期程式都會勾逐筆+自動洗價)

謝謝您。

虎科大許教授 發文於   2025/03/26

(1)策略部位設定為不設定,預設的position及filled都是0,若使用的頻率是日頻率,則Time等於0。為何策略A在8點35分會被中止,就你目前提供的資訊,無法判斷。

(2)可考慮加條件控制:if Date=currentDate and Time>EndEntryTime then begin ...... end;

(3)分鐘頻率的Time代表該根K棒的資料時間,逐筆洗價時,該根K棒任何Tick的Time都一樣。currentTime是系統時間,與K棒無關。使用哪一個,得視情況。若是5分K,Time>090500代表9點10分開始為True,而currentTime>090500,則是090501開始就是True。

  • 按讚來自於
  • ciouhan
MakeMoneyFromStock 發文於   2025/03/26

多謝教授指導,希望官方小幫手可以實測跟解答GetInfo("TradeMode")真正用法。

虎科大許教授 發文於   2025/03/26

請參考官網說明:

https://xshelp.xq.com.tw/XSHelp/?HelpName=GetInfo&group=GENERALFUNC

發表回覆
Close