Не срабатывает функция ExpertRemove();
if(BuyCnt == 0)//запуск только одного ордера
{
ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");
}
if(OrderSelect(ticket, SELECT_BY_POS)==true){
double stopper = OrderStopLoss(); //стоплосс этого ордера
if(Price <= stopper){ //Price это Bid, тут условие если B
ExpertRemove();
}
}
При таком варианте эта функция не срабатывает
OrderSelect надо делать по MODE_HISTORY если ордер закрылся, его там искать надо.
OrderSelect надо делать по MODE_HISTORY если ордер закрылся, его там искать надо.
paukas по невнимательности дал неправильный совет. Бывает. Выбор ордера по тикету не зависит от места его положения, в истории или в рынке.
Просто у тебя всё в одну кучу... Пытаешься выбрать по тикету и по позиции в списке открытых одновременно. Правильно будет так
if(OrderSelect(ticket, SELECT_BY_TICKET)) // == true можно не писать
paukas по невнимательности дал неправильный совет. Бывает. Выбор ордера по тикету не зависит от места его положения, в истории или в рынке.
Просто у тебя всё в одну кучу... Пытаешься выбрать по тикету и по позиции в списке открытых одновременно. Правильно будет так
if(OrderSelect(ticket, SELECT_BY_TICKET)) // == true можно не писать
paukas по невнимательности дал неправильный совет. Бывает. Выбор ордера по тикету не зависит от места его положения, в истории или в рынке.
Просто у тебя всё в одну кучу... Пытаешься выбрать по тикету и по позиции в списке открытых одновременно. Правильно будет так
if(OrderSelect(ticket, SELECT_BY_TICKET)) // == true можно не писать
Всеравно перезапускается эксперт
В каком смысле? Удаляется с графика, а потом снова появляется?
Не правильно сформулировал. Эксперт не удаляется. Заново запускается OrderSend.
Правильно. OrderSend же у вас впереди стоит, вот первым и выполняется. Поставвьте в конец,
Сначала проверьте нужно ли удалять, а потом уже запускайте новый ордер. Вот так
double stopper = OrderStopLoss(); //стоплосс этого ордера
if(Price <= stopper){ //Price это Bid, тут условие если B
ExpertRemove();
}
f(BuyCnt == 0)//запуск только одного ордера
{
ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");
}
Правильно. OrderSend же у вас впереди стоит, вот первым и выполняется. Поставвьте в конец,
Сначала проверьте нужно ли удалять, а потом уже запускайте новый ордер. Вот так
double stopper = OrderStopLoss(); //стоплосс этого ордера
if(Price <= stopper){ //Price это Bid, тут условие если B
ExpertRemove();
}
f(BuyCnt == 0)//запуск только одного ордера
{
ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");
}
Так не работает
Тут просто не срабатывает условие
(BuyCnt == 0)//запуск только одного ордера
{
ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");
}
Так работает и неважно где находится ExpertRemove();
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Не срабатывает функция ExpertRemove();
if(BuyCnt == 0)//запуск только одного ордера
{
ticket = OrderSend(Symb, OP_BUY, 1.0, Ask, 3, StopLossLevel, 0, "First expert");
}
if(OrderSelect(ticket, SELECT_BY_POS)==true){
double stopper = OrderStopLoss(); //стоплосс этого ордера
if(Price <= stopper){ //Price это Bid, тут условие если B
ExpertRemove();
}
}
При таком варианте эта функция не срабатывает