Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reached
Indicators Used
Moving average indicator
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
jvt9ga5tru
//+------------------------------------------------------------------+
//|                                                       Òîïîð.mq4  |
//|                                                                  |
//|                                                                  |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+



//---------------------------------------------------------------  -- 
extern string x1 ="Íàñòðîéêè óïðàâëåíèÿ êàïèòàëîì";
extern double StopLoss   =230;     // SL äëÿ îòêðûâàåìîãî îðäåðà
extern double TakeProfit =280;      // ÒÐ äëÿ îòêðûâàåìîãî îðäåðà 
extern double Lots       =0.1;     // Æåñòêî çàäàííîå êîëè÷. ëîòîâ
extern double  óìæèòü_íà=2;   //Íå ìîæåò áûòü ðàâíûì íóëþ
extern int MagicNumber =123;
extern double PipsAway_1 =250;// Îòêðûâàåìñÿ íà ðàñòàÿíèè îò èíäèêàòîðà â ïóíêòàõ
//extern double PipsAway_2 =170;// Îòêðûâàåìñÿ íà ðàñòàÿíèè îò èíäèêàòîðà â ïóíêòàõ
extern string block = " îñíîâíûå ïàðàìåòðû äëÿ ima";
extern int    Period_MA_1=17;      // Ïåðèîä ÌÀ 
extern int    MODE       =3; // SMA-0 EMA-1 SMMA-2 LWMA-3
extern int    PRICE      =0; // CLOSE-0 OPEN-1 HIGH-2 LOW-3 MEDIAN-4 TYPICAL-5 WEIGHTED-6
extern string  LatOrderStoppedOut = " --Âðåìÿ çàäåðæêè--";
extern bool     UseDelay = true; // Åëè "true" òî ðàáîòàåì ñ çàäåðæêîé 
extern int     MinutesToDelay = 30;//Âðåìÿ çàäåðæêè(Ìèíóò) ïîñëå çàêðûòèÿ ñ óáûòêîì 
extern string  AddComment     =  "";

bool Work=true;                    // Ýêñïåðò áóäåò ðàáîòàòü.
string Symb;                       // Íàçâàíèå ôèíàíñ. èíñòðóìåíòà
bool StoppedOut=false;
datetime StopTime; 
double dl;
double a;
int X=0;
double S = 0.0000;
//---------------------------------------------------------------  --
int init()
  {
  a=Lots;
   return(0);
  }
int start()
  {
   int
   Total;                           // Êîëè÷åñòâî îðäåðîâ â îêíå 
   double
   MA_1_t,                          // Çíà÷åí. ÌÀ_1 òåêóùåå
   Lot_1;
   bool
   Ans  =false,                     // Îòâåò ñåðâåðà ïîñëå çàêðûòèÿ
   Opn_B=false,                     // Êðèòåðèé äëÿ îòêðûòèÿ  Buy
   Opn_S=false;                     // Êðèòåðèé äëÿ îòêðûòèÿ  Sell
  
//---------------------------------------------------------------  --
   // Ïðåäâàðèò.îáðàáîòêà
   if(Work==false)                              // Êðèòè÷åñêàÿ îøèáêà
     {
      Alert("Êðèòè÷åñêàÿ îøèáêà. Ýêñïåðò íå ðàáîòàåò.");
      return;                                   // Âûõîä èç start()
     }
                      
   S=Open[0];
   Sleep(1000);         
     if(OrdersTotal() == 0 && X==1)
     { 
     if (Close[0]>dl){Lots=a;}
     X=0;
     }         
     if(OrdersTotal() == 0 && X==2)
     { 
     if (Close[0]<dl){Lots=a;}
     X=0;
      }
//--------------------------------------------------------------- --
   // Ó÷¸ò îðäåðîâ
   Symb=Symbol();                               // Íàçâàíèå ôèí.èíñòð.
   Total=0;                                     // Êîëè÷åñòâî îðäåðîâ
   for(int i=1; i<=OrdersTotal(); i++)          // Öèêë ïåðåáîðà îðäåð
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
        {                                       // Àíàëèç îðäåðîâ:
         if (OrderSymbol()!=Symb)continue;      // Íå íàø ôèí. èíñòðóì
         if (OrderType()>1)                     // Ïîïàëñÿ îòëîæåííûé
           {
            Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.");
            return;                             // Âûõîä èç start()
           }
         Total++;                               // Ñ÷¸ò÷èê ðûíî÷í. îðä
         if (Total>1)                           // Íå áîëåå îäíîãî îðä
           {
            Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.");
            return;                             // Âûõîä èç start()
           }
        int Ticket=OrderTicket();                  // Íîìåð âûáðàíí. îðä.
        int Tip   =OrderType();                    // Òèï âûáðàííîãî îðä.(B=0,S=1)
        double Price =OrderOpenPrice();               // Öåíà âûáðàíí. îðä.
        double SL    =OrderStopLoss();                // SL âûáðàííîãî îðä.
        double TP    =OrderTakeProfit();              // TP âûáðàííîãî îðä.
        //double Lot   =OrderLots();                  // Êîëè÷. ëîòîâ â âûáðàí.îðäåðå
       // int OrNumber=OrdersHistoryTotal(); //êîëè÷åñòâî çàêðûòûõ ïîçèöèé è óäàëåííûõ îðäåðîâ 
        }
     }
     if (UseDelay == true)// Åëè "true" òî ðàáîòàåì ñ çàäåðæêîé 
      {
      StoppedOut = LastTradeStoppedOut();
      if  (CurTime() < StopTime)
     {
       Comment("Íèêàêîé òîðãîâëè Äî:"
       + TimeToStr(StopTime,TIME_DATE|TIME_MINUTES));
      return(0);
     }
    }
 
//---------------------------------------------------------------  --
 // Òîðãîâûå êðèòåðèè
   

   MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE,PRICE,1); // ÌÀ_1

//---------------------------------------------------------------  --
   // Âû÷èñëåíèå òîðãîâûõ êðèòåðèåâ
   if (OrdersTotal()==0)
    {
     if (Ask < MA_1_t-(PipsAway_1*Point))
        Opn_B=true;         // Îòêðûòèå Buy 
     if (Bid > MA_1_t+(PipsAway_1*Point))        
        Opn_S=true;         // Îòêðûòèå Sell
     }
//---------------------------------------------------------------  --
   // Îòêðûòèå îðäåðîâ
   while(true)                                  // Öèêë îòêðûòèÿ îðä.
     {
      if (Total==0 && Opn_B==true)              // Îòêðûòûõ îðä. íåò +
        {                                       // êðèòåðèé îòêð. Buy
         RefreshRates();                        // Îáíîâëåíèå äàííûõ
         SL=Bid - New_Stop(StopLoss)*Point;     // Âû÷èñëåíèå SL îòêð.
         TP=Bid + New_Stop(TakeProfit)*Point;   // Âû÷èñëåíèå TP îòêð.
         Alert("Ïîïûòêà îòêðûòü Buy ");
         dl=Close[0];
         Ticket=OrderSend(Symb,OP_BUY,Lots,Ask,2,SL,TP,"",MagicNumber,0,Blue);//Îòêðûòèå Buy
         Lots=Lots*óìæèòü_íà;
             X=1;
         if (Ticket > 0)                        // Ïîëó÷èëîñü :)
           {
            //Alert ("Îòêðûò îðäåð Buy ",Ticket);
            return;                             // Âûõîä èç start()
           }
         if (Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
            continue;                           // Ïîâòîðíàÿ ïîïûòêà
         return;                                // Âûõîä èç start()
        }
      if (Total==0 && Opn_S==true)              // Îòêðûòûõ îðä. íåò +
        {                                       // êðèòåðèé îòêð. Sell
         RefreshRates();                        // Îáíîâëåíèå äàííûõ
         SL=Ask + New_Stop(StopLoss)*Point;     // Âû÷èñëåíèå SL îòêð.
         TP=Ask - New_Stop(TakeProfit)*Point;   // Âû÷èñëåíèå TP îòêð.
         Alert("Ïîïûòêà îòêðûòü Sell ");
          dl=Close[0];
         Ticket=OrderSend(Symb,OP_SELL,Lots,Bid,2,SL,TP,"",MagicNumber,0,Red);//Îòêðûòèå Sel
          Lots=Lots*óìæèòü_íà;
             X=2;
         if (Ticket > 0)                        // Ïîëó÷èëîñü :)
           {
           // Alert ("Îòêðûò îðäåð Sell ",Ticket);
            return;                             // Âûõîä èç start()
           }
         if (Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
            continue;                           // Ïîâòîðíàÿ ïîïûòêà
         return;                                // Âûõîä èç start()
        }
      break;                                    // Âûõîä èç while
     }
//--------------------------------------------------------------- --
   return;                                      // Âûõîä èç start()
  }
//----------------------------------------------------------------
int Fun_Error(int Error)                        // Ô-èÿ îáðàáîò îøèáîê
  {
   switch(Error)
     {                                          // Ïðåîäîëèìûå îøèáêè            
      case  4: Alert("Òîðãîâûé ñåðâåð çàíÿò. Ïðîáóåì åù¸ ðàç..");
         Sleep(3000);                           // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 135:Alert("Öåíà èçìåíèëàñü. Ïðîáóåì åù¸ ðàç..");
         RefreshRates();                        // Îáíîâèì äàííûå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 136:Alert("Íåò öåí. Æä¸ì íîâûé òèê..");
         while(RefreshRates()==false)           // Äî íîâîãî òèêà
            Sleep(1);                           // Çàäåðæêà â öèêëå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 137:Alert("Áðîêåð çàíÿò. Ïðîáóåì åù¸ ðàç..");
         Sleep(3000);                           // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
      case 146:Alert("Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïðîáóåì åù¸..");
         Sleep(500);                            // Ïðîñòîå ðåøåíèå
         return(1);                             // Âûõîä èç ôóíêöèè
         // Êðèòè÷åñêèå îøèáêè
      case  2: Alert("Îáùàÿ îøèáêà.");
         return(0);                             // Âûõîä èç ôóíêöèè
      case  5: Alert("Ñòàðàÿ âåðñèÿ òåðìèíàëà.");
         Work=false;                            // Áîëüøå íå ðàáîòàòü
         return(0);                             // Âûõîä èç ôóíêöèè
      case 64: Alert("Ñ÷åò çàáëîêèðîâàí.");
         Work=false;                            // Áîëüøå íå ðàáîòàòü
         return(0);                             // Âûõîä èç ôóíêöèè
      case 133:Alert("Òîðãîâëÿ çàïðåùåíà.");
         return(0);                             // Âûõîä èç ôóíêöèè
      case 134:Alert("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè.");
         return(0);                             // Âûõîä èç ôóíêöèè
      default: Alert("Âîçíèêëà îøèáêà ",Error); // Äðóãèå âàðèàíòû   
         return(0);                             // Âûõîä èç ôóíêöèè
     }
  }
//-------------------------------------------------------------- --
int New_Stop(int Parametr)                      // Ïðîâåðêà ñòîï-ïðèê.
  {
   int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Ìèíèì. äèñòàíöèÿ
   if (Parametr<Min_Dist)                       // Åñëè ìåíüøå äîïóñò.
     {
      Parametr=Min_Dist;                        // Óñòàíîâèì äîïóñò.
      Alert("Óâåëè÷åíà äèñòàíöèÿ ñòîï-ïðèêàçà.");
     }
   return(Parametr);                            // Âîçâðàò çíà÷åíèÿ
  }
//----------------------------------------------------------------    
     datetime LastTradeStoppedOut()//Åñëè ïîëó÷èëè óáûòîê òî ïðèìåíÿåì çàäåðæêó
   {
   int cnt, total;
   datetime NextTime;
   bool Stopped=false;
   NextTime = 0;
   total = HistoryTotal();
   for (cnt = total - 1; cnt >= 0; cnt--)
    {
      OrderSelect (cnt, SELECT_BY_POS, MODE_HISTORY);
      if(OrderSymbol()==Symb && OrderMagicNumber() == MagicNumber)
      {
        Stopped = false;
        if (OrderType() == OP_BUY)
        {
          if (OrderClosePrice() - OrderOpenPrice() < 0)
          {
             Stopped = true;
          }
          cnt = 0;
        }
        if (OrderType() == OP_SELL)
        {
          if (OrderOpenPrice() - OrderClosePrice() < 0)
          {
           Stopped = true;
          }
          cnt = 0;
        }
      }
   }
   if (Stopped)
   {
    StopTime = OrderCloseTime() + MinutesToDelay*60;
   }
   return (Stopped);
} 

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