Como verificar se um pedido foi fechado por perda parada

Francesco Fava  

Estou escrevendo um EA, modificando meu EA escrito para o MT4. Eu abro um pedido usando OrderSend.

Simplesmente se eu precisar entender (por fases da História), se a ordem enviada (a propósito.... eu tenho que checar Order, Deals or Position?), foi fechada porque chegou a StopLoss.
Verifiquei nos fóruns, mas não encontrei o que preciso....

Usando HistoryOrderGetDouble com o parâmetroENUM_ORDER_PROPERTY_DOUBLE,

ORDEM_PREÇO_CORRENTE

dá apenas o preço atual do símbolo do pedido

que não pode ser comparada àORDER_SL. Suponho que o ORDER_PRICE_CURRENT é apenas o preço atual do símbolo e não o preço de fechamento do pedido.

Obrigado a todos por seu apoio.

Alain Verleyen  

Veja este tópico, provavelmente um pouco confuso, mas você pode encontrar a idéia.

O sistema de negociação MT5 é muito diferente do MT4, então você tem que mudar seu pensamento.

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction. - - Category: technical indicators
Jose Miguel Soriano  
frankge973:

Estou escrevendo um EA, modificando meu EA escrito para o MT4. Eu abro um pedido usando OrderSend.

Simplesmente se eu precisar entender (por fases da História), se a ordem enviada (a propósito.... eu tenho que verificar Ordem, Acordos ou Posição?), foi fechada porque chegou à StopLoss.
Verifiquei nos fóruns, mas não encontrei o que preciso....

Usando HistoryOrderGetDouble com o parâmetroENUM_ORDER_PROPERTY_DOUBLE,

ORDEM_PREÇO_CORRENTE

dá apenas o preço atual do símbolo do pedido

que não pode ser comparada àORDER_SL. Suponho que o ORDER_PRICE_CURRENT é apenas o preço atual do símbolo e não o preço de fechamento do pedido.

Obrigado a todos por seu apoio.

É isto?

//-------------------------------- ES CIERRE POR SL ----------------------------------------------
bool esCierreSL(int ind, int modoInd= SELECT_BY_TICKET, int modoHist= MODE_TRADES)
{
    bool resp= OrderSelect(ind, modoInd, modoHist)? (StringFind(OrderComment(), "[sl]", 0)>-1): false;
    return(resp);
}
MARCO RICCARDI  
Alain Verleyen:

A pergunta é sobre mql5, seu código é mql4.

Ocomentário do pedido não é uma maneira confiável de codificar.

Desculpe pelo necro, mas isto é bastante interessante na minha opinião.

Estou fazendo a transição de mql4 para mql5, e acho as mudanças nos sistemas de comércio e história bastante desafiadoras.

Para saber se uma negociação no livro de história foi fechada por stop-loss, take-profit, ou de outra forma:

  • no MT4 você poderia comparar OrderStopLoss(), OrderTakeProfit() e OrderClosePrice(), ou simplesmente verificar OrderComment().
  • na MT5 a única maneira possível me parece verificar o comentário de um negócio: HistoryDealGetString(tk, DEAL_COMMENT)
Tanto MT4 como MT5 quando um pedido é encerrado por stop-loss ou take-profit escreva [SL price] ou [TP price] no comentário (de maneiras diferentes... mas ainda assim).

Eu li o artigo: https://www.mql5.com/en/forum/11996

É interessante, mas se eu entendi corretamente, o objetivo é identificar mudanças comerciais baseadas no manuseio de eventos, na mosca.

Portanto, deve haver um programa de escuta (como um conselheiro especializado correndo em um gráfico) ou então nada é detectado.

Na minha opinião, a detecção de razões de fechamento comercial deve ser feita na carteira de negociação histórica porque é (ou deveria ser) a maneira mais segura de saber o que aconteceu, já que é agitada em algum lugar e não é capturada do ar.

Minha análise está errada? o que você acha?

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction.
William Roeder  
Marco: Tanto o MT4 como o MT5 quando um pedido é fechado por stop-loss ou take-profit escrevem [SL price] ou [TP price] no comentário (de maneiras diferentes... mas ainda assim).
Não, eles não escrevem. Esse é o seu corretor.
Não é uma boa idéia, os corretores podem mudar os comentários, incluindo a colocação completa.
MARCO RICCARDI  
whroeder1:
Não, eles não fazem isso. Esse é o seu corretor.

Ok, ambos os corretores MT4 e MT5 colocaram essa string no comentário... pelo menos os poucos que eu testei.

E concordo, isto não é uma boa idéia, uma vez que o comentário pode estar sujeito a mudanças pela mão do corretor.

Mas não vejo como isso poderia ser feito de maneira diferente, já que não consigo encontrar outros traços no livro de história comercial.

Existe uma maneira melhor de atingir este objetivo?

Keith Watford  

Entrei em contato com a central de atendimento há 2 anos (a respeito do MT4).

...It is not clear to me whether all brokers incorporate the letters sp or tp in the order comment when a trade hits the StopLoss or TakeProfit. Is this at the brokers' discretion or is it automatically done with every broker?

e eles responderam

Isto é feito automaticamente com cada corretor. E também o próprio corretor pode alterar este valor.

Portanto, ele é feito pelo sistema, não pelo corretor. No entanto, ainda não ajuda se o corretor pode então mudá-lo.

Não notei nenhuma ocasião em que o corretor tenha alterado o comentário do pedido.

Normalmente, em meu código, é mais importante saber se uma negociação foi fechada com lucro ou prejuízo. Ao usar uma parada móvel, uma negociação pode atingir o SL, mas ainda assim ter lucro.

MARCO RICCARDI  
Keith Watford:

Entrei em contato com a central de atendimento há 2 anos (a respeito do MT4).

e eles responderam

portanto, isso é feito pelo sistema, não pelo corretor. No entanto, ainda não ajuda se o corretor puder mudá-lo.

Não notei nenhuma ocasião em que o corretor tenha mudado o comentário do pedido.

Normalmente, em meu código, é mais importante saber se um negócio fechou com lucro ou prejuízo. Ao usar uma parada móvel, uma negociação pode atingir o SL, mas ainda assim ter lucro.

Obrigado Keith, isso é o que eu esperava, já que não consigo encontrar uma solução melhor.

Xiangdong Guo  
honest_knave:
Acredito que ambos os cartazes estão convertendo MQL4 em MQL5

De qualquer forma, basta comparar o preço de fechamento com o preço de perda de estoque.

Nota: Em conta real (especialmente ECN), provavelmente o preço de ativação tem uma lacuna entre o preço de fechamento pré-definido, então use "<=" ou ">=".

Keith Watford  
Xiangdong Guo:

De qualquer forma, basta comparar o preço de fechamento com o preço de perda de estoque.

Nota: Em conta real (especialmente ECN), provavelmente o preço de ativação tem uma lacuna entre o preço de fechamento pré-definido, então use "<=" ou ">=".

Você não pode comparar o preço de fechamento com o preço de stop loss. Slippage significa que ele poderia fechar mais alto ou mais baixo do que o stop loss.

Portanto, "<=" ou ">=" não é útil.

Razão: