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

 

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

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

Алена Верлейен, 2016.02.13 11:39

#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);
  }

Привет всем

Приведенный выше код работает в эксперте, как мне использовать приведенные выше коды в индикаторе?

пожалуйста, помогите.

 
Возможно ли в MT4 убрать индикатор с графика с помощью советника? Можно написать некоторый код в функции OnDenit().
 
Abdul Manan:
Возможно ли в MT4 удалить индикатор с графика с помощью советника? Можно ли написать некоторый код в функции OnDenit().

Удаляет индикатор с указанным именем из указанного окна графика. Команда добавляется в очередь сообщений графика и выполняется только после обработки всех предыдущих команд.

boolChartIndicatorDelete(
longchart_id,// идентификатор графика
intsub_window,// номер подокна
const stringindicator_shortname// краткое название индикатора
);

Параметры

chart_id

[in] Идентификатор графика. 0 обозначает текущий график.

подокно

[in] Номер подокна графика. 0 обозначает подокно основного графика.

const indicator_shortname

[in] Краткое имя индикатора, которое задается всвойстве INDICATOR_SHORTNAME функциейIndicatorSetString()*. Для получения короткого имени индикатора используйте функциюChartIndicatorName()-.

Возвращаемое значение

Возвращает true, если команда была добавлена в очередь графиков, иначе false. Для полученияинформации об ошибке используйте функциюGetLastError().

ChartIndicatorDelete - 图表操作 - MQL4参考
ChartIndicatorDelete - 图表操作 - MQL4参考
  • docs.mql4.com
Removes an indicator with a specified name from the specified chart window. The command is added to chart message queue and executed only after all previous commands have been processed. If the short name of an indicator is not set explicitly, then the name of the file containing the source code of the indicator will be specified during...
 
Alain Verleyen:
Есть ли способ прикрепить индикатор автоматически на график из советника при бэктесте?
 
int OnInit()
  {
//---
// In my code where I launch the indicator
   int hWnd=WindowHandle(Symbol(),0);
   StartCustomIndicator(hWnd,INDICATOR_NAME);

   return(INIT_SUCCEEDED);
  }


This code work, but only in OnInit section. If i try transfer it to section CHARTEVENT_OBJECT_CLICK for launch with key, nothing happend. Can you help me ?
 
Здравствуйте, у меня не получается загрузить 2 индикатора из 1 советника, используя один и тот же код.
 
Эта тема была очень полезна для меня, но не привела меня к цели - см. эту тему (https://www.forexfactory.com/showthread.php?p=12764287#), которая продолжает диалог, начатый здесь.
 
Kray:

Всем привет!

Я хотел бы поблагодарить Георгия Лященко, и поделиться своей обновленной версией его кода, который добавляет индикатор прямо на график сAutomaticallyAcceptDefaults (когда он установлен на "true").

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

Примечание: Я работаю для пользовательских индикаторов, в противном случае измените название окна.

Примечание2: Не используйте индикаторы с более чем 15 символами (до ".ex4").

Здравствуйте, у меня следующее

Невозможно вызвать 'user32.dll::RegisterWindowMessageW', 'user32.dll' не загружен

Может ли кто-нибудь помочь мне?


 
Alain Verleyen:

У меня нет этой проблемы (с кодом, который я разместил).

Проверьте, что значение hWnd отлично от 0.

Вы также можете попробовать увеличить значение sleep до 50 или 100.

Уважаемая Алена,

Я использовал ваш код для добавления одного индикатора на все открытые графики. но он добавляется только на тот график, на котором я запускаю советника.

Вот код, не могли бы вы изменить ваш код, чтобы добавить тот же индикатор на все открытые графики?

пожалуйста, помогите

BTW (я пробовал его как советник и как скрипт, оба добавили индикатор только на один график) :)

рекомендую,



#import "user32.dll"

int RegisterWindowMessageW(string MessageName);

int PostMessageW(int hwnd,int msg,int wparam,uchar &Name[]);

#import


#define INDICATOR_NAME "CCI_FILTER6C"


int NOS ;

string suffix="";

string symbol[30];

long chartid[30];


//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+


int OnStart()

{

NOS=10;

suffix="c";

символ[0] = "AUDCAD" + суффикс ;

символ[1] = "AUDCHF" + суффикс ;

символ[2] = "AUDJPY" + суффикс;

символ[3] = "AUDNZD" + суффикс;

символ[4] = "AUDUSD" + суффикс ;

символ[5] = "CADJPY" + суффикс ;

символ[6] = "CHFJPY" + суффикс;

символ[7] = "EURAUD" + суффикс ;

символ[8] = "EURCAD" + суффикс ;

символ[9] = "EURCHF" + суффикс;

for(int is=0;is<NOS;is++)

{

int hWnd=WindowHandle(symbol[is],PERIOD_M30);

StartCustomIndicator(hWnd,INDICATOR_NAME);

}

return(0);

}

void StartCustomIndicator(int hWnd,string IndicatorName,bool AutomaticallyAcceptDefaults=true)

{

uchar name2[];

StringToCharArray(IndicatorName,name2,0,StringLen(IndicatorName));


int MessageNumber=RegisterWindowMessageW("MetaTrader4_Internal_Message");

int r=PostMessageW(hWnd,MessageNumber,15,name2);

Sleep(100);

}

 
Abdul Manan:
Здравствуйте, у меня не получается загрузить 2 индикатора из одного советника, используя один и тот же код.

тоже ищу это - кто-нибудь разобрался, как добавить несколько индикаторов из одного советника?


я хочу добавить 2https://docs.mql4.com/indicators/ima из одного советника.


спасибо

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