//+------------------------------------------------------------------+ //| Gerat.mq4 | //| Copyright © 2009, Nail_Saby | //| http://gerat.ucoz.ru/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, http://gerat.ucoz.ru/" #property link "gerat.ru@mailru" #define MAGICNUM 20084379 extern double OpenT = -50; extern double Lot = 0.1; extern int N_MaxBar = 10; extern double TakeProfit = 400; extern double Delta = 1000; //ïîäñ÷åò òåêóùåãî êîëè÷åñòâà îòêðûòûõ ïîçèöèé íà ïðîäàæó int CalcNumShorts() { int nShorts = 0; for (int i = 0; i < OrdersTotal(); i++) { int res = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (res == 0) { Print ("Îøèáêà ïðè âûáîðå îðäåðà: ", GetLastError()); return; } if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGICNUM && OrderType() == OP_SELL) nShorts++; } return (nShorts); } //ïîïûòêà îòêðûòü íîâûé îðäåð void CheckForOpen() { bool found = false; //ïîèñê ïîñëåäíåãî îòêðûòîãî îðäåðà íà ïðîäàæó for (int i = OrdersTotal() - 1; i >= 0; i--) { int res = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (res == 0) { Print ("Îøèáêà ïðè âûáîðå îðäåðà: ", GetLastError()); return; } if (OrderMagicNumber() == MAGICNUM && OrderSymbol() == Symbol() && OrderType() == OP_SELL) { found = true; //...íàøëè ïîñëåäíèé îòêðûòûé îðäåð íà ïðîäàæó break; } } if (!found) { Print ("Îøèáêà: íå ñìîãëè íàéòè îæèäàåìîãî îòêðûòîãî îðäåðà íà ïðîäàæó: ", GetLastError()); return; } //åñëè óáûòîê ïðåâûøàåò çíà÷åíèå ïåðåìåííîé OpenT, îòêðûâàåì îðäåð íà ïðîäàæó if (OrderProfit() <= OpenT) { //Print (OrderProfit()); double Max = Close[ArrayMaximum(Close, N_MaxBar, 1)]; Print (Bid, " ", Max + Delta * Point); res = OrderSend (Symbol(), OP_SELL, Lot, Bid, 3, Max + Delta * Point, Bid - TakeProfit * Point, "", MAGICNUM, 0, Red); if (res == 0) { Print ("Îøèáêà îòêðûòèÿ îðäåðà íà ïðîäàæó: ",GetLastError()); return; } } } void start() { //ïðîâåðêà íåîáõîäèìûõ óñëîâèé äëÿ òîðãîâëè if (Bars < N_MaxBar || IsTradeAllowed() == false) return; //åñëè íåò îòêðûòûõ ïîçèöèé, îòêðûâààåì ïîçèöèþ íà ïðîäàæó if (CalcNumShorts() == 0) { double Max = Close[ArrayMaximum(Close, N_MaxBar, 1)]; Print (Bid, " ", Max + Delta * Point); int res = OrderSend (Symbol(), OP_SELL, Lot, Bid, 3, Max + Delta * Point, Bid - TakeProfit * Point, "", MAGICNUM, 0, Red); if (res == 0) { Print ("Îøèáêà îòêðûòèÿ îðäåðà íà ïðîäàæó: ",GetLastError()); return; } } else CheckForOpen(); return; }
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: