Conta DEMO vs REAL ("Alta frequência")

 

Bom! Eu tenho um sistema que está em fase de teste em uma conta demo da XP, o sistema busca um alvo extremamente curto, porém a ideia é fazer inúmeras operações em um curto espaço de tempo, ele tem uma assertividade de 93%, porém ao rodar em conta de produção, a demora ao executar a ordem limit foi bem diferente do que estava acontecendo na demo. Claro que eu não esperava que fosse idêntico, mas o preço literalmente "sambava" na ordem limit e até ser executada o preço já deu take, já foi contra e inclusive já pulou o stop antes mesmo de ser executada, é uma zona.

Acredito que um dos meus erros foi testar em uma corretora e colocar em produção em outra. Apesar das duas usarem DMA1. Gostaria de saber a experiência dos amigos em relação a isso, meu expert busca 0,5 ponto no mini dólar, mas essa latência realmente foi crucial pra o sistema não ser executado como esperado.

Meu ping em conta DEMO na XP, é de 53 ms, mesmo assim o sistema roda bem e as ordens são executadas super rápido, em conta produção eu tenho o mesmo ping, mas por algum motivo decidi rodar na CLEAR que nem me mostrava o ping, mas a latência que eu medi dava de 53 até 5000 ms, entre enviar a ordem limit e ela ser efetivamente colocada

Imagino que derrepente uma vps e um DMA4 possa resolver, mas gostaria da opinião dos amigos.


[edit]

Outra coisa que me aconteceu, foi o EA abrir contratos a mais do que eu determinei na CLEAR, mesmo com as funções verificando se existe ordem aberta, se existe posição aberta, não sei o motivo disso. Defini um volume de 2 contratos, ele abriu posição com 4 contratos. Imagino que a latência tenha contribuído pra isso, posicionar uma ordem por cima da outra ou algo do tipo, mas em conta demo o bixo roda liso, nunca apresentou nenhum problema referente a loop de ordens ou algo do tipo. 

Obs: Sim, é minha primeira vez rodando em conta de produção, mas estudo isso há um ano e pouco, testando, programando e pesquisando (pouco tempo, mas já é alguma coisa kkk). Mesmo assim, isso me ocorreu.

Porque a Hospedagem Virtual no MetaTrader 4 e no MetaTrader 5 são Melhores que os VPS Usuais
Porque a Hospedagem Virtual no MetaTrader 4 e no MetaTrader 5 são Melhores que os VPS Usuais
  • www.mql5.com
A rede de hospedagem virtual em nuvem foi desenvolvida especialmente para o MetaTrader 4 e o MetaTrader 5, possuindo todas as vantagens de uma solução nativa. Obtenha os benefícios de nossa oferta gratuita por 24 horas - teste um servidor virtual agora mesmo.
 
HENRIQUE ARAUJO DOS SANTOS:


Boa tarde,

acredito seu erro foi usar o BACKTEST e os testes em DEMO sem ler e entender como funciona a conta DEMO e como funciona o gerador de ticks para BACKTEST.   Outra coisa, há diferença sim entre backtests feitos em corretoras diferente tanto DEMO como REAL.

Uma observação, veja a quantidade reclamações sobre a corretora citada, as outras tem também problemas mas em número bem menor.

Quanto ao erro de volume de operações é erro no EA "não tem nada a ver o LAG".    Coloquei em aspas por que em DEMO a execução da ordem é total e imediata e nunca vai dar erro.  Em REAL o EA deve estar preparado para receber OS DEALS de execução da ordem e ter outros conjuntos de testes para não duplicar uma entrada.


Por último operar com um TICK de  STOP não é sonho, as vezes quando o mercado não anda pode ser dê certo.


Bons negócios.

 
Rogerio Giannetti Torres:

Boa tarde,

acredito seu erro foi usar o BACKTEST e os testes em DEMO sem ler e entender como funciona a conta DEMO e como funciona o gerador de ticks para BACKTEST.   Outra coisa, há diferença sim entre backtests feitos em corretoras diferente tanto DEMO como REAL.

Uma observação, veja a quantidade reclamações sobre a corretora citada, as outras tem também problemas mas em número bem menor.

Quanto ao erro de volume de operações é erro no EA "não tem nada a ver o LAG".    Coloquei em aspas por que em DEMO a execução da ordem é total e imediata e nunca vai dar erro.  Em REAL o EA deve estar preparado para receber OS DEALS de execução da ordem e ter outros conjuntos de testes para não duplicar uma entrada.


Por último operar com um TICK de  STOP não é sonho, as vezes quando o mercado não anda pode ser dê certo.


Bons negócios.

Obrigado por compartilhar um pouco do seu conhecimento Rogerio. Eu até cheguei a testar esse sistema em backtest por uma vez mas justamente por conta dos ticks simulados, se eu rodo ele em backtest é um desastre pois a movimentação do preço é totalmente diferente e o alvo/stoploss são curtos. Literalmente não dá pra testar sistemas desse tipo em backtest o mais próximo seria realmente a conta demo pelo que eu pesquisei e entendi. Quanto a conta demo eu realmente não li a fundo sobre conta demo e também imaginei que teria problemas com essa corretora pelas pesquisas previas que fiz, mesmo assim decidi arriscar. Bom, serviu como aprendizado.

Em relação a ordem duplicada, vou me atentar melhor a isso e tentar corrigir o problema, inclusive, se existir algum tópico aqui no fórum ou possível solução será bem vinda. A principio eu estou verificando o ResultRetCode das ordens pra evitar loop de ordem em caso de falha no envio da ordem... E como ja disse obviamente verifico se já existe ordem pendente ou posição aberta. 

E sim de acordo com a movimentação do preço e com os teste que eu fiz, pode dar certo sim.

Novamente, grato pelo conhecimento, vou seguir com os testes.

Moving Average - Indicadores de tendência - Ajuda para o MetaTrader 5
Moving Average - Indicadores de tendência - Ajuda para o MetaTrader 5
  • www.metatrader5.com
O Indicador Técnico Moving Average mostra o valor médio de preços em um certo período de tempo. Quando se calcula a...
 

Bom!! Não sei se é a solução mais inteligente, mas o que eu pensei pra resolver o problema da ordem duplicada foi:

Criei uma variavel booleana chamada wait, ao enviar a solicitação de abertura de ordem essa variavel wait == true, e somente após receber o retorno do servidor essa variavel passa a ser false e limitei o EA pra abrir ordem somente quando wait == false.


Mais ou menos isso:

bool wait;

void OnTick()
  {
   
    if(SellSignal() && !CheckOrders && !CheckPositions && wait==false)
     {
     bool _result = m_trade.SellLimit(volume_ordem,preco_venda,_Symbol,preco_venda+inpStoploss,preco_venda-inpTakeprofit,ORDER_TIME_DAY,0,NULL);
     wait=true;
     if(_result){
     if(m_trade.ResultRetcode()==10008 || m_trade.ResultRetcode()==10009)
     {
     wait = false;
     }
     }

     }

  }

Claro que meu código tem mais coisas como verificando latência, tratando outros erros que podem acontecer no envio da ordem, mas foi só pra mostrar a questão da variável wait.

 

Olá a todos

Engraçado que este erro só acontece em conta real.

No meu caso inseri um Sleep(1000); (1 segundo). após a execução da compra ou venda resolvendo o caso.

EX:

               if(!trade.Buy(NormalizeDouble(BuyLot,2),sym,NormalizeDouble(ask,digits),slb,tpb,Commentary))

                  Print("Erro na Média #",GetLastError());

               else

                  Print("Sucesso na média");

                  Sleep(1000);


Abraço!

 
HENRIQUE ARAUJO #:

Bom!! Não sei se é a solução mais inteligente, mas o que eu pensei pra resolver o problema da ordem duplicada foi:

Criei uma variavel booleana chamada wait, ao enviar a solicitação de abertura de ordem essa variavel wait == true, e somente após receber o retorno do servidor essa variavel passa a ser false e limitei o EA pra abrir ordem somente quando wait == false.


Mais ou menos isso:

Claro que meu código tem mais coisas como verificando latência, tratando outros erros que podem acontecer no envio da ordem, mas foi só pra mostrar a questão da variável wait.

Fala Henrique, 

Eu não tenho problema com ordem duplicada, eu sempre valido primeiramente no OnTick() se estou com alguma posicao aberta para o Ativo, para o Ativo com o expert antes de qualquer analise ou abertura de trade. 

Quanto ao problema:

"Gostaria de saber a experiência dos amigos em relação a isso, meu expert busca 0,5 ponto no mini dólar, mas essa latência realmente foi crucial pra o sistema não ser executado como esperado. "

Reavalie sua estrategia, voce tem as taxas de emulamentos, B3. Slippage as vezes a favor, a maioria contra. Precisa de alvos maiores que isso, 5 pontos pode ser um ponto de partida.

int  EA_Magic=33333333;

bool Buy_opened=false;
bool Sell_opened=false;

bool Buy_opened_ativo=false;
bool Sell_opened_ativo=false;
   
if(PositionSelect(_Symbol)==true)
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened_ativo=true;
         int magic= PositionGetInteger(POSITION_MAGIC);
         if(magic == EA_Magic)
           {
            Buy_opened=true;
           }
        }
      else
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened_ativo = true;
            int magic= PositionGetInteger(POSITION_MAGIC);
            if(magic == EA_Magic)
              {
               Sell_opened=true;
              }
           }
     }
   else
     {
      Buy_opened_ativo=false;
      Buy_opened=false;
      Sell_opened_ativo=false;
      Sell_opened=false;
     }




   if(Buy)
     {
      if(Buy_opened_ativo == true || Buy_opened == true || Sell_opened_ativo == true || Sell_opened == true)
        {
         //Print("CTrade compra ja aberta por outro robo");
         return;    // Don't open a new Buy Position
        }
 
HENRIQUE ARAUJO:

Bom! Eu tenho um sistema que está em fase de teste em uma conta demo da XP, o sistema busca um alvo extremamente curto, porém a ideia é fazer inúmeras operações em um curto espaço de tempo, ele tem uma assertividade de 93%, porém ao rodar em conta de produção, a demora ao executar a ordem limit foi bem diferente do que estava acontecendo na demo. Claro que eu não esperava que fosse idêntico, mas o preço literalmente "sambava" na ordem limit e até ser executada o preço já deu take, já foi contra e inclusive já pulou o stop antes mesmo de ser executada, é uma zona.

Acredito que um dos meus erros foi testar em uma corretora e colocar em produção em outra. Apesar das duas usarem DMA1. Gostaria de saber a experiência dos amigos em relação a isso, meu expert busca 0,5 ponto no mini dólar, mas essa latência realmente foi crucial pra o sistema não ser executado como esperado.

Meu ping em conta DEMO na XP, é de 53 ms, mesmo assim o sistema roda bem e as ordens são executadas super rápido, em conta produção eu tenho o mesmo ping, mas por algum motivo decidi rodar na CLEAR que nem me mostrava o ping, mas a latência que eu medi dava de 53 até 5000 ms, entre enviar a ordem limit e ela ser efetivamente colocada

Imagino que derrepente uma vps e um DMA4 possa resolver, mas gostaria da opinião dos amigos.


[edit]

Outra coisa que me aconteceu, foi o EA abrir contratos a mais do que eu determinei na CLEAR, mesmo com as funções verificando se existe ordem aberta, se existe posição aberta, não sei o motivo disso. Defini um volume de 2 contratos, ele abriu posição com 4 contratos. Imagino que a latência tenha contribuído pra isso, posicionar uma ordem por cima da outra ou algo do tipo, mas em conta demo o bixo roda liso, nunca apresentou nenhum problema referente a loop de ordens ou algo do tipo. 

Obs: Sim, é minha primeira vez rodando em conta de produção, mas estudo isso há um ano e pouco, testando, programando e pesquisando (pouco tempo, mas já é alguma coisa kkk). Mesmo assim, isso me ocorreu.

0,5 ponto no mini dólar?  Como fica os custos disso?

 
HENRIQUE ARAUJO:

Bom! Eu tenho um sistema que está em fase de teste em uma conta demo da XP, o sistema busca um alvo extremamente curto, porém a ideia é fazer inúmeras operações em um curto espaço de tempo, ele tem uma assertividade de 93%, porém ao rodar em conta de produção, a demora ao executar a ordem limit foi bem diferente do que estava acontecendo na demo. Claro que eu não esperava que fosse idêntico, mas o preço literalmente "sambava" na ordem limit e até ser executada o preço já deu take, já foi contra e inclusive já pulou o stop antes mesmo de ser executada, é uma zona.

Acredito que um dos meus erros foi testar em uma corretora e colocar em produção em outra. Apesar das duas usarem DMA1. Gostaria de saber a experiência dos amigos em relação a isso, meu expert busca 0,5 ponto no mini dólar, mas essa latência realmente foi crucial pra o sistema não ser executado como esperado.

Meu ping em conta DEMO na XP, é de 53 ms, mesmo assim o sistema roda bem e as ordens são executadas super rápido, em conta produção eu tenho o mesmo ping, mas por algum motivo decidi rodar na CLEAR que nem me mostrava o ping, mas a latência que eu medi dava de 53 até 5000 ms, entre enviar a ordem limit e ela ser efetivamente colocada

Imagino que derrepente uma vps e um DMA4 possa resolver, mas gostaria da opinião dos amigos.


[edit]

Outra coisa que me aconteceu, foi o EA abrir contratos a mais do que eu determinei na CLEAR, mesmo com as funções verificando se existe ordem aberta, se existe posição aberta, não sei o motivo disso. Defini um volume de 2 contratos, ele abriu posição com 4 contratos. Imagino que a latência tenha contribuído pra isso, posicionar uma ordem por cima da outra ou algo do tipo, mas em conta demo o bixo roda liso, nunca apresentou nenhum problema referente a loop de ordens ou algo do tipo. 

Obs: Sim, é minha primeira vez rodando em conta de produção, mas estudo isso há um ano e pouco, testando, programando e pesquisando (pouco tempo, mas já é alguma coisa kkk). Mesmo assim, isso me ocorreu.

Acho que o Rogerio ja disse tudo, so gostaria de frisar que como a ordem limit esta sendo colocada proxima voce vai ter sim (como ja deve ter visto) problema sendo o ultimo na fila, isso eh realmente horrivel quando a ordem esta la e o preco vem pra cima e nao consumiu ate o seu lugar na fila :'(

Sobre o problema descrito como latencia acredito que esta enganado, inclusive a ordem ser desenhada no grafico e a parecer no terminal nao quer dizer que ela ja esta pronta. Eu ja vi numa corretora que a ordem ficou no estado started por quase 2 minutos e dai foi cancelada... nesse meio tempo, ela era desenhada no grafico normalmente. O DMA4 pode reduzir o problema, mas ele nao vai resolver tem inumeras corretoras por ai que falam que o metatrader deles esta usando tecnica de colocation (antigo dma4), mas o sistema de risco nao eh tao rapido e isso causa uns "espasmos" quando tem muita gente e o risco nao consegue confirmar e dai tu sente que a ordem parece deu uma segurada.... Fora isso tem que ver a questao da internet, a VPS normalmente reduz esse risco, mas nao resolve. E as vezes em um VPS tu pode ter um ping de 500 ms por estar mal configurado e quando estiver certinho cai pra uns 30 ms ou ate menos. Ainda nessa questao da internet, eu defenderia esquecer 0.5 pts teria que ser pelo menos de 5 a 10 pts pra ser "saudavel".

Razão: