Если кто может помочь... Я запускаю советник для 4 пар графиков, и при запуске для 5-ой, после успешной загрузки, у меня происходит сбой глобальной инициализации, а затем удаление...
Буду благодарен хотя бы за подсказку, что искать...
Спасибо...
Похоже, что у вас проблема во время инициализации. Проверьте ваш код. Вы можете опубликовать соответствующий код, если вам нужна помощь.
Спасибо за ответ.
Дело в том, что мой код работает нормально для 4 графиков (пар), но когда я пытаюсь запустить его для еще одного, происходит следующее.
Код очень большой, поэтому не знаю, поможет ли он вам.
Возможно, дело не в коде. Мой терминал разбился, когда я перетаскивал окна терминала, он частично восстановился, но сказал, что глобальная инициализация не удалась. Мне пришлось перезапустить терминал. Я никогда не видел этой ошибки до сборки 625, и за последнюю неделю или около того было несколько сообщений о ней.
Народ, я знаю, что этой теме уже около месяца, но я думаю, что это проблема MetaTrader, а не кода. Это происходит со мной случайным образом на индикаторе, над которым я работаю. Иногда это происходит, если я смотрю или изменяю свойства индикатора, иногда это происходит, если я выключаю и перезапускаю терминал, а иногда это происходит просто спонтанно. Это определенно какая-то проблема инициализации. Причина, по которой я уверен в этом, заключается в том, что у меня есть набор кнопок, которые я создаю для просмотра MAs на разных таймфреймах, отличных от того, на котором вы сейчас находитесь. Во всех случаях, когда происходит сбой, кнопки TF остаются на графике, но индикатор удаляется. Естественно, кнопки больше ничего не делают. Чтобы вернуть все на свои места, мне приходится вручную удалять кнопки и снова помещать индикатор на график. Некоторое время он работает нормально, а затем БУМ! Он снова мертв. Никакой рифмы или причины, почему. Я не думаю, что проблема в нашем коде. Я думаю, что это что-то испорчено в MT4. Кстати, я использую v625. Если я придумаю что-нибудь, чтобы обойти это, я опубликую это.
Проф
У меня тоже было такое "global initialization failed".
Это произошло, когда я изменил таймфрейм графика.
Я не вижу причин для этого и не смог воспроизвести это.
Странно то, что последние 2 блока кода в init создают объекты, и они были созданы на графике.
Поскольку deinit не был вызван, они не были удалены.
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; } //+------------------------------------------------------------------+
Похоже, что моя проблема заключалась в использовании init() и deinit() вместо новых OnInit() и OnDeinit(). Кажется, все заработало после того, как я перешел на новые вызовы. MetaQuotes лучше не смеяться надо мной. Кажется, я припоминаю, что где-то в объемном списке изменений читал, что старые вызовы все еще совместимы с MQL4. На самом деле, у меня есть другой индикатор, который все еще использует их и создает ряд объектов меток без каких-либо заминок. Скорее всего, я изменю это на всякий случай, поскольку планирую предложить оба индикатора на продажу, когда буду готов.
В любом случае, проблема, по-видимому, заключалась в том, что при деинициализации индикатора не вызывалась функция deinit(), поэтому объекты не удалялись так, как должны были. Инициализация не удалась, потому что объекты все еще существовали. Я проверял ошибки во всем, но о сбое создания объекта не сообщалось. По-видимому, он сработал и выдал мне ошибку MQL до того, как попал в мой код обработки ошибок.
GumRai, вы можете попробовать использовать SubStr вместо StringFind. Это не должно иметь значения, но я обнаружил, что MQL иногда может быть корявым. Вы уверены, что OnDeinit() не был вызван? Мне помогло разобраться в проблеме то, что я поместил оператор Alert в метод deinit() и заметил, что он так и не был вызван. Вы также можете попробовать обернуть код удаления в код обработки ошибок, чтобы посмотреть, что он может делать.
Проф
Похоже, что моя проблема заключалась в использовании init() и deinit() вместо новых OnInit() и OnDeinit(). Кажется, все заработало после того, как я перешел на новые вызовы. MetaQuotes лучше не смеяться надо мной. Кажется, я припоминаю, что где-то в объемном списке изменений читал, что старые вызовы все еще совместимы с MQL4. На самом деле, у меня есть другой индикатор, который все еще использует их и создает ряд объектов меток без каких-либо заминок. Скорее всего, я изменю это на всякий случай, поскольку планирую предложить оба индикатора на продажу, когда буду готов.
В любом случае, проблема, по-видимому, заключалась в том, что при деинициализации индикатора не вызывалась функция deinit(), поэтому объекты не удалялись так, как должны были. Инициализация не удалась, потому что объекты все еще существовали. Я проверял ошибки во всем, но о сбое создания объекта не сообщалось. По-видимому, он сработал и выдал мне ошибку MQL еще до того, как попал в мой код обработки ошибок.
GumRai, вы можете попробовать использовать SubStr вместо StringFind. Это не должно иметь значения, но я обнаружил, что MQL иногда может быть корявым. Вы уверены, что OnDeinit() не был вызван? Мне помогло разобраться в проблеме то, что я поместил оператор Alert в метод deinit() и заметил, что он так и не был вызван. Вы также можете попробовать обернуть код удаления в код обработки ошибок, чтобы посмотреть, что он может делать.
Проф
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Если кто может помочь...Я запускаю советник для 4 пар графиков, и при запуске для 5-ой, после успешной загрузки у меня происходит сбой глобальной инициализации, а затем удаление...
Буду благодарен хотя бы за подсказку, что искать...
Спасибо...