固定天數後出場語法

  •   347 
  • 最後發表   大A  2025 四月 30
大A 發文於   2025/04/16

『進場後三天出場』,請問以下語法是正確的寫法嗎?若是的話,會因為策略中斷重啟而失效嗎?若不是的話,請問該如何修正?

var: intrabarpersist enter_date(0);

condition1= 進場條件;

if position=0 and filled=0 and condition1  then setposition(1,market);

enter_date = date;

 if position=1 and filled=1 then begin 

if datediff(date, enter_date)>=3 then setposition(0, market); 

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

(1)請注意,DateDiff計算的差異天數包含假日及週末。

(2)若用來回測,這樣寫是可以的,但用來實際交易,則不行;因為每天重新啟動策略,變數會歸零。實際交易時,你可將策略部位設定為『延續前次執行』,並用FilledEntryDate抓到庫存的第一次進場日期,然後據以判斷是否出場。

大A 發文於   2025/04/23

請問一下,『3日後』出場的語法我這樣寫,回測觸發不了出場條件,請問語法那邊有錯了?

 if barfreq<>"D" then return; 

 var:DS(0);

condition1= 進場條件;

if position=0 and filled=0  and  condition1   then begin 

 setposition(1,market);

 DS=0;

 end;

  if DS >=0  then DS += 1;

if position=1 and filled=1  and  DS>=3 then setposition(0,market);

 DS=-1;

虎科大許教授 發文於   2025/04/23

if position=1 and filled=1  and  DS>=3 then

   begin

      setposition(0,market);

      DS=-1;

   end;

大A 發文於   2025/04/23

修正後回測跑出來的結果都是下一分鐘就平倉,所以不知道是我的寫法哪邊有問題?

虎科大許教授 發文於   2025/04/23

日頻率的逐筆洗價會用1分鐘洗價。

大A 發文於   2025/04/23

改成這樣去回測,持有天數從1天到16天都有,看不出來為什麼會這樣子?

if barfreq<>"D" then return; 

 var:DS(0);

condition1= 進場條件;

if condition1 then DS=0;

if DS >=0  then DS += 1;

if position=0 and filled=0  and  condition1   then begin 

 setposition(1,market);

DS=-1;

  end;

if position = 1 and filled = 1 and  DS>=3     then  

setposition(0,market);

 

虎科大許教授 發文於   2025/04/24

var:DS(-1);

大A 發文於   2025/04/24

感謝教授,後來我是用  if filled<>0 then DS +=1;  這樣就會順利都在第三日平倉 ,但還是會有一個問題,就是回測的時候時常會發生這一分鐘進場,下一分鐘就出場的問題

虎科大許教授 發文於   2025/04/24

日頻率的交易腳本會用一分鐘最多洗價四次的方式判斷進出場。若程式沒寫好,很可能進場之後下一分鐘出場。

虎科大許教授 發文於   2025/04/24

日頻率之下,Time永遠等於0。

顯示更多回應 發表回覆
Close