Author: ��� ����� �. aka KimIV
Price Data Components
Series array that contains open time of each bar
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
Miscellaneous
It opens Message Boxes to the userIt plays sound alertsIt issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
OpenOrder
//+----------------------------------------------------------------------------+
//|                                                           ByMarketBuy.mq4  |
//|                                                                            |
//|                                                    Êèì Èãîðü Â. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//|  22.06.2008  Ñêðèïò ïîêóïàåò òåêóùèé ñèìâîë ïî òåêóùåé öåíå.               |
//+----------------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link      "http://www.kimiv.ru"

//------- Âíåøíèå ïàðàìåòðû ñêðèïòà -------------------------------------------+
double MaxLoss                  = 200;            // Ìàêñèìàëüíûé ôèêñèðîâàííûé óáûòîê, â óå
int    PersentLoss              = 0;              // Ïðîöåíò óáûòêà îò îñòàòêà (åñëè 0, òî èñïîëüçóåòñÿ MaxLoss)
int    MagicNumber              = 0;              // Èäåíòèôèêàòîð ïîçèöèè

bool   BySessionTime            = false;          // true - Îòêðîåò ïîçèöèþ òîëüêî ìåæäó OpenSessionTime è CloseSessionTime
string OpenSessionTime          = "09:00";
string CloseSessionTime         = "20:00";

bool   ByProfitUnderLoss        = true;           // Îòêðîåò ïîçèöèþ åñëè ïðåäïîëàãàåìàÿ ïðèáûëü áîëüøå ôèêñèðîâàííîãî óáûòêà â ProfitFactor ðàç
double ProfitFactor             = 1;              // Çíà÷åíèå îòíîøåíèÿ ïðåäïîëàãàåìîé ïðèáûëè ê ôèêñèðîâàííîìó óáûòêó

color  StopLossLineColor        = Red;            // Öâåò ëèíèè ñòîï ëîññ
color  TakeProfitLineColor      = Green;          // Öâåò ëèíèè ïðîôèòà

bool   ShowEdMessage            = true;           // Ïîêàçûâàòü äîïîëíèòåëüíîå ñîîáùåíèå î ïîäòâåðæäåíèè îòêðûòèÿ ïîçèöèè
bool   MarketWatch              = false;          // Ðûíî÷íîå èñïîëíåíèå
int    Slippage                 = 3;              // Ïðîñêàëüçûâàíèå öåíû
int    NumberOfTry              = 2;              // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê

//------- Ãëîáàëüíûå ïåðåìåííûå ñêðèïòà ---------------------------------------+
bool   gbDisabled               = False;          // Áëîêèðîâêà
bool   UseSound                 = false;          // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
string NameFileSound            = "expert.wav";   // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
color  clOpenBuy                = LightBlue;      // Öâåò çíà÷êà îòêðûòèÿ Buy
color  clOpenSell               = LightCoral;     // Öâåò çíà÷êà îòêðûòèÿ Sell

//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+
#include <stdlib.mqh>                             // Ñòàíäàðòíàÿ áèáëèîòåêà ÌÒ4


//+----------------------------------------------------------------------------+
//|  script program start function                                             |
//+----------------------------------------------------------------------------+
void start() {
  double sl=0,                       // Çíà÷åíèå êàòèðîâêè ëèíèè ñòîïà
         tp=0,                       // Çíà÷åíèå êàòèðîâêè ëèíèè ïðîôèòà
         Loss=0,                     // Óáûòîê â áàçîâîé âàëþòå äåïîçèòà. Âûáèðàåòñÿ ôèêñèðîâàííûé èëè ïðîöåíò
         LossReal=0,                 // Óáûòîê â áàçîâîé âàëþòå äåïîçèòà. Ôàêòè÷åñêèé, ìåæäó ñòîïîì è îòêðûòèåì
         StopLossValue=0,            // Ñòîï, êàê ðàçíèöà êàòèðîâîê ëèíèè ñòîïà è òåêóùåé öåíû
         TakeProfitValue=0,          // Ïðîôèò, êàê ðàçíèöà êàòèðîâîê ëèíèè ïðîôèòà è òåêóùåé öåíû
         Profit=0,                   // Ïðîôèò â áàçîâîé âàëþòå äåïîçèòà
         Lots=0;                     // Ëîò. Íå ïîñòîÿííûé è ðàññ÷èòûâàåòñÿ îò ïîñòîÿííîãî óáûòêà
  int    Goto=0;                     // Íàïðàâëåíèå îòêðûòèÿ ïîçèöèè. Äëÿ ôóíêöèè OpenPosition.
  string Operation;                  // Íàïðàâëåíèå îòêðûòèÿ ïîçèöèÿ. Äëÿ ôóíêöèè MessageBox.

  // Ðàñ÷åò ðàçìåðà ëîòà
  double Step =MarketInfo(Symbol(),MODE_LOTSTEP);          // øàã èçìåíåíèÿ ðàçìåðà ëîòà. Ïðèìåð: 0.01.
  double Free=AccountFreeMargin();                         // ðàçìåð ñâîáîäíûõ ñðåäñòâ â âàëþòå äåïîçèòà ïî ôàêòó. Ïðèìåð: 195$.
  //double OneLot =MarketInfo(Symbol(),MODE_MARGINREQUIRED); // ñòîèìîñòü îäíîãî ëîòà ïî òåêóùåé âàëþòå. Ïðèìåð: 1000$.
  double PointSize=MarketInfo(Symbol(),MODE_POINT);        // Ðàçìåð ïóíêòà â âàëþòå êîòèðîâêè. Ïðèìåð: EURUSD=0.0001
  //int Pl=AccountLeverage();                                // çíà÷åíèå ïëå÷à. Ïðèìåð: 100.
  double TickValue=MarketInfo(Symbol(), MODE_TICKVALUE);   // Öåíà îäíîãî ïóíêòà â âàëþòå äåïîçèòà äëÿ 1ëîòà. Ïðèìåð: EURUSD=10.0$; EURGBP=14.9$
  
  // Âûáîð óáûòêà: ôèêñèðîâàííûé èëè ïðîöåíò îò îñòàòêà
  if (PersentLoss==0) Loss=MaxLoss;
  else Loss=Free*PersentLoss/100;

  // Îòêðîåò ïîçèöèþ òîëüêî ìåæäó OpenSessionTime è CloseSessionTime îòíîñèòåëüíîãî ëîêàëüíîãî âðåìåíè
  if (BySessionTime && OpenInTimeGap(OpenSessionTime, CloseSessionTime)==0) {
  MessageBox( "Îøèáêà:"
             +"\n"
             +"Âíå òîðãîâîé ñåññèè ..."
             , "Îøèáêà", 0x00000000);  
  return(0);
  }
  
  // Åñëè îáùàÿ ïðèáûëü ìåæäó ñòîïîì è îòêðûòèåì âñåõ îðäåðîâ áîëüøå èëè ðàâíà Loss, èëè íåò îðäåðîâ òî äàëüøå. Èíà÷å âûõîäèì
  if (ByProfitUnderLoss && AllOrdersProfit(Loss)==0) {
  MessageBox( "Îøèáêà:"
             +"\n"
             +"Ïðèáûëü ïî îòêðûòûì îðäåðàì < "+DoubleToStr(Loss, 2)
             , "Îøèáêà", 0x00000000);  
  return(0);
  }
  
  LinesCreate();

  // Âûâîä ìåññåäæáîêñà äëÿ ïàóçû âûñòàâëåíèÿ ëèíèé
  int  Answer = MessageBox( "Âûñòàâòå SL-Red è TP-Green", "Óñòàíîâêà îðäåðà", 0x00000001 | 0x00000040 | 0x00040000 );
  if ( Answer != 1) { deinit(); return(0); } // Åñëè íàæàòà ëþáàÿ êíîïêà êðîìå "ÎÊ" - âûõîäèì
  
  // Ñ÷èòûâàíèå çíà÷åíèé êàòèðîâîê ïîëîæåíèÿ ñòîïà è ïðîôèòà ñ ëèíèé
  sl = NormalizeDouble( ObjectGet( "StopLossLine", OBJPROP_PRICE1 ), MarketInfo( Symbol(), MODE_DIGITS ) );
  tp = NormalizeDouble( ObjectGet( "TakeProfitLine", OBJPROP_PRICE1 ), MarketInfo( Symbol(), MODE_DIGITS ) );

  // Ïîêóïêà èëè ïðîäàæà
  if (sl<tp) {
  Operation="BUY";
  Goto=OP_BUY; 
  StopLossValue=Ask-sl;
  TakeProfitValue=tp-Ask; 
  }
     if (sl>tp) {
     Operation="SELL";
     Goto=OP_SELL; 
     StopLossValue=sl-Bid; 
     TakeProfitValue=Bid-tp; 
     }
   
  // Ðàñ÷åò ðàçìåðà ëîòà è âîçìîæíîãî ïðîôèòà
  Lots=MathFloor(Loss*PointSize/StopLossValue/TickValue/Step)*Step;    // Â ëîòàõ
  LossReal=StopLossValue*Lots*TickValue/PointSize;                     // Ôàêòè÷åñêèé ðàçìåð ëîññ ñ ó÷åòîì ðàçìåðà øàãà èçìåíåíèÿ ëîòà
  Profit=TakeProfitValue*Lots*TickValue/PointSize;                     // Â $

  
  // Îòêðîåò ïîçèöèþ åñëè ïðåäïîëàãàåìàÿ ïðèáûëü áîëüøå ôèêñèðîâàííîãî óáûòêà â ProfitFactor ðàç
  if (ByProfitUnderLoss && Profit/LossReal<ProfitFactor) {
  MessageBox( "Îøèáêà:"
             +"\n"
             +"TP("+DoubleToStr(Profit, 2)+"$) / "
             +"SL("+DoubleToStr(LossReal, 2)+"$) < "
             +"PF("+DoubleToStr(ProfitFactor, 2)+")"
             , "Îøèáêà", 0x00000000);  

  return(0);
  }
  
  // Âûâîä ìåññåäæáîêñà äëÿ ïðîâåðêè çíà÷åíèé è ïîäòâåðæäåíèÿ îòêðûòèÿ îðäåðà
  if (ShowEdMessage) {Answer = MessageBox( 
                      Operation+"\n"+
                      "------------------------------"+"\n"+                       
                      "Lots\t   "+DoubleToStr(Lots, 2)+"\n"+
                      "SL\t   "+DoubleToStr(LossReal, 2)+"$ "+"<"+DoubleToStr(Loss, 2)+"\n"+
                      "TP\t   "+DoubleToStr(Profit, 2)+"$"+"\n"+
                      "------------------------------"+"\n"+
                      "SL\t   "+DoubleToStr(sl,MarketInfo( Symbol(), MODE_DIGITS ))+" / "+
                      DoubleToStr(StopLossValue/PointSize, 0)+"ï"+"\n"+
                      "TP\t   "+DoubleToStr(tp,MarketInfo( Symbol(), MODE_DIGITS ))+" / "+
                      DoubleToStr(TakeProfitValue/PointSize, 0)+"ï"+"\n"+
                      "TickValue\t   "+DoubleToStr(TickValue*Lots, 2)+"$"+"\n"
                      , "Ïîäòâåðäèòå ...", 0x00000001 | 0x00000040 | 0x00040000 );
  if ( Answer != 1) { deinit(); return(0); } // Åñëè íàæàòà ëþáàÿ êíîïêà êðîìå "ÎÊ" - âûõîäèì
  }

  // Îòêðûòèå ïîçèöèè
  RefreshRates();
  OpenPosition(NULL, Goto, Lots, sl, tp, MagicNumber);
}

