隔日沖出場的寫法

  •   643 
  • 最後發表   Golly  2021 八月 20
Golly 發文於   2021/08/14

想請問小幫手有關於隔日沖出場的寫法
以下是我寫的
但回測的時候跑出來交易次數是0
可以幫我檢查一下是哪邊的邏輯出了問題嗎?

 

//出場//

if filled <> 0 then begin

   //判斷式//

   If Date=FilledrecordDate(FilledRecordCount) then begin

       if (high-close)/close[1] > 0.05 then setposition(0,market); //進場當日5%停損

       end;

   If Date<>FilledRecordDate(FilledRecordCount) then begin //進場後隔日出場條件

       if barfreq<>"Min" and barinterval<>2 then raiseruntimeerror("此範例僅支援2分頻率");

       value21=highestbar(volume[1],135); //設定隔日最大量2分K(135為1日2分K區間數)

       value22=low[value21]; //設定最大量2分K的低點

       if close<value22 then setposition(0,market); //跌破當日2分K大量低點賣出

       if currentTime > 132400 then setposition(0,market); //收盤前如果還有部位賣出

   end;

end;

 

另外想請教

if barfreq<>"Min" and barinterval<>2 then raiseruntimeerror("此範例僅支援2分頻率");

value21=highestbar(volume[1],135); //設定隔日最大量2分K(135為1日2分K區間數)

以上這兩行是否可以直接利用getfield的方式改寫成下面這一句呢

value21=simplehighest(getfield("volume","2")[1],135); 

排序方式: 標準 | 最新
XQ小幫手 發文於   2021/08/18

Hello Golly,

 

如果下面附上的程式碼就是您的完整腳本的話,那麼交易次數為0單純就是因為您沒有進場條件。

另外,您停損的寫法有誤,應該是使用filledavgprice來計算目前的虧損獲利數。

還有需要注意的是XQ裡Bar的時間為開始的時間。所以若您用的不是逐筆,且限定只能使用2分鐘頻率的話,那麼132400就不會觸發。

小幫手修改過後的腳本會是:

if barfreq<>"Min" and barinterval<>2 then raiseruntimeerror("此範例僅支援2分頻率");

if position = 0 and filled = 0 then setposition(1, market); //如果手上沒有部位就進場

if filled <> 0 then begin

    If Date=FilledrecordDate(FilledRecordCount) then begin

        if (close - filledAvgPrice)/filledAvgPrice < -0.05 then setposition(0,market); //進場當日5%停損

        end

    else if Date<>FilledRecordDate(FilledRecordCount) then begin //進場後隔日出場條件

        value21=highestbar(volume[1],135); //設定隔日最大量2分K(135為1日2分K區間數)

        value22=low[value21]; //設定最大量2分K的低點

        if close<value22 then setposition(0,market); //跌破當日2分K大量低點賣出

        if currentTime >= 132000 then setposition(0,market); //收盤前如果還有部位賣出

        end;

    end;

 

關於您後面的那個問題,第一行程式碼只是限制您所使用的頻率。

所以如果您主要頻率是使用其他頻率,但又想取用2分鐘頻率的最高成交量的話,那麼是可以使用

value21=simplehighest(getfield("volume","2")[1],135); 

沒錯。

XQ小幫手 發文於   2021/08/18

Hello Golly,

 

小幫手另外補充關於您發到客服信箱的腳本。

首先,您使用了許多資料欄位,需注意有些資料欄位只支援日頻率以上。

所以小幫手建議您使用 GetField 時指定頻率,不然會因為主頻率使用了不支援的頻率而發生錯誤。

另外,回測不支援2分鐘頻率,所以腳本裡有 getfield("volume","2") 會無法使用在回測上。

還有需要注意的是 time 跟 currentime 在日頻率的話會是0,但是在有逐筆的狀況下您可以考慮使用getfield("Time", "1")來作替代。

Golly 發文於   2021/08/18

另外,回測不支援2分鐘頻率,所以腳本裡有 getfield("volume","2") 會無法使用在回測上。

=> 上面這句話,想請問小幫手,那麼回測可支援的頻率有哪些呢?5分鐘頻率是否支援?

XQ小幫手 發文於   2021/08/20

Hello Golly,

 

回測支援的分鐘頻率有1, 5, 10, 15, 30, 60。

您可以在回測的執行頻率那邊確認。(參考附圖)

附加文件

發表回覆
Close