gazonkos expert





//+------------------------------------------------------------------+
//|                                             gazonkos expert.mq4  |
//|                                                    1H   EUR/USD  |
//|                                                    Smirnov Pavel |
//|                                                 www.autoforex.ru |
//+------------------------------------------------------------------+

#property copyright "Smirnov Pavel"
#property link      "www.autoforex.ru"

extern int magic = 12345;
extern int TakeProfit = 16; // Óðîâåíü òåéêïðîôèò â ïóíêòàõ
extern int Otkat = 16;// Âåëè÷èíà îòêàòà â ïóíêòàõ
extern int StopLoss = 40; // óðîâåíü ñòîïëîññ â ïóíêòàõ

extern int t1=3;
extern int t2=2;
extern int delta=40;

extern double lot = 0.1;// Ðàçìåð ïîçèöèè
extern int active_trades=1;//Ìàêñèìàëüíîå êîëè÷åñòâî îäíîâðåìåííî îòêðûòûõ îðäåðîâ

int STATE=0;
int Trade=0;
double maxprice=0.0;
double minprice=10000.0;
int ticket;
bool cantrade=true;
int LastTradeTime=0;
int LastSignalTime=0;

int OpenLong(double volume=0.1)
{
  int slippage=10;
  string comment="gazonkos expert (Long)";
  color arrow_color=Blue;

  ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,Ask-StopLoss*Point,
                      Ask+TakeProfit*Point,comment,magic,0,arrow_color);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
    {
      Print("Buy order opened : ",OrderOpenPrice());
      return(0);
    }  
  }
  else 
  {
    Print("Error opening Buy order : ",GetLastError()); 
    return(-1);
  }
}
  
int OpenShort(double volume=0.1)
{
  int slippage=10;
  string comment="gazonkos expert (Short)";
  color arrow_color=Red;

  ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,Bid+StopLoss*Point,
                      Bid-TakeProfit*Point,comment,magic,0,arrow_color);
  if(ticket>0)
  {
    if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
      {
        Print("Sell order opened : ",OrderOpenPrice());
        return(0);
      }  
  }
  else 
  {
    Print("Error opening Sell order : ",GetLastError()); 
    return(-1);
  }
}

int OrdersTotalMagic(int MagicValue)//ôóíêöèÿ âîçâðàùàåò êîëè÷åñòâî îòêðûòûõ îðäåðîâ ñ magic = MagicValue
{
   int j=0;
   int i;
   for (i=0;i<OrdersTotal();i++)//Ïðîèçâîäèì ïðîñìîòð ñðåäè âñåõ îòêðûòûõ îðäåðîâ
   {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))//Âûáèðàåì ïî-ïîðÿäêó îðäåðà
     {
        if (OrderMagicNumber()==MagicValue) j++; //Ïîäñ÷èòûâàåì òîëüêî òå ó êîòðîûõ íóæíûé magic   
     }
     else 
     {    
         Print("gazonkos expert: OrderSelect() â OrdersTotalMagic() âåðíóë îøèáêó - ",GetLastError());    
         return(-1);
     }
   }   
   return(j);//Âîçâðàùàåì êîëè÷åñòâî ïîäñ÷èòàííûõ îðäåðîâ ñ magic = MagicValue.  
}

int init()
{
  return(0);
}

int deinit()
{   
  return(0);
}

int start()
{

// STATE = 0  Æäåì ñèãíàëà ê íà÷àëó ðàáîòû ñîâåòíèêà  ------------------------------------------------------------

   if (STATE==0)
   {
      bool cantrade=true;
      if(TimeHour(TimeCurrent())==LastTradeTime) cantrade=false;//çàïðåùàåì òîðãîâàòü ïîêà íå íàñòóïèò íîâûé ÷àñ ïîñëå ïîñëåäíåé 
                                                                //îòêðûòîé ñäåëêè (÷òîáû èçáåæàòü ìíîæåñòâåííûõ îòêðûâàíèé ñäåëîê íà îäíîì è òîì æå ÷àñîâîì áàðå)     
      if(OrdersTotalMagic(magic)>=active_trades) cantrade=false;// ïðîâåðÿåì íà äîïóñòèìîå êîëè÷åñòâî îòêðûòûõ îðäåðîâ
      if(cantrade) // åñëè íå áûëî íè îäíîãî çàïðåòà íà îòêðûòèå ñäåëîê, òî ïåðåõîäèì ê îæèäàíèþ ñèãíàëîâ ñèñòåìû íà îòêðûòèå îðäåðîâ
         STATE=1;
   }

// STATE = 1  Æäåì èìïóëüñà (äâèæåíèÿ) öåíû ----------------------------------------------------------------------

   if (STATE==1)
   {
      if((Close[t2]-Close[t1])>delta*Point)// ñèãíàë äëÿ âõîäà â äëèííóþ ïîçèöèþ
      {
         Trade = 1; //èäåíòèôèêàòîð ïîçèöèè, äëÿ êîòîðîé ïîëó÷åí ñèãíàë íà îòêðûòèå  "-1" - êîðîòêàÿ ïîçèöèÿ, "1"-äëèííàÿ
         maxprice=Bid;// çàïîìèíàåì òåêóùåå ïîëîæåíèå öåíû (íåîáõîäèìî äëÿ îïðåäåëåíèÿ îòêàòà â STATE=2)
         LastSignalTime=TimeHour(TimeCurrent());//Çàïîìèíàåì âðåìÿ ïîëó÷åíèÿ ñèãíàëà
         STATE = 2; // ïåðåéòè â ñëåäóþùåå ñîñòîÿíèå
      }
      
      if((Close[t1]-Close[t2])>delta*Point)// ñèãíàë äëÿ âõîäà â êîðîòêóþ ïîçèöèþ
      {
         Trade = -1; // èäåíòèôèêàòîð ïîçèöèè, äëÿ êîòîðîé ïîëó÷åí ñèãíàë íà îòêðûòèå  "-1" - êîðîòêàÿ ïîçèöèÿ, "1"-äëèííàÿ
         minprice=Bid;// çàïîìèíàåì òåêóùåå ïîëîæåíèå öåíû (íåîáõîäèìî äëÿ îïðåäåëåíèÿ îòêàòà â STATE=2)
         LastSignalTime=TimeHour(TimeCurrent());//Çàïîìèíàåì âðåìÿ ïîëó÷åíèÿ ñèãíàëà
         STATE = 2; // ïåðåéòè â ñëåäóþùåå ñîñòîÿíèå
      }
   }
   
// STATE = 2 - Æäåì îòêàòà öåíû   -------------------------------------------------------------------------------- 

   if (STATE==2)
   {
      if(LastSignalTime!=TimeHour(TimeCurrent()))//Åñëè íà áàðå íà êîòîðîì ïîëó÷åí ñèãíàë íå ïðîèçîøëî îòêàòà,òî ïåðåõîäèì â ñîñòîÿíèå STATE=0
      {   
         STATE=0;
         return(0);         
      }
      if(Trade==1)// îæèäàåì îòêàòà äëÿ äëèííîé ïîçèöèè
      {
         if(Bid>maxprice) maxprice=Bid;//åñëè öåíà ïîøëà åùå âûøå, òî ìåíÿåì çíà÷åíèå maxprice íà òåêóùåå çíà÷åíèå öåíû
         if(Bid<(maxprice-Otkat*Point))// ïðîâåðÿåì íàëè÷èå îòêàòà öåíû ïîñëå èìïóëüñà 
            STATE=3;//åñëè ïðîèçîøåë îòêàò íà âåëè÷èíó Otkat, òî ïåðåõîäèì â ñîñòîÿíèå îòêðûòèÿ äëèííîé ïîçèöèè
      }
      
      if(Trade==-1)// îæèäàåì îòêàòà äëÿ êîðîòêîé ïîçèöèè
      {
         if(Bid<minprice) minprice=Bid;//åñëè öåíà ïîøëà åùå íèæå, òî ìåíÿåì çíà÷åíèå minprice íà òåêóùåå çíà÷åíèå öåíû
         if(Bid>(minprice+Otkat*Point))// ïðîâåðÿåì íàëè÷èå îòêàòà öåíû ïîñëå èìïóëüñà
            STATE=3;//åñëè ïðîèçîøåë îòêàò íà âåëè÷èíó Otkat, òî ïåðåõîäèì â ñîñòîÿíèå îòêðûòèÿ êîðîòêîé ïîçèöèè
      }
   }  

// STATE = 3 - îòêðûâàåì ïîçèöèè ñîãëàñíî ïåðåìåííîé Trade ("-1" - êîðîòêóþ, "1" - äëèííóþ)   -------------------- 
  
   if(STATE==3)
   {
      if(Trade==1)// îòêðûâàåì äëèííóþ ïîçèöèþ
      {
         OpenLong(lot);// îòêðûâàåì äëèííóþ ïîçèöèþ
         LastTradeTime=TimeHour(TimeCurrent());//çàïîìèíàåì âðåìÿ ñîâåðøåíèÿ ïîñëåäíåé ñäåëêè
         STATE=0; //ïåðåõîäèì â ñîñòîÿíèå îæèäàíèÿ
      }
      if(Trade==-1)// îòêðûâàåì êîðîòêóþ ïîçèöèþ
      {
         OpenShort(lot);// îòêðûâàåì êîðîòêóþ ïîçèöèþ  
         LastTradeTime=TimeHour(TimeCurrent());//çàïîìèíàåì âðåìÿ ñîâåðøåíèÿ ïîñëåäíåé ñäåëêè
         STATE=0; //ïåðåõîäèì â ñîñòîÿíèå îæèäàíèÿ
      }   
   }  
  return(0);
}



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Checks for the total of open orders

Other Features: