Detectar o gatilho de parada no backktest da OnTradeTransaction - página 4

 
angevoyageur:

Portanto, estamos falando apenas de testes de retaguarda. Eu testei com meu próprio código e obtenho 3 transações quando uma parada é acionada:

2013.05.15 10:22:27    Core 1    2013.05.10 16:20:37   Symbol : EURUSD  event : TRADE_TRANSACTION_DEAL_ADD(6)
2013.05.15 10:22:27    Core 1    2013.05.10 16:20:37   Symbol : EURUSD  event : TRADE_TRANSACTION_ORDER_DELETE(2)
2013.05.15 10:22:27    Core 1    2013.05.10 16:20:37   Symbol : EURUSD  event : TRADE_TRANSACTION_HISTORY_ADD(3)

Com o DEAL_ADD eu recebo o preço do negócio, portanto o SL no meu caso. Tudo parece correto para mim. Sugiro que você me envie o código que usa, o log backtest (como um arquivo) e uma captura de tela do Strategy tester Settings. Então, posso reproduzir exatamente o mesmo teste que o seu e analisar o resultado. Você pode me enviar um PM, se preferir.

Olá,

você pode me dizer onde exatamente a parada executada ou o preço alvo é armazenado:

a) MqlTradeTransaction

b) MqlTradeRequest

c) MqlTradeResultado

junto com o membro. Qual servidor MetaTrader ?

Obrigado

Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Trade Request Structure - Documentation on MQL5
 
angevoyageur:

Portanto, estamos falando apenas de testes de retaguarda. Eu testei com meu próprio código e obtenho 3 transações quando uma parada é acionada:

2013.05.15 10:22:27    Core 1    2013.05.10 16:20:37   Symbol : EURUSD  event : TRADE_TRANSACTION_DEAL_ADD(6)
2013.05.15 10:22:27    Core 1    2013.05.10 16:20:37   Symbol : EURUSD  event : TRADE_TRANSACTION_ORDER_DELETE(2)
2013.05.15 10:22:27    Core 1    2013.05.10 16:20:37   Symbol : EURUSD  event : TRADE_TRANSACTION_HISTORY_ADD(3)

Com o DEAL_ADD eu recebo o preço do negócio, portanto o SL no meu caso. Tudo parece correto para mim. Sugiro que você me envie o código que usa, o log backtest (como um arquivo) e uma captura de tela do Strategy tester Settings. Então, posso reproduzir exatamente o mesmo teste que o seu e analisar o resultado. Você pode me enviar um PM, se preferir.

Se você quer dizer TRADE_TRANSACTION_DEAL_ADD e MqlTradeTransaction.price, este preço é sempre 0.

Mesmo se eu não filtrar paraTRADE_TRANSACTION_DEAL_ADD, o preço é sempre 0, após o envio da ordem de entrada.

Eu uso

CTrade.Buy(...)  // place entry

e

CTrade.PositionModify // to attach stop and target

e

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
...
}

para capturar transações.

 
chinaski:

Se você quer dizer TRADE_TRANSACTION_DEAL_ADD e MqlTradeTransaction.price, este preço é sempre 0.

Mesmo se eu não filtrar paraTRADE_TRANSACTION_DEAL_ADD, o preço é sempre 0, após o envio da ordem de entrada.

Eu uso

e

e

para capturar transações.

Isto é com a MqlTradeTransaction.price, nem sempre é 0.

2013.05.15 10:22:27     Core 1  2013.05.10 16:20:37   stop loss triggered buy 0.10 EURUSD 1.30163 sl: 1.29663 tp: 1.30663 [#47  sell 0.10 EURUSD at 1.29663]
2013.05.15 10:22:27     Core 1  2013.05.10 16:20:37   deal #47  sell 0.10 EURUSD at 1.29663 done (based on order #47)
2013.05.15 10:22:27     Core 1  2013.05.10 16:20:37   deal performed [#47  sell 0.10 EURUSD at 1.29663]
2013.05.15 10:22:27     Core 1  2013.05.10 16:20:37   order performed sell 0.10 at 1.29663 [#47  sell 0.10 EURUSD at 1.29663]
2013.05.15 10:22:27     Core 1  2013.05.10 16:20:37   ----------------TRANSACTION START---------------------------
2013.05.15 10:22:27     Core 1  2013.05.10 16:20:37   Symbol : EURUSD  event : TRADE_TRANSACTION_DEAL_ADD(6)
2013.05.15 10:22:27     Core 1  2013.05.10 16:20:37   Order #47   type : ORDER_TYPE_BUY(0)  state : ORDER_STATE_STARTED(0)
2013.05.15 10:22:27     Core 1  2013.05.10 16:20:37   Deal #47  type : DEAL_TYPE_SELL(1)
2013.05.15 10:22:27     Core 1  2013.05.10 16:20:37   Price = 1.29663 Volume = 0.1 SL = 0.0 TP = 0.0 Activation price = 0.0

Há algo de estranho em seus resultados, mas não consigo ver o que com o código que você fornece.

 

Aqui o log com seu tc_ea_trans EA :

2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   take profit triggered buy 0.01 EURUSD 1.31553 sl: 1.31503 tp: 1.31603 [#331  sell 0.01 EURUSD at 1.31603]
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   deal #331  sell 0.01 EURUSD at 1.31603 done (based on order #331)
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   deal performed [#331  sell 0.01 EURUSD at 1.31603]
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   order performed sell 0.01 at 1.31603 [#331  sell 0.01 EURUSD at 1.31603]
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   price corrected from 1.31609 to 1.31604, deviation: 10 (instant sell 0.01 EURUSD at 1.31609 sl: 1.31659 tp: 1.31559)(1.31604 / 1.31609 / 1.31604)
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   instant sell 0.01 EURUSD at 1.31604 sl: 1.31659 tp: 1.31559 (1.31604 / 1.31609 / 1.31604)
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   deal #332  sell 0.01 EURUSD at 1.31604 done (based on order #332)
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   deal performed [#332  sell 0.01 EURUSD at 1.31604]
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   order performed sell 0.01 at 1.31604 [#332  sell 0.01 EURUSD at 1.31604]
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   CTrade::OrderSend: instant sell 0.01 EURUSD at 1.31609 sl: 1.31659 tp: 1.31559 [done at 1.31604]
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   TRADE_TRANSACTION_DEAL_ADD
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   trans=symbol=EURUSD price=1.31603 00 volume=0.01 sl=0.0000000 tp=0.0000000 order=331 deal=331 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
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   TRADE_TRANSACTION_ORDER_DELETE
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   trans=symbol=EURUSD price=1.3160300 volume=0.01 sl=0.0000000 tp=0.0000000 order=331 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 prof
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   TRADE_TRANSACTION_HISTORY_ADD
2013.05.15 18:43:48     Core 1  2013.05.02 08:39:15   trans=symbol=EURUSD price=1.3160300 volume=0.00 sl=0.0000000 tp=0.0000000 order=331 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 profi
 

Olá Angevoyageur,

encontrar em anexo novamente EA simples. Isto deve demonstrar isso. Ele apenas coloca uma ordem com parada apertada e alvo (parâmetro de entrada) e registra cada transação.

Eu realmente aprecio sua ajuda.

(Talvez você também possa mostrar suas transações de entrada)

Você poderia me dar também o mt-server ip ?

Arquivos anexados:
tc_ea_trans.mq5  11 kb
 
chinaski:

Olá Angevoyageur,

encontrar em anexo novamente EA simples. Isto deve demonstrar isso. Ele apenas coloca uma ordem com parada apertada e alvo (parâmetro de entrada) e registra cada transação.

Eu realmente aprecio sua ajuda.

(Talvez você também possa mostrar suas transações de entrada)

Você poderia me dar também o mt-server ip ?

Eu uso o EA que você acabou de publicar. MQ demo, Access point Europe. Teste com o :


Eu retiro um trecho aleatório do registro :

2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   take profit triggered buy 0.01 EURUSD 1.31751 sl: 1.31681 tp: 1.31821 [#107  sell 0.01 EURUSD at 1.31821]
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   deal #107  sell 0.01 EURUSD at 1.31821 done (based on order #107)
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   deal performed [#107  sell 0.01 EURUSD at 1.31821]
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   order performed sell 0.01 at 1.31821 [#107  sell 0.01 EURUSD at 1.31821]
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   requote 1.31823 / 1.31836 / 1.31823 (instant sell 0.01 EURUSD at 1.31836 sl: 1.31906 tp: 1.31766)
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   CTrade::OrderSend: instant sell 0.01 EURUSD at 1.31836 sl: 1.31906 tp: 1.31766 [requote (1.31823/1.31836)]
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   instant buy 0.01 EURUSD at 1.31840 sl: 1.31770 tp: 1.31910 (1.31827 / 1.31840 / 1.31827)
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   deal #108  buy 0.01 EURUSD at 1.31840 done (based on order #108)
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   deal performed [#108  buy 0.01 EURUSD at 1.31840]
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   order performed buy 0.01 at 1.31840 [#108  buy 0.01 EURUSD at 1.31840]
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   CTrade::OrderSend: instant buy 0.01 EURUSD at 1.31840 sl: 1.31770 tp: 1.31910 [done at 1.31840]
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   trans=symbol=EURUSD price=1.31821 00 volume=0.01 sl=0.0000000 tp=0.0000000 order=107 deal=107 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
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   trans=symbol=EURUSD price=1.3182100 volume=0.01 sl=0.0000000 tp=0.0000000 order=107 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 prof
2013.05.15 21:54:11     Core 1  2013.05.01 20:02:15   trans=symbol=EURUSD price=1.3182100 volume=0.00 sl=0.0000000 tp=0.0000000 order=107 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 profi

Então, você ainda tem um problema ao detectar um SL/TP acionado?

Arquivos anexados:
 
angevoyageur:

Eu uso o EA que você acabou de publicar. MQ demo, Access point Europe. Teste com :


Eu retiro um trecho aleatório do registro :

Então, você ainda tem um problema ao detectar um SL/TP acionado?

oh. vejo.eu podia jurar em minhas corridas de ontem que não havia tal preço dado. Eu fiz uma pesquisa de texto para este preço no log de backtest.

Mas agora, posso ver esta transação DEPOIS do logentry

"tirar proveito desencadeado".

na minha última corrida também - junto com o preço de execução.

Peço desculpas por todo o tempo que isso leva.

 
chinaski:

oh. vejo.eu podia jurar em minhas corridas de ontem que não havia tal preço dado. Fiz uma pesquisa de texto para este preço no log backktest.

Mas agora, posso ver esta transação APÓS a entrada do registro

...
O log que lhe forneci é do Visualizador, quando você lê o log diretamente da guia Strategy Tester Journal, ele é exibido na ordem inversa.
 
angevoyageur:
O log que lhe forneci é do Visualizador, quando você lê o log diretamente da guia Strategy Tester Journal, ele é exibido na ordem inversa.
Normalmente abro o arquivo de log a partir da aba log-tab, onde a ordem é de cima para baixo. Assim, de fato, o logentry que indica o preço é escrito antes da transação ocorrer.
 

Olá Angevoyageur,

"Ponto de acesso Europa. Voltar a testar com :"

você pode me dar o IP completo deste servidor?