Martingail breakdowning 0.9.4

Author: Copyright � 2006, B@ss & Steve
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself It automatically opens orders when conditions are reached
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
Martingail breakdowning 0.9.4
//+------------------------------------------------------------------+
//|               Breakdowning martingail™ v 0.9.4.mq4               | 
//|                  Copyright © 2006, B@ss & Steve                  | 
//|                        albass@mail333.com                        | 
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, B@ss & Steve"
#property link      "albass@mail333.com, http://forum.alpari-idc.ru"
//----
#include <stdlib.mqh>
// åñëè false, òî ïðè çàêðûòèè òåêóùåé ñåðèè, íîâûå îðäåðà íå áóäóò 
// îòêðûâàòüñÿ.
extern bool   TradeAllowed      = true;
// øàã â ïóíêòàõ óðîâíåé
extern int    Shag              = 20;
// ðàçìåð òîðãóåìîãî ëîòà, ïðè âûêëþ÷åííîì ÌÌ
extern double startLots         = 0.1;
// âêëþ÷åíèå MoneyManagement
extern bool   MoneyManagement   = true;
// ëîãàðèôìè÷åñêèé MoneyManagement
extern bool   LogariphmicMM     = true;
// ðàçìåð ëîòà â ïðîöåíòàõ îò äåïîçèòà
extern double Riskfactor        = 4;
// ðàçìåð íóæíîãî ïðîôèòà â ïðîöåíòàõ îò äåïîçèòà
extern double ProfitPercent     = 0.4;
// âêëþ÷åíèå îïòèìàëüíîãî çàêðûòèÿ îðäåðîâ (ïîâûøàåò äîõîäíîñòü)
extern bool   OptimalTakeProfit = true;
// çàêðûòèå îðäåðîâ ïî òåéêïðîôèòàì è ñòîï-ëîññàì  
extern bool   Close_on_TP       = false;
/* äâà ðåæèìà Close_on_TP: 
   true - äâèãàÿ ïåðâûé óðîâåíü ïðè äîñòèæåíèè TP 
   (åñëè óðîâíè îáîèõ ïëå÷åé ðàâíû)
   false - èäåíòè÷íûé òîìó, åñëè Close_on_TP âûêëþ÷åí 
   (åñëè óðîâíè îáîèõ ïëå÷åé ðàâíû, òî TP=0)*/
extern bool   Mode_Close_on_TP  = true;
// ïîêàçûâàòü ñëóæåáíóþ èíôîðìàöèþ ïî îðäåðàì â æóðíàëå òåðìèíàëà
extern bool   ShowLog           = false;
//----
int    timeOut     = 5000;
int    maxLevel    = 9;    // ìàêñèìàëüíûé îòêðûòûé óðîâåíü
double LotsLevel_2 = 1;    // øàã ïðèðàùåíèÿ ëîòîâ ñ óâåëè÷åíèåì óðîâíÿ
double LotsLevel_3 = 2;
double LotsLevel_4 = 4;
double LotsLevel_5 = 8;
double LotsLevel_6 = 16;
double LotsLevel_7 = 32;
double LotsLevel_8 = 64;
double LotsLevel_9 = 128;
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ ïðîâåðÿåò íàëè÷èå îðäåðà ñ äàííûì ìàãè÷åñêèì íîìåðîì    |
//+------------------------------------------------------------------+
bool isMgNum(int num) 
  {       
   int t, cnt1;     
   t = OrdersTotal();
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderMagicNumber() == num && OrderSymbol() == Symbol())
         {
           return (True); // âîçâðàùàåìîå çíà÷åíèå
         }
     }  
   return (False);   
  }
//+------------------------------------------------------------------+
//| Ôóíêöèÿ óäàëåíèÿ îðäåðà ïî ìàãè÷åñêîìó íîìåðó                    |
//+------------------------------------------------------------------+
bool deleteOrderNum(int num) 
  {       
   int t, cnt1, err;     
   bool tic;
   t = OrdersTotal();
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderSymbol() == Symbol())
         {  
           // òîëüêî äëÿ äàííîãî èíñòðóìåíòà      
           if(OrderMagicNumber() == num && (OrderType()==OP_BUYSTOP || 
              OrderType() == OP_SELLSTOP))            
             {
               int start = GetTickCount();
               tic = OrderDelete(OrderTicket());               
               Print("Âðåìÿ óäàëåíèÿ ", (GetTickCount() - start) / 1000, " ñåêóíä.");
               //----
               if(tic) 
                   PlaySound("timeout.wav");
               //----
               if(!tic) 
                 {
                   err = GetLastError();
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 } 
               return(True); // âîçâðàùàåìîå çíà÷åíèå
             }
         }   
     }  
   return (False);   
  }     
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ, ïðîâåðÿþùàÿ, àêòèâèðîâàí ëè äàííûé îðäåð â îòêðûòóþ    |
//|  ïîçèöèþ                                                         |
//+------------------------------------------------------------------+
bool isOrderActive(int num) // èìÿ ôóíêöèè è ñïèñîê ïàðàìåòðîâ
  {       
   int t, cnt1;     
   t = OrdersTotal();
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderSymbol() == Symbol())
         {       
           //----
           if(OrderMagicNumber()== num) 
             {     
               //----
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                   return(True); // âîçâðàùàåìîå çíà÷åíèå
                 }
             }
         }
     }  
   return (False);   
  } 
//+------------------------------------------------------------------+
//| Îïðåäåëåíèå ìàêñèìàëüíî îòêðûòûõ ëîòîâ ïî äàííîìó èíñòðóìåíòó    |
//+------------------------------------------------------------------+
double getTopLots (int mode) // èìÿ ôóíêöèè è ñïèñîê ïàðàìåòðîâ
  {       
   int t, cnt1;
   double topL, topL_buy, topL_sell;    
   t = OrdersTotal();
   topL = 0;
   for(cnt1 = 0; cnt1 < t; cnt1++)
//----
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderSymbol() == Symbol())
         {       
           //----
           if(OrderType() == OP_BUY && mode == 1) // äëÿ áàé
             {
               //----
               if(OrderLots() > topL)
                 {
                   topL = OrderLots();
                 } 
             }
           //----
           if(OrderType() == OP_SELL && mode == 2) // äëÿ ñåëë
             {
               if(OrderLots() > topL)
                 {
                   topL = OrderLots();
                 } 
             }
           // ðàçíèöà â ëîòàõ ìåæäó áàé è ñåëë (äëÿ âû÷èñëåíèÿ ïðîôèòà íóæíîãî)
           if(mode == 3)
             {
               //----
               if(OrderType() == OP_SELL && OrderLots() > topL_sell)
                 {
                   topL_sell = OrderLots();
                 } 
               //----
               if(OrderType() == OP_BUY && OrderLots() > topL_buy)
                 {
                   topL_buy = OrderLots();
                 } 
               topL = MathAbs(topL_sell - topL_buy);
             }
         }
     }  
   return (topL);   
  }   
