符合進場條件後第N日進場

  •   317 
  • 最後發表   大A  2025 四月 23
大A 發文於   2025/04/20

請問我想寫符合進場條件後的第20日進場,用以下語法在交易腳本回測無結果,目前回測知道是有關『20日後』的語法應該有問題,請問是那邊有誤呢?

variable: BH(0),BL(0),DS(0),n(0);

condition1 =進場條件

if  condition1   then begin  

BH=h;

BL=L;

DS= 1 ;

 if DS >=1 and date <> date[1] then DS += 1;

end;

 

if position=0 and filled=0 and  condition1[n] and DS>=20 and close>BL then begin 

setposition(1,market);

DS=0;

end;

end;

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

(1)在你的程式裡面,n沒有機會改變,一直是0,所以可以刪除這個變數。

(2)處理這個問題時,需要考慮符合條件後,在20天之內又符合條件的情況,是否從最新符合條件的日期開始計算天數?

(3)若是分鐘頻率,才需要用date<>date[1]判斷新的一天開始。

(4)累加天數的變數DS,不應該放在符合condition1的if結構裡面。符合進場條件可能只是一個時間點,隔天不符合條件時,仍然應該讓天數累加1。

大A 發文於   2025/04/20

variable: BH(0),BL(0),DS(0),

input:entryday(20,"經過日數");

condition1 =進場條件

BH=h;

BL=L;

DS= 0;

end;

if DS >=0  then DS += 1;

if position=0 and filled=0 and  DS>=entryday and close>BL 

 then begin setposition(1,market);

DS=-1;

 end;

//這樣寫在符合進場條件後的第20日會進場,然後也有hold到觸發停利出場條件,但第20日後有符合進場條件時會再觸發進場,這邊我要怎麼去控制該股票觸發進場後就不再進場,語法是要怎麼寫?

 

 

 

 

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

variable: BH(0),BL(0),DS(0);
input:entryday(20,"經過日數");
condition1=進場條件;
if position=0 then
    begin
        if condition1 then
            begin  
                BH=h;
                BL=L;
                DS= 0;
            end;
        if DS >=0 then DS += 1;
    end;
if position=0 and DS>=entryday and close>BL then setposition(1,market);

大A 發文於   2025/04/20

感謝教授

XS小編 發文於   2025/04/23

Hello 大A,

 

小編補充,您也可以轉換想法,符合進場條件後的第20日進場 其實就相當於 20日前進場條件要符合。

所以使用日頻率的狀況下,可以透過 condition1[20] 來判斷往前20根Bar的條件是否為True。

發表回覆
Close