回測報表上面的持有區間,是扣除六日的,也就是只計算上班日
但是使用 DateDiff( CurrentDate , Date ) 函數,計算出來的是日曆天(包含六日在內)
請問小幫手,要如何寫出 只計算工作天呢?

回測報表上面的持有區間,是扣除六日的,也就是只計算上班日
但是使用 DateDiff( CurrentDate , Date ) 函數,計算出來的是日曆天(包含六日在內)
請問小幫手,要如何寫出 只計算工作天呢?

Hello 帥哥元,
最大持有區間的設定您可以參考此篇文章。
依照您的情況,可以計算進場後過了幾根bar來達到相同的條件。
只要設一個變數來記錄過去了幾根 bar 或過去了幾天即可。
舉例而言,如果頻率為天的話:
var: day_count(0);
if filled <> 0 then day_count+=1;
if 進場條件 and filled = 0 then begin
setposition(1, market);
day_count = 1;
end;
if 出場條件 and filled <> 0 then begin
setposition(0, market);
day_count = 0;
end;
如果頻率小於天的話則可以改用換天時在計算即可:
var: day_count(0);
if filled <> 0 and GetFieldDate("Date")[1] <> GetFieldDate("Date") then day_count+=1; //日期不同時才增加
if 進場條件 and filled = 0 then begin
setposition(1, market);
day_count = 1;
end;
if 出場條件 and filled <> 0 then begin
setposition(0, market);
day_count = 0;
end;
謝謝小幫手,這個方法我有想過,只是不知道有沒有類似 DateDiff 這樣的函數
Hello 帥哥元,
那您可以考慮使用GetBarOffset函數。
此函數會去計算傳入日期與現在的相對Bar偏移量。
如果您頻率是用日的話就可以取得相差幾天。
而頻率小於日的話可以考慮將出來的結果除以該頻率一日Bar的數量來取得近似值。
謝謝小幫手,那我再試試看
4 評論