Move_v1_by_Vlad123

Author: Vlad123
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reached
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Move_v1_by_Vlad123
//+------------------------------------------------------------------+
//|                                            Move_v1_byVlad123.mq4 |
//|                                                          Vlad123 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Vlad123"

//--------------------------------------------------------------- 1 --

extern double StopLossMax   =150;        // SL ìàêñèìàëüíûé äëÿ îòêðûâàåìîãî îðäåðà
extern double TakeProfitLevel =4.5;      // ÒÐ óðîâåíü ÷åðåç äåëåíèå êàíàëà ïåðèîäà Period_1
extern int    Period_1=15;      // Ïåðèîä ïîñëåäíåãî ìîíèòîðèíãà - çäåñü äëÿ Ì15
extern int    Period_2=10;      // Ïåðèîä æèçíè ïðîãíîçà - çäåñü äëÿ Ì15
extern int    Period_3=2;      // Ïåðèîäáîëüøîãî ìîíèòîðèíãà äëÿ âûÿâëåíèÿ îòíîñèòåëíîãî äâèæåíèÿ, çäåñü äëÿ Ì15, íî â ÄÍßÕ
extern double MoveLevel=0.5;    // Ñèëà îòíîñèòåëüíîãî äâèæåíèÿ
extern double HistPriceMin=0.5;    // Öåíà íèæå ìèíèìóìîâ ïåðèîäà òîðãîâëè
extern double HistPriceMax=2.0;    // Öåíà âûøå ìàêñèìóìîâ ïåðèîäà òîðãîâëè
extern double BackLevelMin=0.14;    // Ìèíèìàëüíûé óðîâåíü îòñêîêà äëÿ âõîäà
extern double BackLevelMax=0.17;    // Ìàêñèìàëüíûé óðîâåíü îòñêîêà äëÿ âõîäà
extern double Lots       =0.1;     // Æåñòêî çàäàííîå êîëè÷. ëîòîâ
extern double Prots      =0.07;    // Ïðîöåíò ñâîáîäíûõ ñðåäñòâ
 
bool Work=true;                    // Ýêñïåðò áóäåò ðàáîòàòü.
string Symb;                       // Íàçâàíèå ôèíàíñ. Èíñòðóìåíòà



double OpenPrice;                  // Öåíà îòêðûòèÿ ïîçèöèè


//--------------------------------------------------------------- 2 --
int start()
  {
   int
   Total,                           // Êîëè÷åñòâî îðäåðîâ â îêíå 
   Tip=-1,                          // Òèï âûáðàí. îðäåðà (B=0,S=1)
   Ticket;                          // Íîìåð îðäåðà
   //StopLoss,		                  // SL
   //TakeProfit;		                  // TP

   double
   Lot,                             // Êîëè÷. ëîòîâ â âûáðàí.îðäåðå
   Lts,                             // Êîëè÷. ëîòîâ â îòêðûâ.îðäåðå
   Min_Lot,                         // Ìèíèìàëüíîå êîëè÷åñòâî ëîòîâ
   Step,                            // Øàã èçìåíåíèÿ ðàçìåðà ëîòà
   Free,                            // Òåêóùèå ñâîáîäíûå ñðåäñòâà
   One_Lot,                         // Ñòîèìîñòü îäíîãî ëîòà
   Price,                           // Öåíà âûáðàííîãî îðäåðà
   SL,                              // SL âûáðàííîãî îðäåðà 
   TP;                              // TP âûáðàííîãî îðäåðà
   bool
   Ans  =false,                     // Îòâåò ñåðâåðà ïîñëå çàêðûòèÿ
   Cls_B=false,                     // Êðèòåðèé äëÿ çàêðûòèÿ  Buy
   Cls_S=false,                     // Êðèòåðèé äëÿ çàêðûòèÿ  Sell
   Opn_B=false,                     // Êðèòåðèé äëÿ îòêðûòèÿ  Buy
   Opn_S=false;                     // Êðèòåðèé äëÿ îòêðûòèÿ  Sell


//--------------------------------------------------------------- 3 --
   // Ïðåäâàðèò.îáðàáîòêà
   if(Bars < Period_3)                       // Íåäîñòàòî÷íî áàðîâ
     {
      Alert("Íåäîñòàòî÷íî áàðîâ â îêíå. Ýêñïåðò íå ðàáîòàåò.");
      return;                                   // Âûõîä èç start()
     }
   if(Work==false)                              // Êðèòè÷åñêàÿ îøèáêà
     {
      Alert("Êðèòè÷åñêàÿ îøèáêà. Ýêñïåðò íå ðàáîòàåò.");
      return;                                   // Âûõîä èç start()
     }
//--------------------------------------------------------------- 4 -

// Ó÷¸ò îðäåðîâ
   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()
           }
         Ticket=OrderTicket();                  // Íîìåð âûáðàíí. îðä.
         Tip   =OrderType();                    // Òèï âûáðàííîãî îðä.
         Price =OrderOpenPrice();               // Öåíà âûáðàíí. îðä.
         SL    =OrderStopLoss();                // SL âûáðàííîãî îðä.
         TP    =OrderTakeProfit();              // TP âûáðàííîãî îðä.
         Lot   =OrderLots();                    // Êîëè÷åñòâî ëîòîâ
        }
     }
