Se alguém pudesse ajudar...Eu dirijo um consultor especializado para 4 pares de cartas, e para dirigi-las para o 5º, depois de carregar com sucesso, eu tenho a inicialização global falhada, e depois removida...
Eu apreciaria pelo menos uma orientação sobre o que procurar...
Obrigado...
Parece que você tem um problema durante a inicialização. Verifique seu código. Você pode postar o código relevante, se precisar de ajuda.
Obrigado por responder...
O problema é que meu código funciona bem para 4 gráficos (pares), mas quando tento executá-lo para mais um isto acontece.
E o código é meio enorme, por isso não sei se o ajudará.
Pode não ser o código. Meu terminal se avariou quando eu arrastava as janelas do terminal, ele se recuperou parcialmente, mas disse que a inicialização global falhou. Eu tive que reiniciar o terminal. Nunca tinha visto esse erro antes de construir o 625 e houve mais de um relatório sobre ele durante esta última semana ou assim.
Pessoal, eu sei que este tópico já tem cerca de um mês, mas eu acho que este é um problema do MetaTrader e não um problema de código. Tive isto acontecendo comigo aleatoriamente em um indicador no qual estou trabalhando. Às vezes isso acontece se eu olhar ou mudar as propriedades do indicador, às vezes acontece se eu desligar e reiniciar o terminal e às vezes simplesmente acontece espontaneamente. É definitivamente algum tipo de problema de inicialização. A razão pela qual estou certo disto é que tenho um conjunto de botões que crio para visualizar os MAs em períodos de tempo diferentes do que aquele em que você está atualmente. Em todos os casos, quando falha, os botões TF ainda estão no gráfico, mas o indicador foi removido. Naturalmente, os botões não fazem mais nada. Para que as coisas voltem ao normal, tenho que apagar os botões manualmente e colocar o indicador de volta no gráfico. Funciona bem por algum tempo e depois BOOM! Ele está morto novamente. Sem rima ou razão para isso. Acho que o problema não é o nosso código. Acho que é algo estragado com o MT4. A propósito, estou executando o v625. Se eu encontrar alguma coisa para contornar isto, eu a postarei.
Prof
Eu também tive esta "inicialização global falhada".
Aconteceu quando mudei o cronograma do gráfico
Não vejo nenhuma razão para isso e não consegui replicá-lo.
O estranho é que os dois últimos blocos de código no init criam objetos e estes foram criados no gráfico.
Como o deinit não foi chamado, eles não foram apagados.
int OnInit() { //--- indicator buffers mapping IndicatorBuffers(4); //---- drawing settings SetIndexArrow(0,250); SetIndexArrow(1,250); SetIndexStyle(0,DRAW_NONE); SetIndexDrawBegin(0,i-1); SetIndexBuffer(0,CTFresistancetBuffer); SetIndexLabel(0,"Resistance"); SetIndexStyle(1,DRAW_NONE); SetIndexDrawBegin(1,i-1); SetIndexBuffer(1,CTFsupportBuffer); SetIndexLabel(1,"Support"); SetIndexBuffer(2,HTFresistancetBuffer,INDICATOR_CALCULATIONS); SetIndexBuffer(3,HTFsupportBuffer,INDICATOR_CALCULATIONS); switch(S_R_TimeFrame) { case M5: SRPeriod=PERIOD_M5; break; case M15: SRPeriod=PERIOD_M15; break; case M30: SRPeriod=PERIOD_M30; break; case H1: SRPeriod=PERIOD_H1; break; case H4: SRPeriod=PERIOD_H4; break; case Daily: SRPeriod=PERIOD_D1; break; case Weekly: SRPeriod=PERIOD_W1; break; case Monthly: SRPeriod=PERIOD_MN1; break; case Current_Chart: SRPeriod=PERIOD_CURRENT; break; } if(Digits==3 || Digits==5) NewPip=Point*10; else NewPip=Point; string obj_name = "TDR_ARROW" ; ObjectCreate(obj_name, OBJ_LABEL, 0, 0, 0); ObjectSet(obj_name, OBJPROP_CORNER, 1); ObjectSet(obj_name, OBJPROP_XDISTANCE, 30); ObjectSet(obj_name, OBJPROP_YDISTANCE, 30); ObjectSetText(obj_name, CharToStr(243), 30, "Wingdings", clrBlue); obj_name = "TDR_LINE" ; ObjectCreate(obj_name, OBJ_TREND, 0, 0, 0); ObjectSetInteger(0,obj_name,OBJPROP_WIDTH,LineWidth+1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { for(i=ObjectsTotal()-1;i>=0;i--) { string ObName=ObjectName(i); if(StringFind(ObName,"TDR",0)!=-1) ObjectDelete(ObName); } return; } //+------------------------------------------------------------------+
Meu problema parece ter sido usar init() e deinit() em vez dos novos OnInit() e OnDeinit(). As coisas parecem estar funcionando depois que eu mudei para as novas chamadas. É melhor que as MetaQuotes não estejam rindo de mim. Lembro-me de ter lido em algum lugar na volumosa lista de mudanças que as chamadas antigas ainda eram compatíveis com o MQL4. De fato, tenho outro indicador que ainda as usa e cria uma série de objetos de etiqueta sem soluços. É provável que eu mude isso só para ficar do lado seguro, pois pretendo oferecer ambos os indicadores para venda quando eu estiver pronto.
De qualquer forma, o problema parece ter sido que o deinit() não estava sendo chamado quando o indicador foi desinicializado, então os objetos não estavam sendo apagados como deveriam ter sido. A inicialização falhou porque os objetos ainda existiam. Eu estava verificando tudo com erro, mas a falha na criação do objeto não estava sendo relatada. Aparentemente, ele explodiu e me deu o erro do MQL antes de atingir meu código de tratamento de erros.
GumRai, você pode tentar usar SubStr em vez de StringFind. Não deveria importar, mas descobri que o MQL pode ser esquadrinhado às vezes. Você tem certeza de que OnDeinit() não foi chamado? A coisa que me indicou o meu problema foi colocar uma declaração de alerta no meu método deinit() e notar que ele nunca foi chamado. Você também pode tentar embrulhar seu código de exclusão com o código de tratamento de erros para ver o que ele poderia estar fazendo.
Prof
Meu problema parece ter sido usar init() e deinit() em vez dos novos OnInit() e OnDeinit(). As coisas parecem estar funcionando depois que eu mudei para as novas chamadas. É melhor que as MetaQuotes não estejam rindo de mim. Lembro-me de ter lido em algum lugar na volumosa lista de mudanças que as chamadas antigas ainda eram compatíveis com o MQL4. De fato, tenho outro indicador que ainda as usa e cria uma série de objetos de etiqueta sem soluços. É provável que eu mude isso só para ficar do lado seguro, pois pretendo oferecer ambos os indicadores para venda quando eu estiver pronto.
De qualquer forma, o problema parece ter sido que o deinit() não estava sendo chamado quando o indicador foi desinicializado, então os objetos não estavam sendo apagados como deveriam ter sido. A inicialização falhou porque os objetos ainda existiam. Eu estava verificando tudo com erro, mas a falha na criação do objeto não estava sendo relatada. Aparentemente, ele explodiu e me deu o erro do MQL antes de atingir meu código de tratamento de erros.
GumRai, você pode tentar usar SubStr em vez de StringFind. Não deveria importar, mas descobri que o MQL pode ser esquadrinhado às vezes. Você tem certeza de que OnDeinit() não foi chamado? A coisa que me indicou o meu problema foi colocar uma declaração de alerta no meu método deinit() e notar que ele nunca foi chamado. Você também pode tentar embrulhar seu código de exclusão com o código de tratamento de erros para ver o que ele poderia estar fazendo.
Prof
- 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
Se alguém pudesse ajudar...Eu dirijo um consultor especializado para 4 pares de cartas, e para dirigi-las para o 5º, depois de carregar com sucesso, eu tenho a inicialização global falhada, e depois removida...
Eu apreciaria pelo menos uma orientação sobre o que procurar...
Obrigado...