Como verificar se um pedido foi fechado por perda parada - página 2

 

Você só poderia responder se soubesse do que está falando?

Este é um tópico sobre o MT5/mql5, vou remover todos os posts irrelevantes.

Não há nenhum preço de parada na história do MT5.

 

O principal problema em mql5 (conta hedging) é conhecer o preço Stop Loss, quando uma posição é fechada, devido à falta de histórico de posições. Você pode usar HistorySelectByPosition() para encontrar seu Stop Loss inicial (Stop Loss da ordem inicial), mas se você tiver modificado esse Stop Loss mais tarde, ele gera novas ordens para fazê-lo, sem o mesmo POSITION_ID, e portanto, elas não serão selecionadas pela função HistorySelectByPosition(), portanto torna-se muito difícil saber o último Stop Loss que você colocou.

Eu não sei se pode ser considerado como um bug, mas se não, deve ser.

Cumprimentos.

Documentation on MQL5: Trade Functions / HistorySelectByPosition
Documentation on MQL5: Trade Functions / HistorySelectByPosition
  • www.mql5.com
Trade Functions / HistorySelectByPosition - Reference on algorithmic/automated trading language for MetaTrader 5
 
Jose Francisco Casado Fernandez:

O principal problema em mql5 (conta hedging) é conhecer o preço Stop Loss, quando uma posição é fechada, devido à falta de histórico de posições. Você pode usar o HistorySelectByPosition() para encontrar seu Stop Loss inicial (Stop Loss da ordem inicial)...

Não, você não pode ou eu o entendi mal.

O atual Stoploss não está em nenhum lugar da história.

 
Alain Verleyen:

Não, você não pode ou eu o entendi mal.

O Stoploss não está em lugar algum na história.

Você pode usar HistorySelectByPosition(), com seu POSITION_ID, e então você pode encontrar a primeira encomenda com esse POSITION_ID, e verificar o Stop Loss desta encomenda (HistoryOrderGetDouble(ticket, ORDER_SL)). Funcionou para mim, mas
.o problema é quando você modifica esse Stop Loss mais tarde.
 
Jose Francisco Casado Fernandez:
Você pode usar HistorySelectByPosition(), com seu POSITION_ID, e então você pode encontrar a primeira encomenda com esse POSITION_ID, e verificar o Stop Loss desta encomenda (HistoryOrderGetDouble(ticket, ORDER_SL)). Funcionou para mim, mas
.o problema é quando você modifica esse Stop Loss mais tarde.

Ok entendido agora, você está certo.

 
Jose Francisco Casado Fernandez:
Você pode usar HistorySelectByPosition(), com seu POSITION_ID, e então você pode encontrar a primeira ordem com esse POSITION_ID, e verificar o Stop Loss desta ordem (HistoryOrderGetDouble(ticket,ORDER_SL). Funcionou para mim, mas
.o problema é quando você modifica esse Stop Loss mais tarde.
E então, verifique ORDER_POSITION_ID igual a DEAL_POSITION_ID,
então verifique DEAL_ENTRY, se OUT, get HystoryDealGetDouble(ticket,DEAL_PRICE)
.

Se DEAL_PRICE igual a HistoryOrderGetDouble(ticket,ORDER_SL), então isso significa que a Ordem foi fechada devido ao fim da perda.

Aqui está meu opnião.

 
Alain Verleyen:

Ok entendido agora, você está certo.

Ok, e você sabe porque se você modificar o Stop Loss mais tarde, a nova ordem gerada para fazê-lo, não mostra o mesmo POSITION_ID??? Seria a solução perfeita para este assunto. É um bug????. Obrigado.
 
Roberto Jacobs:

Se DEAL_PRICE igual a HistoryOrderGetDouble(ticket,ORDER_SL), então isso significa que a Ordem foi fechada devido ao fim da perda.

E quanto ao escorregamento?
 
Roberto Jacobs:
E então, verifique ORDER_POSITION_ID igual a DEAL_POSITION_ID,
então verifique DEAL_ENTRY, se OUT, get HystoryDealGetDouble(ticket,DEAL_PRICE)
.

Se DEAL_PRICE igual a HistoryOrderGetDouble(ticket,ORDER_SL), então isso significa que a Ordem foi fechada devido ao fim da perda.

Aqui está meu opnião.

Sim, é o que eu estava dizendo. Eu fiz isso, e funcionou, mas se você modificar o Stop Loss inicial, ele gera um novo pedido SEM o mesmo POSITION_ID. Eu não sei por quê. Eu acho que é um bug. Cumprimentos,...
 
honest_knave:
E o escorregamento?

Não há necessidade de parecer escorregadio, pois o pedido foi fechado, e o preço é próximo ao HystoryDealGetDouble(bilhete, DEAL_PRICE).
Se o pedido não foi fechado, e você faz um pedido para fechar, então você deve considerar quanto escorregou, para que nenhum erro requeira.

Razão: