Как запустить свой индикатор из скрипта ?

 

Всех приветствую.

Вопрос: а можно ли из собственного скрипта запустить несколько самописных индикаторов ?

Вот, у меня написаны индикаторы, хорошо бы сделать так, чтобы одним скриптом их можно было запускать, а другим скриптом - убирать.

Поискал документацию - не могу найти такой возможности !

Есть функция IndicatorCreate() - но, она, как я понял, к самописным индикаторам не имеет доступ. 

Как запустить свой индикатор ?

Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorCreate
Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorCreate
  • www.mql5.com
Доступ к таймсериям и индикаторам / IndicatorCreate - Документация по MQL5
 
Laryx:

Есть функция IndicatorCreate() - но, она, как я понял, к самописным индикаторам не имеет доступ. 

Имеет. Посмотрите по ссылке и внизу - остальные параметры от конкретных индюков зависят.

int  IndicatorCreate(
   string           symbol,                            // имя символа
   ENUM_TIMEFRAMES  period,                            // период
   ENUM_INDICATOR   indicator_type,                    // тип индикатора из перечисления ENUM_INDICATOR
   int              parameters_cnt=0,                  // количество параметров
   const MqlParam&  parameters_array[]=NULL,           // массив параметров
   );
indicator_type = IND_CUSTOM;
parameters_array[0].type=TYPE_STRING;
parameters_array[0].string_value="имя пользовательского индикатора";
 
MigVRN:

Имеет. Посмотрите по ссылке и внизу - остальные параметры от конкретных индюков зависят.

Вау !!! Действительно...  Недоглядел...

Вот елы-палы, век живи - век учись...


Спасибо, MigVRN:,  как раз то, что надо !

 

Оказывается, все не так просто.

Функция IndicatorCreate() - создает пользовательский индикатор, возвращает нормальный хэндл, и индикатор, видимо,  начинает нормально работать. 

Но, при этом ни в списке индикаторов он не появляется, ни на чарте его меток нет. У меня индикатор выводит иконки - и они выводятся нормально, в нужных местах (значит, созданный индикатор, все же работает, просто не выводится).

А как сделать, чтобы при запуске скрипта - запустились все нужные индикаторы, нормально заработали, и остались работать после того, как скрипт завершится ?  

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 
Laryx:

Оказывается, все не так просто.

Функция IndicatorCreate() - создает пользовательский индикатор, возвращает нормальный хэндл, и индикатор, видимо,  начинает нормально работать. 

Но, при этом ни в списке индикаторов он не появляется, ни на чарте его меток нет. У меня индикатор выводит иконки - и они выводятся нормально, в нужных местах (значит, созданный индикатор, все же работает, просто не выводится).

А как сделать, чтобы при запуске скрипта - запустились все нужные индикаторы, нормально заработали, и остались работать после того, как скрипт завершится ?   

 

ChartIndicatorAdd() посмотрите.

  //Добавим окно с символом и периодом индюка если его нет
  bool chart = true;
  long z = ChartFirst();
  while (chart && z>=0)
  {
  if (ChartSymbol(z)== name_symbol && ChartPeriod(z)==period_indicator) 
      {
       chart=false;
       break;
      }
  z = ChartNext(z);
  }
  if (chart) z = ChartOpen(name_symbol, period_indicator);

  //Добавим индюк на окно
   ChartIndicatorAdd(z,1, handle_indicator);   
 

Наверное никак. Терминал при запуске программы создает ей окружение(котировки, хендлы индикаторов, хендлы файлов), а затем при

выгрузке этой программы все это автоматически зачищает, иначе по забывчивости можно после себя столько оставить,  что ни

хватит никакого объема оперативной памяти. 

 
sandex:

...иначе по забывчивости можно после себя столько оставить,  что ни хватит никакого объема оперативной памяти.  

 

если не использовать IndicatorRelease() то оперативка забивается очень быстро. Особенно если нужно создать много индюков (в цикле).

sandex:

Наверное никак.

 Вы не правы. ChartIndicatorAdd() - и никуда индюки не денутся если Вы их сами не удалите.

PS:если хотите могу пример набросать...

 
MigVRN:

ChartIndicatorAdd() посмотрите.

О. Спасибо, посмотрю.
 

Да, все заработало так, как надо.

Еще раз благодарю.

 
Laryx:

Да, все заработало так, как надо.

Еще раз благодарю.

Не за что! Вам спасибо за светлые мысли:)

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Пошаговый отладчик на исторических данных: поиск путей решения

Laryx, 2013.06.27 20:23


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

...

В целом, я считаю, что задача запуска отладки на исторических данных с имеющимися возможностями - сложна, но не невозможна. Все упирается в недостаток ресурсов (в основном времени).