//+------------------------------------------------------------------+
//|  Îïðåäåëåíèå ìàñèìàëüíîãî óðîâíÿ äëÿ äëèííûõ èëè êîðîòêèõ ïîçèöèé|                                                                |
//+------------------------------------------------------------------+
int getTopLevel (int mode)  // èìÿ ôóíêöèè è ñïèñîê ïàðàìåòðîâ
  {       
   int t, cnt1, tLev, cLev;
   t = OrdersTotal();
   cLev = 0;
   tLev = 0;
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderSymbol() == Symbol())
         {
           //----
           if(OrderType() == OP_BUY || OrderType() == OP_SELL)
             { 
               //òîëüêî àêòèâèðîâàííûå ïîçèöèè
               if(mode == 1)
                 {  
                   //ïðîâåðêà óðîâíÿ äëÿ ëîíãîâ
                   if(OrderMagicNumber() == 851) 
                       cLev = 9;
                   //----
                   if(OrderMagicNumber() == 841) 
                       cLev = 8;
                   //----
                   if(OrderMagicNumber() == 831) 
                       cLev = 7;
                   //----
                   if(OrderMagicNumber() == 821) 
                       cLev = 6;
                   //----
                   if(OrderMagicNumber() == 811) 
                       cLev = 5;
                   //----
                   if(OrderMagicNumber() == 801) 
                       cLev = 4;
                   //----
                   if(OrderMagicNumber() == 791) 
                       cLev = 3;
                   //----
                   if(OrderMagicNumber() == 781) 
                       cLev = 2;
                   //----
                   if(OrderMagicNumber() == 771) 
                       cLev = 1;
                 } 
               else 
                 {  
                   //ïðîâåðêà óðîâíÿ äëÿ øîðòîâ
                   if(OrderMagicNumber() == 852) 
                       cLev = 9;
                   //----
                   if(OrderMagicNumber() == 842) 
                       cLev = 8;
                   //----
                   if(OrderMagicNumber() == 832) 
                       cLev = 7;                                             
                   //----
                   if(OrderMagicNumber() == 822) 
                       cLev = 6;
                   //----
                   if(OrderMagicNumber() == 812) 
                       cLev = 5;
                   //----
                   if(OrderMagicNumber() == 802) 
                       cLev = 4;
                   //----
                   if(OrderMagicNumber() == 792) 
                       cLev = 3;
                   //----
                   if(OrderMagicNumber() == 782) 
                       cLev = 2;
                   //----
                   if(OrderMagicNumber() == 772) 
                       cLev = 1;             
                 }
             }   
         }
       //----
       if(cLev > tLev) 
           tLev = cLev;   
     }  
   return (tLev);   
  }
//+------------------------------------------------------------------+
//| Îïðåäåëåíèå, ñêîëüêî ëîòîâ îòêðûâàòü ïî çàäàííîìó íîìåðó óðîâíÿ  |
//+------------------------------------------------------------------+
double getLotByLevel (int level) // ôóíêöèÿ äëÿ âû÷èñëåíèÿ ëîòà ïî óðîâíþ
  {       
   double lot1;
   lot1 = startLots; // çíà÷åíèå ïî óìîë÷àíèþ    
// ïåðâûå îðäåðà - òîëüêî äëÿ îòñ÷åòà óðîâíåé, ïîçèöèè ðàçìåðîì 0,1 ëîòà    
   if(level == 1) 
       lot1 = 0.1;
//----
   if(level == 2) 
       lot1 = NormalizeDouble(startLots*LotsLevel_2, 1);
//----
   if(level == 3) 
       lot1 = NormalizeDouble(startLots*LotsLevel_3, 1);
//----
   if(level == 4) 
       lot1 = NormalizeDouble(startLots*LotsLevel_4, 1);
//----
   if(level == 5) 
       lot1 = NormalizeDouble(startLots*LotsLevel_5, 1);
//----
   if(level == 6) 
       lot1 = NormalizeDouble(startLots*LotsLevel_6, 1);
//----
   if(level == 7) 
       lot1 = NormalizeDouble(startLots*LotsLevel_7, 1);
//----
   if(level == 8) 
       lot1 = NormalizeDouble(startLots*LotsLevel_8, 1);
//----
   if(level == 9) 
       lot1 = NormalizeDouble(startLots*LotsLevel_9, 1);      
   return(lot1);   
  }
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ äëÿ ïîëó÷åíèÿ öåíû îòêðûòèÿ îðäåðà ïî åãî ìàãè÷åñêîìó   |
//|  íîìåðó                                                          |
//+------------------------------------------------------------------+
double getOrderPriceByNum (int num)
  {       
   int t, cnt1;     
   t = OrdersTotal();
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderSymbol() == Symbol())
         {       
           //----
           if(OrderMagicNumber() == num) 
             {     
               return(OrderOpenPrice());
             }
         }
     }  
   return (0);   
  }
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ äëÿ ïîëó÷åíèÿ âðåìåíè îòêðûòèÿ îðäåðà ïî åãî ìàãè÷åñêîìó|
//|  íîìåðó                                                          |
//+------------------------------------------------------------------+
datetime getOrderOpenTimeByNum (int num)
  {       
   int t, cnt1;     
   t = OrdersTotal();
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderSymbol() == Symbol())
         {       
           //----
           if(OrderMagicNumber() == num) 
             {     
               return(OrderOpenTime());
             }
         }
     }  
   return (0);   
  }      
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ ñ÷èòàåò îòêðûòûå ëîòû äëÿ ëîíãîâ ïî äàííîìó èíñòðóìåíòó |
//+------------------------------------------------------------------+
double getBuyLotsSum(int mode)
  {
   int t, cnt1;
   double sm;
   t = OrdersTotal();
   sm = 0;
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(mode != 1) 
         {     
           //----
           if(OrderType() == OP_BUY && OrderSymbol() == Symbol())
             {
               sm = sm + OrderLots();
             }
         } 
       else 
         { 
           //à çäåñü ïî âñåì îòêðûòûì ïîçèöèÿì ñ÷åòà
           if(OrderType() == OP_BUY)
             {
               sm = sm + OrderLots();
             }          
         }        
     }   
   return(sm);     
  }
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ ñ÷èòàåò îòêðûòûå ëîòû äëÿ øîðòîâ ïî äàííîìó èíñòðóìåíòó |
//+------------------------------------------------------------------+
double getSellLotsSum(int mode)
  {
   int t, cnt1;
   double sm;
   t = OrdersTotal();
   sm = 0;
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(mode != 1) 
         {                
           //----
           if(OrderType() == OP_SELL && OrderSymbol() == Symbol())
             {
               sm = sm + OrderLots();
             }
         } 
       else 
         {
           //à çäåñü ïî âñåì îòêðûòûì ïîçèöèÿì ñ÷åòà
           if(OrderType() == OP_SELL)
             {
               sm = sm + OrderLots();
             }          
         }    
     }   
   return(sm);     
  }
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ äëÿ ìîäèôèêàöèè îòëîæåííûõ îðäåðîâ ëîíãîâ. Çäåñü        |
//|  îïðåäåëÿåì ìàêñèìàëüíûé ìàãè÷åñêèé íîìåð îòêðûòîãî îðäåðà äëÿ   |
//|  ëîíãîâ                                                          |
//+------------------------------------------------------------------+
int getMaxLongNum()
  {
   int t, cnt1;
   int topL;    
   t = OrdersTotal();
   topL = 0;
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderSymbol() == Symbol())
         {     
           //----
           if(OrderType() == OP_BUY)
             {
               //----
               if(OrderMagicNumber() > topL) 
                   topL = OrderMagicNumber();
             }
         }
     }  
   return (topL);      
  }
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ îïðåäåëÿåò ìàêñèìàëüíûé ìàãè÷åñêèé íîìåð îòêðûòîãî      |
//|  îðäåðà äëÿ øîðòîâ                                               |
//+------------------------------------------------------------------+
int getMaxShortNum()
  {
   int t, cnt1;
   int topL;    
   t = OrdersTotal();
   topL = 0;
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderSymbol() == Symbol())
         {     
           //----
           if(OrderType() == OP_SELL)
             {
               //----
               if(OrderMagicNumber() > topL) 
                   topL = OrderMagicNumber();
             }
         }
     }  
   return (topL);      
  }
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ îïðåäåëÿåò ñëåäóþùèé ìàãè÷åñêèé íîìåð ïî äàííîìó        |
//+------------------------------------------------------------------+
int getNextOrderNum(int n1)
  {
//----
   if(n1 == 771) 
       return(781);
//----
   if(n1 == 781) 
       return(791);
//----
   if(n1 == 791) 
       return(801);
//----
   if(n1 == 801) 
       return(811);
//----
   if(n1 == 811) 
       return(821);
//----
   if(n1 == 821) 
       return(831);
//----
   if(n1 == 831) 
       return(841);
//----
   if(n1 == 841) 
       return(851);        
//----
   if(n1 == 772) 
       return(782);
//----
   if(n1 == 782) 
       return(792);
//----
   if(n1 == 792) 
       return(802);
//----
   if(n1 == 802) 
       return(812); 
//----
   if(n1 == 812) 
       return(822);
//----
   if(n1 == 822) 
       return(832); 
//----
   if(n1 == 832) 
       return(842); 
//----
   if(n1 == 842) 
       return(852); 
   return (0);       
  }    
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ âû÷èñëåíèÿ ìàãè÷åñêîãî íîìåðà ïî íîìåðó óðîâíÿ          |
//+------------------------------------------------------------------+
int getNum(int dir, int level)
  {
//----
   if(dir == 1)
     {
       //äëÿ ëîíãîâ
       if(level == 1) 
           return(771);
       //----
       if(level == 2) 
           return(781);
       //----
       if(level == 3) 
           return(791);
       //----
       if(level == 4) 
           return(801);
       //----
       if(level == 5) 
           return(811);
       //----
       if(level == 6) 
           return(821);
       //----
       if(level == 7) 
           return(831);
       //----
       if(level == 8) 
           return(841);
       //----
       if(level == 9) 
           return(851);
     } 
   else 
     {
       //----
       if(level == 1) 
           return(772);
       //----
       if(level == 2) 
           return(782);
       //----
       if(level == 3) 
           return(792);
       //----
       if(level == 4) 
           return(802);
       //----
       if(level == 5) 
           return(812);
       //----
       if(level == 6) 
           return(822);
       //----
       if(level == 7) 
           return(832);
       //----
       if(level == 8) 
           return(842);
       //----
       if(level == 9) 
           return(852);        
     }     
  }     
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ ìîäèôèêàöèè îòëîæåííîãî îðäåðà. Çäåñü ïîëó÷àåì          |
//|  âû÷èñëåííûå öåíû îòêðûòèÿ è òýéêïðîôèòà äëÿ îòëîæåííûõ îðäåðîâ  |
//|  è åñëè îíè îòëè÷àþòñÿ îò öåí ìîäèôèöèðóåìîãî îðäåðà, èçìåíÿåì èõ|
//+------------------------------------------------------------------+
int modOrder(int num, double oprice, double prprice)
  {
   int t, cnt1, err, start;
   bool tic;
   double p1, p2;
   t = OrdersTotal();
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == num)
         { 
           //----
           if((OrderOpenPrice() != oprice || OrderTakeProfit() != prprice) && oprice != 0) 
             {     
               //----
               if(OrderType() == OP_BUYSTOP)
                 {
                   p1 = oprice;
                   p2 = prprice;
                   NormalizeDouble(p2, MarketInfo(Symbol(), MODE_DIGITS));
                   NormalizeDouble(p1, MarketInfo(Symbol(), MODE_DIGITS));
                   //----
                   if(NormalizeDouble(OrderOpenPrice(), Digits) != NormalizeDouble(p1, Digits) 
                      || NormalizeDouble(OrderTakeProfit(), Digits) != 
                      NormalizeDouble(p2, Digits)) 
                     {                  
                       start = GetTickCount();
                       tic = OrderModify(OrderTicket(), p1, 0, p2, 0, Green);
                       //----
                       if(ShowLog)
                         {
                           Print("ìîäèô BUYSTOP ", OrderOpenPrice(), "->", p1, " t/p ", 
                                 OrderTakeProfit(),"->", p2);
                           Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount()-start)/1000, 
                                 " ñåêóíä.");  
                         }
                       //----
                       if(tic) 
                           PlaySound("alert.wav");                    
                       //----
                       if(!tic) 
                         {
                           err = GetLastError(); 
                           Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                         }                     
                       Sleep(timeOut);
                     }
                 }
               //----
               if(OrderType() == OP_SELLSTOP)
                 {
                   p1 = oprice;
                   p2 = prprice;
                   NormalizeDouble(p2, MarketInfo(Symbol(), MODE_DIGITS));
                   NormalizeDouble(p1, MarketInfo(Symbol(), MODE_DIGITS));
                   //----
                   if(NormalizeDouble(OrderOpenPrice(), Digits) != NormalizeDouble(p1, Digits) 
                      || NormalizeDouble(OrderTakeProfit(), Digits) != 
                      NormalizeDouble(p2, Digits)) 
                     { 
                       start = GetTickCount();
                       tic = OrderModify(OrderTicket(), p1, 0, p2, 0, Green);
                       //----
                       if(ShowLog)
                         {
                           Print("ìîäèô SELLSTOP ", OrderOpenPrice(), "->", p1, " t/p ",
                                 OrderTakeProfit(),"->", p2);
                           Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount()-start)/1000, 
                                 " ñåêóíä.");  
                         }
                       //----
                       if(tic) 
                           PlaySound("alert.wav");                      
                       //----
                       if(!tic) 
                         {
                           err = GetLastError(); 
                           Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                         }                       
                       Sleep(timeOut);
                     }                       
                 }              
             }            
         }
     }  
   return (1);      
  }    
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ ïîäñ÷åò ïðîôèòà ïî ïîçèöèÿì â çàâèñèìîñòè îò ðåæèìà. Ïðè|
//|  mode=1 òîëüêî äëÿ òåêóùåãî èíñòðóìåíòà, ïðè ëþáîì äðóãîì äëÿ    |
//|  âñåõ ïîçèöèé ñ÷åòà                                              |
//+------------------------------------------------------------------+
double getAllProfit(int mode)
  {
   int t, cnt1;
   double pf;
   t = OrdersTotal();
   pf = 0;
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(mode == 1)
         {      
           //----
           if(OrderSymbol() == Symbol() && (OrderType() == OP_BUY || OrderType() == OP_SELL))
             {
               pf = pf + OrderProfit() + OrderSwap() + OrderCommission();           
             }
         } 
       else 
         {
           //----
           if(mode == 2 && OrderSymbol() == Symbol() && OrderType() == OP_BUY) 
             {
               pf = pf + OrderProfit() + OrderSwap() + OrderCommission();
             }
           //----
           if(mode == 3 && OrderSymbol() == Symbol() && OrderType() == OP_SELL)
             {
               pf = pf + OrderProfit() + OrderSwap() + OrderCommission();                        
             }   
         }
     }  
   return (pf);           
  }
//+------------------------------------------------------------------+
//| ïðè ëþáîì äðóãîì äëÿ âñåõ ïîçèöèé ñ÷åòà                          |
//+------------------------------------------------------------------+
double getDayProfit(int mode, int dayShift)
  {
   int t, cnt1, cyear, cmonth, cday;
   double pf;
   datetime ctm;
   t = HistoryTotal();
   pf = 0;
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_HISTORY);
       ctm = OrderCloseTime();
       cyear = TimeYear(ctm);
       cmonth = TimeMonth(ctm);
       cday = TimeDay(ctm);
       //----
       if(cyear == Year() && cmonth == Month() && cday == (Day() - dayShift))
         {                 
           //----
           if(mode==1)
             {      
               //ïðèáûëü ïî ëîíãàì è øîðòàì
               if(OrderType() == OP_BUY || OrderType() == OP_SELL) 
                 {
                   pf = pf + OrderProfit() + OrderSwap() + OrderCommission();           
                 }
             } 
           else 
             {
               //----
               if(mode == 2 && OrderType() == OP_BUY) 
                 { 
                   //ïðèáûëü òîëüêî ïî ëîíãàì
                   pf = pf + OrderProfit() + OrderSwap() + OrderCommission();
                 }
               //----
               if(mode == 3 && OrderType() == OP_SELL)
                 { 
                   //ïðèáûëü òîëüêî ïî øîðòàì
                   pf = pf + OrderProfit() + OrderSwap() + OrderCommission();                        
                 }   
             }      
         } 
     }  
   return (pf);           
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double getLevelPositions(int mode, int level)
  {
   int t, cnt1;
   double pf;
   t = HistoryTotal();
   pf = 0;
//----
   for(cnt1 = 0; cnt1 < t; cnt1++)
     {
       OrderSelect(cnt1, SELECT_BY_POS, MODE_HISTORY);    
       //----
       if(OrderSymbol() == Symbol()) 
         { 
           //ïðîâåðêà èíñòðóìåíòà
           if(OrderType() == OP_BUY || OrderType() == OP_SELL) 
             {
               //----
               if(mode == 1 && (OrderMagicNumber() == level || 
                  OrderMagicNumber() == (level + 1)))
                 {
                   //ñ÷èòàåì òîëüêî ñäåëêè îäíîãî óðîâíÿ
                   pf = pf + 1;           
                 }
               //----
               if(mode == 2) 
                 { 
                   //ñ÷åò ñäåëîê ïî âñåì óðîâíÿì
                   pf = pf + 1;
                 }          
             }
         } 
     }  
   return (pf);          
  }      
//+------------------------------------------------------------------+
//|  Ðàñ÷åò öåíû, ïî êîòîðîé âûñòàâëÿåòñÿ îðäåð SellStop             |
//+------------------------------------------------------------------+
double setPriceSellStop()
  {
   double topPrice, PriceSetka, HighestPriceInRange;
   int NumPoloski, NumBarsAfterOpenedOrder;
   datetime OpenOrderTime;
   topPrice = getOrderPriceByNum(getMaxShortNum());
   OpenOrderTime = getOrderOpenTimeByNum(getMaxShortNum());
   NumBarsAfterOpenedOrder = iBarShift(NULL, 0, OpenOrderTime, false);         
   HighestPriceInRange = Highest(NULL, 0, MODE_HIGH, NumBarsAfterOpenedOrder, 0);
// íîìåð ïîëîñêè ïîä òåêóùåé öåíîé BID
   NumPoloski = MathAbs(MathFloor((Bid - topPrice) / (Shag*Point)));
// çíà÷åíèå öåíû, ñîîòâåòñòâóþùåå ýòîé ïîëîñêå 
   PriceSetka = topPrice + NumPoloski*Shag*Point;
//----
   if(HighestPriceInRange < PriceSetka + Shag*Point && PriceSetka >= topPrice+Shag*Point && 
      Bid > topPrice)   
     {
       return(NormalizeDouble(PriceSetka - Shag*Point,Digits));
     }                
  }
//+------------------------------------------------------------------+
//|  Ðàñ÷åò öåíû, ïî êîòîðîé âûñòàâëÿåòñÿ îðäåð BuyStop              |
//+------------------------------------------------------------------+
double setPriceBuyStop()
  {
   double lowPrice, PriceSetka, LowestPriceInRange;
   int NumPoloski, NumBarsAfterOpenedOrder;
   datetime OpenOrderTime;
   lowPrice = getOrderPriceByNum(getMaxLongNum());
   OpenOrderTime = getOrderOpenTimeByNum(getMaxLongNum());
   NumBarsAfterOpenedOrder = iBarShift(NULL, 0, OpenOrderTime, false);         
   LowestPriceInRange = Lowest(NULL, 0, MODE_LOW, NumBarsAfterOpenedOrder, 0);
// íîìåð ïîëîñêè íàä òåêóùåé öåíîé ASK
   NumPoloski = MathAbs(MathFloor((lowPrice - Ask) / (Shag*Point))); 
// çíà÷åíèå öåíû, ñîîòâåòñòâóþùåå ýòîé ïîëîñêå 
   PriceSetka = lowPrice - NumPoloski*Shag*Point;
//----
   if(LowestPriceInRange > PriceSetka - Shag*Point && PriceSetka <= lowPrice - Shag*Point && 
      Ask < lowPrice)   
     {
       return(NormalizeDouble(PriceSetka + Shag*Point,Digits));
     }
  }
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ çàêðûòèÿ îðäåðîâ ïî äîñòèæåíèþ ïðîôèòà                  |
//+------------------------------------------------------------------+
bool getProfitOrdersClose()
  {       
   int cnt1, err, tic1,tic2, LotBy, LotBy1,i;
   bool ticdone;    
   int T1[10], T2[10], a;  
   a = 0;
//----
   for(cnt1 = 0; cnt1 < OrdersTotal(); cnt1++)
     {
       //ïðîâåðÿåì, ìîæíî ëè çàêðûòü âñòðå÷íûå îðäåðà áåç ïîòåðè ñïðåäà
       OrderSelect(cnt1, SELECT_BY_POS);         
       tic1 = OrderTicket();         
       LotBy = OrderLots();
       //----
       if(OrderType() == OP_SELL)
         {           
           //----
           for(i = 0; i < OrdersTotal(); i++)
             {
               OrderSelect(i, SELECT_BY_POS);             
               tic2 = OrderTicket();
               LotBy1 = OrderLots();
               //----
               if(OrderType() == OP_BUY && LotBy == LotBy1 && 
                  OrderSelect(tic1, SELECT_BY_TICKET) && OrderSelect(tic2, SELECT_BY_TICKET))
                 {                
                   T1[a] = tic1;
                   T2[a] = tic2;                    
                   a++;
                 }
             }
         }
     } 
   for(cnt1 = 0; cnt1 < a; cnt1++)
     {
       // çàêðûâàåì âñòðå÷íûå îðäåðà
       if(OrderSelect(T1[cnt1], SELECT_BY_TICKET) && OrderSelect(T2[cnt1], SELECT_BY_TICKET))
         {
           ticdone = OrderCloseBy(T1[cnt1], T2[cnt1], Green);        
           //----
           if(!ticdone)
             {
               err = GetLastError(); 
               //----
               if(err != 0 && err != 1) 
                  Print ("Îøèáêà çàêðûòèÿ âñòðå÷íîãî îðäåðà = ", ErrorDescription(err));
             }
           Sleep(timeOut);  
         }
     }  
   for(cnt1 = OrdersTotal(); cnt1 >= 0; cnt1--)
     {
       // çàêðûâàåì âñå îñòàâøèåñÿ îðäåðà
       OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
       //----
       if(OrderSymbol() == Symbol())
         {
           //----
           if(OrderType() == OP_BUY)
             {
               ticdone = OrderClose(OrderTicket(), OrderLots(), Ask, 3, Green);
               //----
               if(ticdone) 
                   PlaySound("timeout.wav");
               //----
               if(!ticdone)
                 {
                   err = GetLastError(); 
                   if(err != 0) 
                       Print("Îøèáêà çàêðûòèÿ îðäåðà = ", ErrorDescription(err));
                 }
               Sleep(timeOut);  
             }
           //----
           if(OrderType() == OP_SELL)
             {
               ticdone = OrderClose(OrderTicket(), OrderLots(), Bid, 3, Green);
               //----
               if(ticdone) 
                   PlaySound("timeout.wav");
               //----
               if(!ticdone)
                 {
                   err = GetLastError(); 
                   //----
                   if(err != 0) 
                       Print("Îøèáêà çàêðûòèÿ îðäåðà = ", ErrorDescription(err));
                 }
               Sleep(timeOut);  
             }
         }
     }  
   return (False);       
  }
//+------------------------------------------------------------------+
//|  Ñóììà ëîòîâ âñåõ îòêðûòûõ ïîçèöèé â îäíó ñòîðîíó äëÿ âû÷èñëåíèÿ |
//|  çíà÷åíèÿ òåéêïðîôèòà âñåé ñåðèè                                 |
//+------------------------------------------------------------------+
double getSumLots(int mode)
  {
   int i;
   double sumLots;
//----
   for(i = 0; i <= OrdersTotal(); i++)
     {
       OrderSelect(i, SELECT_BY_POS);
       //----
       if(OrderType() == OP_BUY && mode == 1)
         {
           sumLots = sumLots + OrderLots();
         }
       //----
       if(OrderType() == OP_SELL && mode == 2)
         {
           sumLots = sumLots + OrderLots();
         }   
     }
   return(sumLots);
  }
//+------------------------------------------------------------------+
//|  Âçâåøåííàÿ öåíà äëÿ âñåõ ïîçèöèé â îäíó ñòîðîíó äëÿ âû÷èñëåíèÿ  |
//|  çíà÷åíèÿ òåéêïðîôèòà âñåé ñåðèè                                 |
//+------------------------------------------------------------------+
double getSumWeightedPrice(int mode)
  {
   int i;
   double sumWeightedPrice;
//----
   for(i = 0; i <= OrdersTotal(); i++)
     {
       OrderSelect(i, SELECT_BY_POS);
       //----
       if(OrderType() == OP_BUY && mode == 1)
         {
           sumWeightedPrice = sumWeightedPrice + OrderLots()*OrderOpenPrice();
         }
       //----
       if(OrderType() == OP_SELL && mode == 2)
         {
           sumWeightedPrice = sumWeightedPrice + OrderLots()*OrderOpenPrice();
         }   
     }
   return(sumWeightedPrice);
  }
//+------------------------------------------------------------------+
//|  Îïðåäåëåíèå öåí çàêðûòèÿ âñåõ îðäåðîâ, íåîáõîäèìûõ äëÿ          |
//|  âûñòàâëåíèÿ òåéêïðîôèòîâ è ñòîïëîññîâ äëÿ îðäåðîâ               |
//+------------------------------------------------------------------+
double getOptimalTakeProfit(bool mode, bool SELL_BUY)
  {
   //ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
   double TempOptimalTP, TempOptimalTP_sell, TempOptimalTP_buy, NeedTP_points, lots;
   int i;
   double multiplier, profit_money, price_tick;
//----
   if(mode) 
     {
       multiplier = MathSqrt(getTopLots(3));
     }
//----
   if(!mode) 
     {
       multiplier=1;
     }
   profit_money = AccountBalance()*ProfitPercent*multiplier / 100;
   price_tick = MarketInfo(Symbol(), MODE_TICKVALUE);
// íåîáõîäèìîå êîëè÷åñòâî ïóíêòîâ (ïðè ëîòå=1) äëÿ äîñòèæåíèÿ ïðîôèòà
   NeedTP_points = profit_money*Point / price_tick;
   lots = getSumLots(1) + getSumLots(2);
//----
   if(getSumLots(2) != 0)   
     {
       TempOptimalTP_sell = (getSumWeightedPrice(2) - NeedTP_points) / getSumLots(2);
     }
   else 
     {
       TempOptimalTP_sell=0;
     } // áåç ó÷åòà îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
//----
   if(getSumLots(1) != 0)   
     {
       TempOptimalTP_buy = (getSumWeightedPrice(1) + NeedTP_points) / getSumLots(1);
     }
   else 
     {
       TempOptimalTP_buy = 0;
     }  //áåç ó÷åòà îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à               
//----
   if(!SELL_BUY)
     {  
       //----
       if(getTopLevel(1) == getTopLevel(2))
         {
           TempOptimalTP = TempOptimalTP_buy;
         }
       else
         {  
           //----
           if(lots != 0)
             {
               TempOptimalTP = (TempOptimalTP_buy*getSumLots(1) + 
                                TempOptimalTP_sell*getSumLots(2) + NeedTP_points) / lots;
             }
           else 
             {
               TempOptimalTP = 0;
             }
         }                 
       //ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à
       return(NormalizeDouble(TempOptimalTP_buy, Digits));
     }
//----
   if(SELL_BUY)
     {  
       //----
       if(getTopLevel(1) == getTopLevel(2))
         {
           TempOptimalTP=TempOptimalTP_sell;
         }
       else
         {  
           //----
           if(lots != 0)
             {
               TempOptimalTP = (TempOptimalTP_buy*getSumLots(1) + 
                                TempOptimalTP_sell*getSumLots(2) - NeedTP_points) / lots;
             }
           else 
             {
               TempOptimalTP = 0;
             }
         }                
       // ñ ó÷åòîì îòêðûòîãî ïðîòèâîïîëîæíîãî ïëå÷à 
       return(NormalizeDouble(TempOptimalTP_sell, Digits));                
     }           
  }   
//+------------------------------------------------------------------+
//|  Ôóíêöèÿ èçìåíÿåò òåêóùèé òýéêïðîôèò äëÿ âñåõ îòêðûòûõ ïîçèöèé íà|
//|  öåíó óðîâíÿ òðåáóåìîé äîõîäíîñòè                                |                                 |
//+------------------------------------------------------------------+
void setNewTakeProfit()
  {
   int t, cnt1, err, start;
   bool tic;
   double priceTP_buy, priceTP_sell, priceSL_buy, priceSL_sell, s, spread;
   t = OrdersTotal();
   s = MarketInfo(Symbol(), MODE_SPREAD);
   spread = s*Point;  
   priceTP_buy = getOptimalTakeProfit(OptimalTakeProfit, false);
   priceTP_sell = getOptimalTakeProfit(OptimalTakeProfit, true);
   priceSL_buy = priceTP_sell;
   priceSL_sell = priceTP_buy;     
//----
   if(getTopLevel(1) > getTopLevel(2))
     {      
       //----
       for(cnt1 = 0; cnt1 < t; cnt1++)
         {
           OrderSelect(cnt1, SELECT_BY_POS);
           //----
           if(OrderType() == OP_BUY && OrderTakeProfit() != priceTP_buy - spread) 
             {                   
               start = GetTickCount();
               tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_buy - spread, 
                                 0, Green);                 
               //----
               if(ShowLog)
                 {
                   Print("Óñòàíàâëèâàåì íîâûé TP OP_BUY -", OrderTakeProfit(), "->", 
                         priceTP_buy-spread, "  lots= ", OrderLots(), " ticket= ", 
                         OrderTicket());
                   Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
                 }
               //----
               if(tic) 
                   PlaySound("alert.wav");
               //----
               if(!tic) 
                 {
                   err = GetLastError();
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 }                  
               Sleep(timeOut);               
             }
           //----
           if(OrderType() == OP_SELL && OrderStopLoss() != priceSL_sell) 
             {               
               start = GetTickCount();
               tic = OrderModify(OrderTicket(), OrderOpenPrice(), priceSL_sell, 0, 0, Yellow);                 
               //----
               if(ShowLog)
                 {
                   Print("Óñòàíàâëèâàåì íîâûé SL OP_SELL -", OrderTakeProfit(), "->", 
                         priceSL_sell, "  lots= ", OrderLots(), " ticket= ", OrderTicket());
                   Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
                 }
               //----
               if(tic) 
                   PlaySound("alert.wav");                 
               //----
               if(!tic) 
                 {
                   err = GetLastError();
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 }                  
               Sleep(timeOut);                 
             }          
         }   
     }      
//----
   if(getTopLevel(1) < getTopLevel(2))
     {   
       //----
       for(cnt1 = 0; cnt1 < t; cnt1++)
         {
           OrderSelect(cnt1, SELECT_BY_POS);
           //----
           if(OrderType() == OP_BUY && OrderStopLoss() != priceSL_buy) 
             {                
               start = GetTickCount();
               tic = OrderModify(OrderTicket(), OrderOpenPrice(), priceSL_buy, 0, 0, Green);                 
               //----
               if(ShowLog)
                 {
                   Print("Óñòàíàâëèâàåì íîâûé SL OP_BUY -", OrderTakeProfit(), "->", 
                         priceSL_buy, "  lots= ", OrderLots(), " ticket= ", OrderTicket());
                   Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
                 }
               //----
               if(tic) 
                   PlaySound("alert.wav");
               //----
               if(!tic) 
                 {
                   err = GetLastError();
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 }                  
               Sleep(timeOut);                
             }
           //----
           if(OrderType() == OP_SELL && OrderTakeProfit() != priceTP_sell + spread)
             {              
               start = GetTickCount();
               tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_sell + spread, 
                                 0, Yellow);
               //----
               if(ShowLog)
                 {
                   Print("Óñòàíàâëèâàåì íîâûé TP OP_SELL -", OrderTakeProfit(), "->", 
                         priceTP_sell + spread, "  lots= ", OrderLots(), " ticket= ", 
                         OrderTicket());
                   Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
                 }
               //----
               if(tic) 
                   PlaySound("alert.wav");                 
               //----
               if(!tic) 
                 {
                   err = GetLastError();
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 }                  
               Sleep(timeOut);               
             }          
         }   
     }  
//----
   if(getTopLevel(1) == getTopLevel(2) && !Mode_Close_on_TP)
     {     
       //----
       for(cnt1 = 0; cnt1 < t; cnt1++)
         {
           OrderSelect(cnt1, SELECT_BY_POS);
           //----
           if(OrderType() == OP_BUY && OrderTakeProfit() != 0) 
             {        
               start = GetTickCount();
               tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, Green);                 
               //----
               if(ShowLog)
                 {
                   Print("Óñòàíàâëèâàåì íîâûé TP OP_BUY -", OrderTakeProfit(), "->", 0, 
                      "  lots= ", OrderLots(), " ticket= ", OrderTicket());
                      Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
                 }
               //----
               if(tic) 
                   PlaySound("alert.wav");
               //----
               if(!tic) 
                 {
                   err = GetLastError();
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 }                  
               Sleep(timeOut);                
             }
           //----
           if(OrderType() == OP_SELL && OrderTakeProfit() != 0)
             {                
               start = GetTickCount();
               tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0, Yellow);
               //----
               if(ShowLog)
                 {
                   Print("Óñòàíàâëèâàåì íîâûé TP OP_SELL -", OrderTakeProfit(), "->", 0, 
                         "  lots= ", OrderLots(), " ticket= ", OrderTicket());
                   Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
                 }
               //----
               if(tic) 
                   PlaySound("alert.wav");                 
               //----
               if(!tic) 
                 {
                   err = GetLastError();
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 }                  
               Sleep(timeOut);               
             }          
         }   
     }          
//----
   if(getTopLevel(1) == getTopLevel(2) && Mode_Close_on_TP)
     {     
       //----
       for(cnt1 = 0; cnt1 < t; cnt1++)
         {
           OrderSelect(cnt1, SELECT_BY_POS);
           //----
           if(OrderType()==OP_BUY && OrderTakeProfit()!=priceTP_buy-spread) 
             {        
               start = GetTickCount();
               tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_buy - spread, 
                                 0, Green);                 
               //----
               if(ShowLog)
                 {
                   Print("Óñòàíàâëèâàåì íîâûé TP OP_BUY -", OrderTakeProfit(), "->", 
                         priceTP_buy-spread, "  lots= ", OrderLots(), " ticket= ", 
                         OrderTicket());
                   Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
                 }
               //----
               if(tic) 
                   PlaySound("alert.wav");
               //----
               if(!tic) 
                 {
                   err = GetLastError();
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 }                  
               Sleep(timeOut);                
             }
           //----
           if(OrderType() == OP_SELL && OrderTakeProfit() != priceTP_sell + spread)
             {                
               start = GetTickCount();
               tic = OrderModify(OrderTicket(), OrderOpenPrice(), 0, priceTP_sell + spread, 
                                 0, Yellow);
               //----
               if(ShowLog)
                 {
                   Print("Óñòàíàâëèâàåì íîâûé TP OP_SELL -", OrderTakeProfit(), "->", 
                         priceTP_sell+spread, "  lots= ", OrderLots(), " ticket= ", 
                         OrderTicket());
                   Print("Âðåìÿ ìîäèôèêàöèè ", (GetTickCount() - start) / 1000, " ñåêóíä.");
                 }
               //----
               if(tic) 
                   PlaySound("alert.wav");                 
               //----
               if(!tic) 
                 {
                   err = GetLastError();
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 }                  
               Sleep(timeOut);               
             }          
         }   
     }      
  }
