Pergunta sobre mql5 - como trabalhar com stopLoss e takeProfit triggers?
Envio uma ordem, modifico-a, ela é executada e desaparece. Não sou capaz de mudar de sl ou tp depois porque OrderSelect não tem nenhuma ordem encontrada. Depois é accionado um gatilho e é criada uma nova ordem que implementa automaticamente o StopLoss / TakeProfit.
Forux: Pergunta sobre mql5 - Como é que trabalho com stopLoss e takeProfit triggers?
Envio uma ordem, modifico-a, ela é executada e desaparece. Então não há oportunidade de alterar sl, tp - OrderSelect aparecerá com um erro A ordem não foi encontrada. Depois é accionado um gatilho e é criada uma nova ordem que executa automaticamente um StopLoss / TakeProfit.
A ideologia do mql5 é que após o accionamento da ordem, uma posição é aberta (alterada, fechada) para o símbolo seleccionado. Assim, após o accionamento da ordem (se não resultar no encerramento da posição), devemos trabalhar com a posição. Por exemplo, utilizando PositionSelect(). E para a mudança dos níveis stopLoss e takeProfit, a posição tem a sua própria variante de pedido comercial.
Yedelkin: A ideologia mql5 consiste em abrir (mudar, fechar) uma posição para o símbolo seleccionado após o accionamento da ordem. Assim, após o accionamento da ordem (se não tiver levado ao encerramento da posição), devemos trabalhar com a posição. Por exemplo, utilizando PositionSelect(). E para a mudança dos níveis stopLoss e takeProfit, a posição tem a sua própria variante de pedido comercial.
Então porque é que o stopLoss não fecha a posição?
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)
Além disso, o seu volume é sempre igual a 0,10 lotes, mesmo depois de umaparagem de perda ser atingida.
Forux: Se entendi correctamente o que significava então sim, fazendo o seguinte:
Sim, era disso que eu estava a falar. Isto é, utilizando uma construção deste tipo durante 10 segundos ainda devolve um volume não nulo da posição Sl-fechada? Nesse caso, ainda não há ideia sobre isso :(
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
Boa tarde,
Pergunta sobre mql5 - como trabalhar com stopLoss e takeProfit triggers?
Envio uma ordem, modifico-a, ela é executada e desaparece. Não sou capaz de mudar de sl ou tp depois porque OrderSelect não tem nenhuma ordem encontrada. Depois é accionado um gatilho e é criada uma nova ordem que implementa automaticamente o StopLoss / TakeProfit.
Envio uma ordem, modifico-a, ela é executada e desaparece. Então não há oportunidade de alterar sl, tp - OrderSelect aparecerá com um erro A ordem não foi encontrada. Depois é accionado um gatilho e é criada uma nova ordem que executa automaticamente um StopLoss / TakeProfit.
A ideologia mql5 consiste em abrir (mudar, fechar) uma posição para o símbolo seleccionado após o accionamento da ordem. Assim, após o accionamento da ordem (se não tiver levado ao encerramento da posição), devemos trabalhar com a posição. Por exemplo, utilizando PositionSelect(). E para a mudança dos níveis stopLoss e takeProfit, a posição tem a sua própria variante de pedido comercial.
Então porque é que o stopLoss não fecha a posição?
Além disso, o seu volume é sempre igual a 0,10 lotes, mesmo depois de umaparagem de perda ser atingida.
Forux: Тогда почему stopLoss не закрывает позицию? Кроме того ее объем постоянно равен 0.10 лотам, да же после отыгрывания stop loss
E como se determina que a posição não é fechada após o SL ser accionado e que o seu volume permanece o mesmo?
PositionGetDouble(POSITION_VOLUME);
E actualiza a informação da posição como prescrito no Manual antes de utilizar novamente PositionGetDouble(POSITION_VOLUME)?
Se entendi correctamente o que significava então sim, fazendo o seguinte
Experimente isto:
if(PositionSelect(_Symbol)) Print("myPositionGetDouble(POSITION_VOLUME) == " + PositionGetDouble(POSITION_VOLUME)); else Print("Сведения о позиции не обнаружены");Experimente desta forma:
Muito obrigado :)