Есть код советника открывает ордера на пробой High (BuyStop) и Low (SellStop).
Пытаюсь сделать трал:
Buy тралится по Low при условии, что Low выше цены открытия ордера;
Sell тралится по High при условии, что High ниже цены открытия ордера.
Компелируется без ошибок, но трал не работает.
Код сова:
//+------------------------------------------------------------------+
//| High_Low.mq4 |
//| Copyright 2019, MetaQuotes Software Corp. |
//|
www.mql5.com |
//+------------------------------------------------------------------+
#property copyright «Copyright 2019, MetaQuotes Software Corp.»
#property link «
www.mql5.com»
#property version «1.00»
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
input double lot= 0.1;
input int magic = 123;
int ticket[6];
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров |
//+------------------------------------------------------------------+
void DelOrder(int type=-1)
{
bool del;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
if(OrderType()==type || type==-1)
del=OrderDelete(OrderTicket());
}
}
}
}
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
if(OrderType()==type || type==-1)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int r=0;
CountOrders();
// FindFractals();
if(NormalizeDouble(iHigh(_Symbol, _Period, 1), Digits) < Ask /*&& CountOrders(OP_BUYSTOP) < 1*/ && CountOrders(OP_BUY) < 1) {
// DelOrder(OP_SELLSTOP);
r = OrderSend(Symbol(),
OP_BUY,
NormalizeDouble(lot, 2),
Ask,
30,
0, //SL
0, //TP
«BUY High_Low»,
magic,
0,
Blue); // BUY
if(ticket[OP_BUY] >= 0 && OrderSelect(ticket[OP_BUY], SELECT_BY_TICKET)
&& OrderStopLoss() == NormalizeDouble(iLow(_Symbol, _Period, 1), Digits)
&& Ask > NormalizeDouble(iLow(_Symbol, _Period, 1), Digits)
&& OrderOpenPrice() < NormalizeDouble(iLow(_Symbol, _Period, 1), Digits)) //trail buy
OrderModify(ticket[OP_BUY],
OrderOpenPrice(),
NormalizeDouble(iLow(_Symbol, _Period, 1), Digits),
OrderTakeProfit(),
OrderExpiration());
}
else if(NormalizeDouble(iLow(_Symbol, _Period, 1), Digits) > Bid /*&& CountOrders(OP_SELLSTOP) < 1*/ && CountOrders(OP_SELL) < 1) {
// DelOrder(OP_BUYSTOP);
r = OrderSend(Symbol(),
OP_SELL,
NormalizeDouble(lot, 2),
Bid,
30,
0, //SL
0, //TP
«SELL High_Low»,
magic,
0,
Red); // SELL
if(ticket[OP_SELL] >= 0 && OrderSelect(ticket[OP_SELL], SELECT_BY_TICKET)
&& OrderStopLoss() == NormalizeDouble(iHigh(_Symbol, _Period, 1), Digits)
&& Bid < NormalizeDouble(iHigh(_Symbol, _Period, 1), Digits)
&& OrderOpenPrice() > NormalizeDouble(iHigh(_Symbol, _Period, 1), Digits)) //trail sell
OrderModify(ticket[OP_SELL],
OrderOpenPrice(),
NormalizeDouble(iHigh(_Symbol, _Period, 1), Digits),
OrderTakeProfit(),
OrderExpiration());
}
}
//+------------------------------------------------------------------+
Комментарии (7)
35 AM2 Сообщений: 16250 - Андрей
9 droba Автор Сообщений: 239 - Droba
18 GAWroch Сообщений: 84 - Вячеслав
9 droba Автор Сообщений: 239 - Droba
35 AM2 Сообщений: 16250 - Андрей
35 AM2 Сообщений: 16250 - Андрей
9 droba Автор Сообщений: 239 - Droba
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий