Есть функция 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="имя пользовательского индикатора";
Оказывается, все не так просто.
Функция IndicatorCreate() - создает пользовательский индикатор, возвращает нормальный хэндл, и индикатор, видимо, начинает нормально работать.
Но, при этом ни в списке индикаторов он не появляется, ни на чарте его меток нет. У меня индикатор выводит иконки - и они выводятся нормально, в нужных местах (значит, созданный индикатор, все же работает, просто не выводится).
А как сделать, чтобы при запуске скрипта - запустились все нужные индикаторы, нормально заработали, и остались работать после того, как скрипт завершится ?
- 2009.11.23
- Андрей
- www.mql5.com
Оказывается, все не так просто.
Функция 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);
Наверное никак. Терминал при запуске программы создает ей окружение(котировки, хендлы индикаторов, хендлы файлов), а затем при
выгрузке этой программы все это автоматически зачищает, иначе по забывчивости можно после себя столько оставить, что ни
хватит никакого объема оперативной памяти.
...иначе по забывчивости можно после себя столько оставить, что ни хватит никакого объема оперативной памяти.
если не использовать IndicatorRelease() то оперативка забивается очень быстро. Особенно если нужно создать много индюков (в цикле).
Наверное никак.
Вы не правы. ChartIndicatorAdd() - и никуда индюки не денутся если Вы их сами не удалите.
PS:если хотите могу пример набросать...
Да, все заработало так, как надо.
Еще раз благодарю.
Да, все заработало так, как надо.
Еще раз благодарю.
Не за что! Вам спасибо за светлые мысли:)
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Пошаговый отладчик на исторических данных: поиск путей решения
Laryx, 2013.06.27 20:23
ВСЕ функции советника (как обращения к котировкам или индикаторам, так и к торговым функциям) должны осуществляться не напрямую к функциям терминала, а опосредовано, через стандартизированный интерфейс-"обертку", который бы, с одной стороны - передавал бы всю информацию между советником и терминалом, а с другой стороны - был бы доступен для изменения пользователем. В этом случае пользователь мог бы написать свою систему классов, которая бы реализовывала тот же интерфейс-"обертку", в результате чего советник бы - не видел подмены, но получал при этом данные под контролем этой самой "обертки".
...
В целом, я считаю, что задача запуска отладки на исторических данных с имеющимися возможностями - сложна, но не невозможна. Все упирается в недостаток ресурсов (в основном времени).
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всех приветствую.
Вопрос: а можно ли из собственного скрипта запустить несколько самописных индикаторов ?
Вот, у меня написаны индикаторы, хорошо бы сделать так, чтобы одним скриптом их можно было запускать, а другим скриптом - убирать.
Поискал документацию - не могу найти такой возможности !
Есть функция IndicatorCreate() - но, она, как я понял, к самописным индикаторам не имеет доступ.
Как запустить свой индикатор ?