//+------------------------------------------------------------------+ //| 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: