乐于分享
好东西不私藏

双向突破网格系统EA源码分享:不是逆市逆势加仓;同时多空双向布局,抓大方向突破

双向突破网格系统EA源码分享:不是逆市逆势加仓;同时多空双向布局,抓大方向突破

今天周六,分享一款顺势突破EA,我知道你们最近跑马丁害怕了!

当然也可以看看我们的一次一单完美EA:下面链接点击可以查看

梵天一次一单EA发布:多程序模式设计,一次就开一单,单单带止盈止损,告别无序刷单、告别逆势亏损!

这个免费的策略逻辑是顺势突破,不是逆势马丁普通马丁是行情反向不断加仓扛亏损;本 EA只有价格突破才开仓,行情往哪个方向走,哪个方向的单子才会成交,理论上适合趋势行情。

会话式闭环,不会无限累积订单一轮网格有明确结束条件,达标全部平仓清挂单,不会订单越堆越多;支持自动重启循环。

手数两种模式可选:固定手数 / 余额杠杆驱动自动手数,适配不同账户大小。

不过这EA是免费的源码分享,没有做过测试的,建议大家只是测试使用哈!
//---- input parameters ---------------------------------------------+extern int       INCREMENT=35;extern double    LOTS=0.1;extern int       LEVELS=3extern double    MAX_LOTS=99;extern int       MAGIC=1803;extern bool      CONTINUE=true;extern bool      MONEY_MANAGEMENT=false;extern int       RISK_RATIO=2;//+------------------------------------------------------------------+bool             UseProfitTarget=false;bool             UsePartialProfitTarget=false;int              Target_Increment = 50;int              First_Target = 20;bool             UseEntryTime=false;int              EntryTime=0;//+------------------------------------------------------------------+bool Enter=true;int nextTP;intinit()  {//+------------------------------------------------------------------+    nextTP = First_Target;//+------------------------------------------------------------------+   return(0);  }//+------------------------------------------------------------------+//| expert deinitialization function                                 |//+------------------------------------------------------------------+intdeinit()  {   return(0);  }//+------------------------------------------------------------------+//| expert start function                                            |//+------------------------------------------------------------------+intstart()  {   int ticket, cpt, profit, total=0, BuyGoalProfit, SellGoalProfit, PipsLot;   double ProfitTarget=INCREMENT*2, BuyGoal=0, SellGoal=0, spread=(Ask-Bid)/Point, InitialPrice=0;//----   if(INCREMENT<MarketInfo(Symbol(),MODE_STOPLEVEL)+spread) INCREMENT=1+MarketInfo(Symbol(),MODE_STOPLEVEL)+spread;   if(MONEY_MANAGEMENT) LOTS=NormalizeDouble(AccountBalance()*AccountLeverage()/1000000*RISK_RATIO,0)*MarketInfo(Symbol(),MODE_MINLOT);   if(LOTS<MarketInfo(Symbol(),MODE_MINLOT))   {      Comment("Not Enough Free Margin to begin");      return(0);   }   for(cpt=1;cpt<LEVELS;cpt++) PipsLot+=cpt*INCREMENT;   for(cpt=0;cpt<OrdersTotal();cpt++)   {      OrderSelect(cpt,SELECT_BY_POS,MODE_TRADES);      if(OrderMagicNumber()==MAGIC && OrderSymbol()==Symbol())      {         total++;         if(!InitialPrice) InitialPrice=StrToDouble(OrderComment());         if(UsePartialProfitTarget && UseProfitTarget && OrderType()<2)         {            double val=getPipValue(OrderOpenPrice(),OrderType());            takeProfit(val,OrderTicket());          }      }   }   if(total<1 && Enter && (!UseEntryTime || (UseEntryTime && Hour()==EntryTime)))   {      if(AccountFreeMargin()<(100*LOTS))      {         Print("Not enough free margin to begin");         return(0);      }      // - Open Check - Start Cycle      InitialPrice=Ask;      SellGoal=InitialPrice-(LEVELS+1)*INCREMENT*Point;      BuyGoal=InitialPrice+(LEVELS+1)*INCREMENT*Point;      for(cpt=1;cpt<=LEVELS;cpt++)      {         OrderSend(Symbol(),OP_BUYSTOP,LOTS,InitialPrice+cpt*INCREMENT*Point,2,SellGoal,BuyGoal,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);         OrderSend(Symbol(),OP_SELLSTOP,LOTS,InitialPrice-cpt*INCREMENT*Point,2,BuyGoal+spread*Point,SellGoal+spread*Point,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);      }    } // initial setup done - all channels are set up    else // We have open Orders    {      BuyGoal=InitialPrice+INCREMENT*(LEVELS+1)*Point;      SellGoal=InitialPrice-INCREMENT*(LEVELS+1)*Point;      total=OrdersHistoryTotal();      for(cpt=0;cpt<total;cpt++)      {         OrderSelect(cpt,SELECT_BY_POS,MODE_HISTORY);         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC &&  StrToDouble(OrderComment())==InitialPrice){EndSession();return(0);}      }      if(UseProfitTarget && CheckProfits(LOTS,OP_SELL,true,InitialPrice)>ProfitTarget) {EndSession();return(0);}      BuyGoalProfit=CheckProfits(LOTS,OP_BUY,false,InitialPrice);      SellGoalProfit=CheckProfits(LOTS,OP_SELL,false,InitialPrice);      if(BuyGoalProfit<ProfitTarget)      // - Incriment Lots Buy      {         for(cpt=LEVELS;cpt>=1 && BuyGoalProfit<ProfitTarget;cpt--)         {            if(Ask<=(InitialPrice+(cpt*INCREMENT-MarketInfo(Symbol(),MODE_STOPLEVEL))*Point))            {               ticket=OrderSend(Symbol(),OP_BUYSTOP,cpt*LOTS,InitialPrice+cpt*INCREMENT*Point,2,SellGoal,BuyGoal,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);            }            if(ticket>0) BuyGoalProfit+=LOTS*(BuyGoal-InitialPrice-cpt*INCREMENT*Point)/Point;         }      }      if(SellGoalProfit<ProfitTarget)      // - Increment Lots Sell      {         for(cpt=LEVELS;cpt>=1 && SellGoalProfit<ProfitTarget;cpt--)         {            if(Bid>=(InitialPrice-(cpt*INCREMENT-MarketInfo(Symbol(),MODE_STOPLEVEL))*Point))            {               ticket=OrderSend(Symbol(),OP_SELLSTOP,cpt*LOTS,InitialPrice-cpt*INCREMENT*Point,2,BuyGoal+spread*Point,SellGoal+spread*Point,DoubleToStr(InitialPrice,MarketInfo(Symbol(),MODE_DIGITS)),MAGIC,0);            }            if(ticket>0) SellGoalProfit+=LOTS*(InitialPrice-cpt*INCREMENT*Point-SellGoal-spread*Point)/Point;         }      }   }//+------------------------------------------------------------------+       Comment("mGRID EXPERT ADVISOR ver 2.0\n",            "FX Acc Server:",AccountServer(),"\n",            "Date: ",Month(),"-",Day(),"-",Year()," Server Time: ",Hour(),":",Minute(),":",Seconds(),"\n",            "Minimum Lot Sizing: ",MarketInfo(Symbol(),MODE_MINLOT),"\n",            "Account Balance:  $",AccountBalance(),"\n",            "Symbol: ", Symbol(),"\n",            "Price:  ",NormalizeDouble(Bid,4),"\n",            "Pip Spread:  ",MarketInfo("EURUSD",MODE_SPREAD),"\n",            "Increment=" + INCREMENT,"\n",            "Lots:  ",LOTS,"\n",            "Levels: " + LEVELS,"\n");   return(0);}//+------------------------------------------------------------------+intCheckProfits(double LOTS, int Goal, bool Current, double InitialPrice){   int profit=0, cpt;   if(Current)//return current profit   {      for(cpt=0;cpt<OrdersTotal();cpt++)      {         OrderSelect(cpt, SELECT_BY_POS, MODE_TRADES);         if(OrderSymbol()==Symbol() && StrToDouble(OrderComment())==InitialPrice)         {            if(OrderType()==OP_BUY) profit+=(Bid-OrderOpenPrice())/Point*OrderLots()/LOTS;            if(OrderType()==OP_SELL) profit+=(OrderOpenPrice()-Ask)/Point*OrderLots()/LOTS;         }      }      return(profit);   }   else   {      if(Goal==OP_BUY)      {         for(cpt=0;cpt<OrdersTotal();cpt++)         {            OrderSelect(cpt, SELECT_BY_POS, MODE_TRADES);            if(OrderSymbol()==Symbol() && StrToDouble(OrderComment())==InitialPrice)            {               if(OrderType()==OP_BUY) profit+=(OrderTakeProfit()-OrderOpenPrice())/Point*OrderLots()/LOTS;               if(OrderType()==OP_SELL) profit-=(OrderStopLoss()-OrderOpenPrice())/Point*OrderLots()/LOTS;               if(OrderType()==OP_BUYSTOP) profit+=(OrderTakeProfit()-OrderOpenPrice())/Point*OrderLots()/LOTS;            }         }         return(profit);      }      else      {         for(cpt=0;cpt<OrdersTotal();cpt++)         {            OrderSelect(cpt, SELECT_BY_POS, MODE_TRADES);            if(OrderSymbol()==Symbol() && StrToDouble(OrderComment())==InitialPrice)            {               if(OrderType()==OP_BUY) profit-=(OrderOpenPrice()-OrderStopLoss())/Point*OrderLots()/LOTS;               if(OrderType()==OP_SELL) profit+=(OrderOpenPrice()-OrderTakeProfit())/Point*OrderLots()/LOTS;               if(OrderType()==OP_SELLSTOP) profit+=(OrderOpenPrice()-OrderTakeProfit())/Point*OrderLots()/LOTS;                          }         }         return(profit);      }   }}boolEndSession(){   int cpt, total=OrdersTotal();   for(cpt=0;cpt<total;cpt++)   {      Sleep(3000);      OrderSelect(cpt,SELECT_BY_POS,MODE_TRADES);      if(OrderSymbol()==Symbol() && OrderType()>1) OrderDelete(OrderTicket());      else if(OrderSymbol()==Symbol() && OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3);      else if(OrderSymbol()==Symbol() && OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3);      }      if(!CONTINUE)  Enter=false;      return(true);}doublegetPipValue(double ord,int dir){   double val;   RefreshRates();   if(dir == 1) val=(NormalizeDouble(ord,Digits) - NormalizeDouble(Ask,Digits));   else val=(NormalizeDouble(Bid,Digits) - NormalizeDouble(ord,Digits));   val = val/Point;   return(val);   }//========== FUNCTION takeProfitvoidtakeProfit(int current_pips, int ticket){   if(OrderSelect(ticket, SELECT_BY_TICKET))   {      if(current_pips >= nextTP && current_pips < (nextTP + Target_Increment))      {         if(OrderType()==1)         {            if(OrderClose(ticket, MAX_LOTS, Ask, 3))            nextTP+=Target_Increment;            else            Print("Error closing order : ",GetLastError());          }          else         {            if(OrderClose(ticket, MAX_LOTS, Bid, 3))            nextTP+=Target_Increment;            else            Print("Error closing order : ",GetLastError());          }              }   }}