Okay, here's a breakdown of what this trading script does, explained in a way that doesn't require any programming knowledge:
Overall Purpose:
This script is designed to automatically trade in the Forex (foreign exchange) market. It uses a "grid trading" strategy, which means it places a series of buy or sell orders at predetermined intervals (a "grid") around the current price. The goal is to profit from small price movements in either direction.
Key Concepts:
- Currency Pair: The script is designed to trade on a specific currency pair (like EUR/USD).
 - Expert Advisor (EA): This is the technical term for an automated trading script within the MetaTrader platform.
 - Grid Trading: This involves placing multiple orders at different price levels, creating a "grid" of potential entry and exit points.
 - Money Management: Features to automatically adjust the size of trades based on your account balance and risk tolerance.
 - Take Profit: A predetermined price at which an open trade is automatically closed for a profit.
 - Magic Number: Unique identifier that helps the script identify its own trades, preventing it from interfering with trades placed manually or by other EAs.
 
How it Works (Step-by-Step):
- 
Initialization (Starting Up):
- When the script is first attached to a currency chart, it performs some initial setup. It checks the currency pair to assign a unique identifier (magic number).
 - It also reads in settings that you, the user, have defined, such as:
- The portion of your account balance the EA should trade with.
 - Whether or not to use money management.
 - The size of the grid (how far apart the orders are).
 - The take profit levels (how much profit to target on each trade).
 
 
 - 
Order Management (Checking Existing Trades):
- The script constantly monitors all open trades associated with its specific currency pair and "magic number".
 - It counts how many buy and sell orders are currently open.
 - It calculates the total profit or loss from these open trades.
 
 - 
Equity Protection (Risk Management):
- This is a safety feature. If your account experiences a significant loss (defined by a percentage you set), the script will automatically close all open trades to prevent further losses.
 
 - 
Trading Logic (Placing New Trades):
- The script follows a set of rules to determine when and where to place new orders.
 - If there are no open buy or sell orders, it looks at the "market condition" to decide whether to place buy or sell orders.
- The market condition can be set manually or determined by a moving average indicator.
 
 - The script uses a "grid" system and places buy and sell limit orders in both directions from the current price in the Forex market, at a predefined interval. These pending orders are designed to enter the market when the price reaches that specific level.
 - If buy or sell orders are already open, the script checks if it's time to add additional orders to the grid.
- The lot size (amount of currency traded) may increase with each new order, based on a multiplier.
 - The script adjusts the stop loss of existing orders.
 
 
 - 
Moving Average Indicator:
- This section makes use of moving averages to identify trends. It calculates if the price of a currency is above or below its moving average and sets the trend accordingly to the location in reference to the moving average.
 
 - 
ATR to Autocalculate Grid and Take Profit:
- The Average True Range (ATR) indicator to automatically adjust the Grid size and Take Profit parameters based on market volatility.
 
 - 
Power Out Stop Loss Protection:
- This function of the EA implements a stop loss strategy designed to protect the account balance in scenarios where the market may experience extreme volatility.
 
 - 
Information Display (Commenting):
- The script displays key information on the chart, such as the current time, account balance, profit/loss, and the number of open buy and sell orders.
 
 
Settings You Control:
- Account Portion: The percentage of your account balance that this script is allowed to trade with.
 - Money Management: Whether to automatically adjust trade sizes based on your account balance.
 - Lot Size: The initial size of each trade (if money management is off).
 - Grid Size: The distance (in pips) between the orders in the grid.
 - Take Profit: The profit target (in pips) for each trade.
 - Multiplier: How much to increase the lot size with each new order.
 - Market Condition: Whether to trade based on an uptrend, downtrend, or ranging market.
 
