Создание робота - страница 7

 
Vladimir M.:
Обычно хендл и расчётную часть в OnDeinit чищу и всё удаляется. Объект это не индикатор.

https://www.mql5.com/ru/docs/chart_operations/chartindicatordelete

"Удаление индикатора с графика не означает, что расчетная часть индикатора также будет удалена из памяти терминала. Для освобождения хэндла индикатора используйте функцию IndicatorRelease()."

Да, Владимир, это уже делал и писал об этом ранее, но результат всё тот же.

С уважением, Владимир.

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

Создание робота

MrBrooklin, 2020.09.28 10:38

Вот живой пример одной проблемы с которой бьюсь уже больше часа. Мне нужно было, чтобы при запуске советника создавался и на графике отображался индикатор ZigZagColor. Сделано в int OnInit:

   handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
                          Inp_ZZ_Depth,
                          Inp_ZZ_Deviation,
                          Inp_ZZ_Backstep);
   ChartIndicatorAdd(ChartID(),0,handle_iCustom);

Индикатор создался и отобразился. Теперь после удаления советника нужно, чтобы индикатор удалился. Пишу:

void OnDeinit(const int reason)
  {
//---
   IndicatorRelease(handle_iCustom);
   ObjectsDeleteAll(0,"Examples\\ZigzagColor");
  }

а индикатор не удаляется. Вроде бы тоже всё по полочкам разложил. И хэндл очистил и функцию удаления применил. Вот в чем причина, почему не удаляется?

С уважением, Владимир.


 
Alekseu Fedotov:

 Удаляем индикатор с графика с помощью функции 


bool  ChartIndicatorDelete( 

   long           chart_id,              // идентификатор графика 

   int            sub_window             // номер подокна 

   const string   indicator_shortname    // короткое имя индикатора 

   );

Спасибо, Алексей, завтра попробую на свежую голову, а то уже в ней каша от полученной информации. Как говорится - утро вечера мудренее!

Сейчас появился ещё один момент, который меня сильно озадачил и удивил. Попробовал очистить график скриптом, который разработал Владимир Карпутов, так этот скрипт удалил абсолютно всё кроме этого пользовательского индикатора ZigzagColor!!! Попробовал удалить простой ZigZag этим же скриптом, тоже не удаляет! Загадка...

С уважением, Владимир.

 
MrBrooklin:

Спасибо, Алексей, завтра попробую на свежую голову, а то уже в ней каша от полученной информации. Как говорится - утро вечера мудренее!

Сейчас появился ещё один момент, который меня сильно озадачил и удивил. Попробовал очистить график скриптом, который разработал Владимир Карпутов, так этот скрипт удалил абсолютно всё кроме этого пользовательского индикатора ZigzagColor!!! Попробовал удалить простой ZigZag этим же скриптом, тоже не удаляет! Загадка...

С уважением, Владимир.

Попробуйте этот скрипт


#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int window=ChartWindowFind(0,"ZigzagColor");
   bool res=ChartIndicatorDelete(0,window,"ZigzagColor");
//--- проанализируем результат вызова ChartIndicatorDelete()
   if(!res)
     {
      PrintFormat("Не удалось удалить индикатор ZigzagColor с окна #%d. Код ошибки %d",
                  window,GetLastError());
     }
  }


 

короткое имя ZigzagColor - и это по умолчанию, если настроите по другому нужно вписать те цифры  

2020.09.29 03:41:36.604 IndicatorDelete (XAUUSD,M30)    ZigZag(12,5,3)

и именно так, нужно прописать 

ZigZag(12,5,3)
 
SanAlex:

короткое имя ZigzagColor - и это по умолчанию, если настроите по другому нужно вписать те цифры  

и именно так, нужно прописать 

или еще можно сам индикатор изменить - задать попроще имя 

//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"ZigZag("+(string)InpDepth+","+(string)InpDeviation+","+(string)InpBackstep+")");
   PlotIndexSetString(0,PLOT_LABEL,"ZigzagColor");
