...
tenta isso..
int total=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL); int OnInit() { .... if(ChartIndicatorsTotal(0,total)<1) { ChartIndicatorAdd(0,total,handle); } }
tenta isso..
Cara agora o ADX apareceu na janela de negociação, porém quando eu fecho o MT5 e abro de novo ele insere outro ADX com o mesmo valor de período do inicial, isso tbm acontece na janela de back test.
Aqui esta o código como deixei com a sua modificação sugerida:
int OnInit() { TimeToStruct(StringToTime(inicio), horario_inicio); TimeToStruct(StringToTime(termino), horario_termino); TimeToStruct(StringToTime(fechamento), horario_fechamento); //Verifica se os horários foram iniciados corretamente if(horario_inicio.hour > horario_termino.hour || (horario_inicio.hour == horario_termino.hour && horario_inicio.min > horario_termino.min)) { printf("Parametros de horarios inválidos"); return INIT_FAILED; } //Verifica se os horários foram iniciados corretamente if(horario_termino.hour > horario_fechamento.hour || (horario_termino.hour == horario_fechamento.hour && horario_termino.min > horario_fechamento.min)) { printf("Parametros de horarios inválidos"); return INIT_FAILED; } if(!simbolo.Name(_Symbol)) { printf("Ativo inválido"); return INIT_FAILED; } //--- atribuir p/ os manupuladores TesterHideIndicators(true); adxHandle = iADX(_Symbol, _Period, periodoAdx); ArraySetAsSeries(adx, true); ArraySetAsSeries(diMenos, true); ArraySetAsSeries(diMais, true); if(ChartIndicatorsTotal(0,total)<1) { ChartIndicatorAdd(0,total,adxHandle); } return(INIT_SUCCEEDED); }
...
int adxHandle = INVALID_HANDLE; int total=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL); //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { adxHandle = iADX(Symbol(), Period(), 14); //ArraySetAsSeries(adx, true); //ArraySetAsSeries(diMenos, true); //ArraySetAsSeries(diMais, true); if(ChartIndicatorsTotal(0,total) < 1) { ChartIndicatorAdd(0,total,adxHandle); } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- ChartIndicatorDelete(0, total, ChartIndicatorName(0, total, 0)); adxHandle=INVALID_HANDLE; } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Trade function | //+------------------------------------------------------------------+ void OnTrade() { //--- } //+------------------------------------------------------------------+
Desculpe não entendi bem oque você sugeriu neste código.
Poderia explicar melhor.
...
Faltou vc Desinicializar o código.
void OnDeinit(const int reason) { //--- ChartIndicatorDelete(0, total, ChartIndicatorName(0, total, 0)); adxHandle=INVALID_HANDLE; }
Olá pessoal estou testando um EA com ADX mas quando rodo o EA o ADX não aparace na tela do Mt5.
Quando rodo o back test ele aparece porém com o valor de períodos incorreto.
Eu ja reinstalei o Mt5 e não resolveu.
O ativo que negocio é mini Dolar e mini Indice.
Vocês tem alguma ideia do que pode estar faltando no código ou alguma configuração do MT5?
Vejam como estou iniciando o indicador:
Você está confundindo tudo!
Instanciar a função interna iADX() não vai fazer com que o indicador apareça no gráfico.
Uma coisa é você ler dados do indicador ADX instanciado, outra é exibí-lo no gráfico.
Mostrar ou não mostrar as coisas no gráfico é uma área onde o MQL5 é uma m*... completamente inconsistente e confuso. Já partindo da premissa que, em tempo de compilação você explicitamente precisa mencionar quantos buffers de PLOT precisa... O que depois, em tempo de execução você fica amarrado com o que definiu em tempo de Compilação... Do ponto de vista de engenharia de software, é ridícula essa abordagem, mas enfim, é apenas um desabafo...
E quando entra o Backtest então, é um inferno... Ou ele duplica, ou não mostra nada, porque depende da lógica inicial que você aplicou em seu projeto.
No seu caso, deixe o código do jeito que estava, apenas lendo o iADX, pois afinal, o EA não precisa LER nada do gráfico, E, grave um template com o nome de tester.tpl com o ADX enfiado no gráfico, com as mesmas configurações que vc está usando no EA, e assim você será feliz, sem penalizar a performance do seu EA quando ele for pra conta real...
;)
Você está confundindo tudo!
Instanciar a função interna iADX() não vai fazer com que o indicador apareça no gráfico.
Uma coisa é você ler dados do indicador ADX instanciado, outra é exibí-lo no gráfico.
Mostrar ou não mostrar as coisas no gráfico é uma área onde o MQL5 é uma m*... completamente inconsistente e confuso. Já partindo da premissa que, em tempo de compilação você explicitamente precisa mencionar quantos buffers de PLOT precisa... O que depois, em tempo de execução você fica amarrado com o que definiu em tempo de Compilação... Do ponto de vista de engenharia de software, é ridícula essa abordagem, mas enfim, é apenas um desabafo...
E quando entra o Backtest então, é um inferno... Ou ele duplica, ou não mostra nada, porque depende da lógica inicial que você aplicou em seu projeto.
No seu caso, deixe o código do jeito que estava, apenas lendo o iADX, pois afinal, o EA não precisa LER nada do gráfico, E, grave um template com o nome de tester.tpl com o ADX enfiado no gráfico, com as mesmas configurações que vc está usando no EA, e assim você será feliz, sem penalizar a performance do seu EA quando ele for pra conta real...
;)
Aparece sim, só vc foçar com a função.
ChartIndicatorAdd
Em questões de performance é melhor reutilizar o indicado já instanciado no robô, uma vez que o indicador vai rodar em uma thread separada consumindo mais recursos...Concordo plenamente com vc que quando o assunto é plotar objetos no gráfico é um Deus nos acuda.
Mas com o código que eu postei acima não duplica código em momento algum, podendo recarrega-lo diversas vezes ou ate mesmo recompila-lo, pois forço a deleção dele na OnDenit.
![Documentação sobre MQL5: Operações de Gráficos / ChartIndicatorAdd Documentação sobre MQL5: Operações de Gráficos / ChartIndicatorAdd](https://c.mql5.com/36/38/documenta-o-sobre-mql5-opera-es.png)
- www.mql5.com
Em questões de performance é melhor reutilizar o indicado já instanciado no robô, uma vez que o indicador vai rodar em uma thread separada consumindo mais recursos...Concordo plenamente com vc que quando o assunto é plotar objetos no gráfico é um Deus nos acuda.
Mas com o código que eu postei acima não duplica código em momento algum, podendo recarrega-lo diversas vezes ou ate mesmo recompila-lo, pois forço a deleção dele na OnDenit.
Aparentemente funcionou.
Menos no back test que aparece com o valor de período errado.
Vou acompanhar amanha durante o pregão.
Tem algo que eu possa fazer pra acertar no back test tbm?
Aparentemente funcionou.
Menos no back test que aparece com o valor de período errado.
Vou acompanhar amanha durante o pregão.
Tem algo que eu possa fazer pra acertar no back test tbm?
O Período só aparecera errado se vc passar errado, faço um debug e capture a variável desde o inicio, veja se não esta modificando seu valor em algum momento. Lembre-se que deve ser int a variável
O Período só aparecera errado se vc passar errado, faço um debug e capture a variável desde o inicio, veja se não esta modificando seu valor em algum momento. Lembre-se que deve ser int a variável
Não acho que seja isso pq eu inicio ela como 18, na janela do gráfico aparece como 18 normalmente, somente no back test aparece 14.
Nos parametros de entrada também esta como 18 mas mesmo assim no back test aparece 14.
mas vou debugar mesmo assim.
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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
Olá pessoal estou testando um EA com ADX mas quando rodo o EA o ADX não aparace na tela do Mt5.
Quando rodo o back test ele aparece porém com o valor de períodos incorreto.
Eu ja reinstalei o Mt5 e não resolveu.
O ativo que negocio é mini Dolar e mini Indice.
Vocês tem alguma ideia do que pode estar faltando no código ou alguma configuração do MT5?
Vejam como estou iniciando o indicador: