Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
e se carregar no ontime() sera que daria?
Fica lento também...
Ao anexar o EA ao gráfico, não é perceptível problema de desempenho. O problema é ao executar no Testador: um teste que levaria 1 hora para concluir carregando em OnInit(), leva 20 horas ou mais carregando / encerrando em OnTick() / OnTimer().
Como o Rogerio disse acima, a contrução do handler se faz na inicialização, ou seja;
meu_handler=iMa(.....);
ja a copia dos valores deve ser feito sob demanda, ou seja, quando há necessidade. Não há como fugir disso, o que eu sugiro é que crie uma função que verifica as condiçãos, e que é chamada quando necessário, e não deixe um monte de código amontoado dentro da OnTick.
Alguma coisa assim....a copia dos valores só ocorre quando GetSignal é chamado, consequentemente essa função só é chamada quando uma nova barra chega, porem, é uma ESPECIFICAÇÃO DA ESTRATEGIA, ser a cada nova barra.
Como o Rogerio disse acima, a contrução do handler se faz na inicialização, ou seja;
meu_handler=iMa(.....);
ja a copia dos valores deve ser feito sob demanda, ou seja, quando há necessidade. Não há como fugir disso, o que eu sugiro é que crie uma função que verifica as condiçãos, e que é chamada quando necessário, e não deixe um monte de código amontoado dentro da OnTick.
Alguma coisa assim....a copia dos valores só ocorre quando GetSignal é chamado, consequentemente essa função só é chamada quando uma nova barra chega, porem, é uma ESPECIFICAÇÃO DA ESTRATEGIA, ser a cada nova barra.
Boa tarde Jonathan! Muito obrigado pelas sugestões! Muito importantes.
O que eu destaquei em azul é como eu já faço atualmente; em amarelo, não tem como implementar porque preciso dos valores dos indicadores pros meus sinais.
Eu vou pesquisar mais e ver se encontro uma forma de contornar esse problema através de alguns "arranjos técnicos", né? 😃 e qualquer novidade compartilho aqui.
O que eu destaquei em azul é como eu já faço atualmente; em amarelo, não tem como implementar porque preciso dos valores dos indicadores pros meus sinais.
A parte amarela é justamente o sinal, eu organizo em uma função única, fica mais simples dar manutenção depois ;)
. . .
Boa tarde Gustavo!
Resolvi o meu problema transcrevendo o código dos indicadores pro EA mesmo (com pequenas adaptações), como eu tinha cogitado. Praticamente o EA não perdeu velocidade de execução. Estou anexando abaixo uma versão das funções que retorna os valores dos indicadores para o índice de barra (shift) passado como parâmetro. Outra versão (que é a que eu uso) seria declarar as funções do tipo void, declarar as variáveis ExtSARBuffer[] e ExtMABuffer[] como globais, e o EA lê os valores que for utilizar dessas variáveis. A vantagem da segunda versão em relação à primeira é, claro, menos execuções das funções.
Boa tarde Gustavo!
Resolvi o meu problema transcrevendo o código dos indicadores pro EA mesmo (com pequenas adaptações), como eu tinha cogitado. Praticamente o EA não perdeu velocidade de execução. Estou anexando abaixo uma versão das funções que retorna os valores dos indicadores para o índice de barra (shift) passado como parâmetro. Outra versão (que é a que eu uso) seria declarar as funções do tipo void, declarar as variáveis ExtSARBuffer[] e ExtMABuffer[] como globais, e o EA lê os valores que for utilizar dessas variáveis. A vantagem da segunda versão em relação à primeira é, claro, menos execuções das funções.
Que bom que está funcionando é uma solução que resolveu seu problema! Mas veja só, na solução o SAR e a MA estão fazendo os cálculos sobre 1000 barras, já nos indicadores builtin do MT5 os cálculos são feitos sobre todas as barras do gráfico.
Uma questão que não entendi sobre seu problema é quantas vezes você precisa construir o HANDLE dos indicadores na sua estratégia e se eles são reutilizados ou podem ser liberados?
Que bom que está funcionando é uma solução que resolveu seu problema! Mas veja só, na solução o SAR e a MA estão fazendo os cálculos sobre 1000 barras, já nos indicadores builtin do MT5 os cálculos são feitos sobre todas as barras do gráfico.
Uma questão que não entendi sobre seu problema é quantas vezes você precisa construir o HANDLE dos indicadores na sua estratégia e se eles são reutilizados ou podem ser liberados?
Outra questão pertinente também é que indicadores rodam em threads separadas, logo a carga computacional em cima do EA é menor!
Que bom que está funcionando é uma solução que resolveu seu problema! Mas veja só, na solução o SAR e a MA estão fazendo os cálculos sobre 1000 barras, já nos indicadores builtin do MT5 os cálculos são feitos sobre todas as barras do gráfico.
Uma questão que não entendi sobre seu problema é quantas vezes você precisa construir o HANDLE dos indicadores na sua estratégia e se eles são reutilizados ou podem ser liberados?
Olá Rogerio, boa noite!
Eu preciso atualizar os parâmetros diariamente. Então, no OnTick(), eu tentei construir e desconstruir [IndicatorRelease()] os handles somente a cada nova barra D1 (eu negocio em H1), mas mesmo assim diminuiu enormemente a velocidade de execução do EA em backtests. Ficava inviável pra mim. Acho que, como você bem disse, são muitas dezenas de milhares de barras pra calcular, e o processo fica lento mesmo.
Olá Rogerio, boa noite!
Eu preciso atualizar os parâmetros diariamente. Então, no OnTick(), eu tentei construir e desconstruir [IndicatorRelease()] os handles somente a cada nova barra D1 (eu negocio em H1), mas mesmo assim diminuiu enormemente a velocidade de execução do EA em backtests. Ficava inviável pra mim. Acho que, como você bem disse, são muitas dezenas de milhares de barras pra calcular, e o processo fica lento mesmo.
--- Então, no OnTick(), eu tentei construir e desconstruir [IndicatorRelease()] os handles somente a cada nova barra D1 (eu negocio em H1)
Não entendi ? Qual o motivo de construir um novo Handle para os mesmos parâmetros de SYMBOL, TIME FRAME, PERÍODO , MÉTODO , SÉRIES PREÇOS , se nenhum parâmetro do handle alterou, pra que liberar e construir novamente a mesma coisa.
--- Então, no OnTick(), eu tentei construir e desconstruir [IndicatorRelease()] os handles somente a cada nova barra D1 (eu negocio em H1)
Não entendi ? Qual o motivo de construir um novo Handle para os mesmos parâmetros de SYMBOL, TIME FRAME, PERÍODO E SÉRIES PREÇOS o que muda de um dia para outro?
Esclarecer antes que não é algo que já está vigente não. Eu estava buscando essa solução pra poder testar algumas ideias.
Eu negocio Forex e quero que o EA busque negócios durante 24h. Acredito que algumas configurações de indicadores podem funcionar bem durante as sessões de Sydney e Tóquio; quando abre Londres podem ser melhores outras configurações; e quando abre NY talvez também sejam mais interessantes outras configurações. A questão da verificação e, se necessária, atualização diária pode ser em relação, por exemplo, à volatilidade (ADR) ...