//+----------------------------------------------------------------------------+
//|  script program deinit function                                            |
//+----------------------------------------------------------------------------+
int deinit() {
  LinesDelete();
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : my.own.st@gmail.com                                            |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 09.03.2010                                                     |
//|  Îïèñàíèå : Ñîçäàíèå ãîðèçîíòàëüíûõ ëèíèé ïðîôèòà è ñòîïà                  |
//+----------------------------------------------------------------------------+
void LinesCreate() {
  ObjectCreate( "StopLossLine", OBJ_HLINE, 0, 0, Bid+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point, 0, 0, 0, 0 );
  ObjectSet( "StopLossLine", OBJPROP_COLOR, StopLossLineColor );
  ObjectSetText( "StopLossLine", "Ëèíèÿ ñòîïà", 6, "Arial", StopLossLineColor );
  		ObjectCreate( "TakeProfitLine", OBJ_HLINE, 0, 0, Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point, 0, 0, 0, 0 );
		ObjectSet( "TakeProfitLine", OBJPROP_COLOR, TakeProfitLineColor );
		ObjectSetText( "TakeProfitLine", "Ëèíèÿ ïðîôèòà", 6, "Arial", TakeProfitLineColor );
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : my.own.st@gmail.com                                            |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 09.03.2010                                                     |
//|  Îïèñàíèå : Óäàëåíèå ãîðèçîíòàëüíûõ ëèíèé ïðîôèòà è ñòîïà                  |
//+----------------------------------------------------------------------------+
void LinesDelete() {
  ObjectDelete( "StopLossLine");
  ObjectDelete( "TakeProfitLine");
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 06.03.2008                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèé                          |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    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                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè                      |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    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");
  }
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òàéìôðåéìà                             |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    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");
  }
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 01.09.2005                                                     |
//|  Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë                           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    m - òåêñò ñîîáùåíèÿ                                                     |
//+----------------------------------------------------------------------------+
void Message(string m) {
  Comment(m);
  if (StringLen(m)>0) Print(m);
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 28.11.2006                                                     |
//|  Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà.           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    pp - öåíà óñòàíîâêè îðäåðà                                              |
//|    sl - öåíîâîé óðîâåíü ñòîïà                                              |
//|    tp - öåíîâîé óðîâåíü òåéêà                                              |
//|    ex - äàòà èñòå÷åíèÿ                                                     |
//+----------------------------------------------------------------------------+
void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) {
  bool   fm;
  color  cl;
  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, ex, 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                   |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 10.04.2008                                                     |
//|  Îïèñàíèå : Îòêðûâàåò ïîçèöèþ ïî ðûíî÷íîé öåíå.                            |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (NULL èëè "" - òåêóùèé ñèìâîë)          |
//|    op - îïåðàöèÿ                                                           |
//|    ll - ëîò                                                                |
//|    sl - óðîâåíü ñòîï                                                       |
//|    tp - óðîâåíü òåéê                                                       |
//|    mn - MagicNumber                                                        |
//+----------------------------------------------------------------------------+
void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) {
  color    clOpen;
  datetime ot;
  double   pp, pa, pb;
  int      dg, err, it, ticket=0;
  string   lsComm=WindowExpertName()+" "+GetNameTF(Period());

  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && IsStopped()) {
      Print("OpenPosition(): Îñòàíîâêà ðàáîòû ôóíêöèè");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    dg=MarketInfo(sy, MODE_DIGITS);
    pa=MarketInfo(sy, MODE_ASK);
    pb=MarketInfo(sy, MODE_BID);
    if (op==OP_BUY) pp=pa; else pp=pb;
    pp=NormalizeDouble(pp, dg);
    ot=TimeCurrent();
    if (MarketWatch)
      ticket=OrderSend(sy, op, ll, pp, Slippage, 0, 0, lsComm, mn, 0, CLR_NONE);
    else
      ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, CLR_NONE);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (pa==0 && pb==0) Message("Ïðîâåðüòå â Îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy);
      // Âûâîä ñîîáùåíèÿ îá îøèáêå
// Ìîé áëîê
Alert("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
// Êîíåö ìîåãî áëîêà
      Print("Error(",err,") opening position: ",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 (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Äëèòåëüíàÿ ïàóçà
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      }
      if (err==140 || err==148 || err==4110 || err==4111) break;
      if (err==141) Sleep(1000*100);
      if (err==145) Sleep(1000*17);
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      if (err!=135) Sleep(1000*7.7);
    }
  }
  if (MarketWatch && ticket>0 && (sl>0 || tp>0)) {
    if (OrderSelect(ticket, SELECT_BY_TICKET)) ModifyOrder(-1, sl, tp);
  }
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    :                                                                |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 17.03.2010                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò: 1 - åñëè ïðèáûëü ïî âñåì îòêðûòûì îðäåðàì          |
//|                             áîëüøå Limit èëè åñëè íåò îòêðûòûõ îðäåðîâ;    |
//|                         0 - åñëè ïðèáûëü ïî âñåì îðäåðàì ìåíüøå Limit;     |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    Limit - ëèìèò ïðèáûëè äëÿ îòêðûòèÿ ñëåäóþùåé ïîçèöèè                    |
//+----------------------------------------------------------------------------+
bool AllOrdersProfit (double Limit) {
  int    total=OrdersTotal();                                            // Ïðèñâàèâàåì total ÷èñëî îòêðûòûõ îðäåðîâ
  double Profit=0;                                                       // Ïðèáûëü ìåæäó ñòîïîì è îòêðûòèåì (ïðèìåð: 120$; -20$)
  
  if (total>0) {                                                         // Ïðîâåðÿåì åñòü ëè îðäåð?
      
      for(int i=total; i>=0; i--) {                                      // Âûïîëíåíèå öèêëà, åñëè åñòü îäèí èëè áîëåå îòêðûòûõ îðäåðîâ è ïåðåáèðàåì èõ.
        
        if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) {            // Ïðîâåðÿåì ñðåäè îòêðûòûõ îðäåðîâ êðîìå îòëîæåííûõ, çàêðûòûõ èëè óäàëåííûõ
          
          if (OrderType()==OP_BUY) {                                     // Ïðîâåðÿåì ýòî îðäåð BUY
          Profit=Profit+(OrderStopLoss()-OrderOpenPrice())               // Ïðèáûëü ïî îðäåðó ìåæäó ñòîïîì è îòêðûòèåì ñî çíàêîì
                         /MarketInfo(Symbol(),MODE_POINT)
                         *MarketInfo(Symbol(), MODE_TICKVALUE)
                         *OrderLots();
          }

             if (OrderType()==OP_SELL) {                                 // Ïðîâåðÿåì ýòî îðäåð SELL
             Profit=Profit+(OrderOpenPrice()-OrderStopLoss())            // Ïðèáûëü ïî îðäåðó ìåæäó ñòîïîì è îòêðûòèåì ñî çíàêîì
                            /MarketInfo(Symbol(),MODE_POINT)
                            *MarketInfo(Symbol(), MODE_TICKVALUE)
                            *OrderLots();
             }
        }
      }
  
  if (Profit>=Limit) return(1);                                          // Ïðîâåðÿåì ïðèáûëü ïî âñåì îðäåðàì  
  else return(0);
  }
  else {                                                                 // Åñëè íåò îòêðûòûõ îðäåðîâ
  return(1);
  }
}

//+----------------------------------------------------------------------------+
//|  Àâòîð    :                                                                |
//+----------------------------------------------------------------------------+
//|  Âåðñèÿ   : 17.03.2010                                                     |
//|  Îïèñàíèå : Âîçâðàùàåò: 1 - åñëè ëîêàëüíîå âðåìÿ áîëüøå StartTime è        |
//|                             ìåíüøå FinishTime                              |
//|                         0 - åñëè ëîêàëüíîå âðåìÿ íå ïîïàäàåò â èíòåðâàë    |
//+----------------------------------------------------------------------------+
bool OpenInTimeGap (string StartTime,     // âðåìÿ ñ
                    string FinishTime)    // âðåìÿ ïî
{
if (TimeLocal()>=StrToTime(StartTime) && TimeLocal()<=StrToTime(FinishTime)) return(1);
else return(0);
}

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