Detectar o gatilho de parada no backktest da OnTradeTransaction

 

Olá,

eu tento detectar uma parada na execução em minha EA. Infelizmente, recebo apenasDEAL_ENTRY_IN fornecido pela MqlTradeTransaction passado para a OnTradeTransaction.

Este parece ser apenas o caso no backtest.

Alguém sabe como detectar uma parada acionada no backtest - melhor junto com o preço e o lucro (parcial) ?

Obrigado.

Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties - Documentation on MQL5
 
chinaski:

Olá,

eu tento detectar uma parada na execução em minha EA. Infelizmente, recebo apenasDEAL_ENTRY_IN fornecido pela MqlTradeTransaction passado para a OnTradeTransaction.

Este parece ser apenas o caso no backtest.

Alguém sabe como detectar uma parada acionada no backtest - melhor junto com o preço e o lucro (parcial) ?

Obrigado.

Na OnTradeTransaction, você tem que verificar por :

trans.order_state = ORDER_STATE_PLACED;

Seguido de outra transação com :

trans.type = TRADE_TRANSACTION_DEAL_ADD;
 
angevoyageur:

Na OnTradeTransaction, você tem que verificar por :

Seguido de outra transação com :

Olá Angevoyageur,

por favor, dê uma olhada em minha lixeira. Esta lixeira imprime TODAS as transações em um arquivo. Minha EA é muito simples. Ela compra ou vende junto com o stop e o target. Infelizmente, não consigo encontrar nenhuma transação no registro, que

estão relacionados à parada ou ao alvo acionado:

20130507 00:26:59:672 entry short at 1.32176 <- entry short
20130507 00:26:59:672 symbol=EURUSD price=1.3217600 volume=0.01 sl=1.3229200 tp=1.3202000 order=2 deal=2 entry-type=IN trans-type=DEAL_ADD order_type=BUY deal_type=DEAL_TYPE_SELL type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:672 symbol=EURUSD price=1.3217600 volume=0.01 sl=1.3229200 tp=1.3202000 order=2 deal=0 entry-type=IN trans-type=ORDER_DELETE order_type=SELL deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:672 symbol=EURUSD price=1.3217600 volume=0.00 sl=1.3229200 tp=1.3202000 order=2 deal=0 entry-type=IN trans-type=HISTORY_ADD order_type=SELL deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:672 symbol= price=0.0000000 volume=0.00 sl=0.0000000 tp=0.0000000 order=0 deal=0 entry-type=IN trans-type=REQUEST order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00

/// before the entry long, the stop or target of entry short should be triggerd.
/// The EA does not allow to enter new trade before latest is closed, simply by check current positions for symbol before open an entry tradde.

20130507 00:26:59:674 entry long at 1.32140 <- entry long
20130507 00:26:59:674 symbol=EURUSD price=1.3214000 volume=0.01 sl=1.3200900 tp=1.3231100 order=3 deal=3 entry-type=IN trans-type=DEAL_ADD order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:674 symbol=EURUSD price=1.3214000 volume=0.01 sl=1.3200900 tp=1.3231100 order=3 deal=0 entry-type=IN trans-type=ORDER_DELETE order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:674 symbol=EURUSD price=1.3214000 volume=0.00 sl=1.3200900 tp=1.3231100 order=3 deal=0 entry-type=IN trans-type=HISTORY_ADD order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00
20130507 00:26:59:674 symbol= price=0.0000000 volume=0.00 sl=0.0000000 tp=0.0000000 order=0 deal=0 entry-type=IN trans-type=REQUEST order_type=BUY deal_type=DEAL_TYPE_BUY type_time=0 expiration=1970.01.01 00:00 price_trigger=0.0000000 profit=0.00

/// As you can see, my entry short shows transaction BUY, SELL, SELL what ever the purpose of this confusing transactions is.
/// No a bit about stop or target orders

Então, como obter transações de parada e alvo ? Eu falo aqui sobre o backtest. Não tenho certeza, se este for também o caso em condições reais.

 
chinaski:

Olá Angevoyageur,

por favor, dê uma olhada em minha lixeira. Esta lixeira imprime TODAS as transações em um arquivo. Minha EA é muito simples. Ela compra ou vende junto com o stop e o target. Infelizmente, não consigo encontrar nenhuma transação no registro, que

estão relacionados à parada ou ao alvo acionado:

Então, como obter transações de parada e alvo ? Eu falo aqui sobre o backtest. Não tenho certeza, se este for também o caso em condições de vida.

Ok, desculpe-me por ter entendido mal sua primeira pergunta, eu estava pensando em uma ordem pendente (comprar parada ou vender parada) quando você disse "parada acionada".

Você tem certeza de que precisa monitorar as transações? Se você colocar apenas uma negociação de cada vez, você pode simplesmente verificar sua posição aberta com PositionSelect(_Symbol).

 
angevoyageur:

Ok, desculpe-me por ter entendido mal sua primeira pergunta, eu estava pensando em uma ordem pendente (stop de compra ou stop de venda) quando você disse "stop acionado".

Você tem certeza de que precisa monitorar a transação? Se você colocar apenas uma transação de cada vez, você pode simplesmente verificar sua posição aberta com PositionSelect(_Symbol).

Olá,

a fim de verificar se uma posição está aberta ou não, eu já faço isso.CPositionInfo.Select.

Mas como obter a parada executada ou o preço alvo, uma vez que uma parada ou um alvo foi acionado? Existe um método inteligente?

 
chinaski:

Olá,

a fim de verificar se uma posição está aberta ou não, eu já faço isso.CPositionInfo.Select.

Mas como obter a parada executada ou o preço alvo, uma vez que uma parada ou um alvo foi acionado? Existe um método inteligente?

Por que não verificar o histórico dos negócios?
 
angevoyageur:
Por que não verificar o histórico das transações?

Pode dar mais detalhes, por favor. Preciso da parada executada ou do preço alvo. Não tenho identificação do negócio ou bilhete do alvo acionado ou da parada (não passado como transação).

O Histórico fornece oDEAL_PRICE mas preciso de um número de transação ou bilhete. Qual bilhete ou negócio a ser aceito? Obrigado.

Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Deal Properties - Documentation on MQL5
 
chinaski:

Pode dar mais detalhes, por favor. Preciso da parada executada ou do preço alvo. Não tenho identificação do negócio ou bilhete do alvo acionado ou da parada (não passado como transação).

O Histórico fornece oDEAL_PRICE mas preciso de um número de transação ou bilhete. Qual bilhete ou negócio a ser aceito? Obrigado.

Quando uma sl ou tp é acionada, você tem uma transação adicionada com o lado oposto de seu negócio. Por exemplo, você tem uma posição aberta de COMPRAR 0,25 lotes. Quando seu sl/tp for acionado, você terá uma transação do tipo SELL, você pode usar a OnTradeTransaction para monitorar isso ou simplesmente verificar o histórico das transações uma vez que você saiba que sua posição está fechada.

Veja o exemplo do código aqui.

 
angevoyageur:

Quando um sl ou tp é acionado, você tem um acordo adicionado com o lado oposto de sua profissão. Por exemplo, você tem uma posição aberta de COMPRAR 0,25 lotes. Quando sua sl/tp for acionada, você terá uma transação do tipo SELL, você pode usar a OnTradeTransaction para monitorar isso ou simplesmente verificar o histórico das transações uma vez que você saiba que sua posição está fechada.

Veja o exemplo de código aqui.

Olá angev,

este é meu problema: obviamente não posso usar a OnTradeTransaction. Por favor, veja meus registros acima. Nenhuma ordem de parada ou alvo listada ali - portanto, nenhuma transação relacionada a uma parada ou alvo executada O lixão é criado para CADA transação passada para a OnTradeTransaction.

Mais uma vez, eu falo sobre o backtest.

 
chinaski:

Olá angev,

este é meu problema: obviamente não posso usar a OnTradeTransaction. Por favor, veja meus registros acima. Nenhuma ordem de parada ou alvo listada ali - portanto, nenhuma transação relacionada a uma parada ou alvo executada O lixão é criado para CADA transação passada para a OnTradeTransaction.

Mais uma vez, eu falo sobre o backtest.

Só acho que posso fazer é testar seu código se você o fornecer. Eu não tenho tal problema.
 
angevoyageur:
Só acho que posso fazer é testar seu código se você o fornecer. Eu não tenho tal problema.

Olá angevoyageur,

encontrar em anexo uma simples EA que demonstre o problema. O EA abre longo junto com a parada e o alvo, depois curto, depois longo e assim por diante.

Um método de descarga também é contido. Basta aplicar EUR.USD 1 minuto 1 semana e observar as lixeiras de transação no log backktest.

Obrigado por sua ajuda.

Arquivos anexados:
tc_ea_trans.mq5  11 kb