In Simple Terms:
Imagine you're setting up a fishing net in a river. This script is like setting up multiple nets (buy/sell orders) at different points in the river (price levels). If a fish (price) swims into one of your nets, you catch it (make a profit). The script automatically adjusts the nets and the size of the nets based on how much water (money) you have and how many fish you've already caught. It also has a safety mechanism to pull all the nets out of the water if the river level drops too low (account loss).
//+------------------------------------------------------------------+
//|                                                  Blessing 2 v4.8 |
//|                              Copyright © 2007-2008, MQLCoder.com |
//|                          jta@jtatoday.com , support@mqlcoder.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007-2008, FiFtHeLeMeNt/J Talon LLC."
#property link      "http://www.mqlcoder.com"
#define  NL    "\n"
extern string  InitialAccountSet   = "Initial account balance";
extern int     InitialAccount      = 2500; 
extern string  TradeComment        = "Blessing";
extern string  NumberPortionSet    = "Account Portion";
extern int     Portion             = 1;    // Portion of account you want to trade on this pair
extern bool    UseEquityProtection = true; // Close all orders when negative Float is excessive.
extern double  FloatPercent        = 50;   // Percent of portion for max Float level.
extern bool    UsePowerOutSL       = false;   
extern bool    UseMM               = 0;    // Money Management - 1 = true & 0 = false.
extern string  LotAdjustmentSet    = "Only with MM enabled. (.01 - 5.0)";
extern double  LAF                 = 1.0;  // Adjusts MM base lot for large accounts
extern string  AccountTypeSet      = "1=standard, 10=micro for penny/pip)";
extern int     Accounttype         = 1;    // Used in Money Management feature only.
extern string  ManuallotSet        = "Lots used if MM is off";
extern double  lot                 = 0.1; // Starting lots if Money Management is off
extern string  LotHedgeSet         = "Hedge Multiplier.  Adjust by +/-.01 intervals ";
extern double  Multiplier          = 1.4;  // Multiplier on each level
extern string  AutoParametersSet   = "Autocalculates the Grid based on ATR";
extern bool    AutoCal             = false; // Auto calculation of TakeProfit and Grid size;
extern string  AutoGridAdjust      = "Widens/squishes grid (.5 - 3.0). Used with AutoCal";
extern double  GAF                 = 1.0;  // Widens/Squishes Grid on increments/decrements of .1
extern string  GridSet             = "Default Grid size in Pips";
extern int     GridSet1            = 25;   // Set 1 Grid Size
extern int     TP_Set1             = 50;   // Set 1 Take Profit
extern int     GridSet2            = 50;   // Level 2 Grid Size
extern int     TP_Set2             = 100;  // Level 2 Take Profit
extern int     GridSet3            = 100;  // Level 3 Grid Size
extern int     TP_Set3             = 200;  // Level 3 Take Profit
extern string  TimeGridSet         = "Default grid set time in seconds";
extern int     TimeGrid            = 2400; // Time Grid in seconds , to avoid opening of lots of levels in fast market
extern string  MarketConditionSet  = "Set MC to 2 for Ranging Market";
extern int     MC                  = 2;    // Market condition 0=uptrend 1=downtrend 2=range
extern string  MovingAverageSet    = "Changes MC for correct trend (up/down)";
extern bool    MCbyMA              = true; // Defines market condition by EMA , if price is above EMA,
                                           // it will take it as an uptrend and goes only long,
                                           // vice versa for below the EMA
extern int     MA_Period           = 100;   // Period of MA
extern string  MaxLevelSet         = "Default of 4 on each level, change sparingly";
extern int     Set1Count           = 4;    // Level 1 max levels
extern int     Set2Count           = 4;    // Level 2 max levels
extern int     MaxLevel            = 99;   // Level 2 max levels (stops placing orders when reaches maxlvl2)
extern int     BELevel             = 12;   // Close All level , when reaches this level, doesn't wait for TP to be hit
extern int     slippage            = 5.0; // Tolerance of order slips/requotes for closing
//+------------------------------------------------------------------+
//| Internal Parameters Set                                          |
//+------------------------------------------------------------------+
bool           ca                  = false;
string         EA_name             = "Blessing © FiFtHeLeMeNt/J Talon LLC";
int            magic               = 0;
double         slip                = 0;       
int            d                   = 5;      // Used to offset entry to round numbers , for example if you set d=5,
                                             // it will place its sell order on 1.5795 instead of 1.5780
