空單無法回補

  •   78 
  • 最後發表   StockS  2023 五月 17
StockS 發文於   2023/05/17

小幫手你好

請問為什麼我寫的語法

1.第二筆加空單為什麼無法觸發

2.接近漲停也沒辦法回補?

謝謝

value1 = (c - getField("參考價", "D")) /  getField("參考價", "D");


var: intraBarPersist part_1(false);
var: intraBarPersist part_2(false);
var: intraBarPersist last_date(0);
var: intraBarPersist stop_loss(false);


if last_date <> date then begin
    part_1 = false;
    part_2 = false;
    last_date = date;
end;

if value1 > 0.06 and part_1 = false then begin
    short(1, market);
    part_1 = true;
end;


if value1 < 0.09 
    and c > filledAvgPrice * 1.01
    and part_1 = true and part_2 = false then begin
    short(1, market);
    part_2 = true;
end;

if (part_1 = true or part_2 = true)
    and ( value1 > 0.09 or c >= addSpread( getField("漲停價", "D"),-3))
    and stop_loss = false
    then begin
    buy(filled , market);
    stop_loss = true;
end;

XQ小幫手 發文於   2023/05/17

Hello StockS,

 

1. 因為腳本同次運行中只會執行一個交易指令。

您的加碼空單條件如果同時符合的話就不會有第二次交易了。

需注意 filledavgprice 在沒有部位時會是0,所以在part_1 = True 的時候基本上加碼條件就會直接符合。

還有回測的策略安全設定也有可能導致無法加碼。

 

建議您可以修改為:

if value1 > 0.06 and part_1 = false then begin

    short(1, market);

    part_1 = true;

    end

else if value1 < 0.09 

    and filled <> 0

    and c > filledAvgPrice * 1.01

    and part_1 = true and part_2 = false then begin

    short(1, market);

    part_2 = true;

    end;

 

2. buy(filled) 在腳本中只會是 buy(-1) 或是 buy(-2)。

並不會平倉。

您可以參考buy的說明。

 

小幫手會建議您使用 setposition,比較好理解控制。

發表回覆
Close