客服热线:18391752892

帮忙修改下EA

   日期:2019-01-12     浏览:918    
马上注册,结交更多好友,下载更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 从网上找到个EA,名叫“GridMonster .我自己改了一下,加了个trailStart功能。还想加几个功能:
 
 1、extern double   trailstep=0               //跟踪止损步进点数,以免在5位数平台频繁修改止损,0为停用此功能。
 2、extern int        shortpositionmaxlose=0 //当亏损卖单超过多少个时,停止开卖单,0为停用此功能。
 3、extern int        longpositionmaxlose=0 //当亏损买单超过多少个时,停止开买单,0为停用此功能。
 
     刚接触mql4语言,许多功能不知道怎么实现,请高手赐教。
 
     以下是源码:
   
 extern int uniqueGridMagic = 550000;
 extern double Lots = 0.01;
 extern double GridSize = 6.0;
 extern double GridSteps = 10.0;
 extern double TakeProfit = 10.0;
 extern double StopLoss = 0.0;
 extern int trailStart = 0;
 extern int trailStop = 0;
 extern double UpdateInterval = 1.0;
 extern bool wantLongs = TRUE;
 extern bool wantShorts = TRUE;
 extern bool wantBreakout = TRUE;
 extern bool wantCounter = TRUE;
 extern bool limitEMA = TRUE;
 extern int EMAperiod = 30;
 extern double GridMaxOpen = 50.0;
 extern bool UseMACD = TRUE;
 extern bool UseOsMA = FALSE;
 extern bool CloseOpenPositions = FALSE;
 extern bool doHouseKeeping = TRUE;
 extern double keepOpenTimeLimit = 0.0;
 extern int emaFast = 12;
 extern int emaSlow = 26;
 extern int signalPeriod = 9;
 extern int timeframe = 0;
 extern int minFromPrice = 0;
 extern int tradeForMinutes = 0;
 extern int gridOffset = 0;
 extern double longGridCenter = 0.0;
 extern double shortGridCenter = 0.0;
 extern double longGridLow = 0.0;
 extern double longGridHigh = 0.0;
 extern double shortGridLow = 0.0;
 extern double shortGridHigh = 0.0;
 extern double profitTarget = 15000.0;
 extern bool suspendGrid = FALSE;
 extern bool shutdownGrid = FALSE;
 string gs_grid_280 = Grid
 double g_datetime_288 = 0.0;
 double gd_unused_296 = 0.0;
 double gd_304 = 0.0;
 double gd_312 = 0.0;
 double gd_320 = 0.0;
 bool gi_328 = FALSE;
 int g_count_332 = 0;
 int g_count_336 = 0;
 bool gi_340 = TRUE;
 bool gi_344 = FALSE;
   
 int init() {
   string ls_0 = 2020.10.12
   int l_str2time_8 = StrToTime(ls_0);
   
   gs_grid_280 = StringConcatenate( Grid- , Symbol(), - , uniqueGridMagic);
   return (0);
 }
   
 int IsPosition(double ad_0, double ad_8, int ai_16) {
   int l_cmd_20;
   int l_ord_total_24 = OrdersTotal();
   for (int l_pos_28 = 0; l_pos_28 l_ord_total_24; l_pos_28++) {
     OrderSelect(l_pos_28, SELECT_BY_POS);
     if (OrderSymbol() == Symbol() OrderMagicNumber() == uniqueGridMagic || OrderComment() == gs_grid_280) {
       l_cmd_20 = OrderType();
       if (MathAbs(OrderOpenPrice() - ad_0) 0.9 * ad_8)
         if ((ai_16 l_cmd_20 == OP_BUY || l_cmd_20 == OP_BUYLIMIT || l_cmd_20 == OP_BUYSTOP) || (!ai_16 l_cmd_20 == OP_SELL || l_cmd_20 == OP_SELLLIMIT || l_cmd_20 == OP_SELLSTOP)) return (1);
     }
   }
   return (0);
 }
   
 void DeleteAfter(double ad_0) {
   bool li_8;
   int l_ord_total_12 = OrdersTotal();
   for (int l_pos_16 = l_ord_total_12 - 1; l_pos_16 l_pos_16--) OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol() == Symbol() OrderMagicNumber() == uniqueGridMagic || OrderComment() == gs_grid_280) {
     if (MathAbs(iTime(Symbol(), PERIOD_M5, 0) - OrderOpenTime()) = 60.0 * (60.0 * ad_0) iTime(Symbol(), PERIOD_M5, 0) 0) {
       li_8 = FALSE;
       if (OrderType() == OP_BUY) li_8 = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red);
       if (OrderType() == OP_SELL) li_8 = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red);
       if (OrderType() OP_SELL) li_8 = OrderDelete(OrderTicket());
     }
   }
 }
   
 void CloseAllPendingOrders() {
   int l_ord_delete_0;
   int l_ord_total_4 = OrdersTotal();
   for (int l_pos_8 = l_ord_total_4 - 1; l_pos_8 l_pos_8--) {
     OrderSelect(l_pos_8, SELECT_BY_POS);
     if (OrderSymbol() == Symbol() OrderMagicNumber() == uniqueGridMagic || OrderComment() == gs_grid_280)
       if (OrderType() OP_SELL) l_ord_delete_0 = OrderDelete(OrderTicket());
   }
 }
   
 void ClosePendingOrdersAndPositions() {
   bool li_0;
   int l_ord_total_4 = OrdersTotal();
   for (int l_pos_8 = l_ord_total_4 - 1; l_pos_8 l_pos_8--) {
     OrderSelect(l_pos_8, SELECT_BY_POS);
     li_0 = FALSE;
     if (OrderSymbol() == Symbol() OrderMagicNumber() == uniqueGridMagic || OrderComment() == gs_grid_280) {
       if (OrderType() == OP_BUY) li_0 = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red);
       if (OrderType() == OP_SELL) li_0 = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red);
       if (OrderType() OP_SELL) li_0 = OrderDelete(OrderTicket());
     }
   }
 }
   
 void CloseOrdersfromEMA(double ad_0) {
   int l_cmd_8;
   bool l_ord_delete_12;
   int l_ord_total_16 = OrdersTotal();
   for (int l_pos_20 = l_ord_total_16 - 1; l_pos_20 l_pos_20--) {
     OrderSelect(l_pos_20, SELECT_BY_POS);
     if (OrderSymbol() == Symbol() OrderMagicNumber() == uniqueGridMagic || OrderComment() == gs_grid_280) {
       l_cmd_8 = OrderType();
       l_ord_delete_12 = FALSE;
       if (l_cmd_8 == OP_BUYLIMIT OrderOpenPrice() = ad_0) l_ord_delete_12 = OrderDelete(OrderTicket());
     }
   }
 }
   
 int openPositions() {
   int l_cmd_0;
   int l_count_4 = 0;
   int l_ord_total_8 = OrdersTotal();
   for (int l_pos_12 = l_ord_total_8 - 1; l_pos_12 l_pos_12--) {
     OrderSelect(l_pos_12, SELECT_BY_POS);
     if (OrderSymbol() == Symbol() OrderMagicNumber() == uniqueGridMagic || OrderComment() == gs_grid_280) {
       l_cmd_0 = OrderType();
       if (l_cmd_0 == OP_BUY) l_count_4++;
       if (l_cmd_0 == OP_SELL) l_count_4++;
     }
   }
   return (l_count_4);
 }
   
 void TestForProfit(int a_magic_0, double ad_4, int ai_12, int ai_16) {
   int li_20;
   int l_cmd_24;
   if (ad_4 0.0) {
     gd_304 = 0;
     if (ai_16 == 1) {
       li_20 = OrdersHistoryTotal();
       for (int l_pos_28 = 0; l_pos_28 li_20; l_pos_28++) {
         OrderSelect(l_pos_28, SELECT_BY_POS, MODE_HISTORY);
         if (OrderSymbol() == Symbol() OrderMagicNumber() == a_magic_0) gd_304 += OrderProfit();
       }
     } else gd_320 = 0;
     gd_312 = 0;
     if (ai_12 == 1) {
       li_20 = OrdersTotal();
       g_count_332 = 0;
       g_count_336 = 0;
       for (l_pos_28 = 0; l_pos_28 li_20; l_pos_28++) {
         OrderSelect(l_pos_28, SELECT_BY_POS);
         if (OrderSymbol() == Symbol() OrderMagicNumber() == a_magic_0) {
           gd_312 += OrderProfit();
           l_cmd_24 = OrderType();
           if (l_cmd_24 == OP_BUY) g_count_332++;
           if (l_cmd_24 == OP_SELL) g_count_336++;
         }
       }
     }
     if (gd_304 + gd_312 = ad_4 + gd_320) {
       Print( Closing grid due to profit target
       ClosePendingOrdersAndPositions();
       gd_320 = gd_320 + gd_304 + gd_312;
       gi_328 = TRUE;
       if (gi_344 == TRUE) gi_340 = FALSE;
     }
   }
 }
   
 void TrailIt(int ai_0) {
   if (ai_0 = 5) {
     for (int l_pos_4 = 0; l_pos_4 OrdersTotal(); l_pos_4++) {
       OrderSelect(l_pos_4, SELECT_BY_POS, MODE_TRADES);
       if (OrderSymbol() == Symbol() OrderMagicNumber() == uniqueGridMagic || OrderComment() == gs_grid_280) {
         if (OrderType() == OP_BUY) {
           if (Bid - OrderOpenPrice() (ai_0+ trailStart)* MarketInfo(OrderSymbol(), MODE_POINT))
             if (OrderStopLoss() Bid - (ai_0+ trailStart) * MarketInfo(OrderSymbol(), MODE_POINT)) OrderModify(OrderTicket(), OrderOpenPrice(), Bid - ai_0 * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), 255);
         } else {
           if (OrderType() == OP_SELL) {
             if (OrderOpenPrice() - Ask (ai_0+ trailStart) * MarketInfo(OrderSymbol(), MODE_POINT))
               if (OrderStopLoss() Ask + (ai_0+ trailStart)* MarketInfo(OrderSymbol(), MODE_POINT) || OrderStopLoss() == 0.0) OrderModify(OrderTicket(), OrderOpenPrice(), Ask + ai_0 * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), 255);
           }
         }
       }
     }
   }
 }
   
 int start() {
   int li_0;
   int l_ticket_4;
   int l_cmd_8;
   bool li_12;
   double l_point_16;
   double ld_24;
   double l_price_32;
   double ld_40;
   double l_ima_48;
   int li_56;
   double ld_60;
   double ld_68;
   double ld_76;
   int li_84;
   double l_price_88;
   if (TakeProfit 60.0 * UpdateInterval) {
     if (profitTarget 0.0) TestForProfit(uniqueGridMagic, profitTarget, 1, 0);
     g_datetime_288 = TimeCurrent();
     l_point_16 = MarketInfo(Symbol(), MODE_POINT);
     ld_24 = (Ask + l_point_16 * GridSize / 2.0) / l_point_16 / GridSize;
     li_0 = ld_24;
     li_0 = li_0 * GridSize;
     ld_24 = li_0 * l_point_16 - GridSize * GridSteps / 2.0 * l_point_16;
     l_ima_48 = iMA(NULL, 0, EMAperiod, 0, MODE_EMA, PRICE_CLOSE, 0);
     li_56 = 0;
     if (GridMaxOpen 0.0) {
       li_56 = openPositions();
       if (li_56 = GridMaxOpen) CloseAllPendingOrders();
     }
     if (limitEMA)
       if (doHouseKeeping) CloseOrdersfromEMA(l_ima_48);
     if (keepOpenTimeLimit 0.0) DeleteAfter(keepOpenTimeLimit);
     if (trailStop 0) TrailIt(trailStop);
     if (UseMACD || UseOsMA) {
       if (UseMACD) {
         ld_60 = iMACD(NULL, timeframe, emaFast, emaSlow, signalPeriod, PRICE_CLOSE, MODE_MAIN, 0);
         ld_68 = iMACD(NULL, timeframe, emaFast, emaSlow, signalPeriod, PRICE_CLOSE, MODE_MAIN, 1);
         ld_76 = iMACD(NULL, timeframe, emaFast, emaSlow, signalPeriod, PRICE_CLOSE, MODE_MAIN, 2);
       }
       if (UseOsMA) {
         ld_60 = iOsMA(NULL, timeframe, emaFast, emaSlow, signalPeriod, PRICE_CLOSE, 0);
         ld_68 = iOsMA(NULL, timeframe, emaFast, emaSlow, signalPeriod, PRICE_CLOSE, 1);
         ld_76 = iOsMA(NULL, timeframe, emaFast, emaSlow, signalPeriod, PRICE_CLOSE, 2);
       }
       if (ld_60 0.0 ld_68 0.0 ld_76 0.0) {
         CloseAllPendingOrders();
         if (CloseOpenPositions == TRUE) ClosePendingOrdersAndPositions();
       }
       if (ld_60 0.0 ld_68 0.0 ld_76 0.0) {
         CloseAllPendingOrders();
         if (CloseOpenPositions == TRUE) ClosePendingOrdersAndPositions();
       }
       l_bool_96 = FALSE;
       l_bool_100 = FALSE;
       if (ld_60 0.0 ld_68 0.0 ld_76 0.0 wantLongs == TRUE) l_bool_96 = TRUE;
       if (ld_60 0.0 ld_68 0.0 ld_76 0.0 wantShorts == TRUE) l_bool_100 = TRUE;
     }
     li_84 = GridSteps;
     if (GridMaxOpen 0.0 li_56 = GridMaxOpen) li_84 = 0;
     if (suspendGrid == TRUE) return (0);
     Print( Trigs , ld_60,   , ld_68,   , ld_76,   , l_bool_96,   , l_bool_100,   , li_84, ema , l_ima_48, price , Bid);
     for (int l_count_104 = 0; l_count_104 li_84; l_count_104++) {
       ld_24 = (Ask + l_point_16 * GridSize / 2.0) / l_point_16 / GridSize;
       li_0 = ld_24;
       li_0 = li_0 * GridSize;
       ld_24 = li_0 * l_point_16 - GridSize * GridSteps / 2.0 * l_point_16;
       l_price_32 = ld_24 + l_count_104 * l_point_16 * GridSize + gridOffset * l_point_16;
       if (l_bool_96 !limitEMA || l_price_32 l_ima_48) {
         if (longGridCenter l_point_16) {
           ld_40 = GridSteps / 2.0;
           li_0 = ld_40;
           ld_24 = longGridCenter - li_0 * GridSize * l_point_16;
         } else {
           ld_24 = (Ask + l_point_16 * GridSize / 2.0) / l_point_16 / GridSize;
           li_0 = ld_24;
           li_0 = li_0 * GridSize;
           ld_24 = li_0 * l_point_16 - GridSize * GridSteps / 2.0 * l_point_16;
         }
         l_price_32 = ld_24 + l_count_104 * l_point_16 * GridSize + gridOffset * l_point_16;
         li_12 = TRUE;
         if (l_price_32 longGridLow) li_12 = FALSE;
         if (l_price_32 longGridHigh longGridHigh l_point_16) li_12 = FALSE;
         if (IsPosition(l_price_32, l_point_16 * GridSize, 1) == 0 li_12 == TRUE) {
           l_price_88 = 0;
           if (StopLoss 0.0) l_price_88 = l_price_32 - l_point_16 * StopLoss;
           if (l_price_32 Ask) l_cmd_8 = 4;
           else l_cmd_8 = 2;
           if ((l_price_32 Ask + minFromPrice * Point wantBreakout) || (l_price_32 l_point_16) {
           ld_40 = GridSteps / 2.0;
           li_0 = ld_40;
           ld_24 = shortGridCenter - li_0 * GridSize * l_point_16;
         } else {
           ld_24 = (Ask + l_point_16 * GridSize / 2.0) / l_point_16 / GridSize;
           li_0 = ld_24;
           li_0 = li_0 * GridSize;
           ld_24 = li_0 * l_point_16 - GridSize * GridSteps / 2.0 * l_point_16;
         }
         l_price_32 = ld_24 + l_count_104 * l_point_16 * GridSize + gridOffset * l_point_16;
         li_12 = TRUE;
         if (l_price_32 shortGridLow) li_12 = FALSE;
         if (l_price_32 shortGridHigh shortGridHigh l_point_16) li_12 = FALSE;
         if (IsPosition(l_price_32, l_point_16 * GridSize, 0) == 0 li_12 == TRUE) {
           l_price_88 = 0;
           if (StopLoss 0.0) l_price_88 = l_price_32 + l_point_16 * StopLoss;
           if (l_price_32 Bid) l_cmd_8 = 3;
           else l_cmd_8 = 5;
           if ((l_price_32 Bid - minFromPrice * Point wantBreakout) || (l_price_32 = Bid + minFromPrice * Point wantCounter)) l_ticket_4 = OrderSend(Symbol(), l_cmd_8, Lots, l_price_32, 0, l_price_88, l_price_32 - l_point_16 * TakeProfit, gs_grid_280, uniqueGridMagic, 0, Red);
         }
       }
     }
   }
   return (0);
 }
外汇交易有很大的风险性,本站所有资源均来自网络,请选择使用,如若出现亏损,本站不承担任何责任!


特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关行情
推荐行情
点击排行