自動交易 進場空單 問題

  •   54 
  • 最後發表   XQ 新手  3 週前
XQ 新手 發文於   2024/11/28

請問各位高手大大們,能否幫我解決多日來的疑問,微台 1分k  空單進場 逐筆洗價+自動洗價 卻未達停損停利就出場(如附圖)且還亂進出場,爬了好多日文,還是沒法解決,勞煩大大們出手相助~~感激各位大俠~~~

//變數區============================

var: o1(0), c1(0), h1(0), l1(0);

var: o2(0), c2(0), h2(0), l2(0);

var: o3(0), c3(0), h3(0), l3(0);

// 初始化變數

var:BCost(0), BOUT(0);

input: move_profit_point(10, "移動停利(點)");

input: loss_point(30, "停利損(點)");

//運算區=============================

// 先判斷目前是分鐘線

if barfreq <> "Min" or barinterval <> 1 then raiseruntimeerror("只能在1分K下執行);

 

//邏輯區=============================

///////////////空方進場參數//////////////////////////

if isfirstCall("Bar") and position = 0 and filled = 0 and condition2 and value2 <= 50 then begin

   setposition(-1,MARKET);   

   if filled=-1 then begin

   BCost=filledAvgPrice;//進場成本點

   BOUT=BCost+loss_point;//出場點停損30點

   end;   

  end;   

/////////////移動停利///////////////////////// 

if position = -1 and filled =-1   then begin //MKP=1 代表 手上有單

   if C < BCost - move_profit_point then begin   

    if C + loss_point < BOUT then begin

     BOUT= C + loss_point;  

   end;   

 end;

 

end;

 

IF position=-1 AND  filled =-1 then begin

value100=TimeAdd(Time,"S",55);

if currentTime=value100 then begin

    // 若收盤價跌破停損點,出場

    if Close > BOUT then begin

        SetPosition(0,market); // 平倉

    end;

end;

 

 

END;

 

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

下單馬上判斷if filled=-1 並計算庫存成本及停損價位,是錯誤的做法。

下單不會在同一次洗價馬上成交,但下單已讓position變成-1,因此下次洗價會被position = 0 and filled = 0阻擋,這造成BOUT一直為0,也因此 Close > BOUT一定成立,所以馬上平倉。

XQ 新手 發文於   2024/11/28

教授 謝謝 所以把 if filled=-1 取消即可嗎?

XQ 新手 發文於   2024/11/28

改成如此嗎

if isfirstCall("Bar") and position = 0 and filled = 0 and condition2 and value2 <= 50 then begin

   setposition(-1,MARKET);

END;

 

  IF  position = -1 and filled =-1  THEN BEgin

   BCost=filledAvgPrice;//進場成本點

   BOUT=BCost+loss_point;//出場點停損30點

END;

   

 

  end; 

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

這樣OK。

XQ 新手 發文於   2024/11/28

十分感激 您的出手相助~~!!^.^

XQ 新手 發文於   2024/11/28

教授 再請問一下 洗價 時間 1分k棒的最後5秒 判定 出場 這樣寫 對嗎?

IF position=-1 AND  filled =-1 then begin

value100=TimeAdd(Time,"S",55);

if currentTime=value100 then begin

    // 若收盤價跌破停損點,出場

    if Close > BOUT then begin

        SetPosition(0,market); // 平倉

    end;

end; 

 

END;

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

這樣寫有點風險,要是55秒剛好沒有Tick成交,就不會執行平倉動作。用大於等於比較好。

XQ 新手 發文於   2024/11/29

謝謝 教授 指導 感謝~!!

發表回覆
Close