//--- set an empty value

например на так 

//--- name for DataWindow and indicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"ZigZag");
   PlotIndexSetString(0,PLOT_LABEL,"ZigzagColor");
//--- set an empty value

-----------------------------------------------

я Вам уже скрипт скинул - и если этот скрипт кинуть на график и не задать имя индикатора он отработает не удаляя не одного Индикатора - но напишет в окошке эксперты какие присутствуют Индикаторы 

https://c.mql5.com/3/332/IndicatorDelete.mq5

вот какие у меня 

CS      0       03:41:36.549    IndicatorDelete (XAUUSD,M30)    EWO(5,35)
DF      0       03:41:36.604    IndicatorDelete (XAUUSD,M30)    ZigZag(12,5,3)
KR      0       03:41:36.626    IndicatorDelete (XAUUSD,M30)    LeMan_BrainTrend1Sig
FE      0       03:41:36.646    IndicatorDelete (XAUUSD,M30)    Hline VSC
RN      0       03:41:36.666    IndicatorDelete (XAUUSD,M30)    Pivot Lines TimeZone
KG      0       03:41:36.686    IndicatorDelete (XAUUSD,M30)    Line through two fractals
DL      0       03:41:36.706    IndicatorDelete (XAUUSD,M30)    sanbox
 
Alekseu Fedotov:

Попробуйте этот скрипт

Всем доброго дня!

Алексей, применил Ваш скрипт. Выдало код ошибки 4115. В справочнике нашёл, что он означает:

ERR_CHART_INDICATOR_CANNOT_DEL

4115

Ошибка при удалении индикатора с графика


С уважением, Владимир.

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
SanAlex:

или еще можно сам индикатор изменить - задать попроще имя 

например на так 

-----------------------------------------------

я Вам уже скрипт скинул - и если этот скрипт кинуть на график и не задать имя индикатора он отработает не удаляя не одного Индикатора - но напишет в окошке эксперты какие присутствуют Индикаторы 

https://c.mql5.com/3/332/IndicatorDelete.mq5

вот какие у меня 

Здравствуйте! Применил Ваш скрипт. Во вкладке Эксперты появились два индикатора: Volumes и ZigZag (80,20,0). На самом деле так оно и есть, только индикатор ZigZag почему-то написан без Color.

С уважением, Владимир.

 
Alekseu Fedotov:

Попробуйте этот скрипт

MrBrooklin:

Всем доброго дня!

Алексей, применил Ваш скрипт. Выдало код ошибки 4115.

С уважением, Владимир.

Надо-бы быть повнимательней.

bool  ChartIndicatorDelete( 
   long           chart_id,              // идентификатор графика 
   int            sub_window             // номер подокна 
   const string   indicator_shortname    // короткое имя индикатора 
   );

Имя индикатора и короткое имя индикатора достаточно часто не совпадают.

 
MrBrooklin:

Здравствуйте! Применил Ваш скрипт. Во вкладке Эксперты появились два индикатора: Volumes и ZigZag (80,20,0). На самом деле так оно и есть, только индикатор ZigZag почему-то написан без Color.

С уважением, Владимир.

вот Вам и нужно, тогда прописать именно так -  ZigZag (80,20,0)

Тогда он сто пудов - удалится 

-----------------

а без Color

потому что в индикаторе так он прописан 

IndicatorSetString(INDICATOR_SHORTNAME,"ZigZag("+(string)InpDepth+","+(string)InpDeviation+","+(string)InpBackstep+")");

 

 
SanAlex:

вот Вам и нужно, тогда прописать именно так -  ZigZag (80,20,0)

Тогда он сто пудов - удалится 

-----------------

а без Color

потому что в индикаторе так он прописан 

 

И если Вы измените настройки, то нужно прописывать те цифры, которые вы настроили в Индикаторе

к примеру  

ZigZag(12,5,3)