Diferença grande no tempo de execução de um código quando na conta real - página 2

 
Boa tarde. As mudanças sugeridas melhoraram bastante no testador de estratégia. Ficou mais rápido mesmo. Mas na conta real continua tudo igual. Independentemente do que faça no código continua tomando cerca de 1min e 33seg para rodar o ciclo completo do código. É estranho. Se eu testo algum código de exemplo do metatrader aí roda normal, ou seja, é algo no código mas que parece não ter relação com a falta de otimização. Esse final de semana terei mais tempo e vou tentar desabilitar os indicadores um a um para tentar identificar se o problema está em algum deles.
 
cleorb #:
Boa tarde. As mudanças sugeridas melhoraram bastante no testador de estratégia. Ficou mais rápido mesmo. Mas na conta real continua tudo igual. Independentemente do que faça no código continua tomando cerca de 1min e 33seg para rodar o ciclo completo do código. É estranho. Se eu testo algum código de exemplo do metatrader aí roda normal, ou seja, é algo no código mas que parece não ter relação com a falta de otimização. Esse final de semana terei mais tempo e vou tentar desabilitar os indicadores um a um para tentar identificar se o problema está em algum deles.

Verifica tambem colocando no oninit isso aqui:

   negocio.SetAsyncMode(true);
   negocio.LogLevel(LOG_LEVEL_ALL);
A ideia por detras seria, se for alguma lentidao da corretora por ser assincrono voce não vai mais esperar todo o processo de confirmação. O LogLevel seria para o ctrade ficar mais verboso, eu acho desnecessario porque seria assumir que a culpa é da corretora. Mas tem corretoras que no remover ordem ficam meio que travadas principalmente umas de baixo custo de um certo grupo.
 
Ricardo Rodrigues Lucca #:

Verifica tambem colocando no oninit isso aqui:

A ideia por detras seria, se for alguma lentidao da corretora por ser assincrono voce não vai mais esperar todo o processo de confirmação. O LogLevel seria para o ctrade ficar mais verboso, eu acho desnecessario porque seria assumir que a culpa é da corretora. Mas tem corretoras que no remover ordem ficam meio que travadas principalmente umas de baixo custo de um certo grupo.
Interessante. Não sei se me resolveria porque, pelo que entendi, isso poderia comprometer algumas partes do código que dependem de uma resposta (por exemplo, "posicionado ou não", "ordem enviada ou não"). Não sei se estou correto, mas estou imaginando que essas informações venham via corretora (ou não?). Mas de qualquer maneira será uma ferramenta muito útil no mínimo para verificar se o problema está na comunicação com a corretora ou é algo no código mesmo. Qto à corretora, talvez esteja usando a que vc se refere mesmo, afinal é uma de baixo custo e que pertence a um certo grupo bem famoso de nome pequeno.. hehehe. Mais uma vez, obrigado pela ajuda! 
 
cleorb #:
Interessante. Não sei se me resolveria porque, pelo que entendi, isso poderia comprometer algumas partes do código que dependem de uma resposta (por exemplo, "posicionado ou não", "ordem enviada ou não"). Não sei se estou correto, mas estou imaginando que essas informações venham via corretora (ou não?). Mas de qualquer maneira será uma ferramenta muito útil no mínimo para verificar se o problema está na comunicação com a corretora ou é algo no código mesmo. Qto à corretora, talvez esteja usando a que vc se refere mesmo, afinal é uma de baixo custo e que pertence a um certo grupo bem famoso de nome pequeno.. hehehe. Mais uma vez, obrigado pela ajuda! 

Então provavelmente a lentidao se refere a quando voce limpa uma ordem, "essa" corretora tu manda remover uma ordem e ela devolve um reject. Isso deixa o script sincrono perdido como se nao tivesse sido confirmado e permanece ate o timeout. Mas precisa ser investigado se é o seu caso.

Boa sorte que nao teria outras ideias!