![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Но затем OrderModify не срабатывает.
Код ниже выполняется после кода выше из последнего сообщения.
Журнал показывает:
#ESZ1,M5: Opening Position
#ESZ1,M5: tickvalue: 12.50000000
#ESZ1,M5: размер позиции: 1.00000000
#ESZ1,M5: Ask/Bid 1242.00000000/1241.75000000
#ESZ1,M5: спред 0.25000000
#ESZ1,M5: open #13679252 buy 1.00 #ESZ1 at 1242.00 ok
#ESZ1,M5: Ордер 13679252 успешно открыт
#ESZ1,M5: SL: 1241.25000000
#ESZ1,M5: TP: 1242.25000000
#ESZ1,M5: error=130
Так что даже первое открытие, а затем установка стоплосса, похоже, не работает :-/
Спред 0,25
#ESZ1,M5: Спред 0.25000000
ОК, вы открываете покупку по ... 1242.00 (Ask)
#ESZ1,M5: open #13679252 buy 1.00 #ESZ1 at 1242.00 ok
#ESZ1,M5: ордер 13679252 успешно открыт
Затем вы пытаетесь модифицировать с TP по цене Bid + 2 * Spread и SL по цене Bid - 2 * Spread.
#ESZ1,M5: SL: 1241.25000000
#ESZ1,M5: TP: 1242.25000000
Если ваш FreezeLevel равен 0.50, то это ваша проблема... какой у вас FreezeLevel?
та же проблема. Ордер открывается нормально со стоплоссом = 0 и тейкпрофитом = 0.
Но затем OrderModify не срабатывает.
Не настраивается на брокеры с 4/5 цифрами. Не открывается сначала, а затем устанавливаются стопы.
Как уже отвечали ранее
да, вероятно, вы торгуете с ECN брокером, вы должны открывать ордера с нулевыми стопами, а затем модифицировать ордер после его открытия, поэтому есть проблема с 50 пипсами SL и TP, поэтому сделайте, как сказал Raptor, проверьте freezelevel и stoplevel тоже на всякий случай.
Также проверьте код OrderModify() ...., возможно, он работает таким образом, но мне кажется, что вы должны выбрать ордер с помощью OrderSelect(), прежде чем делать OrderOpenPrice().
Увы, #130 все еще преследует меня по ночам ;)
Вот моя следующая попытка:
Как вы можете видеть, я упростил пример, не используя тейкпрофит. Ошибка определенно возникает из-за стоплосса, поэтому нам не нужен тейкпрофит.
Сначала я открываю ордер с 0 стоплоссом (и тейкпрофитом), а затем пытаюсь установить стоплосс с помощью OrderModify.
Перед этим я проверяю Mode_Stoplevel и Mode_Freezelevel и корректирую стоплосс, если это необходимо. (Корректировка происходит ниже в журнале, потому что стоплосс изначально равен 50, но Mode_Stoplevel равен 75, я затем устанавливаю стоплосс на Mode_Stoplevel + 1, так что 76).
RaptorUK и SDC:
MarketInfo(MODE_FREEZELEVEL) возвращает 0. Я не думаю, что Freezelevel является проблемой.
Я включил вывод в файл журнала.
SDC:
Я также вставил OrderSelect, перед вызовом OrderOpenPrice, просто чтобы убедиться. В журнале видно, что OrderSelect сработал, иначе код не прошел бы так далеко (выход -1).
WHRoeder:
Я следовал простому примеру SDC. Но теперь я расширил его, используя настройку pips 4/5 Digit при установке stoploss, как вы можете видеть выше. Вы также можете видеть, что ордер сначала открывается со стоплоссом и тейкпрофитом, установленными на ноль, а затем стоплосс устанавливается с помощью OrderModify. Как вы можете видеть в журнале ниже с S/L и T/P, установленными на ноль, ордер открывается успешно, но я все еще не могу установить S/L на следующем шаге с помощью OrderModify.
Вот полный лог:
Я очень благодарен за вашу постоянную помощь, и я думаю, что мы сузили круг поиска проблемы :)
Так в чем еще может быть проблема? Что еще я могу попробовать?
shinobi
Спред 0,25
#ESZ1,M5: Спред 0.25000000
Хорошо, вы открываете покупку по цене ... 1242.00 (Ask).
#ESZ1,M5: open #13679252 buy 1.00 #ESZ1 at 1242.00 ok
#ESZ1,M5: ордер 13679252 успешно открыт
Затем вы пытаетесь модифицировать с TP по цене бида + 2 * спред и SL по цене бида - 2 * спред.
Разве ваш STOP_LEVEL не 3 * Spread? Ваш Stop слишком близко...
Да, именно поэтому я проверяю стоплосс здесь (из кода выше):
.
Итак, в последнем примере стоплосс был установлен на 76, что составляет 3*Spread +1.
Это должно быть достаточно далеко, верно?
Привет, Раптор,
Да, именно поэтому я проверяю стоплосс здесь (из кода выше):
Итак, в последнем примере stoploss был установлен на 76, что составляет 3*Spread +1.
Это должно быть достаточно далеко, верно?
Вот что я сделал.
Сначала я написал пользовательскую функцию для округления двойных чисел до ближайшего двойного:
.
Она делает то, что вы ожидаете. Если вы вызовете ее с DoubleRound(1237.687360000), она вернет 1237.50.
Затем я использовал ее на S/L непосредственно перед вызовом OrderModify. И я использовал MODE_TICKVALUE, который равен 0.25 для #ESZ1.
Итак:
.
В журнале вы можете видеть, что округление сработало нормально. Однако стоплосс все равно был отклонен :/
.
Я не могу представить, в чем еще может быть проблема! Этот #130 очень настойчивый!!!
Вы открыли продажу
#ESZ1,M5: open #13708089 sell 1.00 #ESZ1 at 1239.75 ok
и попытались установить SL ниже него. ...
#ESZ1,M5: SL: 1237.50000000
#ESZ1,M5: error=130