Индикаторы: ID Lite Info MA

 

ID Lite Info MA:

Индикатор показывает значения Moving Averages (MA), дельты между значениями и дельты между МА.

Линии индикатора, отметки и дельты в пунктах между High и Low свечей, округленные до двух десятичных знаков, на графике с трехзначными котировками

Автор: Dina Paches

 

Если этот индикатор не работает у вас. И в MetaEditor вашего торгового терминала при компиляции файла с этим индикатором выходят такие сообщения об ошибках (это может быть, например, при его компиляции для 1150-го билда MetaTrader5):



То для компиляции и работы этого индикатора:

1. Скопируйте эту функцию и добавьте её в конец кода индикатора:

//+------------------------------------------------------------------+
//| Удаление объектов по общему префиксу в именах объектов           |
//|(и типу объекта, при необходимости):                              |
//| 2014 (последние изменения: 14.07.2015), Dina Paches              |
//| https://login.mql5.com/ru/users/dipach                           |
//+------------------------------------------------------------------+
//| string prefix_obj = общий префикс в именах объектов              |
//| long  chart_ID = идентификатор графика                           | 
//| int   sub_window=-1 = индекс окна                                |
//| int   type=-1 = тип объекта (либо вместо int - тип объекта по    |
//| перечислению ENUM_OBJECT)                                        |
//| int start_pos=-1 = начальная позиция подстроки общего префикса в |
//| имени объектов                                                   |
//+------------------------------------------------------------------+
void ObDeleteN(string prefix_obj,int chart_ID=0,int sub_window=-1,
               int type=-1,int start_pos=0)
  {
   int quantObj=ObjectsTotal(chart_ID,sub_window,type);
   if(quantObj>0)
     {
      int count=0;
      int prefixLen=StringLen(prefix_obj);
      string name[];
      ArrayResize(name,quantObj,quantObj+1);
      ArraySetAsSeries(name,true);

      for(int i=quantObj;i>=0;i--)
        {
         string objNameX=ObjectName(chart_ID,i,sub_window,type);
         string findValue=StringSubstr(objNameX,start_pos,prefixLen);

         if(StringCompare(findValue,prefix_obj,true)==0)
           {
            count=count+1;
            name[count-1]=objNameX;
           }
        }
      if(count>0)
        {
         ArrayResize(name,count,count+1);
         for(int i=count-1;i>=0; i--)
           {
            ObjectDelete(chart_ID,name[i]);
           }
        }
     }
     else return;
  }
//+------------------------------------------------------------------+


2. Поставьте в разделах кода OnDeinit() и OnChartEvent() двойную косую черту "//" прямо перед этой строчкой:

 ObjectsDeleteAll(0,prefixObj,0,-1);


3. Скопируйте и внесите в код индикатора эту строку (поставьте её под строкой выше и, поскольку строка выше встречается два раза в коде, то и эту строчку надо поставить в двух местах):

ObDeleteN(prefixObj,0,0);


4. В итоге, участки кода с не рабочей, к примеру, в билде 1150 разновидностью функции, станут выглядеть как-то так в коде:


   //ObjectsDeleteAll(0,prefixObj,0,-1);
   ObDeleteN(prefixObj,0,0);


5. После этого скомпилируйте код. Сообщения об ошибках исчезнут и индикатор будет готов к работе на чартах билда 1150 MetaTrader5.


P./S.: Будут вопросы - пишите здесь в обсуждении или в личку.

 
P./S.: Заменила в посте выше функцию по удалению объектов на чуть более универсальный и чуть более экономный в работе вариант.
 

Уф... как камень с души свалился. "Кто ищет - тот всегда найдёт"(с) сработало, к счастью, в этот раз.

Нашла всё-таки прототипы варианта функции выше.

И теперь могу сказать адресно большое спасибо за подробную схему Ковалёву, автору учебника, Артёму и неизвестному мне по имени 7777877


P./S.: В своё время, разбирая прототипы этой функции для себя, вникая в смысл и проводя эксперименты, умудрилась не сохранить сразу (не специально!) её источники из MQL4, на основе которых она, получается в итоге, была у меня составлена и применялась в разном виде для своих кодов на MQL4 и MQL5. Публично или в открытом виде ранее я код этой функции (или другие его варианты) не публиковала.

Помню, что по очень неудачным совпадениям сталкивалась с работами на сайте/не работающим поиском (либо было, что искала, как сейчас понимаю, не верно), когда совесть напоминала, что нужно найти источники. В т.ч., помня, что видела инфу по схеме на форуме, напрочь не помнила об учебнике. Соответственно, откладывала на "потом".

Так-то, относясь с уважением к чужому труду, стараюсь по возможности сразу копировать себе инфу, откуда/от кого что взяла.

Поэтому искренне рада, что без каких-либо намеков или напоминаний со стороны, всё-таки нашла первоисточники-прототипы этой функции для себя.

 
Просьба выложить код индикатора с внесенными изменениями, для меня темный лес а очень нужен! У самого не получается. Если не сложно то скомпелированный файл для мт5!!
 
Siarhei Pekar:
Просьба выложить код индикатора с внесенными изменениями, для меня темный лес а очень нужен! У самого не получается. Если не сложно то скомпелированный файл для мт5!!

Заменена версия индикатора в Кодобазе на версию 1.01, с уже внесёнными изменениями, и теперь она доступна к скачиванию прямо со страницы этого индикатора.

 
Siarhei Pekar:

В думках о замене кода, умудрилась удалить своё пояснение, что:

Заменённая на другую в версии 1.01 функция ObjectsDeleteAll(), для удаления объектов по префиксу их имён, работает побыстрее, что способствует и увеличению быстродействия работы кода.

Поэтому после официального перехода с 1150-го билда (вышедшего в то время, когда возможность функции ObjectsDeleteAll() удалять объекты по префиксу их имён ещё не была закреплена в Документации) на другой билд, оптимальнее будет изменить версию кода индикатора на с применением ObjectsDeleteAll():


 

Обновила-освежила код этого индикатора. В том числе, обнаружив, исправила огрехи при включении/выключении показа линий индикатора на графике (было, что не срабатывало включение показа линий после отключения).

Текущая версия: 1.39 

 

Обнаружила, что в коде этого индикатора для МТ5 (версии 1.39), я не добавила дополненный пересчёт значений при prev_calculated=0, подобный тому, что есть в коде такого индикатора для МТ4. То есть, при работе версии 1.39 есть вероятность ситуаций, когда при prev_calculated=0 в таблице индикатора могут появляться нулевые значения.

Sorry.

Сейчас отправила на публикацию новую версию (1.42)

Поскольку модераторы CodeBase люди занятые и обновление может быть не скоро опубликовано, то прикреплю исправленную версию пока и здесь.

 

Спасибо большое модератору CodeBase. 

Код обновлён днём до версии 1.42 

 

P./S.: Прикреплённый выше файл удалила. 

 

Вчера вышло обновление до версии 1.45 (я сейчас только зашла на сайт)

Из основного:  Заменила функцию удаления индикатора с графика - исправила значение одного из её входных параметров.

Причина обращения: