В примере показывают как в подокно уставить индикатор, а если не нужно подокно, просто на примере мувига как сделать?
Если нужно добавить индикатор в главное окно, то:
sub_window
[in] Номер подокна графика. 0 означает главное окно графика. Чтобы добавить индикатор в новое окно, параметр должен быть на единицу больше, чем индекс последнего существующего окна, то есть равен CHART_WINDOWS_TOTAL. Если значение параметра превышает значение CHART_WINDOWS_TOTAL, то новое окно создано не будет, индикатор не будет добавлен.
//+------------------------------------------------------------------+//| 0000.mq5 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"inputint MA_Period=21;
inputint MA_Shift=0;
inputENUM_MA_METHOD MA_Method=MODE_SMA;
int MA_handle=INVALID_HANDLE;
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ intOnInit()
{
MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average", MA_Period, MA_Shift, MA_Method, PRICE_CLOSE );
//--- попробуем добавить индикатор на график
AddIndicator();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+ //| Функция проверки и добавления индикатора на график | //+------------------------------------------------------------------+ bool AddIndicator() { if(MA_handle==INVALID_HANDLE)
{ Print(__FUNCTION__," Создаем индикатор ");
MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average", MA_Period, MA_Shift, MA_Method, PRICE_CLOSE );
if(MA_handle==INVALID_HANDLE)
{
Print("Не удалось создать индикатор . Код ошибки ",GetLastError());
}
}
//--- сбросим код ошибки ResetLastError();
//--- накладываем индикатор на график Print("Mа построен ");
//--- получим номер нового подокна, в которое добавим индикатор int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
PrintFormat("Добавляем индикатор на окно %d графика",subwindow);
if(!ChartIndicatorAdd(0,subwindow,MA_handle))
{
PrintFormat("Не удалось добавить индикатор на окно %d графика. Код ошибки %d",
subwindow,GetLastError());
}
return(true);
}
voidOnDeinit(constint reason)
{
MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average", MA_Period, MA_Shift, MA_Method, PRICE_CLOSE );
Здравствуйте Владимир
Видимо я неправильно сформулировал вопрос ,Вы не поняли ..
мне подокно не нужно , индикатор надо поставить на график цены так как ставится стандартная машка
это я рассматриваю как пример, и пытаюсь понять .
А конечный результат хочу чтобы индикатор установленный на график имел свой номер , чтобы можно было созданной на графике копкой "Добавить" набрать необходимое количество копий .... и удалить так же один ,выбранный кнопкой крестика ........ ну там много всяких еще фантазий пока не хочу о них писать))
Видимо я неправильно сформулировал вопрос ,Вы не поняли ..
мне подокно не нужно , индикатор надо поставить на график цены так как ставится стандартная машка
это я рассматриваю как пример, и пытаюсь понять .
А конечный результат хочу чтобы индикатор установленный на график имел свой номер , чтобы можно было созданной на графике копкой "Добавить" набрать необходимое количество копий .... и удалить так же один ,выбранный кнопкой крестика ........ ну там много всяких еще фантазий пока не хочу о них писать))
Когда индикатор нужно добавить в главное окно графика то:
sub_window
[in] Номер подокна графика. 0 означает главное окно графика. Чтобы добавить индикатор в новое окно, параметр должен быть на единицу больше, чем индекс последнего существующего окна, то есть равен CHART_WINDOWS_TOTAL. Если значение параметра превышает значение CHART_WINDOWS_TOTAL, то новое окно создано не будет, индикатор не будет добавлен.
Добавлять индикатор в OnInit() нельзя - так как на данном этапе эксперт ещё не сформирован. А вот функция - OnTick() - это признак полноценной работы эксперта.
//+------------------------------------------------------------------+//| 0000.mq5 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"inputint MA_Period=21;
inputint MA_Shift=0;
inputENUM_MA_METHOD MA_Method=MODE_SMA;
//--- variablesint MA_handle=INVALID_HANDLE;
bool first_start=false;
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ intOnInit()
{
Print(__FUNCTION__,", first_start = ",first_start);
MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",MA_Period,MA_Shift,MA_Method,PRICE_CLOSE);
if(MA_handle==INVALID_HANDLE)
return(INIT_FAILED);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| "Tick" event handler function |//+------------------------------------------------------------------+voidOnTick()
{
//---if(!first_start)
{
if(AddIndicator()) //попробуем добавить индикатор на график
first_start=true;
}
}
//+------------------------------------------------------------------+ //| Функция проверки и добавления индикатора на график | //+------------------------------------------------------------------+ bool AddIndicator()
{
//--- сбросим код ошибки ResetLastError();
//--- накладываем индикатор на график int subwindow=0;
PrintFormat("Добавляем индикатор на окно %d графика",subwindow);
if(!ChartIndicatorAdd(0,subwindow,MA_handle))
{
PrintFormat("Не удалось добавить индикатор на окно %d графика. Код ошибки %d",
subwindow,GetLastError());
}
return(true);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+
И перепишите функцию AddIndicator() так, чтобы она возвращала false при неудачной попытке добавить индикатор.
Видимо я неправильно сформулировал вопрос ,Вы не поняли ..
мне подокно не нужно , индикатор надо поставить на график цены так как ставится стандартная машка
это я рассматриваю как пример, и пытаюсь понять .
А конечный результат хочу чтобы индикатор установленный на график имел свой номер , чтобы можно было созданной на графике копкой "Добавить" набрать необходимое количество копий .... и удалить так же один ,выбранный кнопкой крестика ........ ну там много всяких еще фантазий пока не хочу о них писать))
Индикатор может иметь имя, если Вам нравятся цифры, то пусть это будет цифра. Однако цифра будет не числом, а текстом. Вам нужна пользовательская панель управления, которая позволит добавлять какой-либо номер индикатора в количестве от одного и более?
подскажите функцию на ограничение, в эксперт хочу засунуть запрет на продажу или покупку от скользящей средней.
Заколдобило. Не передается ссылка на массив в функцию.
с этим double *out[] - хоть как его не пиши - все ошибки.
'BatIndicators.mqh' BatIndicators.mqh 1 1
'*' - pointer cannot be used BatIndicators.mqh 18 45
'out' - arrays are passed by reference only BatIndicators.mqh 18 46
2 error(s), 0 warning(s) 3 1
либо одна либо другая, либо вместе. Помнится раньше без проблем было, или это в С. )
Заколдобило. Не передается ссылка на массив в функцию.
с этим double *out[] - хоть как его не пиши - все ошибки.
'BatIndicators.mqh' BatIndicators.mqh 1 1
'*' - pointer cannot be used BatIndicators.mqh 18 45
'out' - arrays are passed by reference only BatIndicators.mqh 18 46
2 error(s), 0 warning(s) 3 1
либо одна либо другая, либо вместе. Помнится раньше без проблем было, или это в С. )
Попробуйте так
Попробуйте так
//--- получим номер нового подокна, в которое попытаемся добавить индикатор
int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
Вот этот код смотрю https://www.mql5.com/ru/docs/chart_operations/chartindicatoradd
В примере показывают как в подокно уставить индикатор, а если не нужно подокно, просто на примере мувига как сделать?
//--- получим номер нового подокна, в которое попытаемся добавить индикатор
int subwindow=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
Вот этот код смотрю https://www.mql5.com/ru/docs/chart_operations/chartindicatoradd
В примере показывают как в подокно уставить индикатор, а если не нужно подокно, просто на примере мувига как сделать?
Если нужно добавить индикатор в главное окно, то:
sub_window
[in] Номер подокна графика. 0 означает главное окно графика. Чтобы добавить индикатор в новое окно, параметр должен быть на единицу больше, чем индекс последнего существующего окна, то есть равен CHART_WINDOWS_TOTAL. Если значение параметра превышает значение CHART_WINDOWS_TOTAL, то новое окно создано не будет, индикатор не будет добавлен.
Если нужно добавить индикатор в главное окно, то:
Здравствуйте Владимир
Видимо я неправильно сформулировал вопрос ,Вы не поняли ..
мне подокно не нужно , индикатор надо поставить на график цены так как ставится стандартная машка
это я рассматриваю как пример, и пытаюсь понять .
А конечный результат хочу чтобы индикатор установленный на график имел свой номер , чтобы можно было созданной на графике копкой "Добавить" набрать необходимое количество копий .... и удалить так же один ,выбранный кнопкой крестика ........ ну там много всяких еще фантазий пока не хочу о них писать))
Здравствуйте Владимир
Видимо я неправильно сформулировал вопрос ,Вы не поняли ..
мне подокно не нужно , индикатор надо поставить на график цены так как ставится стандартная машка
это я рассматриваю как пример, и пытаюсь понять .
А конечный результат хочу чтобы индикатор установленный на график имел свой номер , чтобы можно было созданной на графике копкой "Добавить" набрать необходимое количество копий .... и удалить так же один ,выбранный кнопкой крестика ........ ну там много всяких еще фантазий пока не хочу о них писать))
Когда индикатор нужно добавить в главное окно графика то:
sub_window
[in] Номер подокна графика. 0 означает главное окно графика. Чтобы добавить индикатор в новое окно, параметр должен быть на единицу больше, чем индекс последнего существующего окна, то есть равен CHART_WINDOWS_TOTAL. Если значение параметра превышает значение CHART_WINDOWS_TOTAL, то новое окно создано не будет, индикатор не будет добавлен.
Добавлять индикатор в OnInit() нельзя - так как на данном этапе эксперт ещё не сформирован. А вот функция - OnTick() - это признак полноценной работы эксперта.
И перепишите функцию AddIndicator() так, чтобы она возвращала false при неудачной попытке добавить индикатор.Здравствуйте Владимир
Видимо я неправильно сформулировал вопрос ,Вы не поняли ..
мне подокно не нужно , индикатор надо поставить на график цены так как ставится стандартная машка
это я рассматриваю как пример, и пытаюсь понять .
А конечный результат хочу чтобы индикатор установленный на график имел свой номер , чтобы можно было созданной на графике копкой "Добавить" набрать необходимое количество копий .... и удалить так же один ,выбранный кнопкой крестика ........ ну там много всяких еще фантазий пока не хочу о них писать))