Попробуй поставить проверку изменения СЛ перед вызовом ф-ции модификации.
for (int li_Ord = OrdersTotal() - 1; li_Ord >= 0; li_Ord--) { CPosMan.CheckMyOrdersBased(li_Ord); //---- Получаем актуальную информацию по символу и текущему ордеру CBase.GetMarkerInfo (OrderSymbol(), OrderTicket()); if ((OrderStopLoss() < Bid))// Если я правильно понял твои ф-ции то вот эту проверку. CPosTrail.TrailingByMA (OrderTicket(), _Period, 21, 0, 1, 0, 1, 30); }
В общем, БИД тут не причём. Функция траалит как селы, там и баи. Потому если и сравнивать с рыночной ценой инструмента стоплосс, то с БИДом или с АСКом. А это можно только внутри метода траала.
У меня вопрос решился когда я нормализовал значение ld_NewSL:
ld_NewSL = ND (ld_MAValue - fi_Indent * SSym.gd_Pt);
И предупреждения прекратились. А раньше нормализацию я проводил непосредственно в функции модификации ордера. Я так понимаю косяк в том, что до модификации сравнивались значение текущего стопа, который уже нормализован и нового не нормализованного, у которого было после запятой, скажем так, 8 знаков. Есс-но они могли быть разными. А когда попадало новое значение в функцию модификации и нормализовывалось, то новое значение становилось например такое же как и прошое.. и возникала ошибка. Например,
CurSL = 1,32562
NewSL = 1.325626
Сравниваем их... они разные (по 6 знаку). А попадая в функцию модификации NewSL нормализуется и станет равным CurSL.
Я так понимаю, в этом причина того, что сыпались одна за другой предупреждения. Верно?
Верно что надо обрабатывать значение до вставки его в ордер.
Но нормализованное до 5 знака 1.325626 = 1.32563 а не 1.32562
В общем, БИД тут не причём.
Верно что надо обрабатывать значение до вставки его в ордер.
Но нормализованное до 5 знака 1.325626 = 1.32563 а не 1.32562
Примечание
Цену открытия и время истечения можно изменять только у отложенных ордеров. Если в качестве параметров функции передать неизмененные значения, то в этом случае будет сгенерирована ошибка 1 (ERR_NO_RESULT).
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Какова истинная причина возникновения данной ошибки?
Тут в описании её: " Нет ошибки, но результат неизвестен ". Порывшись на форуме, я понял, что иногда эта ошибка возникает в функциях модификации стопов, если новый стоплосс равен текущему стоплоссу. Это так?
Данную проверку я включил в функцию, но ошибки всё же проскакивают. Хотя принтуя я вижу, что никаких непредвиденных значений функции нет. Как понять что в моём случае нужно изменить? В принципе, модификации выполняются успешно, но предупреждения то тоже не особо радуют, особенно если ошибок в коде нет. Так что хочется понять причину возникновения предупреждения. Вот код траала по машке, в котором возникает предупреждение:
На функцию CPosMan.fOrderModify (fi_Ticket, OrderOpenPrice(), ND (ld_NewSL), OrderTakeProfit(), 0, Gold) просьба внимания не обращать, т.к. она проверена и в ней точно всё в порядке. Тем более
я заменял её на стандартную OrderModify() и предупреждения сохраняются.
Вызывается данная функция через цикл в функции OnTick() т.е. на каждом тике:
Вот в журнале я вижу как-раз таки ситуацию, когда предыдущий стоплосс равен текущему установленному у ордера возникает предупреждение:
Зато когда текущий стоплосс(SPos.gd_CurSL) не равен новому (ld_NewSL), то ошибок нет:
Как избавиться от этого предупреждения?