無法正確觸發停損

  •   196 
  • 最後發表   雷雷好夥伴  2024 三月 05
雷雷好夥伴 發文於   2024/02/28

想請教小編 

想要在吞噬K收K後進場

然後在吞噬K跟前一根K棒的最高點(做空)或最低點(做多)作停損

回測的時候,進場後卻無法正確觸發停損

請問要怎麼修正腳本

 

var: 
    long_condition(false),          //做多進場 
    in_low(0),                  //進場低點 
    short_condition(false),         //做空進場 
    in_high(0);                 //進場高點 

//多頭吞噬進場
long_condition = close[2] <= open[2] and close[1] > open[1] and close[1] > high[2];
//空頭吞噬進場
short_condition = close[2] >= open[2] and close[1] < open[1] and close[1] < low[2];




  //多頭進場
  if Position = 0 and long_condition then begin
      SetPosition(1, MARKET);       { 以市價買進 }
      in_low = lowest(low,3);
  end;
  //多頭出場
  if Position = 1 and close < in_low then begin
      SetPosition(0, MARKET);       { 以市價賣出 }
  end;
  //空頭進場
  if Position = 0 and short_condition then begin
      SetPosition(-1, MARKET);      { 以市價買進 }
      in_high = highest(high,3);
  end;
  //空頭出場
  if Position = -1 and close > in_high then begin
      SetPosition(0, MARKET);       { 以市價賣出 }
  end;

排序方式: 標準 | 最新
XS小編 發文於   2024/02/29

 Hello 雷雷好夥伴,

 

由於附圖解析度太小無法看清楚,且沒有提供回測使用的相關設定,所以小編這邊無法判斷問題原因。

不過小編這邊簡單測試看起來print出的資訊應該是沒有錯誤的,您可以在腳本中加上print函數確認印出的數值是否有如同設想的運作。

 

若還是有問題的話,麻煩提供回測報告或是回測設定的相關截圖,並詳細描述下有問題的部分,讓小編比較好釐清。

感謝。

雷雷好夥伴 發文於   2024/02/29

以4542為例

想要的是在吞噬K收K後市價進場

停損設在吞噬K那兩根K棒的最低點(圖面是紅K的低點)

但是在跌破低點的時候卻沒有觸發停損

好像是記錄進場K棒失敗 不知道要怎麼改

附上檔案看解析度會不會比較好

再麻煩小編幫我看看了 感謝

附加文件

XS小編 發文於   2024/03/01

Hello 雷雷好夥伴,

 

因為您有勾選逐筆洗價,但變數沒有設為 intrabarpersist,導致沒有保存到正確的數值。

只要將變數宣告為 intrabarpersist 就可以正常出場 (參考附圖)。

另外需注意 lowest(low,3) 會是包含當根Bar在內的近3根Bar,並非只有吞噬K的那2根Bar。

附加文件

雷雷好夥伴 發文於   2024/03/01

那要只抓到吞噬那兩根K棒

是要改成  lowest(low[1],2)  嗎

是指包含low[1]往前數兩根的意思嗎

 

還有下次再出現吞噬K的話

有辦法再紀錄並覆蓋過去嗎

還是只能在記錄下一組吞噬K

XS小編 發文於   2024/03/05

 Hello 雷雷好夥伴,

 

由於您的條件用到的是 [2] 和 [1] 這兩根Bar,所以要取這兩根Bar的最低值是使用 lowest(low[1],2) 沒錯 (最高值同理)。

若您要保存之前的記錄的話,可以用另外的變數保存,舉例來說:

var: in_low(0), in_low1(0);

 

if Position = 0 and long_condition then begin

    SetPosition(1, MARKET);       { 以市價買進 }

    in_low1 = in_low;

    in_low = lowest(low,3);

    end;

 

這樣 in_low1 就會保存前一次吞噬K棒的最低點,in_low 則是這次吞噬K棒的最低點。

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