zigzahod_v1_0_fix10-Performance-edition-PUBL

Author: Copyright � 2015, Atomar www.mql5.com/ru/users/atomar
Price Data Components
Series array that contains the lowest prices of each barSeries array that contains the highest prices of each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
Miscellaneous
Uses files from the file systemIt writes information to fileIt writes information to fileIt reads information from a fileIt reads information from a file
0 Views
0 Downloads
0 Favorites
zigzahod_v1_0_fix10-Performance-edition-PUBL
//+----------------------------------------------------------------------------+
//|                                 ZigZaHod v1.0 fix8-Performance-edition.mq4 |
//|                                                   Copyright © 2015, Atomar |
//|                                       https://www.mql5.com/ru/users/atomar |
//|                                             Copyright © 2015, ForTorg ZEVs |
//|                                      https://www.mql5.com/ru/users/fortorg |
//+----------------------------------------------------------------------------+
#property copyright "Copyright © 2015, Atomar https://www.mql5.com/ru/users/atomar"
#property link      "https://www.mql5.com/ru/users/atomar"
#property copyright "Copyright © 2015, ForTorg ZEVs https://www.mql5.com/ru/users/fortorg"
#property link      "https://www.mql5.com/ru/users/fortorg"
#property copyright "Copyright © 2015, Atomar www.mql5.com/ru/users/atomar"
#property link      "https://www.mql5.com/ru/users/atomar"

int     BarsFr        = 5;
int     PervFr        = 3;
int     PropCandlFr   = 0;
extern  bool    SigFractal    = true;   //Ðàçðåøåíèå ñèãíàëüíîé ôóíêöèè âûäàâàòü
                                        //ñèãíàë íà îòêðûòèå íîâûõ îðäåðîâ???
extern  int     ABminRazmer   = 100;    //Ìèíèìàëüíûé ðàçìåð AB â ïóíêòàõ
extern  int     ABmaxSize     = 1000;   //Ìàêñèèìàëüíûé ðàçìåð AB â ïóíêòàõ
extern  int     Otstup        = 15;     //Îòñòóï îòëîæåííûõ (ñïðåä) â ïóíêòàõ
extern  double  OtstupProc    = 0.1;    //Îòñòóï îòëîæåííûõ îò íèæíåé è âåðõíåé
                                        //ãðàíèö AB (0.1 == 10 %)
extern  int     MaxOrder      = 10;     //max êîë-âî îðäåðîâ (íå áîëüøå 30,
                                        //îãðàíè÷åíèíî ðàçìåðîì ìàññèâà)
int     MaxOrdersetka = 1;      //Êîëè÷åñòâî îðäåðîâ ñåòêè
int     delta         = 25;     //Ðàññòîÿíèå îò òåêóùåé öåíû
extern  double  KoefProfit    = 1.5;    //Êîåôèöèåíò ïðîôèòà
extern  double  DelKorStopOrder = 0.6;  //Ãëóáèíà êîððåêöèè, ïðè êîòîðîé óáèðàòü
                                        //îòëîæåííûå
extern  bool    OtmerennyiHod = true;   //Îòìåðåííûé õîä
extern  bool    OdnaStor      = true;   //Òîðãîâëÿ â îäíó ñòîðîíó
bool    ObeStor       = false;

extern  bool    SignalDelOldOtl = false;//Óäàëÿåò ïðåäûäóùóþ îòëîæêó ñâîåãî
                                        //íàïðàâëåíèÿ ïðè ñèãíàëå
extern  bool    SignalDelOldOtlAll=false;//Óäàëÿåò ÂÑÅ ñòàðûå îòëîæêè ïðè
                                         //ñèãíàëå?????????
bool    DelBS         = false;
bool    DelSS         = false;

extern  bool    StopLos=false;  //Âûñòàâëÿåò SL çà Â
//------------------------------------------------------------------------------
int     OpBar         = 0;
int     OtkatBar      = 0;
double  Hod           = 0;
double  OtkatCena     = 0;
double  MA,MB,MRazmer,MTime;
//----
int     TfFr,hi,lo;
double  h1,h2,h3,h4,l1,l2,l3,l4;
int     hk1,hk2,hk3,hk4,lk1,lk2,lk3,lk4,kstart;
double  hf,lf;
bool    NewOrder=true;
double  A,B,C,D,Eh,El,AB,E,F,Up,Dn;
int     k=1,i=0,Ak,Bk=0,Ck,Dk,Ek,Fk,Upk,Dnk;
int     SigTfFr=0;
//------------------------------------------------------------------------------
extern  string  Trailing_Stop = "Trailing Stop";
extern  bool    bTrlinloss    = false;  //Ñëåäóåò ëè òðàëèòü íà ó÷àñòêå ëîññîâ
                                        //(ìåæäó êóðñîì ñòîïëîññà è îòêðûòèÿ)
extern  bool    SLSignal      = false;  //Âûñòàâëÿåò SL íà óðîâíå íîâîãî ñèãíàëà
                                        //ïðîòèâîïîëîæíîãî íàïðàâëåíèÿ (åñëè
//"îäíà ñòîðîíà" òî íå ðàáîòàåò)
extern  int     iTmfrm        = 240;    //Ïåðèîä ãðàôèêà, íà êîòîðîì
                                        //îïðåäåëÿþòñÿ ôðàêòàëû èëè òåíè (1, 5,
//15, 30, 60, 240, 1440, 10080, 43200)
extern  int     iIndent       = 50;     //Îòñòóï â ïóíêòàõ îò òåíè áàðà, íà
                                        //êîòîðîì ðàçìåùàåòñÿ ñòîïëîññ
extern  int     Frktl_bars    = 5;      //Êîëè÷åñòâî áàðîâ âî ôðàêòàëå
extern  int     Frktl_kol     = 0;      //Êîëè÷åñòâî ôðàêòàëîâ ïî êîòîðûì
                                        //òðàëèòü
extern  int     Bars_kol      = 19;     //Êîëè÷åñòâî áàðîâ, ïî òåíÿì êîòîðûõ
                                        //ñëåäóåò òðàëèòü
//------------------------------------------------------------------------------
extern  bool    isCloseAllByTargetProfit=FALSE;
extern  double  TargetLoss    = 999999; //Öåëåâîé óáûòîê
extern  double  TargetProfit  = 999999; //Öåëåâàÿ ïðèáûëü
extern  bool    isCloseAllByTargetPoints= FALSE;
extern  int     AllOrdrsSumLossInPoints = 2000;
extern  int     AllOrdrsSumPrftInPoints = 2000;
extern  bool    isProcessingUserOrdrs=FALSE;
extern  int     MagicNumber=515000;

//------------------------------------------------------------------------------
//bool    UseSound      = False;          //Èñïîëüçîâàòü çâóêîâîé ñèãíàë
//string  SoundSuccess  = "ok.wav";       //Çâóê óñïåõà
//string  SoundError    = "timeout.wav";  //Çâóê îøèáêè
//------------------------------------------------------------------------------
//Äâå ðàçäåëÿåìûå ìåæäó äâóìÿ ôóíêöèÿìè òðàëà
int     hTralFr;
int     lTralFr;
//------------------------------------------------------------------------------
int     iTicket;
double  Razmer;
//Äâå ðàçäåëÿåìûå ìåæäó ôóíêöèåé òðàëà TrailingByZ è ñèãíàëüíîé
double  SelSL;
double  BuySL;
//
string  ExpertComment = "test";
int     NumberOfTries = 5;
double  BStp=0,SStp=0,BSsl=0,SSsl=0,BSotl=0,SSotl=0;

double  Mas_Ord_Tek[31][8];     //Îáüÿâëÿåì ìàññèâ òåêóùèõ îðäåðîâ
                                //1-é èíäåêñ - ïîðÿäêîâûé íîìåð îðäåðà
//â ýòîì ìàññèâå
//[0][0]  Êîë-âî îòêðûòûõ îðäåðîâ
//[ ][1]  êóðñ îòêð. îðäåðà   (àáñîëþòíîå çíà÷. êóðñà)
//[ ][2]  StopLoss îðäåðà     (àáñîëþòíîå çíà÷. êóðñà)
//[ ][3]  TakeProfit îðäåðà   (àáñîëþòíîå çíà÷. êóðñà)
//[ ][4]  íîìåð îðäåðà         ticket
//[ ][5]  êîëè÷. ëîòîâ îðäåðà (àáñîëþòíîå çíà÷. êóðñà)
//[ ][6]  òèï îðäåðà 0=B,1=S,2=BL,3=SL,4=BS,5=SS
//[ ][7]  Ìàãè÷åñêîå ÷èñëî îðäåðà  MagicNumber

double  Massiv[31][10];         //Îñíîâíîé ìàññèâ
                                //1-é èíäåêñ - "òèêåò" îðäåðà â ýòîì
//ìàññèâå
//[0][1]  MagicNumber         !!! ñàìûé Íîâûé ìàãèê  !!!
//[0][2]  MinMagicNumber  îòêð. îðäåðîâ(èç áëîêà ñðàâíåíèÿ îðäåðîâ)
//[0][3]  áëèæàéøàÿ ñâîáîäíàÿ ñòðîêà
//[0][5]  ñ÷åò÷èê ñîõðàíåíèé
//Massiv[][1];  //Öåíà A
//Massiv[][2];  //Öåíà B
//Massiv[][3];  //Ðàçìåð ÀB
//Massiv[][5];  //Âðåìÿ  ÀB
//Massiv[][6];  //òàéìôðåéì TfFr

//------------------------------------------------------------------------------
//extern  bool    Commentariy   = true;
//extern  bool    DelHistoryMassiv = true;
bool    DelHistoryMassiv=true;
extern  bool    SaveMassiv=false;

//------------------------------------------------------------------------------
extern  int     sleepMilliSecToDelOrdrs=5000;
int     NumberOfTry=5;      //Êîëè÷åñòâî ïîïûòîê
double  LotB;
double  LotS;
extern  double  Lot=0.01;
int     Kol_B_S;                //Êîëè÷åñòâî îðäåðîâ
extern  bool    LotProiz=false;//;-)
double  Lots;
extern  int     Slippage      = 10;
bool    BuyCondition  = false;
bool    SellCondition = false;
int     Magic;
int     MN;
bool    PauseNews=false;
string  Spread;
//------------------------------------------------------------------------------
color   clCloseBuy    = Blue;   //Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color   clCloseSell   = Red;    //Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
color   clDelete      = Yellow; //Öâåò çíà÷êà óäàëåíèÿ îðäåðà





static  bool    isNeedToDeinit=FALSE;
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
int     init()
  {
   isNeedToDeinit=FALSE;
   if(isCloseAllByTargetProfit && isProcessingUserOrdrs)
     {
      Print("The isProcessingUserOrdrs should be TRUE when isCloseAllByTargetProfit is TRUE.");
      isNeedToDeinit=TRUE;
     }
   if(!isProcessingUserOrdrs && (0>=MagicNumber))
     {
      Print("The MagicNumber should be greater then zero when isProcessingUserOrdrs is FALSE.");
      isNeedToDeinit=TRUE;
     }
   if(isCloseAllByTargetPoints && (0>AllOrdrsSumLossInPoints))
     {
      Print("The AllOrdrsSumLossInPoints should be not less then zero.");
      isNeedToDeinit=TRUE;
     }
   if(isCloseAllByTargetPoints && (0>AllOrdrsSumPrftInPoints))
     {
      Print("The AllOrdrsSumPrftInPoints should be not less then zero.");
      isNeedToDeinit=TRUE;
     }
   if(isNeedToDeinit)
     {
      Print("Expert is not working cause to abnormal settings, printed above!");
      deinit();
      return (0);
     }

   if(SaveMassiv)
      FilesOpen();
   return (0);
  }
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
int     deinit()
  {
   if(SaveMassiv)
      FilesWrite();
   return (0);
  }
//------------------------------------------------------------------------------
//ÑÈÃÍÀËÜÍÀß ÔÓÍÊÖÈß
//------------------------------------------------------------------------------
int     Crossed()
  {
   int     Min_Dist;
   int     Min_Freez;
   Min_Dist=MarketInfo(Symbol(),MODE_STOPLEVEL);
   Min_Freez=MarketInfo(Symbol(),MODE_FREEZELEVEL);
//--------------------------------------------------------------------------
//Íå òîðãîâàòü íà íîâîñòÿõ!!!
//--------------------------------------------------------------------------
   if(PauseNews== true &&(Min_Dist>100|| Min_Freez>100))
      NewOrder = false;
//--------------------------------------------------------------------------
   hi = 0;
   lo = 0;
   A = 0.0;
   B = 0;
   C = 0;
   D = 0;
   E = 0;
   F = 0;
   Up = 0;
   Dn = 0;

   Ak = 0;
   Bk = 0;
   Ck = 0;
   Dk = 0;
   Ek = 0;
   Fk = 0;
   Upk = 0;
   Dnk = 0;

   TfFr=0;
   kstart=PropCandlFr;
//Íàéòè ïî 4-ðå íèæíèõ è âåðõíèõ ôðàêòàëà (çíà÷åíèÿ è ñäâèãè)
   hlFractal();
//Åñëè íà îäíîé è òîé æå ñâå÷å äâà ôðàêòàëà - íåò ñèãíàëà
   if(hk1==lk1 && hk1==PervFr)
      return (0);
//
   if(SigFractal)
     {
      //Åñëè ôðàêòàë òîëüêî-òîëüêî ïîÿâèëñÿ è äî ñèõ ïîð íå áûë ïðîáèò...
      //...òî çàïîìíèòü ñòðóêòóðó ABCD èç 4-õ ïîñëåäíèõ ôðàêòàëîâ
      if((hk1<lk1) && (hk1==PervFr) && (High[1]<High[3] && High[2]<High[3]))
        {
         A = iHigh (Symbol (), TfFr, PervFr);
         B = l1;
         C = h2;
         D = l2;
         Ak = hk1;
         Bk = lk1;
         Ck = hk2;
         Dk = lk2;
        }
      if((lk1<hk1) && (lk1==PervFr) && (Low[1]>Low[3] && Low[2]>Low[3]))
        {
         A = iLow (Symbol (), TfFr, PervFr);
         B = h1;
         C = l2;
         D = h2;
         Ak = lk1;
         Bk = hk1;
         Ck = lk2;
         Dk = hk2;
        }
     }
//Âûÿñíèòü âûñîòó íîâåéøåãî êîëåíà AB â ñòðóêòóðå ABCD
   AB=(A-B)/Point;
   Razmer=AB;
   if(0.0>Razmer)
      Razmer=-Razmer;
//Åñëè ðàçìåð íåäîñòàòî÷íûé, òî íåò ñèãíàëà
   if(Razmer<ABminRazmer)
      return (0);
   if(Razmer>ABmaxSize)
      return (0);
   SelSL = 0.0;
   BuySL = 0.0;
//Åñëè ïîñëåäíèé ôðàêòàë ñâåðõó è...
   if(A>B)
     {
      //...åñëè óñòàíîâëåíà ïðîâåðêà íà ãëóáèíó êîððåêöèè, ïîñëå ôðàêòàëà, òî...
      //...ïðîâåðèòü íå îòêîððåêòèðîâàëàñü ëè öåíà ñëèøêîì ãëóáîêî. Åñëè "äà" - íåò ñèãíàëà
      if((DelKorStopOrder>0) && 
         ((B+Razmer*DelKorStopOrder*Point)>iLow(Symbol(),0,1)))
         return (0);
      NewOrder=true;
      SelSL = A;
      BuySL = 0.0;
      if(ObeStor)
         return (5);
      //BUY
      return (1);
     }
   if(A<B)
     {
      if((DelKorStopOrder>0) && 
         ((B-Razmer*DelKorStopOrder*Point)<iHigh(Symbol(),0,1)))
         return (0);
      NewOrder=true;
      BuySL = A;
      SelSL = 0.0;
      if(ObeStor)
         return (5);
      //SELL
      return (2);
     }
   return (0);
  }
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
int     start()
  {
   if(isNeedToDeinit) return (0);
   int     temp;
   int     cnt;
   int     ticket;
   int     total;
   static  int     BBars=0;
   static  bool    New_Bar=true;
//--------------------------------------------------------------------------
//Ïðîâåðèòü ïîÿâëåíèå íîâîé ñâå÷è
//--------------------------------------------------------------------------
   if(BBars==iBars(Symbol(),SigTfFr))
      New_Bar=false;
   else//if (BBars != iBars (Symbol (), SigTfFr))
     {
      BBars=iBars(Symbol(),SigTfFr);
      New_Bar=true;
     }
//--------------------------------------------------------------------------
//Íà êàæäîé çàâåðøèâøåéñÿ ñâå÷å ïðîâåðèòü íàëè÷èå è òèï ñèãíàëà. Ñèãíàë
//ìîæåò âîçíèêàòü ÒÎËÜÊÎ íà òîëüêî ÷òî çàâåðøèâøåéñÿ ñâå÷å
//--------------------------------------------------------------------------
   BuyCondition=false;
   SellCondition=false;
   if(New_Bar)
     {
      //Íå îòêîððåêòèðîâàëàñü ëè öåíà ïî îòíîøåíèþ ê ïîñëåäíåìó èçâåñòíîìó
      //êîëåíó ïîñëåäíåé èçâåñòíîé ñòðóêòóðû ABCD ñëèøêîì ãëóáîêî? Åñëè íå
      //ñëèøêîì, òî åñòü ñèãíàë (èëè äàæå ñðàçó â îáå ñòîðîíû). Òåïåðü ìîæíî
      //ïðèñòóïèòü â ò. ÷. ê âû÷èñëåíèþ ñòîïà è òåéê-ïðîôèòà
      temp = Crossed ();
      if(1 == temp)
         BuyCondition=true;
      if(2==temp)
         SellCondition=true;
      if(5==temp)
        {
         SellCondition= true;
         BuyCondition = true;
        }
     }
//==========================================================================
//Íàéòè âñå îòêðûòûå îðäåðà è ðàáîòàòü ñ íèìè... Óäàëèòü îòëîæêè è òðàëèòü
//==========================================================================
   Kol_B_S=0;
   DelBS = false;
   DelSS = false;
   LotB = 0;
   LotS = 0;
   total= OrdersTotal();
   for(cnt=0; cnt<total; cnt++)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
        {
         ticket=OrderTicket();
         iTicket=ticket;
         //buy
         if((OdnaStor) && (OrderType()==1))
            DelBS=true;
         //sell
         if((OdnaStor) && (OrderType()==0))
            DelSS=true;
         //ÏÎÄÑ×¨Ò ÊÎËÈ×ÅÑÒÂÀ ÎÒÊÐÛÒÛÕ ÏÎÇÈÖÈÉ
         if((OrderType()==1) || (OrderType()==0))
            Kol_B_S++;
         if((OdnaStor) && (BuyCondition) && (OrderType()==1))
            BuyCondition=false;
         if((OdnaStor) && (SellCondition) && (OrderType()==0))
            SellCondition=false;
         if(OrderType()==OP_BUY)
            LotB=LotB+OrderLots();
         if(OrderType()==OP_SELL)
            LotS=LotS+OrderLots();
        }
     }
//==========================================================================
//Íàéòè âñå îòêðûòûå îðäåðà è êàæäûé îáðàáîòàòü. Óäàëÿòü îòëîæêè, òðàëèòü TP
//==========================================================================
//MasTekOrder ();
   total=OrdersTotal();
   for(cnt=0; cnt<total; cnt++)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
        {
         ticket=OrderTicket();
         iTicket=ticket;
         for(int h=1; h<=30; h++)
           {
            if((Massiv[h][4]==ticket)) break;
           }
         MA = Massiv[h][1];     //Öåíà A
         MB = Massiv[h][2];     //Öåíà B
         MRazmer = Massiv[h][3];//Ðàçìåð ÀB
         MTime = Massiv[h][5];  //Âðåìÿ ÀB
                                //******************************************************************
         //ÓÄÀËÅÍÈÅ ÎÒËÎÆÅÍÍÛÕ
         //******************************************************************
         //Ïðîâåðèòü ïðèîðèòåòû ìåæäó '==' è '&&'!!!
         //			if (OP_SELLSTOP == OrderType () && OrderSymbol () == Symbol ())
         if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol())
           {
            temp=0;
            if(DelSS)
               temp=1;
            if(SignalDelOldOtl && SellCondition)
               temp=1;
            if(SignalDelOldOtlAll && (BuyCondition || SellCondition))
               temp=1;
            if((0<DelKorStopOrder) && !OtmerennyiHod && 
               ((MB-MRazmer*DelKorStopOrder*Point)<iHigh(Symbol(),0,1)))
               temp=1;
            //if ((DelBStopOrder) && MB<iHigh(Symbol(),0,1))
            //	temp = 1;
            if(1==temp)
               CloseOrder(OrderType());
            if(OtmerennyiHod && (1!=temp))
               MasOtmerHod(ticket);
           }
         //Ïðîâåðèòü ïðèîðèòåòû ìåæäó '==' è '&&'!!!
         //			if (OP_BUYSTOP == OrderType () && OrderSymbol () == Symbol ())
         if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol())
            //if (OP_BUYSTOP == OrderType () && OrderSymbol () == Symbol() &&
            //	Magic == StrToInteger (StringSubstr (DoubleToStr (OrderMagicNumber (), 0), 0, 3)))
           {
            temp=0;
            if(DelBS)
               temp=1;
            if(SignalDelOldOtl && BuyCondition)
               temp=1;
            if(SignalDelOldOtlAll && (BuyCondition || SellCondition))
               temp=1;
            if((0<DelKorStopOrder) && !OtmerennyiHod && 
               ((MB+MRazmer*DelKorStopOrder*Point)>iLow(Symbol(),0,1)))
               temp=1;
            //if (DelBStopOrder && MB>iLow(Symbol(),0,1))
            //	tmp1 = 1;
            if(1==temp)
               CloseOrder(OrderType());
            if(OtmerennyiHod && (1!=temp))
               MasOtmerHod(ticket);
           }
         //******************************************************************
         //ÒÐÀË
         //******************************************************************
         //Ïðîâåðèòü ïðèîðèòåòû ìåæäó '==' è '&&'!!!
         //			if (OP_SELL == OrderType () && OrderSymbol () == Symbol ())
         if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
           {
            if(OtmerennyiHod)
               MasOtmerHod(ticket);
            TrailingByZ(iTicket,iTmfrm,Bars_kol,iIndent,bTrlinloss);
           }
         //Ïðîâåðèòü ïðèîðèòåòû ìåæäó '==' è '&&'!!!
         //			if (OP_BUY == OrderType () && OrderSymbol () == Symbol ())
         if(OrderType()==OP_BUY && OrderSymbol()==Symbol())
           {
            if(OtmerennyiHod)
               MasOtmerHod(ticket);
            TrailingByZ(iTicket,iTmfrm,Bars_kol,iIndent,bTrlinloss);
           }
        }
     }
//==========================================================================
//Âûñòàâèòü îòëîæêè
//==========================================================================
   total=OrdersTotal();
   SLTP();//Ðàñ÷åò sl è tp îòêðûâàåìûõ îðäåðîâ


   Lots=Lot;
   if(LotProiz)
     {
      Lots=(Lot *(Kol_B_S+1) *2);//ïèïåö... ÿ ñàì â øîêå  ;-)
      if(0== Lots) Lots = Lot;
     }


   if(total<MaxOrder)
     {
      if(BuyCondition)
         ticket=OpenOrder(OP_BUYSTOP);
      if(SellCondition)
         ticket=OpenOrder(OP_SELLSTOP);
     }
   BuyCondition=false;
   SellCondition=false;
//Óäàëèòü ïî äåíüãàì
   if(isCloseAllByTargetProfit)
      //Ïðèáûëü-óáûòêè îïðåäåëÿþòñÿ ïî âñåì îðäåðàì, à íå òîëüêî ïî îðäåðàì
      //ýêñïåðòà, ÷òî åñòü... ÊÎÑßÊ!!!
      if((AccountProfit()<-TargetLoss) || 
         (AccountProfit()>TargetProfit))
        {
         if(isProcessingUserOrdrs)
           {
            ClosePosFirstProfit();
            DeleteOrders();
           }
         else
           {
            ClosePosFirstProfit("0",-1,MagicNumber);
            DeleteOrders("0",-1,MagicNumber);
           }
        }
//Óäàëèòü ïî ïóíêòàì
//ÇÀÃÎÒÎÂÊÀ
   int     sum;
   if(isCloseAllByTargetPoints)
     {
      sum=0;
      //
      //Êðàéíå íåýôôåêòèâíûé àëãîðèòì îïðåäåëåíèÿ ñóììàðíîãî êîëè÷åñòâà
      //íàêîïëåííûõ ïóíêòîâ óáûòêà èëè ïðèáûëè
      //
      for(cnt=0; cnt<total; cnt++)
        {
         if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderSymbol()==Symbol())
              {
               if(!isProcessingUserOrdrs && 
                  (OrderMagicNumber()==MagicNumber))
                 {
                  if(OP_SELL==OrderType())
                     sum=(OrderOpenPrice()-Ask)/Point;
                  if(OP_BUY==OrderType())
                     sum=(Bid-OrderOpenPrice())/Point;
                 }
               else if(isProcessingUserOrdrs)
                 {
                  if(OP_SELL==OrderType())
                     sum=(OrderOpenPrice()-Ask)/Point;
                  if(OP_BUY==OrderType())
                     sum=(Bid-OrderOpenPrice())/Point;
                 }
              }
           }
        }
      if((-AllOrdrsSumLossInPoints>=sum) || 
         (AllOrdrsSumPrftInPoints<=sum))
        {
         if(isProcessingUserOrdrs)
           {
            ClosePosFirstProfit();
            DeleteOrders();
           }
         else
           {
            ClosePosFirstProfit("0",-1,MagicNumber);
            DeleteOrders("0",-1,MagicNumber);
           }
        }
     }
   return (0);
  }
//+----------------------------------------------------------------------------+
// Ðàñ÷åò SL, TP è Open Price
//+----------------------------------------------------------------------------+
void    SLTP()
  {
   double  temp;
   SStp = 0;
   SSsl = 0;
   BStp = 0;
   BSsl = 0;
   BSotl = 0;
   SSotl = 0;
   if(0<KoefProfit)
     {
      SStp=A-Razmer*KoefProfit*Point;
     }
   SSotl=A-Otstup*0.5*Point-Razmer*OtstupProc*Point;
   if(StopLos)
      SSsl=B+Otstup*Point;

   if(ObeStor)
     {
      temp=B;
      B = A;
      A = temp;
     }

   if(0<KoefProfit)
     {
      BStp=A+Razmer*KoefProfit*Point;
     }
   BSotl=A+Otstup*Point+Razmer*OtstupProc*Point;
   if(StopLos)
      //Äåëèòü íóæíî íà '/ 2.0' èëè '* 0.5'
      BSsl=B-Otstup/2*Point;

   if(ObeStor)
     {
      temp=B;
      B = A;
      A = temp;
     }
  }
//+----------------------------------------------------------------------------+
//To open orders with fixin into array
//+----------------------------------------------------------------------------+
int     OpenOrder(
                  int     type
                  )
  {
//Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå òåêóùèå îðäåðà
   MasTekOrder();
   SravMas();
   int     err=0;
   int     ticket=0;
   int     c=0;
   double  stplvl;
   double  frzlvl;
   stplvl = MarketInfo (Symbol (), MODE_STOPLEVEL) * Point;
   frzlvl = MarketInfo (Symbol (), MODE_FREEZELEVEL) * Point;
   if(type== OP_BUYSTOP)
     {
      BSotl = NormalizeDouble (BSotl - delta * Point, Digits);
      for(i = 1; i <= MaxOrdersetka; i++)
        {
         BSotl = NormalizeDouble (BSotl + delta * Point, Digits);
         for(c = 0; c < NumberOfTries; c++)
           {
            if(((Ask+stplvl)<=BSotl) && ((Ask+frzlvl)<=BSotl))
              {
               ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,
                                BSotl,//price
                                Slippage,
                                BSsl,//stop
                                BStp,//profit
                                ExpertComment,MagicNumber,0,Green);
               err=GetLastError();
               if(0==err)
                 {
                  ZapOrdMas(ticket);
                  break;
                 }
               else
                 {
                  //Busy errors
                  if(err==4 || err==137 || err==146 || err==136)
                    {
                     Sleep(60);
                     continue;
                    }
                  else//normal error
                      //ZapOrdMas (ticket);
                     break;
                 }
              }
           }//The end of 'for Number Of Tries'
        }//The end of 'for Max Orders in the Net / Setka'
     }
   if(type==OP_SELLSTOP)
     {
      SSotl = NormalizeDouble (SSotl + delta * Point, Digits);
      for(i = 1; i <= MaxOrdersetka; i++)
        {
         SSotl = NormalizeDouble (SSotl - delta * Point, Digits);
         for(c = 0; c < NumberOfTries; c++)
           {
            if(((Bid-stplvl)>=SSotl) && ((Bid-frzlvl)>=SSotl))
              {
               ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,
                                SSotl,//price
                                Slippage,
                                SSsl,//stop
                                SStp,//profit
                                ExpertComment,MagicNumber,0,Red);
               err=GetLastError();
               if(0==err)
                 {
                  //Write this order and it's chars to aray
                  ZapOrdMas(ticket);
                  break;
                 }
               else
                 {
                  //Busy errors
                  if(err==4 || err==137 || err==146 || err==136)
                    {
                     Sleep(60);
                     continue;
                    }
                  else//normal error
                  break;
                 }
              }
           }//The end of 'for Number Of Tries'
        }//The end of 'for Max Orders in the Net / Setka'
     }
   return (ticket);
  }
//+------------------------------------------------------------------+
//To close pending orders
//+------------------------------------------------------------------+
bool    CloseOrder(
                   int     type
                   )
  {
   if(type==OP_BUYSTOP)
      return (OrderDelete (OrderTicket ()));
   if(type==OP_SELLSTOP)
      return (OrderDelete (OrderTicket ()));
   return (0);
  }
//+----------------------------------------------------------------------------+
//Çàïèñàòü èç Massiv â Ôàéë (ðåçåðâíîå êîïèðîâàíèå)
//+----------------------------------------------------------------------------+
void    FilesWrite()
  {
   Massiv[0][5]=Massiv[0][5]+1;
   int     h=FileOpen("Massiv.bin",FILE_BIN|FILE_WRITE);
   FileWriteInteger(h,ArraySize(Massiv),LONG_VALUE);
   FileWriteArray(h,Massiv,0,ArraySize(Massiv));
   FileClose(h);
  }
//+----------------------------------------------------------------------------+
//Ïðî÷èòàòü èç ôàéëà â Massiv (ðåçåðâíîå êîïèðîâàíèå)
//+----------------------------------------------------------------------------+
void    FilesOpen()
  {
   int     h=FileOpen("Massiv.bin",FILE_BIN|FILE_READ);
   if(h<1)
      Print("Ôàéë Massiv.bin íå îáíàðóæåí, ïîñëåäíÿÿ îøèáêà ",GetLastError());
   int s=FileReadInteger(h,LONG_VALUE);
   ArrayResize(Massiv,s);
   FileReadArray(h,Massiv,0,s);
   FileClose(h);
  }
//+----------------------------------------------------------------------------+
//Íàéòè è çàíåñòè â Ìàññèâ "Mas_Ord_Tek" âñå îðäåðà
//+----------------------------------------------------------------------------+
void    MasTekOrder()
  {
   int     Kol = 0;                    //Îáíóëåíèå ñ÷¸ò÷èêà îðäåðîâ
   ArrayInitialize (Mas_Ord_Tek, 0);   //Îáíóëåíèå ìàññèâà
   for(i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS) && (OrderSymbol()==Symbol()))
        {
         Kol++;//Ñ÷èòàåì îáùåå êîëè÷åñòâî îðäåðîâ
         //--- Ôîðìèðîâàíèå íîâîãî ìàññèâà îðäåðîâ --
         Mas_Ord_Tek[Kol][1] = NormalizeDouble (OrderOpenPrice (), Digits);  //Êóðñ îòêðûòèÿ îðäåðîâ
         Mas_Ord_Tek[Kol][2] = NormalizeDouble (OrderStopLoss (), Digits);   //Êóðñ SL 
         Mas_Ord_Tek[Kol][3] = NormalizeDouble (OrderTakeProfit (), Digits); //Êóðñ ÒÐ 
         Mas_Ord_Tek[Kol][4] = OrderTicket ();     //Íîìåð îðäåðà
         Mas_Ord_Tek[Kol][5] = OrderLots ();       //Êîëè÷åñòâî ëîòîâ
         Mas_Ord_Tek[Kol][6] = OrderType ();       //Òèï îðäåðà
         Mas_Ord_Tek[Kol][7] = OrderMagicNumber ();//Ìàãè÷åñêîå ÷èñëî 
        }
     }
   Mas_Ord_Tek[0][0]=Kol;//Ñîõðàíÿåì â íóëåâóþ ÿ÷åå÷êó êîë-âî îðäåðîâ
  }
//==============================================================================
//Íàéòè "ïðîïàâøèå" îðäåðà
//==============================================================================
void    SravMas()
  {
   int     oo;
   int     f;
   int     g;
   for(oo=1; oo<=30; oo++)//Âîçüì¸ì íîìåð îðäåðà èç ñòàðîãî ìàññèâà
     {
      int     Sovpadenie=0;//Äëÿ íà÷àëà îáíóëèì ôàêò ïðèçíàêà ñîâïàäåíèÿ
      for(i=1; i<=Mas_Ord_Tek[0][0]; i++)//Ïîèùåì ýòîò îðäåðîê â òåêóùåì ìàññèâå
        {
         if(Mas_Ord_Tek[i][4]==Massiv[oo][4])//Åñëè ñîâïàë ticket îðäåðà, òî çàïîìíèì, ò. å. ïîêà æèâ
            //è âûõîäèì èç âíóòðåííåãî öèêëà
           {
            Sovpadenie=1;
            if(Massiv[oo][6]!=Mas_Ord_Tek[i][6])
               Massiv[oo][6]=Mas_Ord_Tek[i][6];//èçìåíÿåì ñòàòóñ îðäåðà
            break;
           }
        }
      if(Sovpadenie==1) continue;//Ïåðåõîäèì ê ñëåäóþùåìó ñòàðîìó
      if(Massiv[oo][6]<9)
         Massiv[oo][6]=Massiv[oo][6]+10;//Çàêðûò îðäåð
     }
   Massiv[0][3]=0;//Ñáðîñ ïóñòîé ÿ÷åéêè äëÿ çàïèñè îðäåðîâ
   for(f=1; f<=30; f++)//Ïåðåáèðàåì âåñü ìàññèâ â ïîèñêàõ ñòàðûõ îðäåðîâ è èõ óäàëåíèÿ
     {
      if((Massiv[0][3]==0) && (Massiv[f][4]==0))
         Massiv[0][3]=f;//åñëè íåò ticket çíà÷èò ñòðîêà ïóñòà
      if(DelHistoryMassiv && (Massiv[f][6]>9))//Åñëè îðäåðà óæå íåò
        {
         for(g=0; g<=7; g++)//Îáíóëÿåì âñþ ñòðîêó
           {
            Massiv[f][g]=0;//çàïîëíÿåì 0-ìè
            if(Massiv[0][3]== 0)
               Massiv[0][3]=f;//Çàïîìèíàåì ïóñòóþ ñòðîêó äëÿ çàïèñè íîâûõ îðäåðîâ
           }
        }
     }
  }
//==============================================================================
//Çàïîìíèòü îðäåðà â ìàññèâ
//==============================================================================
void    ZapOrdMas(
                  int     ticket
                  )
  {
   double  temp;
   int     pusto;
   int     f;
   MasTekOrder();//Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà
   SravMas();
   pusto= Massiv[0][3];
   if(0 == pusto)
     {
      //Ïåðåáèðàåì âåñü ìàññèâ â ïîèñêàõ ïóñòûõ ñòðîê
      for(f=1; f<=30; f++)
        {
         //åñëè íåò ticket çíà÷èò ñòðîêà ïóñòà
         if((0==pusto) && (0==Massiv[f][4]))
           {
            pusto=f;
            break;
           }
        }
     }
   for(i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS) && 
         (OrderSymbol()==Symbol()) && 
         (ticket==OrderTicket()))
        {
         if(ObeStor && (Ak>Bk) && (OrderType()==OP_BUYSTOP))
           {
            temp=B;
            B = A;
            A = temp;
           }
         if(ObeStor && (Ak<Bk) && (OrderType()==OP_SELLSTOP))
           {
            temp=B;
            B=A; A=temp;
           }
         Massiv[pusto][1] = A;
         Massiv[pusto][2] = B;
         Massiv[pusto][3] = Razmer;
         Massiv[pusto][4] = OrderTicket ();
         Massiv[pusto][5] = Time[0];
         Massiv[pusto][6] = OrderType ();
         Massiv[pusto][7] = OrderMagicNumber ();
         Massiv[0][3] =0;
         Massiv[0][1] = MagicNumber;
         if(ObeStor && (Ak>Bk) && (OrderType()==OP_BUYSTOP))
           {
            temp=B;
            B = A;
            A = temp;
           }
         //SELLSTOP
         if(ObeStor && (Ak<Bk) && (OrderType()==OP_SELLSTOP))
           {
            temp=B;
            B = A;
            A = temp;
           }
         if(SaveMassiv)
           {
            FilesWrite();
           }
        }
     }
  }
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
void    MasOtmerHod(
                    int     ticket
                    )
  {
   int     m;
   int     isDel;
   double  Target;
   double  stplvl;
   double  frzlvl;
   bool    x;
   stplvl = MarketInfo (Symbol (), MODE_STOPLEVEL) * Point;
   frzlvl = MarketInfo (Symbol (), MODE_FREEZELEVEL) * Point;
   for(m=1; m<=30; m++)
     {
      if((Massiv[m][4]==ticket))
         break;
     }
   for(i=0; i<OrdersTotal(); i++)//Àíàëèç ïî âñåì îðäåðàì òåðìèíàëà
     {
      if(OrderSelect(i,SELECT_BY_POS) && 
         (OrderSymbol () == Symbol ()) &&
         (OrderTicket () == ticket))
        {
         isDel=0;
         //
         //BUY
         //
         if(
            OtmerennyiHod && 
            ((Massiv[m][6]==0) || (Massiv[m][6]==4)))
           {
            if((0<DelKorStopOrder) && 
               (Massiv[m][6]==4) && 
               ((Massiv[m][2]+Massiv[m][3] *DelKorStopOrder*Point)
               >iLow(Symbol(),0,1)))
               if(CloseOrder(OrderType()))
                  isDel=1;
            OpBar=iBarShift(Symbol(),0,MTime)+1;
            OtkatBar=iLowest(Symbol(),0,MODE_LOW,OpBar,1);
            OtkatCena=iLow(Symbol(),0,OtkatBar);
            Hod=MRazmer;
            Target=NormalizeDouble(OtkatCena+Hod*KoefProfit*Point,Digits);
            if(0==isDel)
               if(Target!=OrderTakeProfit())
                  if(((Bid+stplvl)<=Target) && ((Bid+frzlvl)<=Target))
                     x = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Target,0,Yellow);
           }
         isDel=0;
         //
         //SELL
         //
         if(
            OtmerennyiHod && 
            ((Massiv[m][6]==1) || (Massiv[m][6]==5)))
           {
            if((0<DelKorStopOrder) && 
               (Massiv[m][6]==5) && 
               ((Massiv[m][2]-Massiv[m][3] *DelKorStopOrder*Point)
               <iHigh(Symbol(),0,1)))
               if(CloseOrder(OrderType()))
                  isDel=1;
            OpBar=iBarShift(Symbol(),0,MTime)+1;
            OtkatBar=iHighest(Symbol(),0,MODE_HIGH,OpBar,1);
            OtkatCena=iHigh(Symbol(),0,OtkatBar);
            Hod=MRazmer;
            Target=NormalizeDouble(OtkatCena-Hod*KoefProfit*Point,Digits);
            if(0==isDel)
               if(Target!=OrderTakeProfit())
                  if(((Ask-stplvl)>=Target) && ((Ask-frzlvl)>=Target))
                     x = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Target,0,Yellow);
           }
        }
     }
  }
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
void    hlFractal()
  {
//HIGH FRACTALS
   hk1 = 0;
   hk2 = 0;
   k=kstart;
   while(1>hk1)
     {
      hf=iCustom(Symbol(),TfFr,"Fr",BarsFr,0,k);
      if(0<hf)
        {
         hk1= k;
         h1 = hf;
        }
      k++;
      //Anti endless cycle trigger
      if(1023<k) break;
     }
   k=k+1;
   while(1>hk2)
     {
      hf=iCustom(Symbol(),TfFr,"Fr",BarsFr,0,k);
      if(0<hf)
        {
         hk2= k;
         h2 = hf;
        }
      k++;
      //Anti endless cycle trigger
      if(1023<k) break;
     }

//LOW FRACTALS
   lk1 = 0;
   lk2 = 0;
   k=kstart;
   while(1>lk1)
     {
      lf=iCustom(Symbol(),TfFr,"Fr",BarsFr,1,k);
      if(0<lf)
        {
         lk1= k;
         l1 = lf;
        }
      k++;
      //Anti endless cycle trigger
      if(1023<k) break;
     }
   k=k+1;
   while(1>lk2)
     {
      lf=iCustom(Symbol(),TfFr,"Fr",BarsFr,1,k);
      if(lf>0)
        {
         lk2= k;
         l2 = lf;
        }
      k++;
      //Anti endless cycle trigger
      if(1023<k) break;
     }
  }
//******************************************************************************
//Ñïèñîê âûçûâàåìûõ ôóíêöèé:
//-   èñïîëüçóåò ÂÍÅØÍÈÉ èíäèêàòîð Fr
//Ñïèñîê âûçûâàþùèõ ôóíêöèé:
//-   TrailingByZ
//Ýòè ðàçäåëÿåìûå ìåæäó äâóìÿ ôóíêöèÿìè òðàëà
//- hTralFr
//- lTralFr
//******************************************************************************
void    TralFractal()
  {
   int     a;
   int     Tmfrm;
   k=0;
   hTralFr=0;
   hf=0;
   Tmfrm = iTmfrm;
   for(a = 0; a < Frktl_kol; a++)
     {
      hTralFr=0;
      while(1>hTralFr)
        {
         hf=iCustom(Symbol(),Tmfrm,"Fr",Frktl_bars,0,k);
         if(0<hf)
            hTralFr=k;
         k++;
        }
     }
   k=0;
   lTralFr=0;
   lf=0;
   for(a=0; a<Frktl_kol; a++)
     {
      lTralFr=0;
      while(1>lTralFr)
        {
         lf=iCustom(Symbol(),Tmfrm,"Fr",Frktl_bars,1,k);
         if(0<lf)
            lTralFr=k;
         k++;
        }
     }
  }
