限制進場時間間隔,實單交易異常,回測正常

  •   317 
  • 最後發表   WinnerC  2022 十月 07
WinnerC 發文於   2022/09/24

Dear,

我的期望是單根5分K不要重複進場,目前的程式片段如下:

var: Quit_in_interval(0); //交易間隔分鐘

If BarFreq = "Min" then Quit_in_interval=BarInterval+1;   //如果是5分K,應該間隔6分鐘

 

//開單條件程序

if Position = 0 

and Filled = 0 

and in_confirm  //進場條件觸發

and (currentDate>Last_Buy_Date or  //夜盤跨日

currentTime >= timeadd(Last_Buy_Time, "M", Quit_in_interval))//同一天相隔上次進場超過6分鐘

then //多方買進操作程序

begin

SetPosition(1);{ 買進1張 }

Last_Buy_date=currentDate; //紀錄進場日期

Last_Buy_Time=currentTime; //紀錄進場時間

end;

 

這樣對嗎? 還是有更好的方法呢? 謝謝。

 

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

Hello WinnerC,

 

您可以使用 print 函數來檢查 Last_Buy_date 與 Last_Buy_Time。

小幫手認為應該是因為您即時的腳本是設為逐筆洗價,而這兩個變數沒有設為 intrabarpersist 導致。

您可以參考連結裡的說明,若沒有設為 intrabarpersist 的話,Last_Buy_date 與 Last_Buy_Time 很有可能無法記錄到正確的數值。

 

如果問題不是這樣的話,麻煩您提供 自動交易中心匯出檔勾選(包含)交易腳本 以及 XQ Log 來檢驗。

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

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

感謝。

WinnerC 發文於   2022/09/29

所以,只要腳本是逐筆洗價,所有與時間、價格........這些變數都要設成intrabarpersist變數嗎?

例如:

Value1= Xaverage(close,20);

Value1也要設成:

var: intrabarpersist Value1(0);

否則結果可能不如預期?

XQ小幫手 發文於   2022/10/05

Hello WinnerC,

 

您可以參考 intrabarpersist 和的說明。

並不是使用逐筆洗價就需要用到intrabarpersit,而是看您的腳本邏輯而定。

像是 Xaverage 函數在計算上,用到的是前一根Bar的運算結果和當下的價格,所以您是否有把其設為intrabarpersist是不會有影響的。

一般來說,會需要用到 intrabarpersist 的狀況是要保存在K棒未完成時運算的結果 (ex. 在K棒中達成某些條件,要記錄下來)。

WinnerC 發文於   2022/10/05

時間值在K棒區間是變動的, intrabarpersist 紀錄這些K棒未完成時的變動合理

currentbar 的值在K棒區間應該是一致的,為何要控制在同一根K棒指觸發一次的情境下,紀錄 currentbar的變數也需要宣告  intrabarpersist 呢?

XQ小幫手 發文於   2022/10/07

Hello WinnerC,

 

intrabarpersist 跟您用變數紀錄什麼數值是沒有關聯的。

您可以參考函數說明的第二張圖。

如果您是在條件符合時才用變數紀錄currentbar 的數值的話,假設在第2筆 Bar 第一次執行的時候條件符合,此時變數會由第一根Bar的數值(假設是0) 變為currentbar(假設是2)。

但若第2筆 Bar 第二次執行的時候條件不符合的話,在沒有設定 intrabarpersist 的情況下,變數會維持在第一根Bar最後運算的數值 (也就是0)。

而到了第三筆 Bar 還未運算條件前,變數會維持在第二筆 Bar 最後一次運算的數值,由於上述範例只運算了兩次,所以會是第二次的0。

 

為了要讓其保存最後一次腳本運算的數值(也就是洗價間的數值),所以才要設定 intrabarpersist 讓其記錄條件符合時當下的 currentbar。

如果有設定的話,第2筆 Bar 第一次執行的變數變為currentbar (2) 會被記錄下來,

第2筆 Bar 第二次執行和第三筆 Bar 還未運算條件前,該變數就會是2。

發表回覆
Close