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

 

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

Перевожу скрипты с МТ5 на МТ4. Стоит задача:

Есть десяток самописных индикаторов, нужен скрипт, который бы просматривал существующие на графике индикаторы, и запускал бы недостающие.

И второй скрипт - который бы наоборот, удалял все запущенные из списка индикаторы.

Как это сделать ? В МТ5 сперва использовал функцию ChartIndicatorGet(), которая возвращала хэндл индикатора, если он запущен, и потом - IndicatorCreate(), если нужно создать индикатор, и ChartIndicatorDelete(), если надо удалить индикатор с графика.

Какие аналоги в МТ4 ?

 
Хм... Неужели никогда не возникала задача запуска и снятия индикаторов ?
 

Попробовал получить значение через iCustom - было возвращено правильное значение. Но самого индикатора на графике не появилось. Не помог и ChartRedraw().

Исследуем дальше...

 

Нет в МТ4 такого как в МТ5 для этого. Руками все, руками.

Хотя... может шаблон генерировать программно.

 
Integer:

Нет в МТ4 такого как в МТ5 для этого. Руками все, руками.

Измена.

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

 

Есть такой вариант: вызывать через iCustom() из эксперта. На пару секунд запустить тестирование эксперта, открыть график, на графике будут индикаторы.

 

Так задача ж в том, чтобы пользователям можно было быстро запускать и удалять пакет индикаторов. А запускать тестирования - для них будет еще труднее. Да и дров могут наломать еще тех...

Благодарю за идеи... Мож, еще кто-то что-то предложит... Пока кроме шаблона придумать нечего.

 
Читай тут https://forum.mql4.com/ru/14463/page3#382351
 

Как запустить индикатор или советник из скрипта при помощи winapi?

Тема поднималась на форуме многократно, но найти работающее решение не получилось, поэтому прошу помощи у сообщества.

К примеру нужно из скрипта запустить стандартный индикатор Moving Average: 

#import "user32.dll"
   int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="Moving Average";

void OnStart()
  {
   char buf[];
   StringToCharArray("MetaTrader4_Internal_Message", buf);
   int MT4InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   int handle=WindowHandle(_Symbol,_Period);
   bool res=SendMessageA(handle, MT4InternalMsg, 13, buf);
   Print("Функция SendMessageA завершила работу с результатом: ",res);
  }

Данный код работает почти так как нужно: индикатор запускается, открывается окно свойств, но последняя строка (Print) не исполняется, а значит скрипт ждет от функции SendMessageA возврата, которого почему то нет, а значит весь дальнейший код выполняться не будет, а ведь надо еще и на ОК нажать. А еще непонятно что там с типом последней переменной в функциях PostMessage/SendMessage - она где то используется int, где то string, а где то массив типа char.

Вобщем, может кто-нибудь предложить рабочее решение?

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