2Sides_v5_0c1_Perekritie

Author: Qimer
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open ordersChecks for the total of closed ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself It automatically opens orders when conditions are reached
Indicators Used
Stochastic oscillator
0 Views
0 Downloads
0 Favorites
2Sides_v5_0c1_Perekritie
#property copyright "Qimer"

extern string  tx1            =  "Îáùèå íàñòðîéêè ñîâåòíèêà";
extern bool    Info           =  true;
extern color   MainInfoBack   =  LightGray;
extern color   MainInfo       =  Black;
extern color   BuyInfoBack    =  LightGray;
extern color   BuyInfo        =  Black;
extern color   SellInfoBack   =  LightGray;
extern color   SellInfo       =  Black;
extern int     ProfitShift    =  30;

extern bool    UseVTP         =  true;
extern bool    CloseBy        =  true;
extern bool    ManualTrade    =  false;
extern bool    DynamicTP      =  true;
extern bool    UseNewBar      =  true;
extern bool    ZTP            =  false;
extern int     ZTP_order      =  6;
extern int     DaysBuffer     =  2;
extern int     magicbuy       =  121;
extern int     magicsell      =  122;
extern int     magiclock      =  135797531;
extern string  magic_list     =  "454 455 0";
extern color   BuyColor       =  Blue;
extern color   SellColor      =  Red;

extern string  tx2            =  "Íàñòðîéêè ñèñòåìû LOT";
extern bool    LOT            =  false;
extern int     nOrder         =  5;
extern int     LO_TP          =  5;
extern int     LO_Tral_Start  =  3;
extern int     LO_Tral_Size   =  5;
extern int     ProfitPercent  =  15;
extern color   LOTColor       =  Purple;

extern string  tx3            =  "Âðåìÿ ðàáîòû ñîâåòíèêà";
extern int     StartHour      =  21;
extern int     EndHour        =  4;

extern string  tx4            =  "Íàñòðîéêè MoneyManagement";
extern bool    UseMM          =  true;
extern bool    UseEquity      =  true;
extern double  min_lot        =  0.1;
extern int     MaxTrades      =  6;
extern int     UseMoney       =  50;
extern int     SL_Level       =  40;
extern bool    DrawdownStop   =  false;

extern string  tx5            =  "Îñíîâíûå íàñòðîéêè";
extern bool    CurrencyProfit =  false;
extern double  Profit         =  1.0;
extern int     TP1            =  8;
extern int     TP             =  8;
extern int     TPstep         =  2;
extern int     Tral_Start     =  5;
extern int     Tral_Size      =  5;
extern color   TralColor      =  Yellow;
extern int     step           =  30;
extern double  Step_coef      =  1;
extern double  mult           =  2;
extern int     slippage       =  3;

extern string  tx6            =  "Íàñòðîéêè èíäèêàòîðà Stochastic";
extern int     StochTime      =  5;
extern int     per_K          =  10;
extern int     per_D          =  3;
extern int     slow           =  3;
extern int     S_Mode         =  0;
extern int     S_Price        =  0;
extern int     zoneBUY        =  15;
extern int     zoneSELL       =  85;

extern string t40 =              "Óñòàíîâêè ïåðåêðûòèÿ";
extern int    LeadingOrder       =            4;      // C êàêîãî êîëåíà ðàáîòàåò ïåðåêðûòèå
extern int    ProfitPersent      =           30;      // Ïðîöåíò ïåðåêðûòèÿ(10...50)
extern int    SecondProfitPersent=           50;      // Ïðîöåíò ïåðåêðûòèÿ êîãäà ïîäêëþ÷àåòñÿ ïðåäïîñëåäíèé îðäåð


double minLot,maxLot,LOTStep,smbuy,smsell,vmtpb,vmtps,vLO_mtpb,vLO_mtps,Cprofit,Lprofit,Lprofit1;
int LO_tral,tral,i,j,CU,totb,tots,r,cnt,dig,hb=0,hs=0,TicketB[],TicketS[],magic[10],cmagic,Lpos,Lpos1,Cpos;
color col,vctpb,vctps,vcLO_mtpb,vcLO_mtps;
string txt1,txt2,txt3,txt4,txtVTP,txtLOT,tm;
datetime NewBar_B,NewBar_S;
bool TradeOff,NotFast;

//===================================================================================================================================================
int init() 
   {
   TradeOff =  false;
   LOTStep  =  MarketInfo(Symbol(),MODE_LOTSTEP);
   minLot   =  MarketInfo(Symbol(),MODE_MINLOT);
   maxLot   =  MarketInfo(Symbol(),MODE_MAXLOT);
   dig      =  2;

   if (!IsTesting() || IsVisualMode()) {NotFast=true;}

   if (Digits==4 || Digits==2) CU=1; else CU=10;                           // êîýôôèöèåíò äëÿ ðàçíûõ òèïîâ ñ÷åòîâ 4/2 è 5/3   
   LO_TP*=CU; LO_Tral_Start*=CU; slippage*=CU;                             // óâåëè÷èâàåì âñå íåîáõîäèìûå ïàðàìåòðû
   TP1*=CU; TP*=CU; TPstep*=CU; Tral_Start*=CU; step*=CU;                  // íà ýòîò êîýôôèåíò
   tral     =  Tral_Size*CU;
   LO_tral  =  LO_Tral_Size*CU;
   
   double lotx=MM(mult,UseMoney,MaxTrades,step);                           // ïðîèçâîäèòñÿ ïðîâåðêà, óäîâëåòâîðÿåò ëè áàëàíñ
   if (UseMM && lotx<minLot) {TradeStop();}                                // íàñòðîéêàì, çàäàííûì â ñîâåòíèêå.
   if (!UseMM && min_lot<minLot)
      {
      tm="min_lot ìåíüøå âîçìîæíîãî íà ñ÷åòå";                             // Çàùèòà îò íåâåðíî ââåäåííîãî ïàðàìòåðà min_lot
      TradeOff=true;
      }
   
   cmagic=0; string st; int k=StringLen(magic_list);
   for (int a=0;a<k;a++)
      {
      if (StringSubstr(magic_list,a,1)!=" ") {st=st+StringSubstr(magic_list,a,1); if (a<k-1) continue;}
      if (st!="") {magic[cmagic]=StrToInteger(st); cmagic++; st="";}
      }
   }
//===================================================================================================================================================
int deinit() 
   {
      Comment("");
      ObjectDelete("SellTP"); ObjectDelete("BuyTP");
      ObjectDelete("SellZeroLevel"); ObjectDelete("BuyZeroLevel");
      ObjectDelete("SellLOT"); ObjectDelete("BuyLOT");
      ObjectDelete("Lable1"); ObjectDelete("Lable2"); ObjectDelete("Lable3");
      ObjectDelete("y_MainInfoBack1"); ObjectDelete("y_MainInfoBack2"); ObjectDelete("y_MainInfoBack3");
      ObjectDelete("z_MainInfo_1"); ObjectDelete("z_MainInfo_2"); ObjectDelete("z_MainInfo_3"); ObjectDelete("z_MainInfo_4"); 
      ObjectDelete("z_MainInfo_5"); ObjectDelete("z_MainInfo_6"); ObjectDelete("z_MainInfo_7"); ObjectDelete("z_BuyInfo_1");  
      ObjectDelete("z_BuyInfo_2");  ObjectDelete("z_BuyInfo_3");  ObjectDelete("z_BuyInfo_4");  ObjectDelete("z_BuyInfo_5");  
      ObjectDelete("z_BuyInfo_6");  ObjectDelete("z_BuyInfo_7");  ObjectDelete("z_SellInfo_1"); ObjectDelete("z_SellInfo_2"); 
      ObjectDelete("z_SellInfo_3"); ObjectDelete("z_SellInfo_4"); ObjectDelete("z_SellInfo_5"); ObjectDelete("z_SellInfo_6"); 
      ObjectDelete("z_SellInfo_7"); ObjectDelete("z_ErrorB");     ObjectDelete("z_ErrorM");
      ObjectDelete("BuyTP_Back");   ObjectDelete("BuyTP_Text");   ObjectDelete("SellTP_Back");  ObjectDelete("SellTP_Text");
   }
