Problema na execucao de BUY LIMIT ou SELL LIMIT

 

Prezados boa tarde,


Estou com um problema, mesmo eu parametrizando minha ordem limite ela está executando a mercado, alguém consegue me ajudar?


Fonte:


#include <Trade\Trade.mqh>

#include <Trade\PositionInfo.mqh>


CTrade trade;



    datetime expiration=TimeTradeServer()+PeriodSeconds(PERIOD_D1);


     trade.BuyLimit(1,(BarData[ultimo].high + 100),_Symbol,BarData[ultimo].high - loss,BarData[ultimo].high + gain,ORDER_TIME_SPECIFIED,expiration);


Vejam o LOG do testador:


PR 0 12:38:48.883 Trade 2019.12.02 09:05:00   buy limit 1.00 WIN$N at 108785 sl: 108485 tp: 108885 (108635 / 108640 / 108635)

KO 0 12:38:48.883 Trade 2019.12.02 09:05:00   order [#2 buy limit 1.00 WIN$N at 108785] triggered

DI 0 12:38:48.883 Trades 2019.12.02 09:05:00   deal #2 buy 1.00 WIN$N at 108640 done (based on order #2)

HE 0 12:38:48.883 Trade 2019.12.02 09:05:00   deal performed [#2 buy 1.00 WIN$N at 108640]

LH 0 12:38:48.883 Trade 2019.12.02 09:05:00   order performed buy 1.00 at 108640 [#2 buy limit 1.00 WIN$N at 108785]



Veja que a ordem deveria ser executada a 108785 e ela foi executada a 108640 .


Alguém sabe me dizer o que pode ser?


Obrigado!

 
leonardoab89:

Prezados boa tarde,


Estou com um problema, mesmo eu parametrizando minha ordem limite ela está executando a mercado, alguém consegue me ajudar?


Fonte:


#include <Trade\Trade.mqh>

#include <Trade\PositionInfo.mqh>


CTrade trade;



    datetime expiration=TimeTradeServer()+PeriodSeconds(PERIOD_D1);


     trade.BuyLimit(1,(BarData[ultimo].high + 100),_Symbol,BarData[ultimo].high - loss,BarData[ultimo].high + gain,ORDER_TIME_SPECIFIED,expiration);


Vejam o LOG do testador:


PR 0 12:38:48.883 Trade 2019.12.02 09:05:00   buy limit 1.00 WIN$N at 108785 sl: 108485 tp: 108885 (108635 / 108640 / 108635)

KO 0 12:38:48.883 Trade 2019.12.02 09:05:00   order [#2 buy limit 1.00 WIN$N at 108785] triggered

DI 0 12:38:48.883 Trades 2019.12.02 09:05:00   deal #2 buy 1.00 WIN$N at 108640 done (based on order #2)

HE 0 12:38:48.883 Trade 2019.12.02 09:05:00   deal performed [#2 buy 1.00 WIN$N at 108640]

LH 0 12:38:48.883 Trade 2019.12.02 09:05:00   order performed buy 1.00 at 108640 [#2 buy limit 1.00 WIN$N at 108785]



Veja que a ordem deveria ser executada a 108785 e ela foi executada a 108640 .


Alguém sabe me dizer o que pode ser?


Obrigado!

Leonardo,

Se você enviar uma ordem BuyLimit ela precisa ser com valor ABAIXO do valor de mercado. Caso envie BuyLimit acima do valor do mercado ela é executada ao Valor de Mercado atual.

" order performed buy 1.00 at 108640"

buy limit 1.00 WIN$N at 108785 (está acima)

Neste caso, você precisa usar BuyStop. Veja: https://www.mql5.com/pt/docs/standardlibrary/tradeclasses/ctrade/ctradebuystop

Documentação sobre MQL5: Biblioteca Padrão / Classes de negociação / CTrade / BuyStop
Documentação sobre MQL5: Biblioteca Padrão / Classes de negociação / CTrade / BuyStop
  • www.mql5.com
A conclusão bem sucedida do método BuyStop(...) nem sempre significa execução bem sucedida da operação de negociação. É necessário verificar o resultado da solicitação da negociação (código de retorno do...