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.
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.

- www.metatrader5.com
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!
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 }
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?
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".

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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.