//+------------------------------------------------------------------+ //| Revers.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.ru/forum/6749/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.ru/forum/6749/" extern int Slippage = 3; //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- int SymbolOrders; // êîëè÷åñòâî îðäåðîâ ïî äàííîìó ñèìâîëó int cnt; // ñ÷åò÷èê îðäåðîâ (îáõîä÷èê) int buyOrders,sellOrders; // êîëè÷åñòâî îðäåðîâ â ðûíêå (îòëîæåííûå íå ñ÷èòàåì) double buyLots,sellLots; // îáùèé îáúåì îòêðûòûõ îðäåðîâ â ïîêóïêó è ïðîäàæó double reversLot; // îáúåì ðàçâîðîòíîãî îðäåðà int intLots; // âñïîìîãàòåëüíàÿ ïåðåìåííàÿ int ticket; // òèêåò ðàçâîðîòíîãî îðäåðà //---- if(!IsDemo()) // çàùèòà îò ñëó÷àéíîãî çàïóñêà íà ðåàëüíîì ñ÷åòå { Alert("Ðàáîòà íà ðåàëå çàïðåùåíà!!!"); return; // çàâåðøåíèå ðàáîòû ñêðèïòà } //---- if(OrdersTotal() == 0) { Alert("Îðäåðà íå íàéäåíû"); return; // çàâåðøåíèå ðàáîòû ñêðèïòà } //---- for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--) // ïðîéäåìñÿ ïî îðäåðàì { if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) // åñëè îðäåð âûáðàí { if(OrderSymbol() != Symbol()) continue; // åñëè âûáðàííûé îðäåð íå ïî íàøåìó ñèìâîëó // - ïåðåõîäèì ê ñëåäóþùåìó îðäåðó if(OrderType() == OP_BUY) { buyOrders++; // óâåëè÷èì ñ÷åò÷èê îðäåðîâ â Buy buyLots = buyLots + OrderLots(); // óâåëè÷èì îáúåì îðäåðîâ â Buy } if(OrderType() == OP_SELL) { sellOrders++; // óâåëè÷èì ñ÷åò÷èê îðäåðîâ â Sell sellLots = sellLots + OrderLots(); // óâåëè÷èì îáúåì îðäåðîâ â Sell } } } // Îðäåðà ñîñ÷èòàíû, òåïåðü íóæíî ïðîâåðèòü - åñòü ëè îðäåðà â ðûíêå. if(buyOrders + sellOrders == 0) { Alert("Ðûíî÷íûõ îðäåðîâ ïî ñèìâîëó ", Symbol(), " íàéäåíî"); return; // çàâåðøåíèå ðàáîòû ñêðèïòà } // Äîøëè äî ýòîãî ìåñòà - çíà÷èò îðäåðà âñå-òàêè åñòü if(buyOrders*sellOrders != 0) // ìû ðàáîòàåì òîëüêî ëèáî ñ îðäåðàìè Buy ëèáî Sell, // íî íå ñ îáîèìè { Alert("Èìååì ïî ñèìâîëó ", Symbol(), " ", buyOrders, " îðäåðîâ â ïîêóïêó è ", sellOrders, "îðäåðîâ â ïðîäàæó. Ðàáîòà ïðåêðàùåíà"); return; // çàâåðøåíèå ðàáîòû ñêðèïòà } // Äîøëè äî ýòîãî ìåñòà - çíà÷èò èìååì îðäåðà òîëüêî îäíîãî òèïà if(buyOrders > 0) { intLots = 2*10*buyOrders; // öåëîå äâîéíîå êîëè÷åñòâî ëîòîâ reversLot = NormalizeDouble(intLots / 10, 1); // ïîëó÷èëè îáúåì ðàçâîðîòíîãî îðäåðà RefreshRates(); ticket = OrderSend(Symbol(), OP_SELL, reversLot, Bid, Slippage, 0, 0, "revers order", 0, 0, Red); if(ticket < 0) { Alert("Íå óäàëîñü îòêðûòü îðäåð SELL ", Symbol(), " ", reversLot, " at ", Bid, " Îøèáêà ", GetLastError()); } } //---- if(sellOrders > 0) { intLots = 2*10*sellOrders; // öåëîå äâîéíîå êîëè÷åñòâî ëîòîâ reversLot = NormalizeDouble(intLots / 10, 1); // ïîëó÷èëè îáúåì ðàçâîðîòíîãî îðäåðà RefreshRates(); ticket = OrderSend(Symbol(), OP_BUY, reversLot, Ask, Slippage, 0, 0, "revers order", 0, 0, Blue); if(ticket < 0) { Alert("Íå óäàëîñü îòêðûòü îðäåð SELL ", Symbol(), " ", reversLot, " at ", Ask, " Îøèáêà ", GetLastError()); } } //---- return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
Other Features:
It issuies visual alerts to the screen