//+------------------------------------------------------------------+
//| 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;
}
Comments