EXP_FIBO_ZZ_V1en

Author: Copyright � 2009, Tokman Yuriy
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
It plays sound alerts
0 Views
0 Downloads
0 Favorites
EXP_FIBO_ZZ_V1en
//+------------------------------------------------------------------+
//|                                               EXP_FIBO_ZZ_V0.mq4 |
//|                                   Copyright © 2009, Tokman Yuriy |
//|                                            yuriytokman@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Tokman Yuriy"
#property link      "yuriytokman@gmail.com"

extern string ____1___         = "Íàñòðîéêè èíäèêàòîðà ZigZag";
extern int    ExtDepth         = 12;
extern int    ExtDeviation     = 5;
extern int    ExtBackstep      = 3;

extern string ____2___         = "Âðåìÿ ðàáîòû ñîâåòíèêà";
extern int    StartHour        = 00;            // Ñòàðò ðàáîòû ÷àñû
extern int    StartMinute      = 01;            // Ñòàðò ðàáîòû ìèíóòû
extern int    StopHour         = 23;            // Ñòîï ðàáîòû ÷àñû
extern int    StopMinute       = 59;            // Ñòîï ðàáîòû ìèíóòû

extern string ____3___         = "Íàñòðîéêè êîðèäîðà è îòñòóïà";
extern int    n_pips           = 5;             // Îòñòóï â ïóíêòàõ
extern int    Min_Corridor     = 20;            // Ìèíèìàëüíûé ðàçìåð êîðèäîðà
extern int    Max_Corridor     = 100;           // Ìàêñèìàëüíûé ðàçìåð êîðèäîðà

extern string ____4___         = "Íàñòðîéêè ÌÌ";
extern bool   Choice_method    = true;          // Âûáîð ìåòîäà true - áàëàíññ , false - câîáîäíûå ñðåäñòâà
extern double Risk             = 1;             //% çàäà¸ì ïðîöåíò îò äåïîçèòà, åñëè 0 ðàáîòàåì ôèêñèðîâàíûì ëîòîì Lots
extern double Lots             = 0.1;           // Ðàçìåð ëîòà

extern bool   MovingInWL       = true;          // Ïåðåâîä â áåçóáûòîê
extern int    LevelProfit      = 13;            // Óðîâåíü ïðîôèòà â ïóíêòàõ, êîòîðîãî äîëæíà äîñòèãíóòü ïîçèöèÿ äëÿ òîãî, ÷òîáû å¸ ñòîï áûë ïåðåíåñ¸í íà óðîâåíü áåçóáûòêà.
extern int    LevelWLoss       = 2;             // Óðîâåíü áåçóáûòêà â ïóíêòàõ, íà êîòîðûé áóäåò ïåðåíåñ¸í ñòîï ïîçèöèè ïîñëå òîãî, êàê å¸ ïðîôèò äîñòèãíåò óðîâíÿ LevelProfit â ïóíêòàõ.


extern string _____5_____      = "Íàñòðîéêè ñîâåòíèêà";
extern double Fibo_StopLoss    = 61.8;          // Ðàçìåð ñòîïà â ïðîöåíòàõ
extern double Fibo_TakeProfit  = 161.8;         // Ðàçìåð òåéêà â ïðîöåíòàõ
extern int    MagicNumber      = 28081975;      // Ìàãè÷åñêîå ÷èñëî îðäåðîâ
extern int    Slippage         = 3;             // Ïðîñêàëüçûâàíèå öåíû
extern int    NumberOfTry      = 5;             // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê

extern string _____6_____      = "Äðóãèå íàñòðîéêè";
extern bool   Line             = false;         // Ïîêàçûâàòü ëèíèè êàíàëà

extern bool   UseSound         = True;          // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string NameFileSound    = "expert.wav";  // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
extern color  clDelete         = LightBlue;     // Öâåò çíà÷êà îòêðûòèÿ ïîêóïêè
extern color  clOpenBuy        = LightBlue;     // Öâåò çíà÷êà îòêðûòèÿ ïîêóïêè
extern color  clOpenSell       = LightCoral;    // Öâåò çíà÷êà îòêðûòèÿ ïðîäàæè
extern bool   ShowComment      = True;          // Ïîêàçûâàòü êîììåíòàðèé

//------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+
int           NumberAccount    = 0;             // Íîìåð òîðãîâîãî ñ÷¸òà
bool          gbDisabled       = False;         // Ôëàã áëîêèðîâêè ñîâåòíèêà
bool          gbNoInit         = False;         // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè
//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh>        // Ñòàíäàðòíàÿ áèáëèîòåêà ÌÒ4
string txt;
double current_high = 0, current_low = 0;
double          ppB = 0,         ppS = 0;
int    StopLoss     = 0;
int    TakeProfit   = 0;

string comment = "yuriytokman@gmail.com";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  gbNoInit=False;
  if (!IsTradeAllowed()) {
    Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
            "Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü");
    gbNoInit=True; return;
  }
  if (!IsLibrariesAllowed()) {
    Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+
            "Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ");
    gbNoInit=True; return;
  }
  if (!IsTesting()) {
    if (IsExpertEnabled()) Message("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì");
    else Message("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\"");
  }
//----
  string char[256]; int i;
  for (i = 0; i < 256; i++) char[i] = CharToStr(i);
  txt =  
 char[70]+char[97]+char[99]+char[116]+char[111]+char[114]+char[121]+char[32]
 +char[111]+char[102]+char[32]+char[116]+char[104]+char[101]+char[32]+char[97]
 +char[100]+char[118]+char[105]+char[115]+char[101]+char[114]+char[115]+char[58]
 +char[32]+char[121]+char[117]+char[114]+char[105]+char[121]+char[116]+char[111]
 +char[107]+char[109]+char[97]+char[110]+char[64]+char[103]+char[109]+char[97]
 +char[105]+char[108]+char[46]+char[99]+char[111]+char[109];
  
  Label("label",txt);

  comment = txt;   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  if (!IsTesting()) Comment("");
  ObjectDelete("00");
  ObjectDelete("high");  
  ObjectDelete("low");   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  if(MovingInWL) MovingInWL( NULL, -1, MagicNumber);  
//----
  if(!isTradeTimeInt(StartHour,StartMinute,StopHour,StopMinute))
    {
     Comment("Ñîâåòíèê îñòàíîâëåí! Ìîæíî ïîéòè ïîñïàòü èëè ñäåëàòü ïîëåçíîå äåëî.");
     return(-1);
    }
//----
  if (gbDisabled) {
    Message("Êðèòè÷åñêàÿ îøèáêà! Ñîâåòíèê ÎÑÒÀÍÎÂËÅÍ!"); return;
  }
  if (gbNoInit) {
    Message("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return;
  }
  if (!IsTesting()) {
    if (NumberAccount>0 && NumberAccount!=AccountNumber()) {
      Comment("Òîðãîâëÿ íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!");
      return;
    } else Comment("");}
//----
 double Lotsi;
 if(Risk<=0)Lotsi=Lots;
 else Lotsi=GetLot();  
//----
//----
   double high = 0, low = 0;
   
   double room_0 = GetExtremumZZPrice(NULL, 0, 0, ExtDepth, ExtDeviation, ExtBackstep);
   double room_1 = GetExtremumZZPrice(NULL, 0, 1, ExtDepth, ExtDeviation, ExtBackstep);
   double room_2 = GetExtremumZZPrice(NULL, 0, 2, ExtDepth, ExtDeviation, ExtBackstep);
   
   if(room_1>room_2){high = room_1; low = room_2;}//íàõîäèì âåðõ è íèç
   else {high = room_2; low = room_1;}            //íàõîäèì âåðõ è íèç 
   double size_corridor = high - low ;            //øèðèíà êîðèäîðà
   double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;//Comment("STOPLEVEL=",STOPLEVEL);

//------âû÷èñëÿåì ÑÒ è ÒÏ
   StopLoss   = (size_corridor/100*Fibo_StopLoss)/Point;  
   TakeProfit = ((size_corridor/100*Fibo_TakeProfit)-size_corridor)/Point;
   ppB        = MathRound(high/Point + n_pips )*Point;     
   ppS        = MathRound(low/Point  - n_pips )*Point;
//------ïðîðèñîâêà ëèíèé äëÿ àíàëèçà
   if(Line){
   SetHLine(Yellow, "00", room_0, 0, 2);
   SetHLine(Lime, "high", high, 0, 2);
   SetHLine(Red, "low", low, 0, 2);}
   
//-----óäàëÿåì îòëîæêó åñëè åñòü ðûíî÷íûé îðäåð

   if(ExistPositions(NULL,-1,MagicNumber))//åñòü îòêðûòàÿ ïîçèöèÿ
   DeleteOrders(NULL, -1, MagicNumber);//óäàëÿåì îòëîæêè
   
//---------------------------------------------
 double sl=0, tp=0, ti=0;

   if(size_corridor>Min_Corridor*Point && size_corridor<Max_Corridor*Point  //êîðèäîð äîïóñòèìîé âåëè÷èíû
      && high>room_0+STOPLEVEL && low<room_0-STOPLEVEL)  //íóëåâàÿ òî÷êà çèãà íàõîäèòñÿ â êîðèäîðå   
   {
    if(!ExistPositions(NULL,-1,MagicNumber))//íåò îòêðûòûõ ïîçèöèé 
    {
     if(!ExistOrders(NULL,OP_BUYSTOP,MagicNumber))//íåò áàéñòîïà
      {
      if (StopLoss  >0) sl=ppB-StopLoss*Point;   else sl=0;
      if (TakeProfit>0) tp=ppB+TakeProfit*Point; else tp=0;     
      SetOrder(NULL,OP_BUYSTOP,Lotsi,ppB,sl,tp,MagicNumber,0,txt);//óñòàíàâëèâàåì áàé ñòîï
      }     
     else // åñòü áàéñòîï
      {
       if(GetOrderOpenPrice(NULL, OP_BUYSTOP, MagicNumber)!=ppB)
        {//ìîäèôèöèðóåì
         ti = TicketPos(NULL,OP_BUYSTOP,MagicNumber);
         if (OrderSelect(ti, SELECT_BY_TICKET))
          {
           if (StopLoss  >0) sl=ppB-StopLoss*Point;   else sl=0;
           if (TakeProfit>0) tp=ppB+TakeProfit*Point; else tp=0;
           ModifyOrder(ppB,sl,tp,Turquoise);
          }
        }       
      }
     
     if(!ExistOrders(NULL,OP_SELLSTOP,MagicNumber))//íåò ñåëëñòîïà     
      {
      if (StopLoss  >0) sl=ppS+StopLoss*Point;   else sl=0;
      if (TakeProfit>0) tp=ppS-TakeProfit*Point; else tp=0;     
      SetOrder(NULL,OP_SELLSTOP,Lotsi,ppS,sl,tp,MagicNumber,0,txt);// óñòàíàâëèâàåì      
      }
     else // åñòü ñåëëñòîï
      {
       if(GetOrderOpenPrice(NULL, OP_SELLSTOP, MagicNumber)!=ppS)
        {//ìîäèôèöèðóåì
         ti = TicketPos(NULL,OP_SELLSTOP,MagicNumber);
         if (OrderSelect(ti, SELECT_BY_TICKET))
          {
           if (StopLoss  >0) sl=ppS+StopLoss*Point;   else sl=0;
           if (TakeProfit>0) tp=ppS-TakeProfit*Point; else tp=0;
           ModifyOrder(ppS,sl,tp,Turquoise);
          }
        }      
      }    
    }
   }
//-----------------------------------------------------------------  
    if (ShowComment) {
      string st="CurTime="+TimeToStr(TimeCurrent(), TIME_MINUTES)
               +"  Ñòàðò="+StartHour+":"+StartMinute
               +"  Ñòîï="+StopHour+":"+StopMinute
               +"  Øèðèíà êàíàëà="+DoubleToStr(size_corridor/Point,0)+"p"
               +"  ÑË="+DoubleToStr(Fibo_StopLoss,0)+"%="+StopLoss+"p"
               +"  ÒÏ="+DoubleToStr(Fibo_TakeProfit,0)+"%="+TakeProfit+"p"
               +"  Lots="+DoubleToStr(Lotsi,2)
	            //+"\n\n Áàëàíñ="+DoubleToStr(AccountBalance(), 2)
               //+"\n Ýêâèòè="+DoubleToStr(AccountEquity(), 2)
               //+"\n Ïðèáûëü="+DoubleToStr(AccountEquity()-AccountBalance(),3)+" $"
               //+"\n Ïðèáûëü="+DoubleToStr((AccountEquity()/AccountBalance()-1)*100,3)+" %"
               ;
      Comment(st);
    } else Comment("");   
//-------------------------------------------------------------------
   return(0);
  }
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 07.10.2006                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ýêñòðåìóì ÇèãÇàãà ïî åãî íîìåðó.                    |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (NULL èëè "" - òåêóùèé ñèìâîë)          |
//|    tf - òàéìôðåéì                  (      0     - òåêóùèé ÒÔ)              |
//|    ne - íîìåð ýêñòðåìóìà           (      0     - ïîñëåäíèé)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bs=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Ýêñòðåìóì ÇèãÇàãà íîìåð ",ne," íå íàéäåí");
  return(0);
}
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 30.03.2008                                                     |
//|  Îïèñàíèå : Óñòàíîâêà îáúåêòà OBJ_HLINE ãîðèçîíòàëüíàÿ ëèíèÿ               |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    cl - öâåò ëèíèè                                                         |
//|    nm - íàèìåíîâàíèå               ("" - âðåìÿ îòêðûòèÿ òåêóùåãî áàðà)     |
//|    p1 - öåíîâîé óðîâåíü            (0  - Bid)                              |
//|    st - ñòèëü ëèíèè                (0  - ïðîñòàÿ ëèíèÿ)                    |
//|    wd - øèðèíà ëèíèè               (0  - ïî óìîë÷àíèþ)                     |
//+----------------------------------------------------------------------------+
void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) {
  if (nm=="") nm=DoubleToStr(Time[0], 0);
  if (p1<=0) p1=Bid;
  if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0);
  ObjectSet(nm, OBJPROP_PRICE1, p1);
  ObjectSet(nm, OBJPROP_COLOR , cl);
  ObjectSet(nm, OBJPROP_STYLE , st);
  ObjectSet(nm, OBJPROP_WIDTH , wd);
}
//+----------------------------------------------------------------------------+                                                    |
//|  Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ îðäåðîâ.                         |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáîé îðäåð)                    |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//|    ot - âðåìÿ îòêðûòèÿ             ( 0   - ëþáîå âðåìÿ óñòàíîâêè)          |
//+----------------------------------------------------------------------------+
bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal(), ty;
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ty=OrderType();
      if (ty>1 && ty<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (ot<=OrderOpenTime()) return(True);
          }
        }
      }
    }
  }
  return(False);
}
//|  Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèé                          |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//|    ot - âðåìÿ îòêðûòèÿ             ( 0   - ëþáîå âðåìÿ îòêðûòèÿ)           |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//| Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Âåðñèÿ   : 28.11.2006                                                      |
//| Îïèñàíèå : Óäàëåíèå îðäåðîâ                                                |
//+----------------------------------------------------------------------------+
//| Ïàðàìåòðû:                                                                 |
//|   sy - íàèìåíîâàíèå èíñòðóìåíòà   ( ""  - ëþáîé ñèìâîë,                    |
//|                                    NULL - òåêóùèé ñèìâîë)                  |
//|   op - îïåðàöèÿ                   (  -1 - ëþáîé îðäåð)                     |
//|   mn - MagicNumber                (  -1 - ëþáîé ìàãèê)                     |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int err, i, it, k=OrdersTotal(), ot;
  
  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        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(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(NameFileSound); break;
              } else {
                err=GetLastError();
                Print("Error(",err,") delete order ",GetNameOP(ot),
                      ": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}
//+----------------------------------------------------------------------------+
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òàéìôðåéìà                             |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    TimeFrame - òàéìôðåéì (êîëè÷åñòâî ñåêóíä)      (0 - òåêóùèé ÒÔ)         |
//+----------------------------------------------------------------------------+
string GetNameTF(int TimeFrame=0) {
  if (TimeFrame==0) TimeFrame=Period();
  switch (TimeFrame) {
    case PERIOD_M1:  return("M1");
    case PERIOD_M5:  return("M5");
    case PERIOD_M15: return("M15");
    case PERIOD_M30: return("M30");
    case PERIOD_H1:  return("H1");
    case PERIOD_H4:  return("H4");
    case PERIOD_D1:  return("Daily");
    case PERIOD_W1:  return("Weekly");
    case PERIOD_MN1: return("Monthly");
    default:         return("UnknownPeriod");
  }
}
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè                      |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
  switch (op) {
    case OP_BUY      : return("Buy");
    case OP_SELL     : return("Sell");
    case OP_BUYLIMIT : return("Buy Limit");
    case OP_SELLLIMIT: return("Sell Limit");
    case OP_BUYSTOP  : return("Buy Stop");
    case OP_SELLSTOP : return("Sell Stop");
    default          : return("Unknown Operation");
  }
}
//+----------------------------------------------------------------------------+
//|  Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë                           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    m - òåêñò ñîîáùåíèÿ                                                     |
//+----------------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
}
//+----------------------------------------------------------------------------+                                                    |
//|  Îïèñàíèå : Óñòàíîâêà îðäåðà.                                              |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (NULL èëè "" - òåêóùèé ñèìâîë)          |
//|    op - îïåðàöèÿ                                                           |
//|    ll - ëîò                                                                |
//|    pp - öåíà                                                               |
//|    sl - óðîâåíü ñòîï                                                       |
//|    tp - óðîâåíü òåéê                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Ñðîê èñòå÷åíèÿ                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, datetime ex=0, string com="") {
  color    clOpen;
  datetime ot;
  double   pa, pb, mp;
  int      err, it, ticket, msl;
  string   lsComm= com+"   /"+ WindowExpertName()+" "+GetNameTF(Period());

  if (sy=="" || sy=="0") sy=Symbol();
  msl=MarketInfo(sy, MODE_STOPLEVEL);
  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
  if (ex>0 && ex<TimeCurrent()) ex=0;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("SetOrder(): Îñòàíîâêà ðàáîòû ôóíêöèè");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ot=TimeCurrent(); if(ObjectFind("label")>-1)
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, ex, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66);
        if (ExistOrders(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
        Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
        continue;
      }
      mp=MarketInfo(sy, MODE_POINT);
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);
      // Íåïðàâèëüíûå ñòîïû
      if (err==130) {
        switch (op) {
          case OP_BUYLIMIT:
            if (pp>pa-msl*mp) pp=pa-msl*mp;
            if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
            if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
            break;
          case OP_BUYSTOP:
            if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
            if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
            if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
            break;
          case OP_SELLLIMIT:
            if (pp<pb+msl*mp) pp=pb+msl*mp;
            if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
            if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
            break;
          case OP_SELLSTOP:
            if (pp>pb-msl*mp) pp=pb-msl*mp;
            if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
            if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
            break;
        }
        Print("SetOrder(): Ñêîððåêòèðîâàíû öåíîâûå óðîâíè");
      }
      Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa,"  Bid=",pb,"  sy=",sy,"  ll=",ll,"  op=",GetNameOP(op),
            "  pp=",pp,"  sl=",sl,"  tp=",tp,"  mn=",mn);
      if (pa==0 && pb==0) Message("SetOrder(): Ïðîâåðüòå â îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
      // Áëîêèðîâêà ðàáîòû ñîâåòíèêà
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Äëèòåëüíàÿ ïàóçà
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      // Ñëèøêîì ÷àñòûå çàïðîñû (8) èëè ñëèøêîì ìíîãî çàïðîñîâ (141)
      if (err==8 || err==141) Sleep(1000*100);
      if (err==139 || err==140 || err==148) break;
      // Îæèäàíèå îñâîáîæäåíèÿ ïîäñèñòåìû òîðãîâëè
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      // Îáíóëåíèå äàòû èñòå÷åíèÿ
      if (err==147) {
        ex=0; continue;
      }
      if (err!=135 && err!=138) Sleep(1000*7.7);
    }
  }
}
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 28.11.2006                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò öåíó óñòàíîâêè ïîñëåäíåãî îðäåðà èëè 0.             |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
double GetOrderOpenPrice(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()>1 && OrderType()<6) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 19.02.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò òèêåò ïîñëåäíåé îòêðûòîé ïîçèöèè èëè -1             |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
int TicketPos(string sy="", int op=-1, int mn=-1) {
  datetime o;
  int      i, k=OrdersTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (o<OrderOpenTime()) {
                o=OrderOpenTime();
                r=OrderTicket();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 28.11.2006                                                     |
//|  Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà.           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    pp - öåíà óñòàíîâêè îðäåðà                                              |
//|    sl - öåíîâîé óðîâåíü ñòîïà                                              |
//|    tp - öåíîâîé óðîâåíü òåéêà                                              |
//|    cl - öâåò çíà÷êà ìîäèôèêàöèè                                            |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE) {
  bool   fm;
  double op, pa, pb, os, ot;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
 
  if (pp<=0) pp=OrderOpenPrice();
  if (sl<0 ) sl=OrderStopLoss();
  if (tp<0 ) tp=OrderTakeProfit();
  
  pp=NormalizeDouble(pp, dg);
  sl=NormalizeDouble(sl, dg);
  tp=NormalizeDouble(tp, dg);
  op=NormalizeDouble(OrderOpenPrice() , dg);
  os=NormalizeDouble(OrderStopLoss()  , dg);
  ot=NormalizeDouble(OrderTakeProfit(), dg);
 
  if (pp!=op || sl!=os || tp!=ot) {
    for (it=1; it<=NumberOfTry; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      fm=OrderModify(OrderTicket(), pp, sl, tp, 0, cl);
      if (fm) {
        if (UseSound) PlaySound(NameFileSound); break;
      } else {
        er=GetLastError();
        pa=MarketInfo(OrderSymbol(), MODE_ASK);
        pb=MarketInfo(OrderSymbol(), MODE_BID);
        Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it);
        Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
              "  op="+GetNameOP(OrderType()),"  pp=",pp,"  sl=",sl,"  tp=",tp);
        Sleep(1000*10);
      }
    }
  }
}
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 30.04.2009                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ôëàã ðàçðåøåíèÿ òîðãîâëè ïî âðåìåíè.                |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    hb - ÷àñû âðåìåíè íà÷àëà òîðãîâëè                                       |
//|    mb - ìèíóòû âðåìåíè íà÷àëà òîðãîâëè                                     |
//|    he - ÷àñû âðåìåíè îêîí÷àíèÿ òîðãîâëè                                    |
//|    me - ìèíóòû âðåìåíè îêîí÷àíèÿ òîðãîâëè                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) {
  datetime db, de;           // Âðåìÿ íà÷àëà è îêîí÷àíèÿ ðàáîòû
  int      hc;               // ×àñû òåêóùåãî âðåìåíè òîðãîâîãî ñåðâåðà

  db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb);
  de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me);
  hc=TimeHour(TimeCurrent());
  if (db>=de) {
    if (hc>=he) de+=24*60*60; else db-=24*60*60;
  }

  if (TimeCurrent()>=db && TimeCurrent()<=de) return(True);
  else return(False);
}
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Þðèé Òîêìàíü ,  yuriytokman@gmail.com                          |
//+----------------------------------------------------------------------------+
//|  Îïèñàíèå : ðàñ÷¸ò ëîòà îò ïðîöåíòà äåïîçèòà                               |
//+----------------------------------------------------------------------------+ 
 double GetLot()
  {
   double metod  = 0;
   if(Choice_method)metod = AccountBalance();
   else metod = AccountFreeMargin();
   double MinLot = MarketInfo(Symbol(),MODE_MINLOT);
   double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT);
   double Prots = Risk/100;
   double Lotsi=MathFloor(metod*Prots/MarketInfo(Symbol(),MODE_MARGINREQUIRED)
               /MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP);// Ëîòû
   if(Lotsi<MinLot)Lotsi=MinLot;
   if(Lotsi>MaxLot)Lotsi=MaxLot;               
   return(Lotsi);
  }
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 11.09.2008                                                     |
//|  Îïèñàíèå : Ïåðåíîñ óðîâíÿ ñòîïà â áåçóáûòîê                               |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   ( ""  - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   ( -1  - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                ( -1  - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
void MovingInWL(string sy="", int op=-1, int mn=-1) {
  double po, pp;
  int    i, k=OrdersTotal();

  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      po=MarketInfo(OrderSymbol(), MODE_POINT);
      if (OrderType()==OP_BUY) {
        if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
          pp=MarketInfo(OrderSymbol(), MODE_BID);
          if (pp-OrderOpenPrice()>LevelProfit*po) {
            ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
          }
        }
      }
      if (OrderType()==OP_SELL) {
        if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
          pp=MarketInfo(OrderSymbol(), MODE_ASK);
          if (OrderOpenPrice()-pp>LevelProfit*po) {
            ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
          }
        }
      }
    }
  }
}
//+----------------------------------------------------------------------+
//| Îïèñàíèå: Ñîçäàíèå òåêñòîâîé ìåòêè                                   | 
//| Àâòîð:    Þðèé Òîêìàíü                                               |
//| e-mail:   yuriytokman@gmail.com                                      |
//+----------------------------------------------------------------------+
 void Label(string name_label,           //Èìÿ îáúåêòà.
            string text_label,           //Òåêñò îáüåêòà. 
            int corner = 2,              //Hîìåð óãëà ïðèâÿçêè 
            int x = 3,                   //Pàññòîÿíèå X-êîîðäèíàòû â ïèêñåëÿõ 
            int y = 15,                   //Pàññòîÿíèå Y-êîîðäèíàòû â ïèêñåëÿõ 
            int font_size = 10,          //Ðàçìåð øðèôòà â ïóíêòàõ.
            string font_name = "Arial",  //Íàèìåíîâàíèå øðèôòà.
            color text_color = LimeGreen //Öâåò òåêñòà.
           )
  {
   if (ObjectFind(name_label)!=-1) ObjectDelete(name_label);
       ObjectCreate(name_label,OBJ_LABEL,0,0,0,0,0);         
       ObjectSet(name_label,OBJPROP_CORNER,corner);
       ObjectSet(name_label,OBJPROP_XDISTANCE,x);
       ObjectSet(name_label,OBJPROP_YDISTANCE,y);
       ObjectSetText(name_label,text_label,font_size,font_name,text_color);
  }

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