Просьба не ругаться если эта тема уже была, по крайней мере я ее не нашел.
Надо закрыть два ордера - один на GBPUSD, второй на EURUSD. Советник закрывает только тот ордер в котором окне он находится, а второй ни в какую. Профит считает по обоим ордерам нормально. Если оба ордера находятся в том же окне что и советник, он их закрывает без проблем. Может еще библиотеку надо или еще чего чтоб сов работал по нескольким парам.
Ну а советник-то где? Мы должны угадать почему он у вас что-то не закрывает?
уберите фильтр по символу.
Если вспомнить
bool OrderClose( | int ticket, double lots, double price, int slippage, color Color=CLR_NONE) |
Вот код функции закрытия
void closeBuySell()
{
if(RRzakBSP==1)
{for (cnt=OrdersTotal()-1;cnt>=0;cnt--)
{OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY && OrderTicket()==TicketBuy)
{TicketBuy2=OrderTicket();
while(TicketBuy==TicketBuy2)
{RefreshRates();
OrderClose(OrderTicket(),ZakLotBuy,NormalizeDouble(Bid,Digits),0,Lime);
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES); TicketBuy2=OrderTicket();
}}
if (OrderType() == OP_SELL && OrderTicket()==TicketSell)
{TicketSell2=OrderTicket();
while(TicketSell==TicketSell2)
{RefreshRates();
OrderClose(OrderTicket(),ZakLotSell,NormalizeDouble(Ask,Digits),0,Lime);
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES); TicketSell2=OrderTicket();
}}}}}
TicketBuy и TicketSell задаются прямо в сове.
Вот код функции закрытия
void closeBuySell()
{
if(RRzakBSP==1)
{for (cnt=OrdersTotal()-1;cnt>=0;cnt--)
{OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY && OrderTicket()==TicketBuy)
{TicketBuy2=OrderTicket();
while(TicketBuy==TicketBuy2)
{RefreshRates();
OrderClose(OrderTicket(),ZakLotBuy,NormalizeDouble(Bid,Digits),0,Lime);
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES); TicketBuy2=OrderTicket();
}}
if (OrderType() == OP_SELL && OrderTicket()==TicketSell)
{TicketSell2=OrderTicket();
while(TicketSell==TicketSell2)
{RefreshRates();
OrderClose(OrderTicket(),ZakLotSell,NormalizeDouble(Ask,Digits),0,Lime);
OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES); TicketSell2=OrderTicket();
}}}}}
TicketBuy и TicketSell задаются прямо в сове.
int tot1=OrdersTotal(); for(int i1=totl-1;i1>=0;i1--)//проверяем соответствие нашего списка с таблицей ордеров { if(OrderSelect(i1,SELECT_BY_POS))//закроет все ордера //если ордер в списке есть, а в таблице его не обнаружено необходимо его удалить { //закрываем позицию if(OrderType()==OP_BUY) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),Slippage); continue; } if(OrderType()==OP_SELL) { RefreshRates(); OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),Slippage); continue; } } }
Вот код функции закрытия
OrderClose(OrderTicket(),ZakLotBuy,NormalizeDouble(Bid,Digits),0,Lime);
OrderClose(OrderTicket(),ZakLotSell,NormalizeDouble(Ask,Digits),0,Lime);
- Научитесь для начала пользоваться SRC для вставки кода, чтобы людям зрение не портить (комбинация клавиш Ctrl+Alt+M)
- Для чайников есть специальная ветка https://www.mql5.com/ru/forum/138609
- Аsk и Bid для любого инструмента после OrderSelect() можно получить через MarketInfo(OrderSymbol(), MODE_ASK) и MarketInfo(OrderSymbol(), MODE_BID)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Просьба не ругаться если эта тема уже была, по крайней мере я ее не нашел.
Надо закрыть два ордера - один на GBPUSD, второй на EURUSD. Советник закрывает только тот ордер в котором окне он находится, а второй ни в какую. Профит считает по обоим ордерам нормально. Если оба ордера находятся в том же окне что и советник, он их закрывает без проблем. Может еще библиотеку надо или еще чего чтоб сов работал по нескольким парам.