突破前一根大量K棒高低點

  •   473 
  • 最後發表   大業王  2022 十月 07
大業王 發文於   2022/10/04

你好我想請問我要找出上一根超過400成交量的1分K的高低點 並且在突破時候 做多或做空 請問我這樣寫有啥問題嗎 回測結果她會立即停損

//一分K

variable:Sflag(0);

//variable:count_U(0),AccVolume(0);

Var:DayHigh(0),DayLow(0);

//var:DayHigh2(0),DayLow2(0);{停利價格}

//variable:UU(0),DD(0);//最新一根大量K高低點

//自動交易用...............................................................

var: 

short_condition(false), { 是否做空 }

exit_short_condition(false),{ 是否空單出場 }

    long_condition(false),

    exit_long_condition(false);

input:lot(1);//下單張數

 

 

  

 

if getfield("volume","1")[1]>400 then begin

   DayHigh=GetField("最高價", "1")[1];

   DayLow=GetField("最低價", "1")[1];

end;  

//----------------------------------------------------------------------------

 

short_condition=

   c<DayLow and

    time>150200 

   or time<45500;

exit_short_condition=C>(DayHigh+1);

 

long_condition=   c>DayHigh

   and time>150200 

   or time<45500;

exit_long_condition=C<(DayLow-1);

 

 if Position = 0 and short_condition then 

   begin

        SetPosition(-1, MARKET);

   end;      

if Position < 0 and exit_short_condition then begin

SetPosition(0, MARKET);

  end;

 

if Position<0 and c<DayLow-(Dayhigh-DayLow)*2 then begin{停利}

SetPosition(0, MARKET);

end;  

if Position = 0 and long_condition then 

   begin

        SetPosition(1, MARKET);

 

        Sflag=1;

   end;       

if Position >0 and exit_long_condition then begin

SetPosition(0, MARKET);

Sflag=1;

end;

if Position >0 and c>Dayhigh+(Dayhigh-DayLow)*2 then begin

SetPosition(0, MARKET);

Sflag=1;

end;

 

//收盤前全數出場

//market_close_condition = EnterMarketCloseTime(exit_period);

 

if Position <>0 and time>45500 and time<45700 then begin { 進入收盤階段: 出場 }

SetPosition(0);

end;

 

//=============================================================================================

XQ小幫手 發文於   2022/10/07

Hello 大業王,

 

小幫手建議您可以在腳本中加上 print 確認印出的數值是否如您所想的運作。

像是 print(date, time, DayHigh, DayLow, (Dayhigh-DayLow) * 2); 看數值為何。

 

您的寫法會上 DayHigh 與 DayLow 在進場後繼續變動。

舉例來說,您在 153000 的時候觸發進場條件進場,DayHigh 與 DayLow 會記錄 152900 的高低點。

可是如果在153100時腳本運算,153000這根 Bar 的成交量也大於 400 的話,DayHigh 與 DayLow 會變成記錄 153000 的高低點。

所以您的出場點其實是一直變化的。

 

short_condition= c<DayLow and time>150200 or time<45500;

這種寫法會變成 c<DayLow and time>150200 或是 time<45500 符合時就執行。

小幫手認為您要的應該是 short_condition= c<DayLow and (time>150200 or time<45500); 這樣才對。

同理 long_condition 也是相同的狀況。

需注意若同時有複數個交易指令觸發,系統只會執行第一個。

細節可以參考 SetPosition 說明。

 

還有,在進出場判斷時,小幫手會建議同時使用 position 和 filled 作判斷 (ex. position = 0 and filled = 0),不然會有可能發生一值刪單改單的狀況。

發表回覆
Close