Вопрос по mql5 - подскажите как работать с триггерами stopLoss и takeProfit?
Отправляю ордер, модифицирую его, он исполняется и пропадает. Дальше возможности ему менять sl, tp нету - OrderSelect выпадает с ошибкой ордер не найден. Дальше срабатывает тригер и создается новый ордер, автоматически который реализует stopLoss / takeProfit.
Forux: Вопрос по mql5 - подскажите как работать с триггерами stopLoss и takeProfit?
Отправляю ордер, модифицирую его, он исполняется и пропадает. Дальше возможности ему менять sl, tp нету - OrderSelect выпадает с ошибкой ордер не найден. Дальше срабатывает тригер и создается новый ордер, автоматически который реализует stopLoss / takeProfit.
Идеология mql5 состоит в том, что после срабатывания ордера открывается (изменяется, закрывается) позиция по выбранному инструменту (символу). Поэтому после срабатывания ордера (если оно не привело к закрытию позиции) надо работать с позицией. Например, с помощью PositionSelect(). Для изменения же уровней stopLoss и takeProfit у позиции предусмотрен свой вариант торгового запроса.
Yedelkin: Идеология mql5 состоит в том, что после срабатывания ордера открывается (изменяется, закрывается) позиция по выбранному инструменту (символу). Поэтому после срабатывания ордера (если оно не привело к закрытию позиции) надо работать с позицией. Например, с помощью PositionSelect(). Для изменения же уровней stopLoss и takeProfit у позиции предусмотрен свой вариант торгового запроса.
Тогда почему stopLoss не закрывает позицию?
2013.01.1610:33:50 Core 12010.05.0300:01:21 order performed sell 0.10 at 1.33260 [#3 sell 0.10 EURUSD at 1.33260]2013.01.1610:33:50 Core 12010.05.0300:01:21 deal performed [#3 sell 0.10 EURUSD at 1.33260]2013.01.1610:33:50 Core 12010.05.0300:01:21 deal #3 sell 0.10 EURUSD at 1.33260 done (based on order #3)2013.01.1610:33:50 Core 12010.05.0300:01:21 stop loss triggered buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360 [#3 sell 0.10 EURUSD at 1.33260]2013.01.1610:33:50 Core 12010.05.0300:00:02 Cant select order 2 error 47542013.01.1610:33:50 Core 12010.05.0300:00:00 position modified [buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360]
2013.01.1610:33:50 Core 12010.05.0300:00:00 === add order === 22013.01.1610:33:50 Core 12010.05.0300:00:00 order performed buy 0.10 at 1.33310 [#2 buy 0.10 EURUSD at 1.33310]2013.01.1610:33:50 Core 12010.05.0300:00:00 deal performed [#2 buy 0.10 EURUSD at 1.33310]2013.01.1610:33:50 Core 12010.05.0300:00:00 deal #2 buy 0.10 EURUSD at 1.33310 done (based on order #2)2013.01.1610:33:50 Core 12010.05.0300:00:00 exchange buy 0.10 EURUSD at 1.33310 (1.33290 / 1.33310 / 1.33290)
Кроме того ее объем постоянно равен 0.10 лотам, да же после отыгрывания stop loss
Yedelkin: А сведения о позиции обновляете, как это предписано в Справочнике, прежде чем в очередной раз использовать PositionGetDouble(POSITION_VOLUME)?
Если я правильно понял что подразумевалось тогда да, делаю следующее:
Forux: Если я правильно понял что подразумевалось тогда да, делаю следующее:
Да, я про это говорил. Т.е. использование такой конструкции в течение 10 секунд всё равно возвращает ненулевой объём закрываемой по Sl позиции? В таком случае идеи к этому вопросу пока нет :(
if(PositionSelect(_Symbol))
Print("myPositionGetDouble(POSITION_VOLUME) == " + PositionGetDouble(POSITION_VOLUME));
else
Print("Сведения о позиции не обнаружены");
2013.01.1612:47:49 Core 1 disconnected
2013.01.1612:47:45 Core 12010.05.0300:01:30 Сведения о позиции не обнаружены
2013.01.1612:47:45 Core 12010.05.0300:01:28 Сведения о позиции не обнаружены
2013.01.1612:47:45 Core 12010.05.0300:01:26 Сведения о позиции не обнаружены
2013.01.1612:47:45 Core 12010.05.0300:01:24 Сведения о позиции не обнаружены
2013.01.1612:47:45 Core 12010.05.0300:01:22 Сведения о позиции не обнаружены
2013.01.1612:47:45 Core 12010.05.0300:01:21 order performed sell 0.10 at 1.33260 [#3 sell 0.10 EURUSD at 1.33260]2013.01.1612:47:45 Core 12010.05.0300:01:21 deal performed [#3 sell 0.10 EURUSD at 1.33260]2013.01.1612:47:45 Core 12010.05.0300:01:21 deal #3 sell 0.10 EURUSD at 1.33260 done (based on order #3)2013.01.1612:47:45 Core 12010.05.0300:01:21 stop loss triggered buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360 [#3 sell 0.10 EURUSD at 1.33260]2013.01.1612:47:45 Core 12010.05.0300:00:11 myPositionGetDouble(POSITION_VOLUME) == 0.12013.01.1612:47:45 Core 12010.05.0300:00:09 myPositionGetDouble(POSITION_VOLUME) == 0.12013.01.1612:47:45 Core 12010.05.0300:00:06 myPositionGetDouble(POSITION_VOLUME) == 0.12013.01.1612:47:45 Core 12010.05.0300:00:04 myPositionGetDouble(POSITION_VOLUME) == 0.12013.01.1612:47:45 Core 12010.05.0300:00:02 myPositionGetDouble(POSITION_VOLUME) == 0.12013.01.1612:47:45 Core 12010.05.0300:00:00 position modified [buy 0.10 EURUSD 1.33310 sl: 1.33260 tp: 1.33360]
2013.01.1612:47:45 Core 12010.05.0300:00:00 === add order === 22013.01.1612:47:45 Core 12010.05.0300:00:00 order performed buy 0.10 at 1.33310 [#2 buy 0.10 EURUSD at 1.33310]2013.01.1612:47:45 Core 12010.05.0300:00:00 deal performed [#2 buy 0.10 EURUSD at 1.33310]2013.01.1612:47:45 Core 12010.05.0300:00:00 deal #2 buy 0.10 EURUSD at 1.33310 done (based on order #2)2013.01.1612:47:45 Core 12010.05.0300:00:00 exchange buy 0.10 EURUSD at 1.33310 (1.33290 / 1.33310 / 1.33290)
2013.01.1612:47:45 Core 1 magic=12345
Добрый день,
Вопрос по mql5 - подскажите как работать с триггерами stopLoss и takeProfit?
Отправляю ордер, модифицирую его, он исполняется и пропадает. Дальше возможности ему менять sl, tp нету - OrderSelect выпадает с ошибкой ордер не найден. Дальше срабатывает тригер и создается новый ордер, автоматически который реализует stopLoss / takeProfit.
Отправляю ордер, модифицирую его, он исполняется и пропадает. Дальше возможности ему менять sl, tp нету - OrderSelect выпадает с ошибкой ордер не найден. Дальше срабатывает тригер и создается новый ордер, автоматически который реализует stopLoss / takeProfit.
Идеология mql5 состоит в том, что после срабатывания ордера открывается (изменяется, закрывается) позиция по выбранному инструменту (символу). Поэтому после срабатывания ордера (если оно не привело к закрытию позиции) надо работать с позицией. Например, с помощью PositionSelect(). Для изменения же уровней stopLoss и takeProfit у позиции предусмотрен свой вариант торгового запроса.
Тогда почему stopLoss не закрывает позицию?
Кроме того ее объем постоянно равен 0.10 лотам, да же после отыгрывания stop loss
Forux: Тогда почему stopLoss не закрывает позицию? Кроме того ее объем постоянно равен 0.10 лотам, да же после отыгрывания stop loss
А каким образом Вы определяете, что после срабатывания SL позиция не закрывается и что её объём остаётся прежним?
PositionGetDouble(POSITION_VOLUME);
А сведения о позиции обновляете, как это предписано в Справочнике, прежде чем в очередной раз использовать PositionGetDouble(POSITION_VOLUME)?
Если я правильно понял что подразумевалось тогда да, делаю следующее:
А попробуйте вот так:
if(PositionSelect(_Symbol)) Print("myPositionGetDouble(POSITION_VOLUME) == " + PositionGetDouble(POSITION_VOLUME)); else Print("Сведения о позиции не обнаружены");А попробуйте вот так:
Огромное спасибо :)