double         LotInc              = 0;      // Lot Increment on each level, very dangerous
string         Filename;
int            BrokerDecimal       =1;
string         POSL_On             = "No";
int            count;      
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if (Symbol() == "AUDCADm" || Symbol() == "AUDCAD") magic = 101101;
   if (Symbol() == "AUDJPYm" || Symbol() == "AUDJPY") magic = 101102;
   if (Symbol() == "AUDNZDm" || Symbol() == "AUDNZD") magic = 101103;
   if (Symbol() == "AUDUSDm" || Symbol() == "AUDUSD") magic = 101104;
   if (Symbol() == "CHFJPYm" || Symbol() == "CHFJPY") magic = 101105;
   if (Symbol() == "EURAUDm" || Symbol() == "EURAUD") magic = 101106;
   if (Symbol() == "EURCADm" || Symbol() == "EURCAD") magic = 101107;
   if (Symbol() == "EURCHFm" || Symbol() == "EURCHF") magic = 101108;
   if (Symbol() == "EURGBPm" || Symbol() == "EURGBP") magic = 101109;
   if (Symbol() == "EURJPYm" || Symbol() == "EURJPY") magic = 101110;
   if (Symbol() == "EURUSDm" || Symbol() == "EURUSD") magic = 101111;
   if (Symbol() == "GBPCHFm" || Symbol() == "GBPCHF") magic = 101112;
   if (Symbol() == "GBPJPYm" || Symbol() == "GBPJPY") magic = 101113;
   if (Symbol() == "GBPUSDm" || Symbol() == "GBPUSD") magic = 101114;
   if (Symbol() == "NZDJPYm" || Symbol() == "NZDJPY") magic = 101115;
   if (Symbol() == "NZDUSDm" || Symbol() == "NZDUSD") magic = 101116;
   if (Symbol() == "USDCHFm" || Symbol() == "USDCHF") magic = 101117;
   if (Symbol() == "USDJPYm" || Symbol() == "USDJPY") magic = 101118;
   if (Symbol() == "USDCADm" || Symbol() == "USDCAD") magic = 101119;
   
   if (magic == 0) magic = 701999;
   
   Filename = StringConcatenate(EA_name+"_",Symbol(),"_",Period(),"_M",".txt");
   
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int y;
   int cb=0; // Count buy
   int cs=0; // Count sell
   int cbl=0; // Count buy limit
   int csl=0; // Count sell limit
   int cbs=0; // Count buy limit
   int css=0; // Count sell limit
   double tbl=0; //Count lot size
   double tsl=0; //Count lot size
   double tl=0; //total lots out
   double to=0; //total buy and sell order out
   double buysl=0; //stop losses are set to zero if POSL off
   double sellsl=0; //stop losses are set to zero if POSL off
   double POSL=0; //Initialize POSL
   double m,lot2;
   double lp; // last buy price
   double ll; //last lot
   double ltp; //last tp
   double lopt; // last open time
   int g2;
   double tp2;
   double entry;
   double pr=0; // profit;
   double sumlot;
   int lticket;
   double mp,mp2; // median price
  
   if(Digits==3 || Digits==5) BrokerDecimal=10; 
   
//+------------------------------------------------------------------+
//| Calculate Total Profits and Total Orders                         |
//+------------------------------------------------------------------+ 
for (y = 0; y < OrdersTotal(); y++)
   {
      OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
      if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()==OP_BUY)) {
        cb++;
        pr=pr+OrderProfit();
        tbl=tbl+OrderLots();
      }
      if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()==OP_SELL)) {
        cs++;
        pr=pr+OrderProfit();
        tsl=tsl+OrderLots();
      }
      if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()==OP_BUYLIMIT)) cbl++;
      if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()==OP_SELLLIMIT)) csl++;
      if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()==OP_BUYSTOP)) cbs++;
      if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()==OP_SELLSTOP)) css++;
      tl=tbl+tsl;
      to=cb+cs;
   }
//+------------------------------------------------------------------+
//| Account Protection                                               |
//+------------------------------------------------------------------+ 
if(UseEquityProtection) EquityProtection(NormalizeDouble(pr,0));
//+------------------------------------------------------------------+
//| Trading with EA Criteria                                         |
//+------------------------------------------------------------------+
double PortionBalancetrade, InitialAccountMultiPortion;
PortionBalancetrade = NormalizeDouble(AccountBalance()/Portion,0);
InitialAccountMultiPortion = InitialAccount/Portion;
if (PortionBalancetrade < InitialAccountMultiPortion){ 
//+------------------------------------------------------------------+
//| Alert for Account Balance below Initial Balance                  |
//+------------------------------------------------------------------+
Alert("Account Balance is less than Initial Account Balance Setting.  Reset to continue trading!");
return(0);}
//+------------------------------------------------------------------+
//| Power Out Stop Loss Protection                                   |
//+------------------------------------------------------------------+ 
  if(UsePowerOutSL) {
     
     POSL_On = "Yes";
     int correct = 1;
     double pipvalue=MarketInfo(Symbol(),MODE_TICKVALUE);
     if(Accounttype == 1 && pipvalue < 10) correct = 10;
     if(tl == 0){
       POSL = 600;
       if(Digits==3 || Digits==5) POSL = POSL * 10;
       buysl = Ask - POSL * Point;
       sellsl= Bid + POSL * Point;
       }
     if(tl > 0){
       POSL =  NormalizeDouble((PortionBalancetrade * (FloatPercent + 1)/100)/(pipvalue * tl * correct),0);
       if(POSL > 600) POSL = 600;
       if(Digits==3 || Digits==5) POSL = POSL * 10;
       buysl = Ask - POSL * Point;
       sellsl= Bid + POSL * Point;}
       
     if(to == 0) count = 0;
     if(to > 0 && to > count){
     
     // sync up order stop losses
     for (int q = 0; q < OrdersTotal(); q++) {
        OrderSelect (q, SELECT_BY_POS, MODE_TRADES);
        if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()==OP_BUY)) {
            OrderModify(OrderTicket(), OrderOpenPrice(), buysl, OrderTakeProfit(), 0, Purple);
        }
        if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()==OP_SELL)) {
            OrderModify(OrderTicket(), OrderOpenPrice(), sellsl, OrderTakeProfit(), 0, Purple);} } } 
        count = to;
     }
//+------------------------------------------------------------------+
//| Money Management and Lot size coding                             |
//+------------------------------------------------------------------+
   
if(UseMM){
double Contracts, Factor, Lotsize;
          Contracts = (AccountBalance()/10000)/Portion;
          Factor    = Multiplier+
                MathPow(Multiplier,2)+
                MathPow(Multiplier,3)+
                MathPow(Multiplier,4)+
                MathPow(Multiplier,5)+
                MathPow(Multiplier,6);
          Lotsize=LAF*Accounttype*(Contracts/(1.0 + Factor));
    //Determine Lot size boundries from minimum to maximum
          lot=NormalizeDouble(Lotsize,2);
          if(Lotsize<0.01) lot=0.01;
          if(Lotsize>100/MathPow(Multiplier,6) && Accounttype == 1) lot=NormalizeDouble(100/MathPow(Multiplier,6),2);
          if(Lotsize>50/MathPow(Multiplier,6)  && Accounttype == 10) lot=NormalizeDouble(50/MathPow(Multiplier,6),2);
}
//+------------------------------------------------------------------+
//| ATR to autocalculate the Grid                                    | 
//+------------------------------------------------------------------+     
double GridStart;
double value1 = iATR(NULL,PERIOD_D1,21,0);
    if(AutoCal==True)
    {
      if(Point == 0.01)   value1 = value1*100;
      if(Point == 0.0001) value1 = value1*10000;
      GridStart = (value1*2/10) * GAF;
      GridSet1  = GridStart;
      TP_Set1   = GridStart + GridSet1;
      GridSet2  = TP_Set1;
      TP_Set2   = (GridStart + GridSet1) * 2;
      GridSet3  = TP_Set2;
      TP_Set3   = (GridStart + GridSet1) * 4; 
 
   }       
//+------------------------------------------------------------------+
//| Moving Average Indicator for Calculation of Trend Direction      |
//+------------------------------------------------------------------+      
if (MCbyMA) {
     MC=-1;
     if (Bid<iMA(Symbol(),0,MA_Period,0,MODE_EMA,PRICE_CLOSE,0)) MC=1;
     if (Bid>iMA(Symbol(),0,MA_Period,0,MODE_EMA,PRICE_CLOSE,0)) MC=0;
     
}
//+------------------------------------------------------------------+
//| Blessing Code!                                                   |
//+------------------------------------------------------------------+   
   
if (cs==0 && cb==0 && cbs==0 && cbl==0 && css==0 && csl==0) ca=false;
   
   
   
   slip = NormalizeDouble((slippage * BrokerDecimal),0);
  
   if (((cb>=BELevel || cs>=BELevel) && pr>0) || ca) {
     ca=true;
     for (y = 0; y < OrdersTotal(); y++)
     {
       OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
       if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()==OP_BUY || OrderType()==OP_SELL)) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slip,Lime);
       if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)) OrderDelete(OrderTicket(),White);
     }
     return;
   }
      d = d;
      if (BrokerDecimal == 10) d=50;
      g2=GridSet1;
      tp2=TP_Set1;
      
   if (cb>=Set1Count || cs>=Set1Count) {
     g2=GridSet2;
     tp2=TP_Set2;
   }
   if (cb>=Set2Count+Set1Count || cs>=Set2Count+Set1Count) {
     g2=GridSet3;
     tp2=TP_Set3;
   }
   
//+------------------------------------------------------------------+
//| Broker Decimal Selection                                         |
//+------------------------------------------------------------------+ 
if (BrokerDecimal == 10){
     g2=g2*10;
     tp2=tp2*10;
     }
//+------------------------------------------------------------------+
//| Trade Selection Logic                                            |
//+------------------------------------------------------------------+ 
   if ((cb==0) && (cs==0)) {
     for (y = 0; y < OrdersTotal(); y++)
     {
       OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
       if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderLots()>lot)) OrderDelete(OrderTicket());
     }
     if (MC==0) {
        if (cbs==0) {
          m=MathMod(Ask/Point,g2);
          if ((g2-m+d)>MarketInfo(Symbol(),MODE_STOPLEVEL)) {
            OrderSend(Symbol(),OP_BUYSTOP,lot,Ask*2-Bid+(g2-m+d)*Point,0,buysl,Ask*2-Bid+(g2-m+d+tp2)*Point,TradeComment,magic,0,CLR_NONE);
            Print("s2");
            return;
          }
        }
        if (cbl==0) {
          m=MathMod(Ask/Point,g2);
          if ((m+d)>MarketInfo(Symbol(),MODE_STOPLEVEL)) {
            OrderSend(Symbol(),OP_BUYLIMIT,lot,Ask*2-Bid-(m+d)*Point,0,buysl,Ask*2-Bid-(m+d-tp2)*Point,TradeComment,magic,0,CLR_NONE);
            Print("s1");
            return;
          }
        }
     }
     if (MC==1) {
        if (csl==0) {
          m=MathMod(Bid/Point,g2);
          if ((g2-m-d)>MarketInfo(Symbol(),MODE_STOPLEVEL)) {
            OrderSend(Symbol(),OP_SELLLIMIT,lot,Bid+(g2-m-d)*Point,0,sellsl,Bid+(g2-m-d-tp2)*Point,TradeComment,magic,0,CLR_NONE);
            Print("s2");
            return;
          }
        }
        if (css==0) {
          m=MathMod(Bid/Point,g2);
          if ((m+d)>MarketInfo(Symbol(),MODE_STOPLEVEL)) {
            OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-(m+d)*Point,0,sellsl,Bid-(m+d+tp2)*Point,TradeComment,magic,0,CLR_NONE);
            Print("s1");
            return;
          }
        }
     }
        
     
     if (MC==2) {
        if (css==0) {
          m=MathMod(Bid/Point,g2);
          if ((m+d)>MarketInfo(Symbol(),MODE_STOPLEVEL)) {
            OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-(m+d)*Point,0,sellsl,Bid-(m+d+tp2)*Point,TradeComment,magic,0,CLR_NONE);
            Print("s1");
            return;
          }
        }
        if (cbs==0) {
          m=MathMod(Ask/Point,g2);
          if ((g2-m+d)>MarketInfo(Symbol(),MODE_STOPLEVEL)) {
            OrderSend(Symbol(),OP_BUYSTOP,lot,Ask*2-Bid+(g2-m+d)*Point,0,buysl,Ask*2-Bid+(g2-m+d+tp2)*Point,TradeComment,magic,0,CLR_NONE);
            Print("s2");
            return;
          }
        }
      }
   }
   if (cb>0 || cs>0) {
     for (y = 0; y < OrdersTotal(); y++)
     {
        OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
        if ((OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()) && (OrderType()!=OP_SELL) && (OrderType()!=OP_BUY) && OrderLots()==lot) OrderDelete(OrderTicket());
     }
   }
   
   
   if (cb>0) {
     sumlot=0;
     mp=0;
     for (y = 0; y < OrdersTotal(); y++)
     {
       OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
       if ((OrderMagicNumber() != magic) || (OrderType()!=OP_BUY) || (OrderSymbol()!=Symbol())) { continue; }
       lp=OrderOpenPrice();
       ll=OrderLots();
       ltp=OrderTakeProfit();
       lopt=OrderOpenTime();
       lticket=OrderTicket();
       sumlot=sumlot+ll;
       mp=mp+ll*lp;
     }
     mp=mp/sumlot;
     
       if ((TimeCurrent()-TimeGrid>lopt) && (cb<MaxLevel)) {
         if (lp>Ask) entry=NormalizeDouble(lp-(MathRound((lp-Ask)/Point/g2)+1)*g2*Point,Digits); else entry=NormalizeDouble(lp-g2*Point,Digits);
         if (ll <= 0.01) lot2=NormalizeDouble(ll*2+LotInc,2); else lot2=NormalizeDouble(ll*Multiplier+LotInc,2);
         
         if (cbl==0) {
           OrderSend(Symbol(),OP_BUYLIMIT,lot2,entry,0,buysl,entry+tp2*Point,TradeComment,magic);
           Print("s3");
           return;
         }
         if (cbl==1) {
           for (y = 0; y < OrdersTotal(); y++)
           {
              OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
              if (OrderType()==OP_BUYLIMIT && OrderMagicNumber()==magic && (OrderSymbol()==Symbol()) && entry-OrderOpenPrice()>g2/2*Point) {
                OrderModify(OrderTicket(),entry,buysl,entry+tp2*Point,0);
                Print("mo1");
              }
            }
         }
         
       } 
     for (y = 0; y < OrdersTotal(); y++) // Sync TPs
     {
       OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
       if ((OrderMagicNumber() != magic) || (OrderType()!=OP_BUY) || (MathAbs(OrderTakeProfit()-ltp)<Point) || (OrderSymbol()!=Symbol())) { continue; }
       OrderModify(OrderTicket(),OrderOpenPrice(),buysl,ltp,0,Blue);
       Print("m1");
       return;
     }
     
   }
   if (cs>0) {
     sumlot=0;
     mp=0;
     for (y = 0; y < OrdersTotal(); y++)
     {
       OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
       if ((OrderMagicNumber() != magic) || (OrderType()!=OP_SELL) || (OrderSymbol()!=Symbol())) { continue; }
       lp=OrderOpenPrice();
       ll=OrderLots();
       ltp=OrderTakeProfit();
       lopt=OrderOpenTime();
       lticket=OrderTicket();
       sumlot=sumlot+ll;
       mp=mp+ll*lp;
     }
     mp=mp/sumlot;
     
       if ((TimeCurrent()-TimeGrid>lopt) && (cs<MaxLevel)) {
         if (Bid>lp) entry=NormalizeDouble(lp+(MathRound((-lp+Bid)/Point/g2)+1)*g2*Point,Digits); else entry=NormalizeDouble(lp+g2*Point,Digits);
         if (ll <= 0.01) lot2=NormalizeDouble(ll*2+LotInc,2); else lot2=NormalizeDouble(ll*Multiplier+LotInc,2);
         
         if (csl==0) {
            OrderSend(Symbol(),OP_SELLLIMIT,lot2,entry,0,sellsl,entry-tp2*Point,TradeComment,magic);
            Print("s4");
            return;
         }
         if (csl==1) {
           for (y = 0; y < OrdersTotal(); y++)
           {
              OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
              if (OrderType()==OP_SELLLIMIT && OrderMagicNumber()==magic && (OrderSymbol()==Symbol()) && OrderOpenPrice()-entry>g2/2*Point) {
                OrderModify(OrderTicket(),entry,sellsl,entry-tp2*Point,0);
                Print("mo2");
              }
            }
         }
      }
     for (y = 0; y < OrdersTotal(); y++) // Sync TPs
     {
       OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
       if ((OrderMagicNumber() != magic) || (OrderType()!=OP_SELL) || (MathAbs(OrderTakeProfit()-ltp)<Point) || (OrderSymbol()!=Symbol())) { continue; }
       OrderModify(OrderTicket(),OrderOpenPrice(),sellsl,ltp,0,Blue);
       Print("m2");
       return;
     }
   }
   