//+------------------------------------------------------------------+
//|  Breakdowning martingail™  v 0.9.4                               |
//+------------------------------------------------------------------+
int start()
  {
   double s, spread, allDeals=0,Risk, level;
   int total, err, i, start;   
   string level_str;
   bool ticket;
   s = MarketInfo(Symbol(), MODE_SPREAD);
   spread = s*Point;   
// Âêëþ÷åíèå ìàíèìåíåäæìåíòà (âû÷èñëåíèå ëîòîâ)        
   if(MoneyManagement == true && LogariphmicMM == true)
     {              
       Risk = MathCeil(Riskfactor*100 / MathSqrt(AccountBalance()));
       //----
       if(Risk >= 20) 
           Risk = 20;             
       startLots = MathCeil(AccountBalance()*Risk / 10000) / 10;               
       //----
       if(startLots > MarketInfo(Symbol(), MODE_MAXLOT)) 
         {
           startLots = MarketInfo(Symbol(), MODE_MAXLOT);
         }
       //----
       if(startLots < MarketInfo(Symbol(), MODE_MINLOT)) 
         {
           startLots = MarketInfo(Symbol(), MODE_MINLOT);
         }
     }
//----
   if(MoneyManagement == true && LogariphmicMM == false)
     {
       startLots = NormalizeDouble(AccountBalance()*Riskfactor / 100000, 1);
       //----
       if(startLots > MarketInfo(Symbol(), MODE_MAXLOT)) 
         {
           startLots = MarketInfo(Symbol(), MODE_MAXLOT);
         }
       //----
       if(startLots < MarketInfo(Symbol(), MODE_MINLOT)) 
         {
           startLots = MarketInfo(Symbol(), MODE_MINLOT);
         }
     }     
//----
   if(MoneyManagement == false && LogariphmicMM == false)    
      {
         startLots = startLots;
      }
//Ðàñïå÷àòêà ðàçëè÷íîé èíôîðìàöèè íà ýêðàíå                  
   allDeals = getLevelPositions(2,0);
//----
   if(getTopLevel(1) > getTopLevel(2))   
     {
       level = getOptimalTakeProfit(OptimalTakeProfit, false) - spread;
     }
//----
   if(getTopLevel(1) < getTopLevel(2))   
     {
       level = getOptimalTakeProfit(OptimalTakeProfit, true) + spread;
     }
//----
   if(level != 0)
     {
       level_str = DoubleToStr(level, Digits);
     }
   else 
     {
       level_str = " ïîêà íåò, æäåì...";
     } 
   // ðàñïå÷àòêà óðîâíÿ çàêðûòèÿ âñåõ îðäåðîâ
   Comment("", "\n",                
           "    B R E A K D O W N I N G    M A R T I N G A I L ™  v. 0.9.4", 
           "                      Ïëàíèðóåìûé óðîâåíü çàêðûòèÿ ñåðèè :  ",level_str,"\n",
           "    Ïðîôèò ïî ëîíãàì  = ", NormalizeDouble(getAllProfit(2),2)," $", "\n",                
           "    Ïðîôèò ïî øîðòàì = ", NormalizeDouble(getAllProfit(3),2)," $", "\n", 
           "    ---------------------------------------------------", "\n",
           "    Ïðîôèò ñåãîäíÿ     = ", NormalizeDouble(getDayProfit(1, 0),2), " $","\n",                 
           "    Ïðîôèò â÷åðà       = ", NormalizeDouble(getDayProfit(1, 1),2)," $", "\n",
           "    Ïðîôèò ïîçàâ÷åðà = ", NormalizeDouble(getDayProfit(1, 2),2)," $", "\n",
           "    ---------------------------------------------------", "\n",
           "    Balance       = ",NormalizeDouble(AccountBalance(),2)," $","\n",
           "    Equity         = ",NormalizeDouble(AccountEquity(),2)," $","\n",
           "    Free Margin = ",NormalizeDouble(AccountFreeMargin(),2)," $","\n",
           "    ______________________________", "\n",
           "    Sell Lots = ", getSellLotsSum(1), "   |   Buy Lots = ", getBuyLotsSum(1), "\n"
           );                              
// ïðîâåðêà äîñòàòî÷íîãî êîëè÷åñòâà ìàðæè íà ñ÷åòå
   if(AccountFreeMargin() < (1000) && ShowLog)
     {
       Print("Ìàëî äåíåã íà ñ÷åòå. Free Margin = ", AccountFreeMargin());
       PlaySound("timeout.wav");
       return(0);  
     }
   total = OrdersTotal();
// âûñòàâëåíèå ïåðâîãî óðîâíÿ, êîãäà Mode_Close_on_TP=true èëè îðäåðà ïåðâîãî óðîâíÿ 
// ñòîÿò ñëèøêîì äàëåêî äðóã îò äðóãà
   if(MathAbs(getOrderPriceByNum(getNum(1, 1)) - getOrderPriceByNum(getNum(0, 1))) > 
      (MarketInfo(Symbol(), MODE_SPREAD) + 10)*Point && Mode_Close_on_TP && Close_on_TP)
     {
       getProfitOrdersClose();
     }
//âûñòàâëåíèå ïåðâûõ îðäåðîâ ñåðèè, åñëè òàêèõ åùå íåò
   if(isMgNum(getNum(1, 1)) == False && TradeAllowed) 
     {
       start = GetTickCount();
       ticket = OrderSend(Symbol(), OP_BUY, getLotByLevel(1), NormalizeDouble(Ask, Digits),
                          3, 0, 0, "ïåðâàÿ ëîíã", getNum(1, 1), 0, Green);
       //----
       if(ShowLog)
         {
           Print("Îòêðûòèå ïåðâîé ïîçèöèè ñåðèè ëîíãîâ ", Symbol(), " ask= ", Ask, 
                 " ticket=", ticket);
           Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä.");  
         }                     
       //----
       if(ticket) 
           PlaySound("alert.wav");
       //----
       if(!ticket) 
         {
           err = GetLastError(); 
           Print("Îøèáêà = ", err, " (",ErrorDescription(err), ")");
         } 
       Sleep(timeOut);
     }
//----
   if(isMgNum(getNum(0, 1)) == False && TradeAllowed) 
     {
       start = GetTickCount();
       ticket = OrderSend(Symbol(), OP_SELL, getLotByLevel(1), NormalizeDouble(Bid, Digits),
                          3, 0, 0, "ïåðâàÿ øîðò", getNum(0, 1), 0, Green);
       //----
       if(ShowLog)
         {
           Print("Îòêðûòèå ïåðâîé ïîçèöèè ñåðèè øîðòîâ ", Symbol(), " Bid= ", Bid, 
                 " ticket=", ticket);
           Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä.");  
         }
       //----
       if(ticket) 
           PlaySound("alert.wav");               
       //----
       if(!ticket) 
         {
           err = GetLastError(); 
           Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
         } 
       Sleep(timeOut);
     }            
//âûñòàâëÿåì îðäåðà äëÿ ëîíãîâ
   if(getTopLevel(1) < maxLevel)
     {   
       //----
       for(i = 1; i < 9; i++)
         {
           //----
           if(getTopLevel(1) == i && isMgNum(getNum(1, i + 1)) == False && 
              isOrderActive(getNum(1, i)) == True && setPriceBuyStop() != 0
              && getOrderPriceByNum(getMaxLongNum())!=setPriceBuyStop()) 
             {
               start = GetTickCount();                                  
               ticket = OrderSend(Symbol(), OP_BUYSTOP, getLotByLevel(getTopLevel(1) + 1),
                                  setPriceBuyStop(), 3, 0, 0, StringConcatenate(i + 1, " ëîíã"),
                                  getNum(1, i + 1), 0, Green);
               //----
               if(ShowLog)
                 {
                   Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä."); 
                 }
               //----
               if(ticket) 
                   PlaySound("alert.wav");
               //----
               if(!ticket) 
                 {
                   err = GetLastError(); 
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 } 
               Sleep(timeOut);
               return(1);
             } 
         }
     } 
   //âûñòàâëÿåì îðäåðà äëÿ øîðòîâ
   if(getTopLevel(2) < maxLevel)
     {    
       //----
       for(i = 1; i < 9; i++)
         {
           //----
           if(getTopLevel(2) == i && isMgNum(getNum(0, i + 1)) == False && 
              isOrderActive(getNum(0, i)) == True && setPriceSellStop() != 0
              && getOrderPriceByNum(getMaxShortNum()) != setPriceSellStop()) 
             {
               start = GetTickCount();                 
               ticket = OrderSend(Symbol(), OP_SELLSTOP, getLotByLevel(getTopLevel(2) + 1),
                                  setPriceSellStop(), 3, 0, 0, 
                                  StringConcatenate(i + 1, " øîðò"), getNum(0, i + 1), 0, Red);                 
               //----
               if(ShowLog)
                 {
                   Print("Âðåìÿ îòêðûòèÿ îðäåðà ", (GetTickCount() - start) / 1000, " ñåêóíä.");
                 }
               //----
               if(ticket) 
                   PlaySound("alert.wav");
               //----
               if(!ticket) 
                 {
                   err = GetLastError(); 
                   Print("Îøèáêà = ", err, " (", ErrorDescription(err), ")");
                 } 
               Sleep(timeOut);
               return(1);
             } 
         }
     }          
//ìîäèôèêàöèÿ îòëîæåííûõ îðäåðîâ BuyStop è SellStop
   if(getOrderPriceByNum(getNextOrderNum(getMaxShortNum())) < setPriceSellStop() && 
      setPriceSellStop() != 0) // äëÿ øîðòîâ
     {
       modOrder(getNextOrderNum(getMaxShortNum()), setPriceSellStop(), 0);
     }
//----
   if(getOrderPriceByNum(getNextOrderNum(getMaxLongNum())) > setPriceBuyStop() && 
      setPriceBuyStop() != 0) // äëÿ ëîíãîâ
     {
       modOrder(getNextOrderNum(getMaxLongNum()), setPriceBuyStop(), 0);
     }
//----
   if(getAllProfit(1) > AccountBalance()*ProfitPercent*MathSqrt(getTopLots(3)) / 100 && 
      !Close_on_TP)
     {
       //ïðè äîñòèæåíèè íåîáõîäèìîãî ïðîôèòà çàêðûâàåì âñå îðäåðà
       getProfitOrdersClose();
     }
//----
   if(Close_on_TP)
     {
       //ïðîâåðÿåì, ìîæíî ëè èçìåíèòü óðîâíè òåéêïðîôèòà è ñòîïëîññà äëÿ âñåõ îòêðûòûõ îðäåðîâ
       setNewTakeProfit();
     }
// Óäàëåíèå âñåõ ëèøíèõ îðäåðîâ â ñëó÷àå, åñëè ñåðèÿ çàêðûëàñü ïðîôèòîì, òî åñòü åñëè 
// íåò îòêðûòûõ îðäåðîâ ïåðâîé ñòóïåíè. Óäàëåíèå ëèøíèõ ëîíãîâ, åñëè íåò îðäåðà ïåðâîé ñòóïåíè           
   if(isOrderActive(getNum(1, 1)) == False)
     {
       //----
       for(i = getNum(1, 2); i < getNum(1, 9); i += 10)
         {
           //íà÷èíàåì ïåðåáèðàòü âñå ñî âòîðîãî óðîâíÿ
           deleteOrderNum(i);
         }          
     }           
//----
   if(isOrderActive(getNum(0, 1)) == False)
     {
       //äëÿ øîðòîâ
       for(i = getNum(0, 2); i < getNum(0, 9); i += 10)
         {
           deleteOrderNum(i);
         }          
     }
   return(0);
  }         
//+------------------------------------------------------------------+
// the end.

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 ---