MQL4 Добавление индикатора на график из советника

 

Здравствуйте люди,

Я пытаюсь решить текущую проблему. В mql4 нет команды, которая бы добавляла индикатор на график, как в mql5 ChartIndicatorAdd(). Это очень печально.

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

Этот код пытается запустить индикатор, но он неправильно считывает имя файла. Он пытается открыть только (первая буква имени индикатора).ex4 или I.ex4.

Очевидным решением был chararray, но компилятор выдает ошибку "parametr conversion not allowed". Как мы можем решить эту проблему?

#import "user32.dll"
   int RegisterWindowMessageW(string MessageName);
   int PostMessageW(int hwnd, int msg, int wparam, string Name);
#import

void StartCustomIndicator(int hWnd, string IndicatorName, bool AutomaticallyAcceptDefaults = false)
{
 string name = "Indicator_name";
 char name2[];
 StringToCharArray(name,name2,0,StringLen(name));
 
 int MessageNumber = RegisterWindowMessageW("MetaTrader4_Internal_Message");
 int r = PostMessageW(hWnd, MessageNumber, 15, name);
}
int OnInit()
  {
//---

// In my code where I launch the indicator
int hWnd = WindowHandle(Symbol(), 0);
StartCustomIndicator(hWnd, "Indicator_name");

return(INIT_SUCCEEDED);
}
 
#import "user32.dll"
int RegisterWindowMessageW(string MessageName);
int PostMessageW(int hwnd,int msg,int wparam,uchar &Name[]);
#import

#define  INDICATOR_NAME "Indicator_name"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=false)
  {
   uchar name2[];
   StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));

   int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");
   int r=PostMessageW(hWnd,MessageNumber,15,name2);
   Sleep(10);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
// In my code where I launch the indicator
   int hWnd=WindowHandle(Symbol(),0);
   StartCustomIndicator(hWnd,INDICATOR_NAME);

   return(INIT_SUCCEEDED);
  }
 
Alain Verleyen:
Спасибо, теперь заработало, но работает только со второй попытки. Если я запускаю ea, вызов индикатора возвращает ошибку fail to open / .ex4[123]. Если ea уже прикреплена к графику и я пытаюсь прикрепить ее заново, то она работает. Как это можно решить?
 
Georgiy Liashchenko:

...В mql4 нет команды, которая бы добавляла индикатор на график, как в mql5 ChartIndicatorAdd(). Это действительно печально....

Вы уверены?
 
Vasyl Nosal:
Вы уверены?
Ну, если вы знаете несколько, пожалуйста, поделитесь... :)
 
Georgiy Liashchenko:
Если вы знаете что-то подобное, пожалуйста, поделитесь... :)

:))))))))))))))))))))))))))))))))))))))))))))))))))

ChartIndicatorAdd()

О, простите. Несколько минут.

Хм... Я думал, что это в mql4.

Возможно, это поможет вам

ChartApplyTemplate()

 
Vasyl Nosal:

:))))))))))))))))))))))))))))))))))))))))))))))))))

ChartIndicatorAdd()

О, простите. Несколько минут.

Хм... Я думал, что это в mql4.

Возможно, это поможет вам

ChartApplyTemplate()

Да, но это не тот случай, когда, например, я продаю ea и клиент хочет использовать ее, но у него нет такого шаблона. Даже если я дам ему файл, он может предпочесть другой вид. Поэтому я хочу инициализировать индикатор из ea.
 
Georgiy Liashchenko:
Да, но это не тот случай, когда, например, я продаю советника, а клиент хочет его использовать, но у него нет такого шаблона. Даже если я дам ему файл, он может предпочесть другой вид. Поэтому я хочу инициализировать индикатор из ea.

Хм. Может быть, чем добавлять индикатор в советник, используя "ресурс".

#resource "\\Indicators\\SampleIndicator.ex4"


int OnInit()
  {

   double value=iCustom(_Symbol,_Period,"::Indicators\\SampleIndicator.ex4",0,0);
 
Vasyl Nosal:

Хм. Может быть, чем добавлять индикатор в советник, используя "resourse".

не работает, советник получает ручку, но без индикатора
 
Georgiy Liashchenko:
не работает, ea получает ручку, но нет индикатора

Это не добавление индикатора на график. Он компилирует ind в файле ea ex.4.

 
Может быть, написать в службу поддержки и попросить их добавить ChartIndicatorAdd(), как в mql5?