交易腳本回測問題,回測好像失真, (突破20天高進場,虧損兩個atr停損, 跌破10天低點停利)

  •   470 
  • 最後發表   蓬蘇王杜  2024 十一月 26
蓬蘇王杜 發文於   2024/11/19

寫了一個簡單策略 ,邏輯為 (突破20天高進場,虧損兩個atr停損, 跌破10天低點停利)
並且控制15萬一開  代碼如下,
但回測很明顯失真,我找不出問題點,上來請教達人(檔案附上條件設定)

 

// 設定參數

input: capital(15, "開倉部位(萬)"),

       atr_length(14, "ATR計算天數"),

       high_length(20, "突破高點參考天數"),

       low_length(10, "停利低點參考天數"),

       atr_multiplier(2, "ATR停損倍數");

 

// 宣告變數

var: atr_value(0),               // ATR 值

     highest_close(0),           // 最近 20 天的最高收盤價

     stop_loss_price(0),         // 停損價格

     trailing_low(0),            // 最近 10 天的最低價(作為停利參考)

     position_size(0);           // 買入股數

 

// 計算 ATR

atr_value = Average(TrueRange, atr_length);

 

// 計算最近 high_length 天的最高收盤價

highest_close = Highest(Close[1], high_length);

 

// 開倉邏輯

if Position = 0 and Close > highest_close then begin

    // 計算開倉股數(取整數),假設每張股數為 1000 股

    position_size = IntPortion((capital * 10000) / (Close * 1000));

    if position_size > 0 then begin

        SetPosition(position_size);  // 設定部位

        stop_loss_price = Close - (atr_value * atr_multiplier);  // 設定停損價格

    end;

end;

 

// 停損邏輯

if Position > 0 and Close <= stop_loss_price then begin

    SetPosition(0);  // 平倉

end;

 

// 計算最近 low_length 天的最低價

trailing_low = Lowest(Low, low_length);

 

// 停利邏輯

if Position > 0 and Close <= trailing_low then begin

    SetPosition(0);  // 平倉

end;

 

 

附加文件

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

幾點建議:

(1)描述問題,請清楚說明問題是什麼,例如進場之後馬上出場,或該出場卻沒出場等等。用回測很明顯失真,到底哪裡失真?

(2)交易腳本應該註明使用的頻率,不然別人幫你用回測驗證程式,第一個就碰到要選擇頻率的問題。雖然你有表達「天」,但用分鐘頻率一樣可以跨頻率處理日資料。

(3)我用日頻率測試你的程式,可以回測,也有結果。看起來應該沒問題。

蓬蘇王杜 發文於   2024/11/20

很抱歉沒有敘述清楚

部位都是開倉一張,股價價格不一 不是每個回測資料都是用一百萬

假設我用一百萬 我希望每次開倉都是用一百萬來做比較

虎科大許教授 發文於   2024/11/20

你的程式單筆買進金額是15萬。股價17、18元左右的股票,出現進場訊號時,都會買進8張。回測報告也是顯示這樣。

若要每次買進一張,要將

SetPosition(position_size);

改成

SetPosition(1);

蓬蘇王杜 發文於   2024/11/20

 失真好像是停損那邊有問題, 我想說這策略怎麼負期望值成這樣 賠慘

蓬蘇王杜 發文於   2024/11/20

教授這邊賣出價大於買入價 為什麼這筆回測是虧損

附加文件

XS小編 發文於   2024/11/26

Hello 蓬蘇王杜,

 

回測在運算時會將除權息納入計算,若您使用還原價觀看當日資訊的話,可以看到進場日 2019/12/24 為 25.41,和非還原價格有所差別。

發表回覆
Close