移動停利問題

  •   357 
  • 最後發表   王小光  2024 六月 24
王小光 發文於   2024/06/05

我參考移動停利的範例寫了一個移動停利的腳本

用了兩天都沒有出場,想問一下哪個部分有問題

移動停利條件:5分鐘頻率下,開盤先檢查有沒有開8%以上,有的話用日線3MA出場,沒有的話用移動停利

 

input:profit_point(0.1,"停利(%)");

input:profit_drawback_point(1.75,"停利回跌(%)");

input:loss_point(3.25,"停損(%)");

 

 

if position>0 and filled>0 and open>=getField("close","D")[1]*1.08 then begin

 if close<average(getField("close","D"),3) then setposition(0,market);

end;

 

if Position>0 and Filled>0 and open<getField("close","D")[1]*1.08 then begin

var: intrabarpersist max_profit_point(0);{ 啟動停利後最大獲利點 }

 

if loss_point > 0 and Close < FilledAvgPrice*(1-(0.01*loss_point)) then begin

{ 停損 }

SetPosition(0,market);

max_profit_point = 0;

 

end else begin

 

{ 判斷是否要啟動停利 }

if max_profit_point = 0 and Close >= FilledAvgPrice*(1+(0.01*profit_point)) then begin

max_profit_point = Close;

end;

 

if max_profit_point <> 0 then begin

if Close < max_profit_point*(1-(0.01*profit_drawback_point)) then begin

{ 停利 }

SetPosition(0,market);

max_profit_point = 0;

end else if Close >= max_profit_point then begin

{ 移動最大獲利點 }

max_profit_point = Close;

end;

end;

end;

 

end;

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

三個問題:

(1)open>=getField("close","D")[1]*1.08,這個open是每五分鐘的open,若指的是今天開盤價,應該改成getField("open","D")。

(2)loss_point是參數,loss_point > 0這個條件是多餘的。

(3)啟動移動停利是以下這兩個條件同時不滿足:loss_point > 0 and Close < FilledAvgPrice*(1-(0.01*loss_point)),而loss_point是參數,預設是3.25,這個永遠大於0,亦即程式不會跑去else執行停利。

  • 按讚來自於
  • joan5415
XS小編 發文於   2024/06/12

Hello 王小光,

 

小編補充,除了 open>=getField("close","D")[1]*1.08 的 open 要改成 getfield("Open", "D") 以外,您可以在腳本中加上print確認移動停利的數值運作是否有問題。

小編看起來應該是正常的,您也可以先簡化腳本,將 開8%以上,有的話用日線3MA出場 的條件拿掉,會比較容易確認。

 

感謝 虎科大許教授 的熱心回覆。

王小光 發文於   2024/06/24

非常感謝許教授的解惑

王小光 發文於   2024/06/24

感謝小編

發表回覆
Close