持有5天出場,出場前 符合訊號可再進場

  •   511 
  • 最後發表   石頭  2024 十月 23
石頭 發文於   2024/10/16

在1分k 架構下,寫波段交易

vars: FD(0);

if position=0 and 符合進場條件  and time>=132300 then begin

setposition(數量,market);

FD=0;

end ;

 

IF DATE<>DATE[1] THEN FD=FD+1;

IF FD=5 AND POSITION>0 and time>=132300 THEN setposition(0,market);

////////////////////////

上述測試結果,可持有5天出場, 但如果這5天期間,有符合訊號,想要再重複進場,一樣再持有5天後出場

也就是每筆交易都是獨立的,持有5天就出場。 要怎麼改寫?

感恩

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

若只是加碼,重新計算出場天數,比較好寫。

if position=0 and 符合進場條件  and time>=132300 then begin

setposition(數量+加碼數量,market);

FD=0;

end ;

若加碼的部位,需要另行設定出場時間,則要使用另一個變數,記錄加碼的日期。

石頭 發文於   2024/10/16

1. 我把 position=0 的條件拿掉,想說這樣變成每一筆都變成獨立交易, 不受目前有position影響而不下單

結果回測結果變錯的...

2. 如果 符合進場條件為 condition99, 要怎麼寫昨日符合進場條件?

condition99[1] 似乎是上一根1分k符合condiion99 。

感謝~

虎科大許教授 發文於   2024/10/17

(1)每次加碼之後,出場各自獨立,可使用變數控制,例如:

      var: FD1(0),FD2(0),FD3(0); //假設只想加碼兩次,一共最多進場三次

      var: intraBarPersist count(0);

      if 進場條件 then

            begin

                   setposition(position+加碼張數);                 

                  count+=1;

                  switch(count)

                        begin

                              case 1:

                                    FD1=0;

                              case 2:

                                    FD2=0;

                              case 3:

                                    FD3=0;

                        end;

            end;

(2)跨頻率抓布林值,需要使用xf_GetBoolean,例如:

      //日頻率之下,判斷5週均線是否與20週均線黃金交叉

      condition99=crossover(average(getField("收盤價","W"),5),average(getField("收盤價","W"),20)); 

      //condition99的前一期

      condition100=xf_GetBoolean("W",condition99,1); 

石頭 發文於   2024/10/17

感謝許教授無私分享,我再嘗試看看。

感恩~

虎科大許教授 發文於   2024/10/17

更正:在日頻率,判斷週頻率是否有黃金交叉,要用xf函數:

      //日頻率之下,判斷5週均線是否與20週均線黃金交叉

      condition99=xf_crossover("W",average(getField("收盤價","W"),5),average(getField("收盤價","W"),20)); 

      //condition99的前一期

      condition100=xf_GetBoolean("W",condition99,1); 

石頭 發文於   2024/10/18

感謝許教授~

XS小編 發文於   2024/10/23

Hello 石頭,

 

小編補充,您可以使用交易函數來取得進場的日期 (FilledRecordDate)。

搭配 FilledRecordCount 和 FilledRecordBS,應該會比較容易取得目前手上的庫存相關資訊來判斷是否應該出場。

發表回覆
Close