//===================================================================================================================================================
                                                 int start() {
  
   double TV         =  MarketInfo(Symbol(),MODE_TICKVALUE);
   double spread     =  MathFloor(MarketInfo(Symbol(),MODE_SPREAD));
   if (LeadingOrder   >= 2) CheckOverlapping(totb,tots)   ; 
//-------------------------------- Çàïðåò òîðãîâëè --------------------------------------
   if (TradeOff) 
      {
      Text("z_ErrorB","gggggggggggggggggggggggggg",24,"Webdings",100,200,Red);
      Text("z_ErrorM","Òîðãîâëÿ îñòàíîâëåíà! "+tm,15,"Arial Black",110,201,Yellow);
      return(0);
      }
//==========================================================  Ñáîð äàííûõ î òîðãîâëå  ===============================================================
   totb=0; tots=0;
   ArrayResize(TicketB,OrdersTotal());
   ArrayResize(TicketS,OrdersTotal());
   
//--------------------------  Çàïîëíåíèå ìàññèâîâ òèêåòîâ  ------------------------------
   for (r=0;r<OrdersTotal();r++) 
      {
      if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES))
         {
         if (OrderSymbol() == Symbol())
            {
            if (OrderType()==OP_BUY && (OrderMagicNumber()==magicbuy || MagicCheck()))
               {
               TicketB[totb]=OrderTicket();
               totb++;
               }
            if (OrderType()==OP_SELL && (OrderMagicNumber()==magicsell || MagicCheck()))
               {
               TicketS[tots]=OrderTicket();
               tots++;
               }
            }
         }
      else {Print("Ñáîé, ïðè ïåðåáîðå îðäåðîâ, ïðîèçâîäèòñÿ íîâûé ðàñ÷åò"); return(0);}
      }
      
//-------------------------  Ñîðòèðîâêà ìàññèâîâ òèêåòîâ  -------------------------------
   double pr1,pr2,pr3;
//--------------------------------- Äëÿ ñåðèè BUY ---------------------------------------
   for (i=0;i<totb-1;i++)
      {
      OrderSelect(TicketB[i],SELECT_BY_TICKET); pr1=OrderOpenPrice(); pr3=pr1; r=i;
      for (j=i+1;j<totb;j++)
         {
         OrderSelect(TicketB[j],SELECT_BY_TICKET); pr2=OrderOpenPrice();
         if (pr2<pr3) {pr3=pr2;r=j;}
         }
      if (r!=i) {j=TicketB[i];TicketB[i]=TicketB[r];TicketB[r]=j;}
      }
//--------------------------------- Äëÿ ñåðèè SELL --------------------------------------
   for (i=0;i<tots-1;i++)
      {
      OrderSelect(TicketS[i],SELECT_BY_TICKET); pr1=OrderOpenPrice(); pr3=pr1; r=i;
      for (j=i+1;j<tots;j++)
         {
         OrderSelect(TicketS[j],SELECT_BY_TICKET); pr2=OrderOpenPrice();
         if (pr2>pr3) {pr3=pr2;r=j;}
         }
      if (r!=i) {j=TicketS[i];TicketS[i]=TicketS[r];TicketS[r]=j;}
      }
//-----------------  Ïîäñ÷åò ïðîôèòà, îáúåìîâ è ò.ä. îòêðûòûõ îðäåðîâ  ------------------
   double   profitbuy,profitsell,openpricebuy,lastlotbuy,openpricesell,lastlotsell,TPB,TPS;
   smbuy=0;smsell=0;
   
   for (i=totb-1;i>=0;i--)
      {
      OrderSelect(TicketB[i],SELECT_BY_TICKET);
      smbuy+=OrderLots(); profitbuy+=OrderProfit()+OrderCommission()+OrderSwap();
      openpricebuy = OrderOpenPrice(); lastlotbuy = OrderLots();
      TPB=OrderTakeProfit();
      }
      
   for (i=tots-1;i>=0;i--)
      {
      OrderSelect(TicketS[i],SELECT_BY_TICKET);
      smsell+=OrderLots(); profitsell+=OrderProfit()+OrderCommission()+OrderSwap();
      openpricesell = OrderOpenPrice(); lastlotsell = OrderLots();
      TPS=OrderTakeProfit();
      }
//---------- Ðàñ÷åò ÒÏ â çàâèñèìîñòè îò êîë-âà îðäåðîâ è âêëþ÷åííûõ ðåæèìîâ -------------
   int TPbuy,TPsell;
   if (totb==1) TPbuy  = TP1; else TPbuy  = TP;
   if (tots==1) TPsell = TP1; else TPsell = TP;
   if (DynamicTP) 
      {
      TPbuy+=(totb-1)*TPstep; 
      TPsell+=(tots-1)*TPstep;
      }
   if (ZTP)
      {
      if (totb>=ZTP_order) TPbuy=0;
      if (tots>=ZTP_order) TPsell=0;
      }
//========================================   LOT - Ìîäóëü îáðàáîòêè 2-õ ïîñëåäíèõ îðäåðîâ   =========================================================
if (LOT)
   {
   int j;
   datetime TimeB=Time[0],TimeS=Time[0];

   if (OrderSelect(TicketB[totb-1],SELECT_BY_TICKET)) TimeB=OrderOpenTime();
   if (OrderSelect(TicketS[tots-1],SELECT_BY_TICKET)) TimeS=OrderOpenTime();

   double LastOrdersBuyLots,LastOrdersBuyProfit,LastOrdersSellLots,LastOrdersSellProfit;
      
   if (totb>=nOrder) 
      {
      OrderSelect(TicketB[0],SELECT_BY_TICKET); LastOrdersBuyLots =OrderLots(); LastOrdersBuyProfit =OrderProfit()+OrderCommission()+OrderSwap();
      OrderSelect(TicketB[1],SELECT_BY_TICKET); LastOrdersBuyLots+=OrderLots(); LastOrdersBuyProfit+=OrderProfit()+OrderCommission()+OrderSwap();
      }
   if (tots>=nOrder) 
      {
      OrderSelect(TicketS[0],SELECT_BY_TICKET); LastOrdersSellLots =OrderLots(); LastOrdersSellProfit =OrderProfit()+OrderCommission()+OrderSwap();
      OrderSelect(TicketS[1],SELECT_BY_TICKET); LastOrdersSellLots+=OrderLots(); LastOrdersSellProfit+=OrderProfit()+OrderCommission()+OrderSwap();
      }
   
   int k=OrdersHistoryTotal()-1;
   double   ProfitBuyN,
            ProfitSellN,
            BalanceBuy  =  AccountBalance(),
            BalanceSell =  AccountBalance();
   
   while(true)
      {
      if (!OrderSelect(k,SELECT_BY_POS,MODE_HISTORY)) break;
      if ((OrderOpenTime()<TimeB || totb==0) && (OrderOpenTime()<TimeS || tots==0)) break;
      if (OrderSymbol()==Symbol())
         {
         if (OrderMagicNumber()==magicbuy  && OrderType()==OP_BUY  && OrderOpenTime()>TimeB) ProfitBuyN  += OrderProfit()+OrderSwap()+OrderCommission();
         if (OrderMagicNumber()==magicsell && OrderType()==OP_SELL && OrderOpenTime()>TimeS) ProfitSellN += OrderProfit()+OrderSwap()+OrderCommission();
         }
      k--;
      }
   BalanceBuy  -= ProfitBuyN;
   BalanceSell -= ProfitSellN;

   double   ProfitBuy   =  NormalizeDouble(ProfitBuyN / BalanceBuy*100,1),
            ProfitSell  =  NormalizeDouble(ProfitSellN/BalanceSell*100,1);
   }
//===================================================  ìîäóëü Ðàñ÷åòà ÒåéêÏðîôèòà äëÿ îáîèõ ñåðèé  ==================================================

   double tpb,tps,ztpb,ztps,LOtpb,LOtps;
   double mtpb=0,mtps=0,LO_mtpb=0,LO_mtps=0;
   color  ctpb=0,ctps=0,cLO_mtps=0,cLO_mtpb=0;
   
//--------------------------------- Äëÿ ñåðèè BUY ---------------------------------------
   if (hb!=totb || (NotFast && (ObjectFind("BuyTP")<0  || ObjectFind("BuyZeroLevel")<0  || (ObjectFind("BuyLOT")<0  && LOT && totb>=nOrder))))
      {
      if (NotFast) 
         {
         ObjectDelete("BuyTP"); ObjectDelete("BuyLOT"); ObjectDelete("BuyZeroLevel"); 
         ObjectDelete("BuyTP_Back"); ObjectDelete("BuyTP_Text");
         }
      hb=totb;
      if (totb>0)
         {
         ztpb = NormalizeDouble(Bid,Digits)-NormalizeDouble((profitbuy/(smbuy*TV))*Point,Digits);
         if (CurrencyProfit) 
            {
            double PrPB=BalanceBuy*Profit/100;
            tpb = ztpb+ NormalizeDouble(PrPB/(smbuy*TV)*Point,Digits);
            }
         else tpb = ztpb+TPbuy*Point;
      
         if (LOT && totb>=nOrder) 
            {
            LOtpb = NormalizeDouble(Bid+((-LastOrdersBuyProfit)/(LastOrdersBuyLots*TV)+(LO_TP+TPstep*(totb-1)))*Point,Digits);
            if (NotFast) DrawLine("BuyLOT",LOtpb,BuyColor,3); else {vLO_mtpb=LOtpb; vcLO_mtpb=BuyColor;}
            }
         
         if (NotFast)
            {
            DrawLine("BuyTP",tpb,BuyColor,2);
            DrawLine("BuyZeroLevel",ztpb,BuyColor,0);
            }
         else {vctpb=BuyColor;vmtpb=tpb;}
         }
      }
//--------------------------------- Äëÿ ñåðèè SELL --------------------------------------
   if (hs!=tots || (NotFast && (ObjectFind("SellTP")<0 || ObjectFind("SellZeroLevel")<0 || (ObjectFind("SellLOT")<0 && LOT && tots>=nOrder))))
      {
      if (NotFast) 
         {
         ObjectDelete("SellTP"); ObjectDelete("SellLOT"); ObjectDelete("SellZeroLevel"); 
         ObjectDelete("SellTP_Back"); ObjectDelete("SellTP_Text");
         }
      hs=tots;
      if (tots>0)
         {
         ztps = NormalizeDouble(Ask,Digits)+NormalizeDouble((profitsell/(smsell*TV))*Point,Digits);
         if (CurrencyProfit) 
            {
            double PrPS=BalanceSell*Profit/100;
            tps = ztps-NormalizeDouble(PrPS/(smsell*TV)*Point,Digits);
            }
         else tps = ztps-TPsell*Point;
      
         if (LOT && tots>=nOrder) 
            {
            LOtps = NormalizeDouble(Ask-((-LastOrdersSellProfit)/(LastOrdersSellLots*TV)+(LO_TP+TPstep*(tots-1)))*Point,Digits);
            if (NotFast) DrawLine("SellLOT",LOtps,SellColor,3); else {vLO_mtps=LOtps; vcLO_mtps=SellColor;}
            }
         
         if (NotFast)
            {
            DrawLine("SellTP",tps, SellColor,2);
            DrawLine("SellZeroLevel",ztps, SellColor,0);
            }
         else {vctps=SellColor;vmtps=tps;}
         }
      }
//----------------------- Îïðåäåëÿåì öåíó è öâåò ëèíèé ÒÏ è LOT -------------------------
   if (NotFast && ObjectFind("BuyTP")==0) 
      {
      mtpb = ObjectGet("BuyTP",OBJPROP_PRICE1); 
      ctpb = ObjectGet("BuyTP",OBJPROP_COLOR);
      ztpb = ObjectGet("BuyZeroLevel",OBJPROP_PRICE1);
      double  ptpb=(mtpb-Bid)/Point*smbuy*TV+profitbuy;
      double pptpb=(mtpb-ztpb)/Point;
      TextT("BuyTP_Back", "gggggggggg", mtpb, "Webdings", ctpb);
      TextT("BuyTP_Text", DoubleToStr(ptpb,2)+" / "+DoubleToStr(pptpb,0), mtpb, "Arial Black", Black);
      }
   else {mtpb = vmtpb;ctpb = vctpb;}
   
   if (NotFast && ObjectFind("SellTP")== 0) 
      {
      mtps = ObjectGet("SellTP",OBJPROP_PRICE1);
      ctps = ObjectGet("SellTP",OBJPROP_COLOR);
      ztps = ObjectGet("SellZeroLevel",OBJPROP_PRICE1);
      double  ptps=(Ask-mtps)/Point*smsell*TV+profitsell;
      double pptps=(ztps-mtps)/Point;
      TextT("SellTP_Back","gggggggggg", mtps, "Webdings", ctps);
      TextT("SellTP_Text",DoubleToStr(ptps,2)+" / "+DoubleToStr(pptps,0), mtps, "Arial Black", Black);
      }
   else {mtps = vmtps;ctps = vctps;}
   
   if (NotFast && ObjectFind("BuyLOT")== 0) 
      {
      LO_mtpb = ObjectGet("BuyLOT",  OBJPROP_PRICE1); 
      cLO_mtpb = ObjectGet("BuyLOT",  OBJPROP_COLOR);
      }
   else {LO_mtpb = vLO_mtpb; cLO_mtpb = vcLO_mtpb;}
   
   if (NotFast && ObjectFind("SellLOT")==0) 
      {
      LO_mtps = ObjectGet("SellLOT", OBJPROP_PRICE1); 
      cLO_mtps = ObjectGet("SellLOT", OBJPROP_COLOR);
      }
   else {LO_mtps = vLO_mtps; cLO_mtps = vcLO_mtps;}
//===================================================================  Òðàë VTP  ====================================================================
if (UseVTP)                                                       
   {
   if (totb>0)
      {
      if (ctpb==TralColor)
         {
         if (Bid<=mtpb) {closeBUYorders(); return(0);}
         if (mtpb<(Bid-tral*Point)) 
            {
            if (NotFast) DrawLine("BuyTP" ,Bid-tral*Point, TralColor, 2);
            else vmtpb=Bid-tral*Point;
            }
         }
      if (ctpb!=TralColor && Bid>=mtpb+Tral_Start*Point) 
         {
         if (NotFast) DrawLine("BuyTP" ,Bid-Tral_Start*Point, TralColor, 2);
         else {vctpb=TralColor;}
         }
      }
//-----------------------------------------------------------------------------------------------------
   if (tots>0)
      {
      if (ctps==TralColor)
         {
         if (Ask>=mtps) {closeSELLorders(); return(0);}
         if (mtps>(Ask+tral*Point)) 
            {
            if (NotFast) DrawLine("SellTP",Ask+tral*Point, TralColor, 2);
            else vmtps=Ask+tral*Point;
            }
         }
      if (ctps!=TralColor && Ask<=mtps-Tral_Start*Point) 
         {
         if (NotFast) DrawLine("SellTP",Ask+Tral_Start*Point, TralColor, 2);
         else {vctps=TralColor;}
         }
      }
   }
//=====================================================  Ìîäèôèêàöèÿ îðäåðîâ ïðè âûêëþ÷åííîì VTP ====================================================
else
   {
   bool q=false;
//-----------------------------------------------------------------------------------------------------
   if (totb>0 && MathAbs((TPB-NormalizeDouble(mtpb,Digits))/Point)>CU && MathAbs((Bid-NormalizeDouble(mtpb,Digits))/Point)>spread)
      {
      for(i=0;i<totb;i++)
         {
         OrderSelect(TicketB[i],SELECT_BY_TICKET);
         while(!q) 
            {
            q=OrderModify(OrderTicket(),OrderOpenPrice(),0,NormalizeDouble(mtpb,Digits),0); 
            Sleep(1000);
            }
         q=false;
         }
      }
//-----------------------------------------------------------------------------------------------------
   if (tots>0 && MathAbs((TPS-NormalizeDouble(mtps,Digits))/Point)>CU && MathAbs((Ask-NormalizeDouble(mtps,Digits))/Point)>spread)
      {
      for(i=0;i<tots;i++)
         {
         OrderSelect(TicketS[i],SELECT_BY_TICKET);
         while(!q) 
            {
            q=OrderModify(OrderTicket(),OrderOpenPrice(),0,NormalizeDouble(mtps,Digits),0); 
            Sleep(1000);
            }
         q=false;
         }
      }
   }
//===================================================================  Òðàë LOT  ====================================================================
if (LOT)                                                       
   {
   if (totb>=nOrder)
      {
      if (cLO_mtpb==LOTColor)
         {
         if (Bid<=LO_mtpb && MathAbs((Bid-mtpb)/Point)>spread) {CloseLastOrdersBuy(); return(0);}
         if (LO_mtpb<(Bid-LO_tral*Point)) 
            {
            if (NotFast) DrawLine("BuyLOT" ,Bid-LO_tral*Point, LOTColor, 3);
            else vLO_mtpb=Bid-LO_tral*Point;
            }
         }
      if (cLO_mtpb!=LOTColor && Bid>=LO_mtpb+LO_Tral_Start*Point) 
         {
         if (NotFast) DrawLine("BuyLOT" ,Bid-LO_Tral_Start*Point, LOTColor, 3);
         else vcLO_mtpb=LOTColor;
         }
      }
//--------------------------------------------------------------------------------------------------------------------------------
   if (tots>=nOrder)
      {
      if (cLO_mtps==LOTColor)
         {
         if (Ask>=LO_mtps && MathAbs((Ask-mtps)/Point)>spread) {CloseLastOrdersSell(); return(0);}
         if (LO_mtps>(Ask+LO_tral*Point)) 
            {
            if (NotFast) DrawLine("SellLOT",Ask+LO_tral*Point, LOTColor, 3);
            else vLO_mtps=Ask+LO_tral*Point;
            }
         }
      if (cLO_mtps!=LOTColor && Ask<=LO_mtps-LO_Tral_Start*Point) 
         {
         if (NotFast) DrawLine("SellLOT",Ask+LO_Tral_Start*Point, LOTColor, 3);
         else vcLO_mtps=LOTColor;
         }
      }
   }
//===================================================================================================================================================
if (profitbuy+profitsell<0) double dd=MathAbs(profitbuy+profitsell)/(AccountEquity()-(profitbuy+profitsell))*100;
if (DrawdownStop && dd>=SL_Level && (profitbuy+profitsell)<0) 
   {
   if (totb>0) closeBUYorders(); 
   if (tots>0) closeSELLorders();
   }

   if (LOT && (ProfitBuyN + profitbuy)>=BalanceBuy *ProfitPercent/100)  closeBUYorders();
   if (LOT && (ProfitSellN+profitsell)>=BalanceSell*ProfitPercent/100)  closeSELLorders();
//=======================================================  Âèçóàëèçàöèÿ èíôîðìàöèè  =================================================================
if(NotFast)
   {

//-------------------------------  Óäàëåíèå óñòàðâåøèõ îáúåêòîâ  ----------------------------------
   for (int i=ObjectsTotal()-1;i>=0;i--)
      {
      string ObName=ObjectName(i);
      if (ObjectGet(ObName,OBJPROP_TIME1)>0 && ObjectGet(ObName,OBJPROP_TIME1)<(Time[0]-DaysBuffer*86400)) 
         {
         if (ObName!="SellTP" && 
             ObName!="SellLOT" && 
             ObName!="SellZeroLevel" && 
             ObName!="SellTP_Back" && 
             ObName!="SellTP_Text" && 
             ObName!="BuyTP" && 
             ObName!="BuyZeroLevel" && 
             ObName!="BuyTP_Back" && 
             ObName!="BuyTP_Text" && 
             ObName!="BuyLOT")     ObjectDelete(ObName);
         }
      }
//---------------------------  Îòîáðàæåíèå Áàëàíñ/Ñðåäñòâà/Ïðîñàäêà  ------------------------------
   if(Info)
      { //èçìåíåíèå öâåòà ïðè óìåíüøåíèè "ÑÐÅÄÑÒÂÀ" îòíîñèòåëüíî "ÁÀËÀÍÑ"
      int Balans = NormalizeDouble( AccountBalance(),0);
      int Sredstva = NormalizeDouble(AccountEquity(),0);  
      if (Sredstva >= Balans/6*5) col = DodgerBlue; 
      if (Sredstva >= Balans/6*4 && Sredstva < Balans/6*5)col = DeepSkyBlue;
      if (Sredstva >= Balans/6*3 && Sredstva < Balans/6*4)col = Gold;
      if (Sredstva >= Balans/6*2 && Sredstva < Balans/6*3)col = OrangeRed;
      if (Sredstva >= Balans/6   && Sredstva < Balans/6*2)col = Crimson;
      if (Sredstva <  Balans/5                           )col = Red;
      //------------------------- 
      ObjectCreate("Lable1",OBJ_LABEL,0,0,1.0);
         ObjectSet("Lable1", OBJPROP_CORNER, 3);
         ObjectSet("Lable1", OBJPROP_XDISTANCE, 10);
         ObjectSet("Lable1", OBJPROP_YDISTANCE, 51);
         txt1=(DoubleToStr(AccountBalance(), 0));
         ObjectSetText("Lable1","ÁÀËÀÍÑ     "+txt1+"",12,"Times New Roman",DodgerBlue);
         //-------------------------   
      ObjectCreate("Lable2",OBJ_LABEL,0,0,1.0);
         ObjectSet("Lable2", OBJPROP_CORNER, 3);
         ObjectSet("Lable2", OBJPROP_XDISTANCE, 10);
         ObjectSet("Lable2", OBJPROP_YDISTANCE, 31);
         txt2=(DoubleToStr(AccountEquity(), 0));
         ObjectSetText("Lable2","ÑÐÅÄÑÒÂÀ     "+txt2+"",12,"Times New Roman",col);
         //-------------------------   
      ObjectCreate("Lable3",OBJ_LABEL,0,0,1.0);
         ObjectSet("Lable3", OBJPROP_CORNER, 3);
         ObjectSet("Lable3", OBJPROP_XDISTANCE, 10);
         ObjectSet("Lable3", OBJPROP_YDISTANCE, 11);
         txt4=DoubleToStr(dd,1)+"%";
         ObjectSetText("Lable3","ÏÐÎÑÀÄÊÀ     "+txt4+"",12,"Times New Roman",Green);
//----------------------------------  Îòîáðàæåíèå èíôîïàíåëåé  ------------------------------------
      string spips; 
      int pips;
      double stopout_balance=AccountMargin()*AccountStopoutLevel()/100;
      if (MathAbs(smbuy-smsell)>0) pips=NormalizeDouble((AccountEquity()-stopout_balance)/MathAbs(smbuy-smsell)/TV,0);
      if (smbuy>smsell) spips="Äî ñëèâà "+pips+" ïóíêòîâ âíèç";
      if (smbuy<smsell) spips="Äî ñëèâà "+pips+" ïóíêòîâ ââåðõ";
      if (smbuy==smsell) {if (smbuy==0) spips="Íåò îðäåðîâ"; else spips="Ëîê";}
      if (UseVTP) txtVTP="Ðåæèì VTP âêë. "; 
             else txtVTP="Ðåæèì VTP âûêë.";
      if (LOT)    txtLOT="Ðåæèì LOT âêë. "; 
             else txtLOT="Ðåæèì LOT âûêë.";
  
      int x1,y1,x2,y2,x3,y3;
      if (ObjectFind("y_MainInfoBack1")==-1) Text("y_MainInfoBack1","gggg",58,"Webdings",0,0,MainInfoBack);
      if (ObjectFind("y_MainInfoBack2")==-1) Text("y_MainInfoBack2","gggg",58,"Webdings",320,0,BuyInfoBack);
      if (ObjectFind("y_MainInfoBack3")==-1) Text("y_MainInfoBack3","gggg",58,"Webdings",640,0,SellInfoBack);

      x1 =ObjectGet("y_MainInfoBack1",OBJPROP_XDISTANCE);
      y1 =ObjectGet("y_MainInfoBack1",OBJPROP_YDISTANCE);
      x2 =ObjectGet("y_MainInfoBack2",OBJPROP_XDISTANCE);
      y2 =ObjectGet("y_MainInfoBack2",OBJPROP_YDISTANCE);
      x3 =ObjectGet("y_MainInfoBack3",OBJPROP_XDISTANCE);
      y3 =ObjectGet("y_MainInfoBack3",OBJPROP_YDISTANCE);
   
      Text("z_MainInfo_1",txtVTP,9,"Arial Black",x1+20,y1+6,MainInfo);
      Text("z_MainInfo_2",txtLOT,9,"Arial Black",x1+165,y1+6,MainInfo);
      Text("z_MainInfo_3","ìèí.ëîò:  "+DoubleToStr(minLot,2),9,"Arial Black",x1+20,y1+21,MainInfo);
      Text("z_MainInfo_4","ìàêñ.ëîò:  "+DoubleToStr(maxLot,0),9,"Arial Black",x1+165,y1+21,MainInfo);
      Text("z_MainInfo_5","ñïðåä:  "+DoubleToStr(spread,0)+"ï",9,"Arial Black",x1+20,y1+36,MainInfo);
      Text("z_MainInfo_6","ïëå÷î:  1:"+DoubleToStr(AccountLeverage(),0),9,"Arial Black",x1+165,y1+36,MainInfo);
      Text("z_MainInfo_7",spips,9,"Arial Black",x1+20,y1+51,MainInfo);
   
      Text("z_BuyInfo_1","BUY",9,"Arial Black",x2+130,y2+6,BuyInfo);
      Text("z_BuyInfo_2","Îðäåðîâ:  "+DoubleToStr(totb,0),9,"Arial Black",x2+20,y2+21,BuyInfo);
      Text("z_BuyInfo_3","Îáúåì:  "+DoubleToStr(smbuy,2),9,"Arial Black",x2+165,y2+21,BuyInfo);
      Text("z_BuyInfo_4","Óð.TP:  "+DoubleToStr(mtpb,Digits),9,"Arial Black",x2+20,y2+36,BuyInfo);
      Text("z_BuyInfo_5","Óð.LOTP:  "+DoubleToStr(LO_mtpb,Digits),9,"Arial Black",x2+165,y2+36,BuyInfo);
      Text("z_BuyInfo_6","Ïðîôèò:  "+DoubleToStr(profitbuy,2),9,"Arial Black",x2+20,y2+51,BuyInfo);
      if (LOT) Text("z_BuyInfo_7","Íàê.ïðîôèò:  "+DoubleToStr(ProfitBuy,1)+"%",9,"Arial Black",x2+165,y2+51,BuyInfo);
   
      Text("z_SellInfo_1","SELL",9,"Arial Black",x3+125,y3+6,SellInfo);
      Text("z_SellInfo_2","Îðäåðîâ:  "+DoubleToStr(tots,0),9,"Arial Black",x3+20,y3+21,SellInfo);
      Text("z_SellInfo_3","Îáúåì:  "+DoubleToStr(smsell,2),9,"Arial Black",x3+165,y3+21,SellInfo);
      Text("z_SellInfo_4","Óð.TP:  "+DoubleToStr(mtps,Digits),9,"Arial Black",x3+20,y3+36,SellInfo);
      Text("z_SellInfo_5","Óð.LOTP:  "+DoubleToStr(LO_mtps,Digits),9,"Arial Black",x3+165,y3+36,SellInfo);
      Text("z_SellInfo_6","Ïðîôèò:  "+DoubleToStr(profitsell,2),9,"Arial Black",x3+20,y3+51,SellInfo);
      if (LOT) Text("z_SellInfo_7","Íàê.ïðîôèò:  "+DoubleToStr(ProfitSell,1)+"%",9,"Arial Black",x3+165,y3+51,SellInfo);
      }
   }

//============================================================  Óñðåäíåíèå ïîçèöèé BUY  =============================================================
   if(totb>0)
      {
      if ((UseNewBar && NewBar_B!=Time[0]) || !UseNewBar)
         { 
         if(Ask<=openpricebuy-MathFloor(step*MathPow(Step_coef,totb-1))*Point && totb<MaxTrades)
            {
            double lotsbuy2=lastlotbuy*mult; 
            NewBar_B=Time[0];
            if (AccountFreeMarginCheck(Symbol(),OP_BUY,lotsbuy2)>0) ÎòêðûòüÎðäåð(OP_BUY,lotsbuy2,totb+1+"-é îðäåð Buy, "+magicbuy,magicbuy);
            }
         }
      }
//============================================================  Óñðåäíåíèå ïîçèöèé SELL  ============================================================
   if(tots>0)
      {
      if ((UseNewBar && NewBar_S!=Time[0]) || !UseNewBar) 
         {
         if(Bid>=openpricesell+MathFloor(step*MathPow(Step_coef,tots-1))*Point && tots<MaxTrades)
            {
            double lotssell2=lastlotsell*mult; 
            NewBar_S=Time[0];
            if (AccountFreeMarginCheck(Symbol(),OP_SELL,lotssell2)>0) ÎòêðûòüÎðäåð(OP_SELL,lotssell2,tots+1+"-é îðäåð Sell, "+magicsell,magicsell);
            }
         }
      }
//=======================================================  Îòêðûòèå 1-ãî îðäåðà ïî èíäèêàòîðó  ======================================================
   if(time() && totb==0) if ((UseNewBar && NewBar_B!=iTime(Symbol(),StochTime,0)) || !UseNewBar)
      { 
      if (!ManualTrade && Stochastic("buy"))
         {
         if (UseMM) 
            {
            double lotsbuy=MM(mult,UseMoney,MaxTrades,step);
            if (lotsbuy<minLot) {TradeStop(); return(0);}
            }
         else lotsbuy=min_lot;
         if (AccountFreeMarginCheck(Symbol(),OP_BUY,lotsbuy)>0) ÎòêðûòüÎðäåð(OP_BUY,lotsbuy,"1-é îðäåð Buy, "+magicbuy,magicbuy);
         }
      }
//----------------------------------------------------------------------------------------------------------------------
   if(time() && tots==0) if ((UseNewBar && NewBar_S!=iTime(Symbol(),StochTime,0)) || !UseNewBar)
      {
      if (!ManualTrade && Stochastic("sell"))
         {
         if (UseMM) 
            {
            double lotssell=MM(mult,UseMoney,MaxTrades,step);
            if (lotssell<minLot) {TradeStop(); return(0);}
            }
         else lotssell=min_lot;
         if (AccountFreeMarginCheck(Symbol(),OP_SELL,lotssell)>0) ÎòêðûòüÎðäåð(OP_SELL,lotssell,"1-é îðäåð Sell, "+magicsell,magicsell);
         }
      }
//===================================================================================================================================================
return(0);
}  



//===================================================================== Ô Ó Í Ê Ö È È ===============================================================
                                bool time()
 {
   if (StartHour<EndHour) 
      {if (Hour()>=StartHour && Hour()<EndHour) return(true); else return(false);}
   if (StartHour>EndHour) 
      {if (Hour()>=EndHour && Hour()<StartHour) return(false); else return(true);}
 }
//===================================================================================================================================================
                                 bool Stochastic (string SMode)
{
   double sM0 = iStochastic(Symbol(),StochTime,per_K,per_D,slow,S_Mode,S_Price,MODE_MAIN,  0);
   double sM1 = iStochastic(Symbol(),StochTime,per_K,per_D,slow,S_Mode,S_Price,MODE_MAIN,  1);
   double sS0 = iStochastic(Symbol(),StochTime,per_K,per_D,slow,S_Mode,S_Price,MODE_SIGNAL,0);
   double sS1 = iStochastic(Symbol(),StochTime,per_K,per_D,slow,S_Mode,S_Price,MODE_SIGNAL,1);
   if (SMode=="buy"  && sS0<zoneBUY  && sM0<zoneBUY  && sM1<sS1 && sM0>=sS0) return(true);
   if (SMode=="sell" && sS0>zoneSELL && sM0>zoneSELL && sM1>sS1 && sM0<=sS0) return(true);
   return(false);
}
//===================================================================================================================================================
                                    void closeBUYorders()
{
   int i,t,j;
   bool q;
   
   if (CloseBy && !IsTesting())
      {
      while (ÎòêðûòüÎðäåð(OP_SELL, smbuy, "", magiclock)<=0) Sleep(1000);
      for(i=0;i<totb;i++)
         {
         t=0;
         for(j=OrdersTotal()-1;j>=0;j--)
            {
            if (OrderSelect(j,SELECT_BY_POS, MODE_TRADES)) 
               {
               if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber()==magiclock) {t=OrderTicket(); break;}
               }
            }
         q=false;
         while(!q)
            {
            RefreshRates();
            q=OrderCloseBy(TicketB[i],t,BuyColor);
            Sleep(1000);
            }
         }
      }
   else
      {
      for(i=0;i<totb;i++)
         {
         if(OrderSelect(TicketB[i],SELECT_BY_TICKET))
            {
            q=false;
            while(!q)
               {
               RefreshRates();
               q=OrderClose(TicketB[i],OrderLots(),NormalizeDouble(Bid,Digits),slippage,BuyColor);
               Sleep(1000);
               }
            }
         }
      }
}
//===================================================================================================================================================
                                    void closeSELLorders()
{
   int i,t,j;
   bool q;
   if (CloseBy && !IsTesting())
      {
      while (ÎòêðûòüÎðäåð(OP_BUY, smsell, "", magiclock)<=0) Sleep(1000);
      for(i=0;i<tots;i++)
         {
         t=0;
         for(j=OrdersTotal()-1;j>=0;j--)
            {
            if (OrderSelect(j,SELECT_BY_POS, MODE_TRADES)) 
               {
               if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber()==magiclock) {t=OrderTicket(); break;}
               }
            }
         q=false;
         while(!q)
            {
            RefreshRates();
            q=OrderCloseBy(TicketS[i],t,SellColor);
            Sleep(1000);
            }
         }
      }
   else
      {
      for(i=0;i<tots;i++)
         {
         if(OrderSelect(TicketS[i],SELECT_BY_TICKET))
            {
            q=false;
            while(!q)
               {
               RefreshRates();
               q=OrderClose(TicketS[i],OrderLots(),NormalizeDouble(Ask,Digits),slippage,SellColor);
               Sleep(1000);
               }
            }
         }
      }
}
//===================================================================================================================================================
                                    void CloseLastOrdersBuy()
{
   int i;
   bool q;
   
   for(i=0;i<2;i++)
      {
      if(OrderSelect(TicketB[i],SELECT_BY_TICKET))
         {
         q=false;
         while(!q)
            {
            RefreshRates();
            q=OrderClose(TicketB[i],OrderLots(),NormalizeDouble(Bid,Digits),slippage,BuyColor);
            Sleep(1000);
            }
         }
      }
}
//===================================================================================================================================================
                                    void CloseLastOrdersSell()
{
   int i;
   bool q;
   for(i=0;i<2;i++)
      {
      if(OrderSelect(TicketS[i],SELECT_BY_TICKET))
         {
         q=false;
         while(!q)
            {
            RefreshRates();
            q=OrderClose(TicketS[i],OrderLots(),NormalizeDouble(Ask,Digits),slippage,SellColor);
            Sleep(1000);
            }
         }
      }
}
//===================================================================================================================================================
//=========================================================================================================================================//
// Kordan . Ôóíêöèÿ ðàñ÷åòà òåêóùåãî ñîñòîÿíèÿ ïî îòêðûòûì îðäåðàì                                                                         //
//=========================================================================================================================================// 

double CurrentCondition(string OrdType, string inf){
int    Pos   =0;
double result=0,Count=0,AveragePrice=0,profit=0;
double LastPriceBuy,LastPriceSell,ProfitBuy,ProfitSell,SumProfit;
   for (int cnt=0;cnt<OrdersTotal();cnt++){
      if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)){
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == magicbuy || magicsell || MagicCheck()){
            if (OrderType()== OP_SELL || OrderType() == OP_BUY){ 
                         
               if (inf == "Lpos"){
               profit = OrderProfit()                                ;
               Pos    = OrderTicket()                                ;
               
                  if (profit>0 && profit>Lprofit) {                 
                  Lprofit1 = Lprofit                                 ;
                  Lpos1    = Lpos                                    ; 
                  Lprofit = profit                                   ; //ìàêñ çíà÷åíèå
                  Lpos    = Pos                                      ;
                  }
                  
                  if (profit<0 && profit<Cprofit) {
                  Cprofit = profit                                   ; //ìèí  çíà÷åíèå
                  Cpos    = Pos                                      ;
                  }
              } 
                    
            SumProfit += OrderProfit()+OrderSwap()+OrderCommission() ;
               if (inf=="CurrentDrawdown" ) 
                  result = MathMax((AccountBalance()+AccountCredit()-AccountEquity())/(AccountBalance()+AccountCredit())*100,0);
               if (inf=="CurrentUrov" && AccountMargin()>0) 
                  result =AccountEquity()/AccountMargin()*100        ;     
               if (inf=="TotalOrd"        )  result++                ;
               
               if (OrdType == "Buy"){
                  if(OrderType()==OP_BUY){ 
                     if (inf=="TotalBuy"  )  result++                         ; 
                     if (inf=="LastLotBuy")  result  = OrderLots()            ;
                     if (inf=="SumLotBuy" )  result += OrderLots()            ;
                     AveragePrice += OrderOpenPrice()* OrderLots()            ;
                     Count        += OrderLots()                              ;
                     LastPriceBuy  = OrderOpenPrice()                         ;
                     ProfitBuy += OrderProfit()+OrderSwap()+OrderCommission() ;
                        if(AveragePrice > 0 && Count > 0){
                           if (inf=="CalculateAveragePriceBuy" )  return(NormalizeDouble(AveragePrice/Count, Digits));   
                        }     else return(0);
                  }
               }   
               
               if (OrdType == "Sell"){       
                  if (OrderType()==OP_SELL){                                                  
                     if (inf=="TotalSell"  )  result++                        ;                                                                   
                     if (inf=="LastLotSell")  result  = OrderLots()           ;                           
                     if (inf=="SumLotSell" )  result += OrderLots()           ;
                     AveragePrice  += OrderOpenPrice()* OrderLots()           ;
                     Count         += OrderLots()                             ;
                     LastPriceSell  = OrderOpenPrice()                        ;                                                                             
                     ProfitSell += OrderProfit()+OrderSwap()+OrderCommission();  
                        if(AveragePrice > 0 && Count > 0){  
                           if (inf=="CalculateAveragePriceSell")  return(NormalizeDouble(AveragePrice/Count, Digits));
                        }     else return(0);                
                  }
               }
            }
         }
      }   
   } 
 
if (inf=="Lpos")           return(Lpos)                                    ;  //Îðäåð ñ íàèáîëüøèì ïðîôèòîì  
if (inf=="Cpos")           return(Cpos)                                    ;  //Îðäåð ñ íàèìåíüøèì ïðîôèòîì 
if (inf=="LastPriceBuy" )  return(NormalizeDouble(LastPriceBuy , Digits))  ;
if (inf=="LastPriceSell")  return(NormalizeDouble(LastPriceSell, Digits))  ;        
if (inf=="ProfitBuy"    )  return(NormalizeDouble(ProfitBuy    ,      2))  ;        
if (inf=="ProfitSell"   )  return(NormalizeDouble(ProfitSell   ,      2))  ;                                                                                                  
if (inf=="SumProfit"    )  return(NormalizeDouble(SumProfit    ,      2))  ;
return(result)                                                             ;
}

//=========================================================================================================================================//
// shvonder . Ïåðåêðûòèå îðäåðîâ                                                                                                           //
//=========================================================================================================================================//

void CheckOverlapping(int totbuy, int totsell){
Lpos = 0; Cpos = 0; Lprofit = 0; Cprofit = 0;

Lpos = CurrentCondition("","Lpos");
Cpos = CurrentCondition("","Cpos");

      if (totbuy +totsell >= LeadingOrder){
        if(Lprofit > 0 && Lprofit1 <= 0 && Cprofit < 0){
          if(Lprofit + Cprofit > 0 && (Lprofit + Cprofit)*100/Lprofit > ProfitPersent){
            Lpos1 = 0;
              CloseSelectOrder(); 
         }
      }else
           if(Lprofit > 0 && Lprofit1 > 0 && totbuy +totsell > LeadingOrder && Cprofit < 0 ){
             if(Lprofit + Lprofit1 + Cprofit > 0 && (Lprofit + Lprofit1 + Cprofit)*100/(Lprofit + Lprofit1) > SecondProfitPersent) 
             CloseSelectOrder();
         } 
      }
   }
//=========================================================================================================================================//
// shvonder . Ïåðåêðûòèå îðäåðîâ                                                                                                           //
//=========================================================================================================================================//

int CloseSelectOrder(){
if (Info) Print("Ôóíêöèÿ ïåðåêðûòèÿ îðäåðîâ.");
   int error =  0;
   int error1 = 0;
   int error2 = 0;
   int Result = 0;
   int Slippage = 2*MarketInfo(Symbol(), MODE_SPREAD);
//                       ---------------------- ïîñëåäíèé  -----------------------                            
       
   while (error1 == 0) {
      RefreshRates();
         int i = OrderSelect(Lpos, SELECT_BY_TICKET, MODE_TRADES);
            if (i != 1){
               Print ("Îøèáêà! Íåâîçìîæíî âûáðàòü îðäåð ñ íàèáîëüøèì ïðîôèòîì. Âûïîëíåíèå ïåðåêðûòèÿ îòìåíåíî.");
                  return (0);
            }  
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == magicbuy || magicsell || MagicCheck()){
               if (OrderType() == OP_BUY) {
                  error1 =  (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Blue));
                  if (error1 == 1) {
                     if (Info) Print ("Ëèäèðóþùèé îðäåð çàêðûò óñïåøíî."); 
                     Sleep (500);   
                  } else {
                     Print ("Îøèáêà çàêðûòèÿ ëèäèðóþùåãî îðäåðà, ïîâòîðÿåì îïåðàöèþ. ");                     
                  }      
               } 
//                        -----------------------------------------------------               
                  if (OrderType() == OP_SELL) {
                  error1 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Red));
                  if (error1 == 1) {
                     if (Info) Print ("Ëèäèðóþùèé îðäåð çàêðûò óñïåøíî"); 
                     Sleep (500);   
                  } else {
                     Print ("Îøèáêà çàêðûòèÿ ëèäèðóþùåãî îðäåðà, ïîâòîðÿåì îïåðàöèþ. ");                     
                  }
               }
            } 
      }

//                       ---------------------- ïðåä ïîñëåäíèé  -----------------------                            
   if(Lpos1 != 0){
      while (error2 == 0) {
         RefreshRates();
            i = OrderSelect(Lpos1, SELECT_BY_TICKET, MODE_TRADES);
               if  (i != 1 ){
                  Print ("Îøèáêà! Íåâîçìîæíî âûáðàòü ïðåä îðäåð ñ íàèáîëüøèì ïðîôèòîì. Âûïîëíåíèå ïåðåêðûòèÿ îòìåíåíî.");
                  return (0);
               }  
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == magicbuy || magicsell || MagicCheck()){
                  if (OrderType() == OP_BUY){
                  error2 =  (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Blue));
                  if (error2 == 1){
                     if (Info) Print ("Ïðåä Ëèäèðóþùèé îðäåð çàêðûò óñïåøíî."); 
                     Sleep (500);   
                  } else{
                     Print ("Îøèáêà çàêðûòèÿ ïðåä ëèäèðóþùåãî îðäåðà, ïîâòîðÿåì îïåðàöèþ. ");                     
                  }      
               } 
//                        -----------------------------------------------------               
                  if (OrderType() == OP_SELL){
                  error2 = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Red));
                  if (error2 == 1){
                     if (Info) Print ("Ïðåä Ëèäèðóþùèé îðäåð çàêðûò óñïåøíî"); 
                     Sleep (500);   
                  } else {
                     Print ("Îøèáêà çàêðûòèÿ Ïðåä ëèäèðóþùåãî îðäåðà, ïîâòîðÿåì îïåðàöèþ. ");                     
                  }
               }
            } 
      }
      }