//--------------------------------------------------------------- 5 --
   // Òîðãîâûå êðèòåðèè 
   
   // Ïåðâûé ïåðèîä 
   
   double PriceMidH;
   double PriceMidL;
   int x=0;
   double MinLocal=HistPriceMax;
   double MaxLocal=HistPriceMin;
   
   while (x<=Period_1)
   
   { 
      PriceMidH=iHigh(NULL,0,x); // perebor ceny
      PriceMidL=iLow(NULL,0,x); // perebor ceny
   
  
   // Äâèæåíèå Max i Min Local
   if  (PriceMidH>MaxLocal)
  
    {
      MaxLocal=PriceMidH; // kriterij ekstremuma
   }
  
   if  ( PriceMidL<MinLocal)
  
  {
   MinLocal=PriceMidL; // kriterij ekstremuma
  }   
   x++;
      }
  double DeltaPrice=MaxLocal-MinLocal; 

   // Âòîðîé ïåðèîä  

   double PriceMidH1;
   double PriceMidL1;
   int x1=0;
   double MinLocal1=HistPriceMax;
   double MaxLocal1=HistPriceMin;
   
   while (x1<=Period_2)
   
   { 
      PriceMidH1=iHigh(NULL,0,x1); // perebor ceny
      PriceMidL1=iLow(NULL,0,x1); // perebor ceny
   
  
   // Äâèæåíèå Max i Min Local
   if  (PriceMidH1>MaxLocal1)
  
    {
      MaxLocal1=PriceMidH1; // kriterij ekstremuma
   }
  
   if  ( PriceMidL1<MinLocal1)
  
  {
   MinLocal1=PriceMidL1; // kriterij ekstremuma
  }   
   x1++;
      }
  double DeltaPrice1=MaxLocal1-MinLocal1; 
 

// Òðåòèé ïåðèîä 

   double PriceMidH2;
   double PriceMidL2;
   int x2=0;
   double MinLocal2=HistPriceMax;
   double MaxLocal2=HistPriceMin;
   
   while (x2<=Period_3)
   
   { 
      PriceMidH2=iHigh(NULL,PERIOD_D1,x2); // perebor ceny
      PriceMidL2=iLow(NULL,PERIOD_D1,x2); // perebor ceny
   
  
   // Äâèæåíèå Max i Min Local
   if  (PriceMidH2>MaxLocal2)
  
    {
      MaxLocal2=PriceMidH2; // kriterij ekstremuma
   }
  
   if  ( PriceMidL2<MinLocal2)
  
  {
   MinLocal2=PriceMidL2; // kriterij ekstremuma
  }   
   x2++;
      }
  double DeltaPrice2=MaxLocal2-MinLocal2; 
 





// Îòêðûòèå ïîçèöèè
   double Proc=MoveLevel;
         
    if ( Bid>MinLocal+DeltaPrice*BackLevelMin && Bid<MinLocal+DeltaPrice*BackLevelMax // Êðèòåðèé îòñêîêà
    && DeltaPrice>Proc*DeltaPrice2  // Êðèòåðèé äâèæåíèÿ
    && DeltaPrice>85*Point && DeltaPrice<StopLossMax*Point)       // Êðèòåðèé âîëàòèëüíîñòè - ìèíèìóì çàâèñèò îò âîçìîæíîñòè ÄÖ äëÿ ÒÐ, ìàõ îò äîïóñêàåìîé ïðîñàäêè
     
     {       
     Opn_S=true;                               // Êðèòåðèé îòêð. 
   }
         
         
           
     if ( Ask<MaxLocal-DeltaPrice*BackLevelMin && Ask>MaxLocal-DeltaPrice*BackLevelMax && DeltaPrice>Proc*DeltaPrice2 && DeltaPrice>85*Point && DeltaPrice<StopLossMax*Point)       // Åñëè ðàçíèöà ìåæäó
     {                                        // ..ÌÀ 1 è 2 áîëüøàÿ è ÌÀ1áîëÌÀ2è áîë ÌÀ3 è ÌÀ4 ïðîáèëî ÌÀ1 íà 5 ïóíêòîâ 
                      
        Opn_B=true;                               // Êðèòåðèé îòêð.      
      
         }        
       
// Çàêðûòèå ïîçèöèè ïî âðåìåíè æèçíè

 if ( Tip==0 && MaxLocal1<OpenPrice)       // Åñëè âî âðåìÿ æèçíè ïðîãíîçà öåíà íå ïðîáèëà îòêðûòèå
     
     {        
   Cls_B=true;                // Êðèòåðèé çàêð. 
   }
         
         
           
 if ( Tip==1 && OpenPrice<MinLocal1)    
    
     {                                          
      Cls_S=true;   
         }        
       
         
           
//--------------------------------------------------------------- 6 --
   // Çàêðûòèå îðäåðîâ
   while(true)                                  // Öèêë çàêðûòèÿ îðä.
     {
      if (Tip==0 && Cls_B==true)                // Îòêðûò îðäåð Buy..
        {                                       //è åñòü êðèòåðèé çàêð
         Alert("Ïîïûòêà çàêðûòü Buy ",Ticket,". Îæèäàíèå îòâåòà..");
         RefreshRates();                        // Îáíîâëåíèå äàííûõ
         Ans=OrderClose(Ticket,Lot,Bid,2);      // Çàêðûòèå Buy
         if (Ans==true)                         // Ïîëó÷èëîñü :)
           {
            Alert ("Çàêðûò îðäåð Buy ",Ticket);
            break;                              // Âûõîä èç öèêëà çàêð
           }
         if (Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
            continue;                           // Ïîâòîðíàÿ ïîïûòêà
         return;                                // Âûõîä èç start()
        }
 
      if (Tip==1 && Cls_S==true)                // Îòêðûò îðäåð Sell..
        {                                       // è åñòü êðèòåðèé çàêð
         Alert("Ïîïûòêà çàêðûòü Sell ",Ticket,". Îæèäàíèå îòâåòà..");
         RefreshRates();                        // Îáíîâëåíèå äàííûõ
         Ans=OrderClose(Ticket,Lot,Ask,2);      // Çàêðûòèå Sell
         if (Ans==true)                         // Ïîëó÷èëîñü :)
           {
            Alert ("Çàêðûò îðäåð Sell ",Ticket);
            break;                              // Âûõîä èç öèêëà çàêð
           }
         if (Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
            continue;                           // Ïîâòîðíàÿ ïîïûòêà
         return;                                // Âûõîä èç start()
        }
      break;                                    // Âûõîä èç while
     }

//--------------------------------------------------------------- 7 --
   // Ñòîèìîñòü îðäåðîâ
   RefreshRates();                              // Îáíîâëåíèå äàííûõ
   Min_Lot=MarketInfo(Symb,MODE_MINLOT);        // Ìèíèì. êîëè÷. ëîòîâ 
   Free   =AccountFreeMargin();                 // Ñâîáîäí ñðåäñòâà
   One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Ñòîèìîñòü 1 ëîòà
   Step   =MarketInfo(Symb,MODE_LOTSTEP);       // Øàã èçìåíåí ðàçìåðà
 
   if (Lots > 0)                                // Åñëè çàäàíû ëîòû,òî 
      Lts =Lots;                                // ñ íèìè è ðàáîòàåì 
   else                                         // % ñâîáîäíûõ ñðåäñòâ
      Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Äëÿ îòêðûòèÿ
 
   if(Lts < Min_Lot) Lts=Min_Lot;               // Íå ìåíüøå ìèíèìàëüí
   if (Lts*One_Lot > Free)                      // Ëîò äîðîæå ñâîáîäí.
     {
      Alert(" Íå õâàòàåò äåíåã íà ", Lts," ëîòîâ");
      return;                                   // Âûõîä èç start()
     }


// Ó÷¸ò îðäåðîâ 2
   Symb=Symbol();                               // Íàçâàíèå ôèí.èíñòð.
   Total=0;                                     // Êîëè÷åñòâî îðäåðîâ
   for(int j=1; j<=OrdersTotal(); j++)          // Öèêë ïåðåáîðà îðäåð
     {
      if (OrderSelect(j-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
        {                                       // Àíàëèç îðäåðîâ:
         if (OrderSymbol()!=Symb)continue;      // Íå íàø ôèí. èíñòðóì
         if (OrderType()>1)                     // Ïîïàëñÿ îòëîæåííûé
           {
            Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.");
            return;                             // Âûõîä èç start()
           }
         Total++;                               // Ñ÷¸ò÷èê ðûíî÷í. îðä
         if (Total>1)                           // Íå áîëåå îäíîãî îðä
           {
            Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.");
            return;                             // Âûõîä èç start()
           }
         Ticket=OrderTicket();                  // Íîìåð âûáðàíí. îðä.
         Tip   =OrderType();                    // Òèï âûáðàííîãî îðä.
         Price =OrderOpenPrice();               // Öåíà âûáðàíí. îðä.
         SL    =OrderStopLoss();                // SL âûáðàííîãî îðä.
         TP    =OrderTakeProfit();              // TP âûáðàííîãî îðä.
         Lot   =OrderLots();                    // Êîëè÷åñòâî ëîòîâ
        }
     }
//--------------------------------------------------------------- 8 --
   // Îòêðûòèå îðäåðîâ
   
   // Óðåçàíèå Ñòîï Ëîññ
   
   double StopLoss;
   
   if (DeltaPrice/Point<StopLossMax)
   {
   StopLoss=DeltaPrice/Point;
   }
   else
   {
   StopLoss=StopLossMax;
   }
   
   //

   while(true)                                  // Öèêë çàêðûòèÿ îðä.
     {
      if (Total==0 && Opn_B==true)              // Îòêðûòûõ îðä. íåò +
        {                                       // êðèòåðèé îòêð. Buy
         RefreshRates();                        // Îáíîâëåíèå äàííûõ
         SL=Bid - New_Stop(StopLoss)*Point;     // Âû÷èñëåíèå SL îòêð.
         TP=Bid + New_Stop(DeltaPrice/Point/TakeProfitLevel)*Point;   // Âû÷èñëåíèå TP îòêð.
         Alert("Ïîïûòêà îòêðûòü Buy. Îæèäàíèå îòâåòà..");
         Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Îòêðûòèå Buy
         if (Ticket > 0)                        // Ïîëó÷èëîñü :)
           {
         Alert ("Îòêðûò îðäåð Buy ",Ticket);
         OpenPrice=Ask;
        Alert(OpenPrice);

         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(DeltaPrice/Point/TakeProfitLevel)*Point;   // Âû÷èñëåíèå TP îòêð.
         Alert("Ïîïûòêà îòêðûòü Sell. Îæèäàíèå îòâåòà..");
         Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Îòêðûòèå Sel
         if (Ticket > 0)                        // Ïîëó÷èëîñü :)
           {
         Alert ("Îòêðûò îðäåð Sell ",Ticket);
         OpenPrice=Bid;
       Alert(OpenPrice);
                  return;                             // Âûõîä èç start()
           }
         if (Fun_Error(GetLastError())==1)      // Îáðàáîòêà îøèáîê
            continue;                           // Ïîâòîðíàÿ ïîïûòêà
         return;                                // Âûõîä èç start()
        }
      break;                                    // Âûõîä èç while
     }
//--------------------------------------------------------------- 9 --
   return;                                      // Âûõîä èç start()
  }

//-------------------------------------------------------------- 10 --
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);                             // Âûõîä èç ôóíêöèè
     }
  }

//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr)                      // Ïðîâåðêà ñòîï-ïðèê.
  {
   int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Ìèíèì. äèñòàíöèÿ
   if (Parametr < Min_Dist)                     // Åñëè ìåíüøå äîïóñò.
     {
      Parametr=Min_Dist;                        // Óñòàíîâèì äîïóñò.
      Alert("Óâåëè÷åíà äèñòàíöèÿ ñòîï-ïðèêàçà.");
     }
   return(Parametr);                            // Âîçâðàò çíà÷åíèÿ
  }
//-------------------------------------------------------------- 12 -



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