Если вы измените строку принта ошибки, добавив туда определитель номера ошибки, уверен, вам же будет проще добиться ответа на этот вопрос.
Print("Ошибка модификации ордера на покупку №", GetLastError());
Если вы измените строку принта ошибки, добавив туда определитель номера ошибки, уверен, вам же будет проще добиться ответа на этот вопрос.
Print("Ошибка модификации ордера на покупку №", GetLastError());
Спасибо за быстрый ответ.
Дописал. Вывело №4051 - "Недопустимое значение параметра функции".
Исправил i на OrderTicket(). Вывело №1- "Нет ошибки, но результат неизвестен". Вроде бы все в порядке. Стоп лосс переносится на цену открытия, но это ошибка не спроста. Что она значит?
Так делать нельзя.
При закрытии часть ордера происходит следующее:
1. закрывается ордер полностью.
2. открывается ордер с оставшейся частью по той-же цене, но с другим тикетом.
А посмотрев ещё раз повнимательней так делать нельзя в квадрате...
if(!OrderModify(i, 0, OrderOpenPrice(), 0, 0))
первый параметр функции должен быть тикет ордера, а не его порядковый номер в списке ордеров.
ps; до конца дочитал только потом...)))
В этом случае лучше сначала модифицировать ордер, а потом закрыть часть его.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый вечер. Помогите разобраться начинающему с проблемой модификации ордера.
Ниже представлен фрагмент кода, в котором перебираются ордера с конца. Ордер, открытый по советнику и другими выполненными условиями, закрывается с половиной лота. Затем этот ордер, закрытый на половину, необходим изменить - перенести Stop Loss на цену его открытия. Ордер не изменяется...
if(Bid >= Bonds_Main)
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderMagicNumber() == MAGIC && OrderType() == OP_BUY)
if(OrderClose(OrderTicket(), OrderLots() / 2, Bid, SLIPPAGE, Black))
Print("Ошибка закрытия ордера на покупку");
if(!OrderModify(i, 0, OrderOpenPrice(), 0, 0))
Print("Ошибка модификации ордера на покупку ");
}
}