//                      ----------- âûáðàííûé (îáû÷íî ñ íàèìåíüøèì ïðîôèòîì ) -----------
   while (error == 0){
      RefreshRates();
         i = OrderSelect(Cpos, SELECT_BY_TICKET, MODE_TRADES);
            if  (i != 1 ){
               Print ("Îøèáêà! Íåâîçìîæíî âûáðàòü îðäåð ñ íàèìåíüøèì ïðîôèòîì. Âûïîëíåíèå ïåðåêðûòèÿ îòìåíåíî.");
               return (0);
            }    
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == magicbuy || magicsell || MagicCheck()){
                  if (OrderType() == OP_BUY){
                  error = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), Slippage, Blue)); 
                  if (error == 1 ){
                     if (Info) Print ("Ïåðåêðûâàåìûé îðäåð çàêðûò óñïåøíî."); 
                     Sleep (500);   
                  } else {
                     Print ("Îøèáêà çàêðûòèÿ ïåðåêðûâàåìîãî îðäåðà, ïîâòîðÿåì îïåðàöèþ. ");                    
                  } 
               }        
//                             --------------------------------------------------                
                  if (OrderType() == OP_SELL){
                  error = (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), Slippage, Red));
                  if (error == 1){
                     if (Info) Print ("Ïåðåêðûâàåìûé îðäåð çàêðûò óñïåøíî."); 
                     Sleep (500);   
                  } else {
                     Print ("Îøèáêà çàêðûòèÿ ïåðåêðûâàåìîãî îðäåðà, ïîâòîðÿåì îïåðàöèþ. ");                     
                  }
               }
            }
      }     
       
   Result = 1;
   return (Result);    
} 
//====================================================================== áëîê ÌÌ ====================================================================
                                    double MM(double mult1, int UM, int MaxTrades1,int step1) 
{
   double trade_vol=1;
   double sum_vol=1;
   double MaxDrawdown;
   double maxLot=MarketInfo(Symbol(),MODE_MAXLOT);
   double minLot=MarketInfo(Symbol(),MODE_MINLOT);
   double margin=MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double    TV1=MarketInfo(Symbol(),MODE_TICKVALUE);
   int cnt2,cnt3;
   double marginsum,points;
      
   for (cnt2=MaxTrades1; cnt2>=1;cnt2--) 
      {
      points=0;
      for (cnt3=MaxTrades1-cnt2; cnt3<MaxTrades1; cnt3++)
         {
         points+=NormalizeDouble(step*MathPow(Step_coef,cnt3),0);
         }
      MaxDrawdown+=trade_vol*points*TV1;                                              // ðàñ÷åò ìàêñèìàëüíîé ïðîñàäêè ïðè îáúåìå 1-ãî îðäåðà â 1.00 ëîò
      sum_vol+=trade_vol;
      trade_vol*=mult1;
      }
   marginsum=margin*sum_vol;
   double depo;
   if (UseEquity) depo=AccountEquity(); else depo=AccountBalance();
   double lot=NormalizeDouble(((depo+AccountCredit())*UM/100)/(MaxDrawdown+marginsum),dig);  // ðàñ÷åò ìàêñèìàëüíîãî îáúåìà äëÿ 1-ãî îðäåðà ñåðèè
   if (lot*sum_vol>maxLot) lot=NormalizeDouble(maxLot/sum_vol,dig);                          // ïðîâåðêà íà ìàêñèìàëüíî âîçìîæíûé îáúåì 1-ãî îðäåðà ñåðèè
   return(lot);
}
//===================================================================================================================================================
                                    void TradeStop()
{
   if (totb+tots>0) return(0);
   int cnt2,cnt3;
   double trade_vol=1,points;
   double sum_vol=1;
   double MaxDrawdown,marginsum;
   double minLot=MarketInfo(Symbol(),MODE_MINLOT);
   double margin=MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double    TV1=MarketInfo(Symbol(),MODE_TICKVALUE);
   
      for (cnt2=MaxTrades; cnt2>=1;cnt2--)
         {
         points=0;
         for (cnt3=MaxTrades-cnt2; cnt3<MaxTrades; cnt3++)
            {
            points+=NormalizeDouble(step*MathPow(Step_coef,cnt3),0);
            }
         MaxDrawdown+=trade_vol*points*TV1;
         sum_vol+=trade_vol;
         trade_vol*=mult;
         }
      marginsum=margin*sum_vol;
   double deposit=minLot*(MaxDrawdown+marginsum)/UseMoney*100;
   tm="Íåäîñòàòî÷íî ñðåäñòâ, íåîáõîäèìî "+deposit+" åä.";
   TradeOff=true;
}
//===================================================================================================================================================
                                    void Text(string name, string text, int size, string font, int xd, int yd, color colT)
{
   int w=WindowFind("2SS"); if (w==-1) w=0;
   if (ObjectFind("y_MainInfoBack1")!=w) ObjectDelete("y_MainInfoBack1");
   if (ObjectFind("y_MainInfoBack2")!=w) ObjectDelete("y_MainInfoBack2");
   if (ObjectFind("y_MainInfoBack3")!=w) ObjectDelete("y_MainInfoBack3");
   if (ObjectFind(name)==0 && w!=0) ObjectDelete(name);
   ObjectCreate(name, OBJ_LABEL, w,0,0);
   ObjectSetText(name, text, size, font);
   ObjectSet(name, OBJPROP_XDISTANCE, xd);
   ObjectSet(name, OBJPROP_YDISTANCE, yd);      
   ObjectSet(name, OBJPROP_COLOR, colT);
   ObjectSet(name, OBJPROP_BACK, false);
}
//===================================================================================================================================================
                                    void TextT(string name, string txt, double y, string sh, color C)
{  
   
   if (ObjectFind(name)<0) ObjectCreate(name,OBJ_TEXT,0,Time[WindowFirstVisibleBar()-ProfitShift], y);
   else ObjectMove(name,0,Time[WindowFirstVisibleBar()-ProfitShift],y);
   ObjectSetText(name,txt,10,sh,C);
}
//===================================================================================================================================================
                                    void DrawLine(string name,double price, color col, int w)
{
   if (ObjectFind(name)<0) ObjectCreate(name,OBJ_HLINE,0,Time[WindowFirstVisibleBar()-ProfitShift],price); 
                      else   ObjectMove(name,0,Time[WindowFirstVisibleBar()-ProfitShift],price);
                              ObjectSet(name,OBJPROP_COLOR,col);
                              ObjectSet(name,OBJPROP_WIDTH,w);
}
//===================================================================================================================================================
                                    int ÎòêðûòüÎðäåð(int òèï, double îáúåì, string êîìåíò, int ìýäæèê)
{
   if (!IsTradeAllowed()) return(0);
   double öåíà;
   color öâåò;
   string îðäåð;
   RefreshRates();
   switch(òèï)
      {
      case OP_BUY :  öåíà=Ask; öâåò=BuyColor; îðäåð="Buy"; break;
      case OP_SELL:  öåíà=Bid; öâåò=SellColor; îðäåð="Sell";
      }
   int t=OrderSend(Symbol(),òèï,NormalizeDouble(îáúåì,2),NormalizeDouble(öåíà,Digits),slippage,0,0,êîìåíò,ìýäæèê,0,öâåò);
   Sleep(1000);
   return(t);
}
//===================================================================================================================================================
                                    bool MagicCheck()
{
   for(int i=0;i<cmagic;i++)
      {
      if (OrderMagicNumber()==magic[i]) return(true);
      }
   return(false);
}

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