Author: Seletsky R.V.

The provided MQL4 code is for a trading expert advisor that performs stop-loss (SL) and take-profit (TP) adjustments on open positions in MetaTrader 4. Below, I'll explain the key components of this code:

Key Components

  1. Initialization Functions:

    • init(): Initializes variables such as the minimum distance for SL/TP (Min_Dist) and flags to control working states (Work, New_SL, Close_TF).
    • Global variables are declared at the beginning, which include configurations like Slippage and booleans to manage different operational modes.
  2. Deinitialization Function:

    • deinit(): Resets some of the global flags (New_SL, Close_TF) when the EA is uninstalled or stops running.
  3. Timer Event Handler:

    • OnTimer() handles periodic execution based on specified intervals.
    • It processes open positions to check if they are pending (i.e., waiting for a new SL/TP) and updates these values accordingly using OrderModify.
  4. Trade Management Functions:

    • Open_Condition(): Determines conditions under which an order can be opened based on several criteria like price trends, custom indicators (sma, ema), RSI levels, etc.
    • Stop_loss() and Take_profit(): Calculate new SL and TP values for open positions.
  5. Order Modification:

    • Uses the OrderModify function to adjust the SL and TP of existing orders based on market conditions evaluated during each timer tick.
  6. Error Handling:

    • The New_Stop() function ensures that SL/TP adjustments respect minimum distance requirements set by the broker.
  7. Utility Functions:

    • Functions like Close_Trend() are used for additional checks or processing, although their implementation is not fully shown here.
    • The MyPrint() function logs messages to the MetaTrader console, which is useful for debugging and monitoring EA activity.

Important Considerations

  • Slippage Handling: Slippage is set explicitly in orders, which can be adjusted as needed based on trading conditions or broker settings.

  • Dynamic Adjustment:

    • The EA adjusts SL/TP dynamically based on market volatility using the Average True Range (ATR) indicator. This allows for flexible risk management tailored to current market conditions.
  • Indicators and Custom Conditions: It uses custom indicators (sma, ema) and RSI levels as part of its logic, which are common tools in technical analysis to determine trend strength and momentum.

  • Debugging and Monitoring:

    • Extensive use of the MyPrint function provides insights into what conditions are met or not during EA execution. This is valuable for understanding the behavior of the strategy over time.

Example Explanation

Let's take a closer look at the OnTimer() function logic:

  • Order Iteration: It iterates through all open positions and checks if they need SL/TP adjustments.

  • Pending Orders Check: The EA specifically looks for orders with pending actions (ORDER_ACTION_PENDING) to modify them.

  • Modification Logic:

    • Calculates new TP using the Take_profit() function, which factors in market conditions like RSI levels and current price trends.
    • Adjusts SL based on recent volatility (ATR) or other criteria defined in the strategy logic.
  • Market Conditions: The EA considers market trends and direction changes to decide whether to adjust or close positions.

This code exemplifies a complex trading bot that manages open positions dynamically, adjusting risk parameters in response to market behavior. It requires careful testing and optimization for different assets and market conditions to ensure robust performance.

Orders Execution
Checks for the total of closed ordersChecks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reached
Indicators Used
Moving average indicatorStochastic oscillatorBill Williams Awesome oscillatorBill Williams Accelerator/Decelerator oscillatorDeMarker indicatorCommodity channel index
Miscellaneous
It issuies visual alerts to the screen
22 Views
0 Downloads
0 Favorites
exp_Lego_1
//+------------------------------------------------------------------+
//|                                                     exp_Lego.mq4 |
//|                      Copyright © 2010, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Seletsky R.V."
#property link      "http://www"

//-------------------------------------------------------------------+
//                                                                   |
//--------------------------------------------------------------- 1--+
extern   string    Áëîê1              =  "----  Âêëþ÷åíèå èíäèêàòîðîâ ---- ";

extern   string   b1                    =  "---- ---- ---- ----Maøêè";
extern bool  otkr_MA    =true;
extern bool  zakr_MA    =true;
extern double MA1           =14;
extern double MA2           =67;

extern double Shift_ma      =1;

extern   string   c1                    =  "---- ---- ---- ----Ñòîõàñòèê";
extern bool   otkr_Stoh   =false;
extern bool   zakr_Stoh   =false;
extern double per_K=5;
extern double per_D=3;
extern double slow=3;
extern double zoneBUY=30;
extern double zoneSELL=70;

extern   string   d1                    =  "---- ---- ---- ----Awesome";
extern bool   otkr_AO   =false;
extern bool   zakr_AO   =false;

extern   string   e1                    =  "---- ---- ---- ----Accelerator";
extern bool   otkr_AC   =false;
extern bool   zakr_AC   =false;

extern   string   f1                    =  "---- ---- ---- ----Demarker";
extern bool   otkr_Dema   =false;
extern bool   zakr_Dema   =false;
extern double DeMa_period=14;
extern double niz_ur=0.3;
extern double verx_ur=0.7;

extern   string   g1                    =  "---- ---- ---- ----CCI";
extern bool   otkr_CCI   =false;
extern bool   zakr_CCI   =false;
extern double CCI_period=14;
extern   string    Áëîê2              =  "----  Ïàðàìåòðû òîðãîâëè ---- ";
            
extern double StopLoss    =200;      // SL äëÿ îòêðûâàåìîãî îðäåðà
extern double TakeProfit  =200;      // ÒÐ äëÿ îòêðûâàåìîãî îðäåðà
extern double Lts0        =0.1;     // Æåñòêî çàäàííîå êîëè÷. ëîòîâ
extern double IK          =1;      // Óìíîæåíèå Lts0 * IK åñëè ïîñëåäíèé îðäåð áûë çàêðûò â ìèíóñ

extern bool    SleepBars  =true;    // Ïàóçà ïîñëå çàêðûòèÿ îðäåðå â 2000 ñåêóíä

bool Work=true;                    // Ýêñïåðò áóäåò ðàáîòàòü.
bool OrderSal;
string Symb;                       // Íàçâàíèå ôèíàíñ. èíñòðóìåíòà

//--------------------------------------------------------------- 2 --

//-----------------------------------------------------------
int start()
  {
   int
  
   Total,                           // Êîëè÷åñòâî îðäåðîâ â îêíå 
   Tip=-1,                          // Òèï âûáðàí. îðäåðà (B=0,S=1)
   Ticket;                          // Íîìåð îðäåðà
  
   double
   Lot,                             // Êîëè÷. ëîòîâ â âûáðàí.îðäåðå
   Lts,                             // Êîëè÷. ëîòîâ â îòêðûâ.îðäåðå
   lot,
   Min_Lot,                         // Ìèíèìàëüíîå êîëè÷åñòâî ëîòîâ
   Step,                            // Øàã èçìåíåíèÿ ðàçìåðà ëîòà
   Free,                            // Òåêóùèå ñâîáîäíûå ñðåäñòâà
   One_Lot,                         // Ñòîèìîñòü îäíîãî ëîòà
   Price,                           // Öåíà âûáðàííîãî îðäåðà
   SL,                              // SL âûáðàííîãî îðäåðà 
   TP,                              // TP âûáðàííîãî îðäåðà
   //--
   ma_By,ma_Sell,Stoh_By,Stoh_Sell,AO_By,AO_Sell,AC_By,AC_Sell,Cls_ma_Sell,Cls_ma_By,Cls_Stoh_Sell,Cls_Stoh_By,
   Cls_AO_Sell,Cls_AO_By,Cls_AC_Sell,Cls_AC_By,Dema_By,Cls_Dema_Sell,Dema_Sell,Cls_Dema_By,CCI_By,CCI_Sell,Cls_CCI_Sell,Cls_CCI_By;
   
 bool
   Modific=true,
   Ans  =false,                     // Îòâåò ñåðâåðà ïîñëå çàêðûòèÿ
   Cls_B=false,                     // Êðèòåðèé äëÿ çàêðûòèÿ  Buy
   Cls_S=false,                     // Êðèòåðèé äëÿ çàêðûòèÿ  Sell
   Opn_B=false,                     // Êðèòåðèé äëÿ îòêðûòèÿ  Buy
   Opn_S=false,                     // Êðèòåðèé äëÿ îòêðûòèÿ  Sell
   S_Bar=false;                 // Êðèòåðèé äëÿ Sleep Bar
   
//------------------------------------------------------------------------------ 
   
  
//-------------------- Ïàóçà ïîñëå çàêðûòîãî îðäåðà------------------ 2 -
  
int time0 = 0;                                                  // Îáüÿâëÿåì íåîáõîäèìûå ïåðåìåííûå
for(int t0 = OrdersHistoryTotal();t0>=0;t0--)                   // Ïåðåáèðàåì âñå çàêðûòûå îðäåðà
if(OrderSelect(t0, SELECT_BY_POS,MODE_HISTORY )==true)          // Åñëè îðäåð ñ òàêèì íîìåðîì (i) â ñïèñêå çàêðûòûõ îðäåðîâ åñòü ( íå ïóòàòü ñ òèêåòîì)
    {
      if( iTime(NULL,0,0)-OrderOpenTime() <2000 && SleepBars==true) //Óñëîâèÿ ïàóçû 
                 {                                         
                    S_Bar=true;                                // Äåéñòâèÿ   iTime(NULL,0,1)
                    Alert("Ïåðåêóð.Çà..àëñÿ ÿ");                                           
                 }
      //    return(0); 
           }
//----------------------------------------------------------------------
  
   
//-------------------- Ïðåäâàðèò.îáðàáîòêà-------------------------- 3 -    

   if(Bars<2)                       // Íåäîñòàòî÷íî áàðîâ
     {
      Alert("Íåäîñòàòî÷íî áàðîâ â îêíå. Ýêñïåðò íå ðàáîòàåò.");
      return;                                   // Âûõîä èç start()
     }
   if(Work==false)                              // Êðèòè÷åñêàÿ îøèáêà
     {
      Alert("Êðèòè÷åñêàÿ îøèáêà. Ýêñïåðò íå ðàáîòàåò.");
      return;                                   // Âûõîä èç start()
     }
//------------------------------------------------------------------------------    
     
     
//------------------------------Ó÷¸ò îðäåðîâ--------------------------------- 4 --
Symb=Symbol();                               // Íàçâàíèå ôèí.èíñòð.
   Total=0;                                     // Êîëè÷åñòâî îðäåðîâ
   for(int i=1; i<=OrdersTotal(); i++)          // Öèêë ïåðåáîðà îðäåð
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
        {                                       // Àíàëèç îðäåðîâ:
         if (OrderSymbol()!=Symb)continue;      // Íå íàø ôèí. èíñòðóì
         if (OrderType()>1)                     // Ïîïàëñÿ îòëîæåííûé
           {
            Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.");
            return;                             // Âûõîä èç start()
           }
         Total++;                               // Ñ÷¸ò÷èê ðûíî÷í. îðä
         if (Total>1)                           // Íå áîëåå îäíîãî îðä
           {
            Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.");
            return;                             // Âûõîä èç start()
           }
         Ticket=OrderTicket();                  // Íîìåð âûáðàíí. îðä.
         Tip   =OrderType();                    // Òèï âûáðàííîãî îðä.
         Price =OrderOpenPrice();               // Öåíà âûáðàíí. îðä.
         SL    =OrderStopLoss();                // SL âûáðàííîãî îðä.
         TP    =OrderTakeProfit();              // TP âûáðàííîãî îðä.
         Lot   =OrderLots();                    // Êîëè÷åñòâî ëîòîâ
        }
     }  
  
 
//---------------------------Òîðãîâûå êðèòåðèè------------------------------------ 5 --
     
//Ìàøêè:------------------------------------
 if(otkr_MA==true)
              {
               if( iMA(NULL,0,MA1,0,MODE_SMA,PRICE_CLOSE,Shift_ma)>iMA(NULL,0,MA2,0,MODE_SMA,PRICE_CLOSE,Shift_ma))
                 {
                  ma_By =true;
                 } 
               if(iMA(NULL,0,MA1,0,MODE_SMA,PRICE_CLOSE,Shift_ma)<iMA(NULL,0,MA2,0,MODE_SMA,PRICE_CLOSE,Shift_ma))
                 {
                  ma_Sell =true;
                 } 
               }
               
 if(zakr_MA==true)
              {
               if( iMA(NULL,0,MA1,0,MODE_SMA,PRICE_CLOSE,Shift_ma)>iMA(NULL,0,MA2,0,MODE_SMA,PRICE_CLOSE,Shift_ma))
                 {
                  Cls_ma_Sell=true;
                 } 
               if(iMA(NULL,0,MA1,0,MODE_SMA,PRICE_CLOSE,Shift_ma)<iMA(NULL,0,MA2,0,MODE_SMA,PRICE_CLOSE,Shift_ma))
                 {
                  Cls_ma_By=true;
                 } 
               }             
//Ñòîõàñòèê:-------------------------------
 if(otkr_Stoh==true)
          {
               if(iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1)>iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)
                  && iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)<zoneBUY)
                   {
                   Stoh_By =true;
                   }
              if(iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1)<iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)
                 && iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)>zoneSELL)
                  {
                  Stoh_Sell =true;
                  } 
               }      
               
 if(zakr_Stoh==true)
          {
              if(iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1)>iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)
                 && iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)<zoneBUY)
                   {
                   Cls_Stoh_Sell=true;
                   }
             if(iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,0,1)<iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)
                 && iStochastic(NULL,0,per_K,per_D,slow,MODE_LWMA,1,1,1)>zoneSELL)
                  {
                  Cls_Stoh_By=true;
                  } 
               }               
//Awesome:--------------------------------
  if(otkr_AO==true)
        {
              if(iAO(NULL,0,0)>iAO(NULL,0,1))
                  {
                   AO_By =true;
                  }    
              if(iAO(NULL,0,0)<iAO(NULL,0,1))
                  {
                   AO_Sell =true;
                  } 
               } 
               
if(zakr_AO==true)
        {
           if(iAO(NULL,0,0)>iAC(NULL,0,1))
                  {
                   Cls_AO_Sell=true;
                  }    
            if(iAO(NULL,0,0)<iAC(NULL,0,1))
                  {
                   Cls_AO_By=true;
                  } 
               }                
//Accelerator:---------------------------
   if(otkr_AC==true)
               {          
               if (iAC(NULL,0,0)>=0 && iAC(NULL,0,0)>iAC(NULL,0,1) && iAC(NULL,0,1)>iAC(NULL,0,2) || iAC(NULL,0,0)<=0 && iAC(NULL,0,0)>iAC(NULL,0,1) && iAC(NULL,0,1)>iAC(NULL,0,2) && iAC(NULL,0,2)>iAC(NULL,0,3)) 
                  {
                   AC_By =true;
                  }    
               if (iAC(NULL,0,0)<=0 && iAC(NULL,0,0)<iAC(NULL,0,1) && iAC(NULL,0,1)<iAC(NULL,0,2) || iAC(NULL,0,0)>=0 && iAC(NULL,0,0)<iAC(NULL,0,1) && iAC(NULL,0,1)<iAC(NULL,0,2) && iAC(NULL,0,2)<iAC(NULL,0,3)) 
                  {
                   AC_Sell =true;
                  }  
                }   
            
  if(zakr_AC==true)
              {          
              if (iAC(NULL,0,0)>=0 && iAC(NULL,0,0)>iAC(NULL,0,1) && iAC(NULL,0,1)>iAC(NULL,0,2) || iAC(NULL,0,0)<=0 && iAC(NULL,0,0)>iAC(NULL,0,1) && iAC(NULL,0,1)>iAC(NULL,0,2) && iAC(NULL,0,2)>iAC(NULL,0,3)) 
                  {
                    Cls_AC_Sell=true;
                  }    
             if (iAC(NULL,0,0)<=0 && iAC(NULL,0,0)<iAC(NULL,0,1) && iAC(NULL,0,1)<iAC(NULL,0,2) || iAC(NULL,0,0)>=0 && iAC(NULL,0,0)<iAC(NULL,0,1) && iAC(NULL,0,1)<iAC(NULL,0,2) && iAC(NULL,0,2)<iAC(NULL,0,3)) 
                  {
                   Cls_AC_By=true;
                  }  
               }   
 //Demarker:---------------------------- 
 if(otkr_Dema==true) 
             {      
              if (iDeMarker(NULL, 0, DeMa_period, 0)<niz_ur) 
                  {
                   Dema_By =true;
                  }    
             if (iDeMarker(NULL, 0, DeMa_period, 0)>verx_ur) 
                  {
                   Dema_Sell =true;
                  }  
               }
          
 if(zakr_Dema==true) 
              {      
            if (iDeMarker(NULL, 0, DeMa_period, 0)<niz_ur) 
                  {
                   Cls_Dema_Sell=true;
                  }    
            if (iDeMarker(NULL, 0, DeMa_period, 0)>verx_ur) 
                  {
                   Cls_Dema_By=true;
                  }  
               }     
  //CCI:-------------------------------
 if(otkr_CCI==true)
             {      
            if (iCCI(NULL, 0,CCI_period,PRICE_MEDIAN, 1)<-100) 
                  {
                   CCI_By =true;
                  }    
            if (iCCI(NULL, 0,CCI_period,PRICE_MEDIAN,1)>100) 
                  {
                   CCI_Sell =true;
                  } 
               }                   
      
   if(zakr_CCI==true)
               {      
           if (iCCI(NULL, 0,CCI_period,PRICE_MEDIAN, 1)<-100) 
                  {
                   Cls_CCI_Sell=true;
                  }    
           if (iCCI(NULL, 0,CCI_period,PRICE_MEDIAN,1)>100) 
                  {
                   Cls_CCI_By=true;
                  } 
               }                   
                               
                                                                   
//--------------------------------Îòêðûòèå-----------------------------------------------//
  if (ma_By ==true||otkr_MA==false && Stoh_By ==true||otkr_Stoh==false &&
      AO_By ==true||otkr_AO==false && AC_By ==true||otkr_AC==false && Dema_By ==true||otkr_Dema==false &&
      CCI_By ==true||otkr_CCI==false)    
     {                                          
      Opn_B=true;                               // Êðèòåðèé îòêð. Buy
     }
//---------    
  if (ma_Sell==true||otkr_MA==false && Stoh_Sell ==true||otkr_Stoh==false &&
      AO_Sell ==true||otkr_AO==false && AC_Sell==true||otkr_AC==false && Dema_Sell ==true||otkr_Dema==false &&
      CCI_Sell ==true||otkr_CCI==false) 
     {                                          
      Opn_S=true;                               // Êðèòåðèé îòêð. Sell
     } 
//--------------------------------Çàêðûòèå-----------------------------------------------//
if (  Cls_ma_By==true||zakr_MA==false && Cls_Stoh_By==true||zakr_Stoh==false &&
      Cls_AO_By==true||zakr_AO==false && Cls_AC_By==true||zakr_AC==false && Cls_Dema_By==true||zakr_Dema==false &&    
     Cls_CCI_By==true||zakr_CCI==false)
     {                                          
      Cls_B=true;                               // Êðèòåðèé çàêð. Buy
     }   
 if ( Cls_ma_Sell==true||zakr_MA==false && Cls_Stoh_Sell==true||zakr_Stoh==false &&
      Cls_AO_Sell==true||zakr_AO==false && Cls_AC_Sell==true||zakr_AC==false && Cls_Dema_Sell==true||zakr_Dema==false &&    
     Cls_CCI_Sell==true||zakr_CCI==false)             
     {                                          
      Cls_S=true;                               // Êðèòåðèé çàêð. Sell
     } 
  
  
  
//-----------------------------Çàêðûòèå îðäåðîâ---------------------------------- 6 --
  
   while(true)                                  // Öèêë çàêðûòèÿ îðä.
     {
      if (Tip==0 && Cls_B==true)                // Îòêðûò îðäåð Buy..Óñëîâèÿ çàêðûòèÿ Buy
        {                                       //è åñòü êðèòåðèé çàêð
         Alert("Ïîïûòêà çàêðûòü Buy ",Ticket,". Îæèäàíèå îòâåòà..");
         RefreshRates();                        // Îáíîâëåíèå äàííûõ
         Ans=OrderClose(Ticket,Lot,Bid,2);      // Çàêðûòèå Buy
         if (Ans==true)                         // Ïîëó÷èëîñü :)
           {
            Alert ("Çàêðûò îðäåð Buy ",Ticket);
            
            break;                              // Âûõîä èç öèêëà çàêð
           }
         if (Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
            continue;                           // Ïîâòîðíàÿ ïîïûòêà
         return;                                // Âûõîä èç start()
        }

      if (Tip==1 && Cls_S==true)                // Îòêðûò îðäåð Sell..Óñëîâèÿ çàêðûòèÿ Sell
        {                                       // è åñòü êðèòåðèé çàêð
         Alert("Ïîïûòêà çàêðûòü Sell ",Ticket,". Îæèäàíèå îòâåòà..");
         RefreshRates();                        // Îáíîâëåíèå äàííûõ
         Ans=OrderClose(Ticket,Lot,Ask,2);      // Çàêðûòèå Sell
         if (Ans==true)                         // Ïîëó÷èëîñü :)
           {
            Alert ("Çàêðûò îðäåð Sell ",Ticket);
            
            break;                              // Âûõîä èç öèêëà çàêð
           }
         if (Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
            continue;                           // Ïîâòîðíàÿ ïîïûòêà
         return;                                // Âûõîä èç start()
        }
      break;                                    // Âûõîä èç while
     }
    
 
//-----------------------------Ñòîèìîñòü îðäåðîâ---------------------------------- 7 --
   
RefreshRates();                              // Îáíîâëåíèå äàííûõ   
 
    int time = 0;double profit = 0;           //îáüÿâëÿåì íåîáõîäèìûå íàì ïåðåìåííûå êóäà ìû ïîëîæèì èíòåðåñóþùèå íàñ õàðàêòåðèñòèêè îðäåðà

for(int t = OrdersHistoryTotal();t>=0;t--)   // Ïåðåáèðàåì âñå çàêðûòûå îðäåðà
{
  if(OrderSelect(t,SELECT_BY_POS,MODE_HISTORY))//åñëè îðäåð ñ òàêèì íîìåðîì (i) â ñïèñêå çàêðûòûõ îðäåðîâ åñòü ( íå ïóòàòü ñ òèêåòîì)
  {
    if(OrderSymbol() == Symbol())       //åñëè âûáðàííûé îðäåð áûë îòêðûò ïî íàøåé âàëþòíîé ïàðå
    {
      if(time<OrderCloseTime())        //(ñðàâíèâàåì åãî ñ õðàíÿùèìñÿ â ïåðîåìåííîé time)
       
      {
        time=OrderCloseTime();          //åñëè âðåìÿ çàêðûòèÿ îðäåðà áîëüøå - ëîæèì åãî â ïåðåìåííóþ
        profit=OrderProfit();          //è çàîäíî çàïîìèíàåì ïðèáûëü îðäåðà
        lot   =OrderLots();                    // Êîëè÷åñòâî ëîòîâ
        
  
      }
    }
  }
}

if(profit == 0)  {Lts=Lts0;}     //äåéñòâèÿ åñëè èñòîðèÿ ÷èñòà         
if(profit >= 0)  {Lts=Lts0;}     //äåéñòâèÿ åñëè ïîñëåäíèé îðäåð áûë ïðèáûëüíûì, èëè íóëåâû
if(profit <  0)  {Lts=lot*IK;}   //äåéñòâèÿ åñëè ïîñëåäíèé îðäåð áûë óáûòî÷íûì

    
         if (Lts*One_Lot > Free)                      // Ëîò äîðîæå ñâîáîäí.     
         {     
          Alert(" Íå õâàòàåò äåíåã íà ", Lts," ëîòîâ");      
          return;                                   // Âûõîä èç start()     
          }
   
//------------------------------------------------------------------------------ 


//------------------------------Îòêðûòèå îðäåðîâ--------------------------------- 8 --

   while(true)                                  // Öèêë îòêðûòèÿ îðä.
   
     {
      if (Total==0 && Opn_B==true && Cls_B==false)              // Îòêðûòûõ îðä. íåò +
        {                                       // êðèòåðèé îòêð. Buy
         RefreshRates();                        // Îáíîâëåíèå äàííûõ
         SL=Bid - New_Stop(StopLoss)*Point;     // Âû÷èñëåíèå SL îòêð.
         TP=Bid + New_Stop(TakeProfit)*Point;   // Âû÷èñëåíèå TP îòêð.
         Alert("Ïîïûòêà îòêðûòü Buy. Îæèäàíèå îòâåòà..");
         Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,3,SL,TP);//Îòêðûòèå Buy
         if (Ticket > 0)                        // Ïîëó÷èëîñü :)
           {
            Alert ("Îòêðûò îðäåð Buy ",Ticket);
            return;                             // Âûõîä èç start()
           }
         if (Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
            continue;                           // Ïîâòîðíàÿ ïîïûòêà
         return;                                // Âûõîä èç start()
        }
      if (Total==0 && Opn_S==true && Cls_S==false)              // Îòêðûòûõ îðä. íåò +
        {                                       // êðèòåðèé îòêð. Sell
         RefreshRates();                        // Îáíîâëåíèå äàííûõ
         SL=Ask + New_Stop(StopLoss)*Point;     // Âû÷èñëåíèå SL îòêð.
         TP=Ask - New_Stop(TakeProfit)*Point;   // Âû÷èñëåíèå TP îòêð.
         Alert("Ïîïûòêà îòêðûòü Sell. Îæèäàíèå îòâåòà..");
         Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,3,SL,TP);//Îòêðûòèå Sel
         if (Ticket > 0)                        // Ïîëó÷èëîñü :)
           {
            Alert ("Îòêðûò îðäåð Sell ",Ticket);
            return;                             // Âûõîä èç start()
           }
         if (Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
            continue;                           // Ïîâòîðíàÿ ïîïûòêà
         return;                                // Âûõîä èç start()
        }
      break;                                    // Âûõîä èç while
     }
   return;                                      // Âûõîä èç start()
  }
  
//------------------------------------------------------------------------------   

//--------------------------Ô-èÿ îáðàáîò îøèáîê------------------------------------ 10 --
int Fun_Error(int Error)                      
  {
   switch(Error)
     {                                          // Ïðåîäîëèìûå îøèáêè            
      case  4: Alert("Òîðãîâûé ñåðâåð çàíÿò. Ïðîáóåì åù¸ ðàç..");
         Sleep(3000);                           // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 130:Alert("Íåïðàâèëüíûå ñòîïû");
         while(RefreshRates()==false)           // Äî íîâîãî òèêà
            Sleep(1);                            // Çàäåðæêà â öèêëå
         return(1);                             // Âûõîä èç ôóíêöèè   
      case 135:Alert("Öåíà èçìåíèëàñü. Ïðîáóåì åù¸ ðàç..");
         RefreshRates();                        // Îáíîâèì äàííûå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 136:Alert("Íåò öåí. Æä¸ì íîâûé òèê..");
         while(RefreshRates()==false)           // Äî íîâîãî òèêà
            Sleep(1);                           // Çàäåðæêà â öèêëå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 137:Alert("Áðîêåð çàíÿò. Ïðîáóåì åù¸ ðàç..");
         Sleep(3000);                           // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 146:Alert("Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïðîáóåì åù¸..");
         Sleep(500);                            // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
         // Êðèòè÷åñêèå îøèáêè
      case  2: Alert("Îáùàÿ îøèáêà.");
         return(0);                             // Âûõîä èç ôóíêöèè
      case  5: Alert("Ñòàðàÿ âåðñèÿ òåðìèíàëà.");
         Work=false;                            // Áîëüøå íå ðàáîòàòü
         return(0);                             // Âûõîä èç ôóíêöèè
      case 64: Alert("Ñ÷åò çàáëîêèðîâàí.");
         Work=false;                            // Áîëüøå íå ðàáîòàòü
         return(0);                             // Âûõîä èç ôóíêöèè
      case 133:Alert("Òîðãîâëÿ çàïðåùåíà.");
         return(0);                             // Âûõîä èç ôóíêöèè
      case 134:Alert("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè.");
         return(0);                             // Âûõîä èç ôóíêöèè
      default: Alert("Âîçíèêëà îøèáêà ",Error); // Äðóãèå âàðèàíòû   
         return(0);                             // Âûõîä èç ôóíêöèè
     }
  }
//-------------------------------------------------------------- 11 --

int New_Stop(int Parametr)                      // Ïðîâåðêà ñòîï-ïðèê.
  {
   int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Ìèíèì. äèñòàíöèÿ
   if (Parametr<Min_Dist)                       // Åñëè ìåíüøå äîïóñò.
     {
      Parametr=Min_Dist;                        // Óñòàíîâèì äîïóñò.
      Alert("Óâåëè÷åíà äèñòàíöèÿ ñòîï-ïðèêàçà.");
     }
   return(Parametr);                            // Âîçâðàò çíà÷åíèÿ
  }
//---------------------------

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---