請問小幫手 , 使用 Return 有條件限制嗎 ?

  •   179 
  • 最後發表   POP  2023 八月 01
POP 發文於   2023/07/11

Return 應該是跳出整個執行 , 我用在停損判讀中 如下 :

if 停損條件 then begin 

setposition(0);

return;

end;

但程式執行交易時 , 會停損但程式繼續執行不會停止腳本 .

是不是有使用限制呢? 

排序方式: 標準 | 最新
POP 發文於   2023/07/13

 

我又試了 if filled=0 then return ; 但結果仍然沒有中斷執行. 

XQ小幫手 發文於   2023/07/14

 Hello POP,

 

return 並不會中斷策略運作,只是中斷此次腳本運算。

所以下次洗價時腳本還是會運算。

 

如果您要將策略中斷的話,可以使用 raiseruntimeerror

POP 發文於   2023/07/17

我再試試 ,  謝謝.

POP 發文於   2023/07/19

我又試了 , 還是失敗 .

if 停損條件 then begin 

setposition(0);

 if filled=0 then raiseruntimeerror ; 

end;

如果從安控中限制交易次數 , 是定義執行腳本觸發交易條件的(買+賣)總次數嗎 ? 

 

XQ小幫手 發文於   2023/07/19

Hello POP,

 

您可以參考 setposition 的說明,要該次腳本運算結束後系統才會依據交易指令去下單。

所以這種寫法並不會觸發 raiseruntimeerror。(停損執行時還有庫存,沒有庫存的時候不會執行停損)

 

小幫手會建議您改用變數來紀錄是否有停損出場過,如果有的話才raiseruntimeerror。

舉例來說:

var: intrabarpersist _stoploss(0);

 

if 停損條件 then begin 

    setposition(0);

    _stoploss = 1; 

    end;

 

if _stoploss = 1 and filled = 0 then raiseruntimeerror("停損出場故中斷");

 

POP 發文於   2023/07/19

我再試試 ,  感謝.

POP 發文於   2023/07/19

程式停損後還是沒有停 , 我再試試別的方式

程式如下:

condition21=停損條件;

if condition21 then 

begin 

setposition(0);

stoploss = 1; 

end;

if stoploss = 1 and filled = 0 then raiseruntimeerror("停損出場");

XQ小幫手 發文於   2023/07/24

Hello POP,

 

小幫手建議您可以使用 print 函數將相關變數印出檢查。

推測可能是因為您逐筆洗價導致變數在同根Bar的洗價當中數值沒有改變。

可參考 intrabarpersist 的說明。

POP 發文於   2023/08/01

問題解決了 , 謝謝.

發表回覆
Close