自動交易回測 停損問題

  •   171 
  • 最後發表   bowen  2023 十一月 01
bowen 發文於   2023/10/28

選股條件:

回測區間:

腳本: 5分K

if date <> date[1] then value1 = 0;
value1 = value1 + (H+L+C+O) / 4 * volume *1000; //value1 = GetField("成交金額(元)","D") 
if getField("Volume","D") <> 0 then value2 = value1 / getField("Volume","D") / 1000; //value2 = getField("均價") 

//多 進場
if Filled = 0 and time >= 091000 and high > value2 and volume >= volume[1]*2 and close > open then begin
    setposition(1,market);
    value3 = addSpread(low,-1); //value3 = 停損價
end;
//多 離場
if Filled <> 0 and low < value3 then setposition(0,market);
if Filled <> 0 and time >= 132000 then setposition(0,market);
if Filled <> 0 and high = getField("漲停價", "D") then setposition(0,market);

策略:

進場條件: 09100以後站上當日均價線爆量紅K 進場

出場條件: 停損or尾盤出場or漲停

不懂是哪裡有問題?停損價到了沒停損,導致會有報酬率-10%以上的績效。

 

XQ小幫手 發文於   2023/11/01

Hello bowen,

 

您的回測使用的是逐筆洗價,但 value3 並不是intrabarpersist,所以問題應該是 value3 並沒有保存您所想的停損價,建議可以將相關數值印出即可確認。

您可以將 value3 替換成用 intrabarpersist 宣告的變數。

舉例來說:

var: intrabarpersist stoploss(0);

 

if Filled = 0 and time >= 091000 and high > value2 and volume >= volume[1]*2 and close > open then begin

    setposition(1,market);

    stoploss = addSpread(low,-1); 

    end;

 

if Filled <> 0 and low < stoploss then setposition(0,market);

  • 按讚來自於
  • Bowen16
發表回覆
Close