當天依昨日庫存減碼,只交易一次該如何設定?

  •   191 
  • 最後發表   小金  2024 五月 24
小金 發文於   2024/05/20

小編您好,

我想要依照昨日庫存進行減碼

例如昨日庫存為20張股票

今天減碼2張

要如何設定?

我試了設定用變數 var: intrabarpersist _once(0);

來控制交易筆數

也設定了安控設定,設定交易商品只交易一次,

但是執行時,還是不但把我的庫存出清,還多放空了2張

等於是他無限執行到position < 0為止。

請問到底該如何執行一天只減碼一次的交易行為?

以下是程式碼:

//宣告參數
input : amount(50000, "單筆交易金額");
input : N(240,"創N日高");

var: exit_position(0);  //出場張數 
var: intrabarpersist _once(0); //設定當天出場次數

if issessionfirstbar then _once = 0;

//設定變數
value1 = Highest(getfield("High", "D")[1], N);  //前一日的N天最高價

//賣出條件
condition1 = close > value1; //創N日新高

//程式交易
exit_position = floor(amount / (close*1000));   //計算總共需要賣出幾張
if position > 0 and condition1 and Getinfo("IsRealtime") = 1 and _once = 0 then begin setposition(position-exit_position, market , label:="s1");  //在持有倉位且創N日新高時減碼
 _once = 1; //設定已經交易過一次
end;

 交易設定:

交易情形如下:

 

後來還出現安控失敗的問題。

我希望能有position=昨庫存的選項,讓我可以一天只依昨日庫存交易一次的方法,請小編解惑!

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

策略部位勾選依庫存。

小金 發文於   2024/05/21

我本來就有勾選依庫存哦!

小金 發文於   2024/05/22

交易設定

補上交易設定以及真實交易情形如附檔,請小編儘速回復,謝謝!

XS小編 發文於   2024/05/24

Hello 小金,

 

問題是出在腳本中的 if issessionfirstbar then _once = 0;。

issessionfirstbar 會判斷是否為當日的第一根Bar,舉例來說1分鐘頻率的話,就是 090000 這根Bar洗價時都為True。

您使用日頻率,那麼自然就會一直是True,因為當天只會有一根Bar。

小編會建議您可以將 if issessionfirstbar then _once = 0; 拿掉,這樣當天就只會執行一次出場。

只要重新啟動策略, _once 就會被歸0。

若還是需要換日歸0的邏輯,可以另外另一個變數來保存date判斷,舉例來說:

var: intrabarpersist _date(0);

 

if _date <> date then begin

    _once = 0;

    _date = date;

    end;

 

另外您下面提到的附檔沒有成功上傳 (可能是因為檔案過大或討論區不支援的格式),建議若修改後還是有問題的話可以將相關資訊 (請包含XQ Log, 預設路徑:C:\SysJust\XQLite\LOG) mail 至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小編才能盡早處理)。

感謝 虎科大許教授 的熱心回覆。

發表回覆
Close