//******************************************************************************
//Ñïèñîê ãëîáàëüíûõ ïåðåìåííûõ, ê êîòîðûì îáðàùàåòñÿ ôóíêöèÿ:
//-   ÍÀÄÎ ÇÀÏÎËÍÈÒÜ ÑÏÈÑÎÊ!!!
//Ñïèñîê âûçûâàåìûõ ôóíêöèé:
//-   TralFractal, êîòîðàÿ:
//        èñïîëüçóåò ÂÍÅØÍÈÉ èíäèêàòîð Fr!
//Ýòè - ðàçäåëÿåìûå ìåæäó äâóìÿ ôóíêöèÿìè òðàëà
//- hTralFr,
//- lTralFr
//Ýòè - ðàçäåëÿåìûå ìåæäó òåêóùåé ôóíêöèåé òðàëà è ñèãíàëüíîé
//- SelSL,
//- BuySL
//******************************************************************************
int     TrailingByZ(
                    int     ticket,
                    int     tmfrm,
                    int     bars_n,
                    int     indent,
                    bool    trlinloss
                    )
  {
   TralFractal();
//int     i;
   double  new_extremum;
//ïðîâåðÿåì ïåðåäàííûå çíà÷åíèÿ
   if(0==ticket)
      return (0);
   if(!OrderSelect(ticket,SELECT_BY_TICKET))
      return (0);
   if(0>indent)
      return (0);
   if(
      (tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && 
      (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) &&
      (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)
      )
      return (0);
   int     IndMin;
   int     IndMax;
   double  stplvl;
   double  tmp0sl;
   double  tmp0;
   bool    x;
   stplvl = MarketInfo (Symbol (), MODE_STOPLEVEL) * Point;
   tmp0sl = OrderStopLoss ();
//Åñëè äëèííàÿ ïîçèöèÿ (OP_BUY) - íàéòè ìèíèìóì ñðåäè bars_n ñâå÷åé
   if(OP_BUY==OrderType())
     {
      if(0<Frktl_kol)
        {
         IndMin=ArrayMinimum(Low,lTralFr,1);
         //******************************************************************************
         //Îòñþäà è äàëåå ÒÐÈÆÄÛ îäíà è òà æå ôîðìóëà ïðè ÇÀÏÓÒÀÍÍÛÕ îáñòîÿòåëüñòâàõ
         //
         new_extremum=iLow(Symbol(),tmfrm,IndMin);
        }
      if(0<Bars_kol)
         for(i=1; i<=bars_n; i++)
           {
            if(1==i)
               new_extremum=iLow(Symbol(),tmfrm,i);
            else if(new_extremum>iLow(Symbol(),tmfrm,i))
               new_extremum=iLow(Symbol(),tmfrm,i);
            //
            //******************************************************************************
           }
      if((0.0<BuySL) && SLSignal)
         new_extremum=BuySL;
      tmp0=NormalizeDouble(new_extremum-indent*Point,Digits);
      if(trlinloss || 
         (!trlinloss && (tmp0>OrderOpenPrice())))
         if(((tmp0>tmp0sl) || (0.0==tmp0sl)) && 
            (tmp0<Bid-stplvl))
            x = OrderModify(ticket,OrderOpenPrice(),tmp0,OrderTakeProfit(),OrderExpiration());
     }
//Åñëè êîðîòêàÿ ïîçèöèÿ (OP_SELL) - íàéòè ìèíèìóì ñðåäè bars_n ñâå÷åé
   if(OP_SELL==OrderType())
     {
      if(0<Frktl_kol)
        {
         IndMax=ArrayMaximum(High,hTralFr,1);//èíäåêñ áàðà
                                             //******************************************************************************
         //Îòñþäà è äàëåå ÒÐÈÆÄÛ îäíà è òà æå ôîðìóëà ïðè ÇÀÏÓÒÀÍÍÛÕ îáñòîÿòåëüñòâàõ
         //
         new_extremum=iHigh(Symbol(),tmfrm,IndMax);
        }
      if(0<Bars_kol)
         for(i=1; i<=bars_n; i++)
           {
            if(1==i)
               new_extremum=iHigh(Symbol(),tmfrm,i);
            else if(new_extremum<iHigh(Symbol(),tmfrm,i))
               new_extremum=iHigh(Symbol(),tmfrm,i);
            //
            //******************************************************************************
           }
      if((0.0<SelSL) && SLSignal)
         new_extremum=SelSL;
      tmp0 = MarketInfo (Symbol (), MODE_SPREAD);
      tmp0 = indent + tmp0;
      tmp0 = NormalizeDouble (new_extremum + tmp0 * Point, Digits);
      if(trlinloss || 
         (!trlinloss && (tmp0<OrderOpenPrice())))
         if(((tmp0<tmp0sl) || (0.0==tmp0sl)) && 
            (tmp0>Ask+stplvl))
            x = OrderModify(ticket,OrderOpenPrice(),tmp0,OrderTakeProfit(),OrderExpiration());
     }
   return (0);
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ  : 19.02.2008                                                      |
//|  Îïèñàíèå: Çàêðûòèå îäíîé ïðåäâàðèòåëüíî âûáðàííîé ïîçèöèè                 |
//+----------------------------------------------------------------------------+
void    ClosePosBySelect()
  {
   bool    fc;
   color   clClose;
   double  ll;
   double  pa;
   double  pb;
   double  pp;
   int     err;
   int     it;
   if((OrderType()==OP_BUY) || (OrderType()==OP_SELL))
     {
      for(it=1; it<=NumberOfTry; it++)
        {
         if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
            break;
         while(!IsTradeAllowed())
            Sleep(sleepMilliSecToDelOrdrs);
         RefreshRates();
         pa = MarketInfo (OrderSymbol (), MODE_ASK);
         pb = MarketInfo (OrderSymbol (), MODE_BID);
         if(OrderType()==OP_BUY)
           {
            pp=pb;
            clClose=clCloseBuy;
           }
         else
           {
            pp=pa;
            clClose=clCloseSell;
           }
         ll = OrderLots ();
         fc = OrderClose (OrderTicket (), ll, pp, Slippage, clClose);
         if(fc)
           {
            //				if (UseSound) PlaySound (SoundSuccess);
            break;
           }
         else
           {
            err=GetLastError();
            if(err==146)
               while(IsTradeContextBusy())
                  Sleep(sleepMilliSecToDelOrdrs+sleepMilliSecToDelOrdrs);
            Sleep(sleepMilliSecToDelOrdrs);
           }
        }
     }
  }
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè                      |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè                                    |
//+----------------------------------------------------------------------------+
/*string GetNameOP(int op) 
  {
   switch(op) 
     {
      case OP_BUY      : return("Buy");
      case OP_SELL     : return("Sell");
      case OP_BUYLIMIT : return("BuyLimit");
      case OP_SELLLIMIT: return("SellLimit");
      case OP_BUYSTOP  : return("BuyStop");
      case OP_SELLSTOP : return("SellStop");
      default          : return("Unknown Operation");
     }
  }
*/
//+----------------------------------------------------------------------------+
//|  Çàêðûòü ïî ðûíî÷íîé öåíå ñíà÷àëà ïðèáûëüíûå, çàòåì îñòàëüíûå              |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
void    ClosePosFirstProfit(
                            string  sy = "0",
                            int     op = -1,
                            int     mn = -1
                            )
  {
   k=OrdersTotal();
   if(sy == "0")
      sy = Symbol ();
//Ñíà÷àëà çàêðûâàåì ïðèáûëüíûå ïîçèöèè
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(((OrderSymbol()==sy) || (sy=="")) && 
            ((op<0) || (OrderType()==op)))
           {
            if((OrderType()==OP_BUY) || (OrderType()==OP_SELL))
              {
               if((mn<0) || (OrderMagicNumber()==mn))
                 {
                  if((OrderProfit()+OrderSwap())>0.0)
                     ClosePosBySelect();
                 }
              }
           }
        }
     }
//Ïîòîì âñå îñòàëüíûå
   k=OrdersTotal();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(((OrderSymbol()==sy) || sy=="") && 
            ((op<0) || (OrderType()==op)))
           {
            if((OrderType()==OP_BUY) || (OrderType()==OP_SELL))
              {
               if((mn<0) || (OrderMagicNumber()==mn))
                  ClosePosBySelect();
              }
           }
        }
     }
  }
//+----------------------------------------------------------------------------+
//|  Óäàëèòü îðäåðà                                                            |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáîé îðäåð)                    |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
void    DeleteOrders(
                     string  sy = "0",
                     int     op = -1,
                     int     mn = -1
                     )
  {
   bool    fd;
   int     it;
   int     ot;
   k=OrdersTotal();
   if(sy == "0")
      sy = Symbol ();
   for(i = k - 1; i >= 0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         ot=OrderType();
         if((OP_SELL!=ot) && (OP_BUY!=ot))
           {
            if(((OrderSymbol () == sy) || (sy == "")) &&
               ((op < 0) || (ot == op)))
              {
               if((mn<0) || (OrderMagicNumber()==mn))
                 {
                  for(it=1; it<=NumberOfTry; it++)
                    {
                     if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
                        break;
                     //							while (!IsTradeAllowed ())
                     Sleep(sleepMilliSecToDelOrdrs);
                     fd=OrderDelete(OrderTicket(),clDelete);
                     if(fd)
                        //							{
                        //								if (UseSound) PlaySound (SoundSuccess); break;
                        break;
                     //							} else {
                     //								err=GetLastError();
                     //								if (UseSound) PlaySound (SoundError);
                     //								Print ("Error (", err, ") delete order ",
                     //									GetNameOP (ot), ": ", ErrorDescription (err),
                     //									", try ", it);
                     //								Sleep (1000 * 5);
                     //							}
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+

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