結算

  •   162 
  • 最後發表   winton  2024 三月 05
winton 發文於   2024/02/21

台指期自動交易"依策略執行" 遇結算是否就終止了? 譬如結算前有部位.結算後部位歸零.策略也隨即終止?

如果是這樣.(交易近月標的)"依策略"回測超過一個月的期間.因為有跨月(部位歸零). 結果是否就不準了?系統回測的機制有考慮

結算部位歸零的變數嗎?

排序方式: 標準 | 最新
XS小編 發文於   2024/02/22

 Hello winton,

 

您可以參考 自動交易回測功能 裡的說明,回測報告在計算時會去除換月時的價差影響。

也可以理解為策略會平倉到期月份的商品並在新的月份商品中建立部位。

 

但在即時執行的狀況下策略並不會自動轉倉,所以您必須自行在策略腳本中加上換月轉倉的邏輯,或是手動轉倉完畢後調整策略中 庫存 及 價格 (如果有再度進場的話)。

winton 發文於   2024/02/22

因為交易標的多.做不到手動調整.可否教我上述"策略腳本中加上換月轉倉的邏輯"? 非常感謝!

XS小編 發文於   2024/02/26

Hello winton,

 

舉例來說,您可以使用 DayOfWeek 搭配 WeekOfMonth 來判斷台指期商品是否為當月的第三個星期三。

類似功能的函數有 DaysToExpiration ,不過需注意這種作法無法對應到當因為放假導致到期日變動的狀況。

所以若該月的到期日並不是第三個星期三的話就需要另外處理。

winton 發文於   2024/02/26

 是的.我的意思是當使用上述函數告訴系統因為商品到期.如何讓系統"自動"轉倉?

XS小編 發文於   2024/02/27

 Hello winton,

 

系統不會自動轉倉,要您自行撰寫邏輯判斷今日是否為到期日並交易。

舉例來說:

var: intrabarpersist _switch(0);

if  NthDayofMonth(EncodeDate(year(date),month(date), 1),3,3) = date and currenttime >= 130000 and currenttime < 134500 and filled <> 0 then begin

    _switch = filled;

    setposition(0, market);

    end

else if currenttime >= 150000 and _switch <> 0 then begin

    setposition(_switch, market);

    _switch = 0;

    end;

 

這樣就會在每個月的第三個禮拜三的 130000 以後出場,並在同天下午的150000以後再度進場。

NthDayofMonth(EncodeDate(year(date),month(date), 1),3,3) 會計算出當月的第三個星期三,但須注意並不包含該日為假日的情況。

 

若是運作在即時的狀態下,可以使用 GetSymbolInfo("到期日") 或是 GetQuote("到期日") 來判斷當跟Bar的日期是否為到期日 (不會有假日的情況)。

winton 發文於   2024/03/01

非常感謝.很有幫助^^

可以小聲問一下.上面_switch=0 的作用/意思是甚麼呀? 又setposition(_switch, market);是把結算平倉的filled總數再建立以便持續原來的策略嗎?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

XS小編 發文於   2024/03/05

 Hello winton,

 

是的,_switch 是在若有庫存要轉倉時,用來保存當下庫存的變數。

所以上面的範例中若在13點以後有庫存的話,會用 _switch 保存庫存數量並出場,在下午15點以後再依 _switch 保存的數值進場並將 _switch 歸0。

發表回覆
Close