//+------------------------------------------------------------------+ //| 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 20081723 extern double OpenT = -50; extern double Lot = 0.1; extern int N_MaxBar = 10; extern double TakeProfit = 400; extern double Delta = 1000; //ïîäñ÷åò òåêóùåãî êîëè÷åñòâà îòêðûòûõ ïîçèöèé íà ïîêóïêó int CalcNumLongs() { int nLongs = 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_BUY) nLongs++; } return (nLongs); } //ïîïûòêà îòêðûòü íîâûé îðäåð 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_BUY) { found = true; //...íàøëè ïîñëåäíèé îòêðûòûé îðäåð íà ïîêóïêó break; } } if (!found) { Print ("Îøèáêà: íå ñìîãëè íàéòè îæèäàåìîãî îòêðûòîãî îðäåðà íà ïîêóïêó: ", GetLastError()); return; } //åñëè óáûòîê ïðåâûøàåò çíà÷åíèå ïåðåìåííîé OpenT, îòêðûâàåì îðäåð íà ïîêóïêó if (OrderProfit() <= OpenT) { double Min = Close[ArrayMinimum(Close, N_MaxBar, 1)]; Print (Bid, " ", Min - Delta * Point); res = OrderSend (Symbol(), OP_BUY, Lot, Ask, 3, Min - Delta * Point, Ask + TakeProfit * Point, "", MAGICNUM, 0, Blue); if (res == 0) { Print ("Îøèáêà îòêðûòèÿ îðäåðà íà ïîêóïêó: ",GetLastError()); return; } } } void start() { //ïðîâåðêà íåîáõîäèìûõ óñëîâèé äëÿ òîðãîâëè if (Bars < N_MaxBar || IsTradeAllowed() == false) return; //åñëè íåò îòêðûòûõ ïîçèöèé, îòêðûâààåì ïîçèöèþ íà ïîêóïêó if (CalcNumLongs() == 0) { double Min = Close[ArrayMinimum(Close, N_MaxBar, 1)]; Print (Bid, " ", Min - Delta * Point); int res = OrderSend (Symbol(), OP_BUY, Lot, Ask, 3, Min - Delta * Point, Ask + TakeProfit * Point, "", MAGICNUM, 0, Blue); 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: