Muita diferença na execução na conta real e na conta simulação

 

Olá pessoal!

Tenho um EA para operar scalp no mini índice cujos parâmetros são 45 pontos TP e 200 pontos SL.
Quando eu rodo ele numa conta simulação a execução é "perfeita", os TPs são de 45 pontos e os SL são de 200.

Quando eu passo para a conta real há uma variação que no longo prazo vai fazer uma grande diferença e até mesmo no mesmo dia já pode-se observar uma diferença.

Anexei uma imagem com as operações do dia de hoje para exemplificar. Tanto na conta simulação quanto na conta real foram executadas as mesmas ordem, porém com valores diferentes. Lado esquerdo conta real e lado direito conta simulação.


Há algo que possa ser feito para diminuir ou acabar com esse "problema"??

Arquivos anexados:
spread.jpg  27 kb
 
Marcel Cardoso:

Olá pessoal!

Tenho um EA para operar scalp no mini índice cujos parâmetros são 45 pontos TP e 200 pontos SL.
Quando eu rodo ele numa conta simulação a execução é "perfeita", os TPs são de 45 pontos e os SL são de 200.

Quando eu passo para a conta real há uma variação que no longo prazo vai fazer uma grande diferença e até mesmo no mesmo dia já pode-se observar uma diferença.

Anexei uma imagem com as operações do dia de hoje para exemplificar. Tanto na conta simulação quanto na conta real foram executadas as mesmas ordem, porém com valores diferentes. Lado esquerdo conta real e lado direito conta simulação.


Há algo que possa ser feito para diminuir ou acabar com esse "problema"??

Do ponto de vista do codigo voce pode trocar seus stops por stop limit e isso vai fazer reduzir ou sanar o problema. Claro que fica com o problema que vez ou outra pode ser que o preço "pule" seu stop então tu tem que definir até quanto de defasagem o limit seria permitido.

 
Ricardo Rodrigues Lucca #:

Do ponto de vista do codigo voce pode trocar seus stops por stop limit e isso vai fazer reduzir ou sanar o problema. Claro que fica com o problema que vez ou outra pode ser que o preço "pule" seu stop então tu tem que definir até quanto de defasagem o limit seria permitido.

Não fez diferença nenhuma trocar para ordem limit.

Eu fiz um breve estudo em 2 dias de operações(30 operações) e o problema não está sendo nem na entrada e nem no posicionamento das ordem de saída.

As entradas estão sendo feitas corretamente, em conta real, e as ordens de saída (TP/SL) estão sendo posicionadas corretamente (ex: TP 45/ SL 100 a partir do ponto de entrada), porém essas ordens de saída estão sendo executadas antes, resultando numa diferença de 10/15 pontos em todas as operações.

Isso no fim do mês já corresponderá há uma grande diferença, imagina se considerar em 1 ano.

 
Marcel Cardoso #:

Não fez diferença nenhuma trocar para ordem limit.

Eu fiz um breve estudo em 2 dias de operações(30 operações) e o problema não está sendo nem na entrada e nem no posicionamento das ordem de saída.

As entradas estão sendo feitas corretamente, em conta real, e as ordens de saída (TP/SL) estão sendo posicionadas corretamente (ex: TP 45/ SL 100 a partir do ponto de entrada), porém essas ordens de saída estão sendo executadas antes, resultando numa diferença de 10/15 pontos em todas as operações.

Isso no fim do mês já corresponderá há uma grande diferença, imagina se considerar em 1 ano.

Bom pra mim o stop limit dá uma grande diferença quando uso na saída porque eu saia onde queria ou melhor e na corretora que estava mesmo o indice tava dando umas diferenças sempre contra de no mínimo 50 pontos que era totalmente sem noção. Uma outra coisa que tu poderia avaliar, mas não acredito que faça diferença seria desligar o RLP se estiver ativo na conta. Há relatos por membros que pode influenciar a execução, mas nunca vai ser igual a conta demonstrativa.
 
Ricardo Rodrigues Lucca #:
Bom pra mim o stop limit dá uma grande diferença quando uso na saída porque eu saia onde queria ou melhor e na corretora que estava mesmo o indice tava dando umas diferenças sempre contra de no mínimo 50 pontos que era totalmente sem noção. Uma outra coisa que tu poderia avaliar, mas não acredito que faça diferença seria desligar o RLP se estiver ativo na conta. Há relatos por membros que pode influenciar a execução, mas nunca vai ser igual a conta demonstrativa.

Eu não entendi quando vc diz que usa o stop limit na saída. 

Eu utilizei apenas o seguinte comando da biblioteca CTrade para abrir posição:

trade.BuyLimit(   num_ctt_kamikaze,       // volume
                  preco_entrada,          // preco entrada
                  _Symbol,                // simbolo
                  preco_entrada - SL_k,   // SL
                  preco_entrada + TP_k,   // TP
                  ORDER_TIME_DAY,         // tempo da ordem
                  0,                      // expiracao
                  "kamikaze-win-limit");  // comentario

Você faz algo diferente disso?

 
Marcel Cardoso #:

Eu não entendi quando vc diz que usa o stop limit na saída. 

Eu utilizei apenas o seguinte comando da biblioteca CTrade para abrir posição:

Você faz algo diferente disso?

Sim, apos a ordem virar posição comprada eu tiro o Stop Loss e mando uma ordem usando:

trade.OrderOpen(_Symbol, ORDER_TYPE_SELL_STOP_LIMIT, lote, stop_atual, stop_atual, 0.0, 0.0);
Aqui de acordo com outro tópico eu não sabia, mas o limite e o price pode ser interpretado diferente em corretoras. A ideia seria o limite ser usado para definir o "offset" de saída já que o preço batendo um valor X de stop eu mandaria a ordem limitada em Y permitindo que até Y seja consumido.
 
Ricardo Rodrigues Lucca #:

Sim, apos a ordem virar posição comprada eu tiro o Stop Loss e mando uma ordem usando:

Aqui de acordo com outro tópico eu não sabia, mas o limite e o price pode ser interpretado diferente em corretoras. A ideia seria o limite ser usado para definir o "offset" de saída já que o preço batendo um valor X de stop eu mandaria a ordem limitada em Y permitindo que até Y seja consumido.

Não estou conseguindo implementar esse código, fica dando um erro: "failed buy stop limit 1 WIN$ at 121397 (121397) sl: 121642 tp: 121397 [Invalid price]"

Já arredondei os valores, já normalizei e continua a mesma coisa.

Como vc tira o stoploss?


 
Marcel Cardoso #:

Não estou conseguindo implementar esse código, fica dando um erro: "failed buy stop limit 1 WIN$ at 121397 (121397) sl: 121642 tp: 121397 [Invalid price]"

Já arredondei os valores, já normalizei e continua a mesma coisa.

Como vc tira o stoploss?


Tu viu que o arredondamento esta errado, ne? Tem que ser arredondado a multiplos de TICK_SIZE (que no caso do indice eh 5).

Sobre retirar o stoploss, eu faço um positionmodify passando o valor zero e mantendo o valor de TP.

 
Ricardo Rodrigues Lucca #:

Tu viu que o arredondamento esta errado, ne? Tem que ser arredondado a multiplos de TICK_SIZE (que no caso do indice eh 5).

Sobre retirar o stoploss, eu faço um positionmodify passando o valor zero e mantendo o valor de TP.

Sim, mas são os valores do backtest, não é esse o problema. O que me confundiu foi o que colocar em cada requisição do comando OrderSend (limit price?, price?, sl?, tp?)

 
Ricardo Rodrigues Lucca #:

Tu viu que o arredondamento esta errado, ne? Tem que ser arredondado a multiplos de TICK_SIZE (que no caso do indice eh 5).

Sobre retirar o stoploss, eu faço um positionmodify passando o valor zero e mantendo o valor de TP.

Não deu certo usar positionmodify com valor zero no SL, gera um erro de [invalid stops]

Razão: