其他失敗 回測執行異常

  •   279 
  • 最後發表   奇怪的人  2025 四月 16
奇怪的人 發文於   2025/04/12

我的腳本編譯沒有問題

但是執行回測都會出現"其他失敗 回測執行異常(1)"


我有寄MAIL到XQservice@XQ.com.tw給小幫手

再拜託幫我看一下

排序方式: 標準 | 最新
奇怪的人 發文於   2025/04/12

找到原因了

//----做多出場條件----
if position = 1 and filled = 1 and PASS = 1 then begin
  if close cross Over addspread(filledavgprice, (2.5*DUATR)) then begin
    setposition(0, market, label:="多單獲利出場"); 
    PASS = 0 ;
  end else
  if close cross Under addspread(filledavgprice, (-1.5*DUATR)) then begin
    setposition(0, market, label:="多單虧損出場"); 
    PASS = 0 ;
  end else
  if value1[1] cross Under 0 then begin
    setposition(0, market, label:="多單MACD翻轉出場"); 
    PASS = 0 ;
  end;
end;


//----做空出場條件----
if position = -1 and filled = -1 and PASS = 2 then begin
  if close cross under addspread(filledavgprice, (-2.5*DUATR)) then begin
    setposition(0, market, label:="空單獲利出場"); 
    PASS = 0 ;
  end else
  if close cross over addspread(filledavgprice, (1.5*DUATR)) then begin
    setposition(0, market, label:="空單虧損出場"); 
    PASS = 0 ;
  end else
  if value1[1] cross over 0 then begin
    setposition(0, market, label:="空單MACD翻轉出場"); 
    PASS = 0 ;
  end;
end;

只要將cross over跟cross under改成用><跟=就可以了

但是為什麼會這樣?
為什麼出場不能用
cross over跟cross under??

虎科大許教授 發文於   2025/04/12

你需要了解cross over及cross under的定義。它們與大於及小於是不同的。在3月15日的週末特訓班課程中,我有說明兩者的差異。若不清楚兩者的差異,很容易犯上邏輯錯誤。

奇怪的人 發文於   2025/04/14

我明白cross over及cross under是穿越而不是比大小
所以在價位上用><來寫會比較直觀

所以說cross over及cross under在碰到價位跳空會無法觸發判斷嗎?

虎科大許教授 發文於   2025/04/14

cross over是前一根K沒有cross over,而這根K出現cross over,才是cross over。若前一根K已經cross over,這根K就不會cross over。它與是否跳空無關。

XS小編 發文於   2025/04/16

Hello 奇怪的人,

 

小編補充,cross over 會比較前後兩期的數值,判斷是否穿越。

而FilledAvgPrice只有提供當期值,不能使用前期值,因此會出錯。

您可以考慮改用變數保存 FilledAvgPrice 的數值,然後再用變數來當作 cross over 條件。

發表回覆
Close