//+------------------------------------------------------------------+
//| External Script Code                                             |
//+------------------------------------------------------------------+
string Message;
   Message = "                "+EA_name + NL +
             "                            Current Time is      " +  TimeToStr(TimeCurrent(), TIME_SECONDS) + NL + NL +                        
             "                            Initial Account Set              " + DoubleToStr(InitialAccount, 0) + NL +
             "                            Equity Protection % Set      " + DoubleToStr(FloatPercent, 0) + NL + NL +
             "                            Power Off Stop Loss on?         " + POSL_On + NL + NL +
             "                            Starting lot size                   " + DoubleToStr(lot, 2) + NL + NL +
             "                            Portion P/L                        " + DoubleToStr(pr, 2) + NL + NL +     
             
             "                            Buy   " + cb + "  Sell   " + cs + NL + NL +
             "                            Account Portion   " + DoubleToStr(Portion, 0) + "   Total Risk on Account Percent  " + DoubleToStr(FloatPercent/Portion, 0) + NL +                
             "                            Portion Balance      " + DoubleToStr(PortionBalancetrade, 2);
             
   Comment(Message);  
      
      return(0);
  }
 
//+------------------------------------------------------------------+
//| Equity Protection Function                                       |
//+------------------------------------------------------------------+ 
  
 void EquityProtection(int Profit) { 
      
      double PortionBalance, PortionEquity;
      PortionBalance = NormalizeDouble(AccountBalance()/Portion,0);
      PortionEquity  = NormalizeDouble(PortionBalance + Profit,0);
      
      for (int i=0; i<OrdersTotal(); i++) {  
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {  
         if ( (OrderSymbol()==Symbol()) && (OrderMagicNumber()==magic) && (OrderComment()==TradeComment) ) {  
                        
            slip = NormalizeDouble((slippage * BrokerDecimal),0);
            
            if (OrderType()==OP_BUY)  
               if ( PortionBalance - PortionEquity >= (PortionBalance * FloatPercent/100) )  
                 OrderClose(OrderTicket(),OrderLots(),Bid,slip,Red); 
            if (OrderType()==OP_SELL)  
               if ( PortionBalance - PortionEquity >= (PortionBalance * FloatPercent/100) )  
                 OrderClose(OrderTicket(),OrderLots(),Ask,slip,Red); 
     
         
         } 
      } 
   } 
}  
//+------------------------------------------------------------------+
//| expert end function                                              |
//+------------------------------------------------------------------+
            
Comments