Как экспертом удалить индикатор?

 
Проблема следующая:
Handl=iMomentum(Symbol(),timeframe,14,PRICE_CLOSE);
//..................
   IDs=ChartID();
   Stoc1ShortName=ChartIndicatorName(IDs,1,0);
   CWF=ChartWindowFind(IDs,Stoc1ShortName);

ChartIndicatorDelete(IDs,CWF,Stoc1ShortName); // Выдает ошибку 4014

Как только не пытался - графики все равно остаются

IndicatorRelease(Handl); - тоже не работает

https://www.mql5.com/ru/forum/12372 - это читал, перешерстил полгугла, так решения и не нашел.

Не пойму почему ChartIndicatorDelete выдает "Системная функция не разрешена для вызова", на кой тогда вообще нужна эта функция? Вроде все варианты ее использования перепробовал.

P.S.: подойдет так же решение вида "снос всех индикаторов с графика без разбора", если такое есть)

Заранее спасибо.

P.P.S.: Mql5

Скрытие индикаторов используемых в эксперте
Скрытие индикаторов используемых в эксперте
  • www.mql5.com
Необходимо скрыть связку стандартных индикаторов используемых в советнике от пользователя, чтобы они (индикаторы) не были видны при прогоне советника в тестере стратегий с включенной визуализацией. - - Категория: эксперты форекс, торговые роботы и советники
 
alrane:
Проблема следующая:

Как только не пытался - графики все равно остаются

IndicatorRelease(Handl); - тоже не работает

https://www.mql5.com/ru/forum/12372 - это читал, перешерстил полгугла, так решения и не нашел.

Не пойму почему ChartIndicatorDelete выдает "Системная функция не разрешена для вызова", на кой тогда вообще нужна эта функция? Вроде все варианты ее использования перепробовал.

P.S.: подойдет так же решение вида "снос всех индикаторов с графика без разбора", если такое есть)

Заранее спасибо.

P.P.S.: Mql5

В какой функции Вы создаёте хэндл индикатора? И это у Вас индикатор создаёт индикатор или советник создаёт индикатор?
 
barabashkakvn:
В какой функции Вы создаёте хэндл индикатора? И это у Вас индикатор создаёт индикатор или советник создаёт индикатор?
Советник в OnInit. Пробовал в OnTick и других функциях, результат тот же. Создается везде, удалятся - не удаляется
 

А откуда такая уверенность, что Ваш индикатор в списке индикаторов находится именно в первом подокне да и ещё на месте номер "0":

Stoc1ShortName=ChartIndicatorName(IDs,1,0);
 
barabashkakvn:

А откуда такая уверенность, что Ваш индикатор в списке индикаторов находится именно в первом подокне да и ещё на месте номер "0":

Как определить номер подокна? https://www.mql5.com/ru/docs/standardlibrary/chart_object_classes/cchartobject/cchartobjectwindow - Window() - функция не определяется.

Даже если индикатор всего один - он не удаляется:

(пробовал даже циклом перебрать номера подокон :D )

int Handl;
long IDs;
int CWF;
string ShortName;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Handl=iMomentum(Symbol(),PERIOD_CURRENT,14,PRICE_CLOSE);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   Sleep(20*1000);
   IDs=ChartID();
   ShortName=ChartIndicatorName(IDs,1,0);
   CWF=ChartWindowFind(IDs,ShortName);

   ChartIndicatorDelete(IDs,CWF,ShortName); 
  }
Документация по MQL5: Стандартная библиотека / Классы для работы с графическими объектами / Базовый класс CChartObject / Window
Документация по MQL5: Стандартная библиотека / Классы для работы с графическими объектами / Базовый класс CChartObject / Window
  • www.mql5.com
Стандартная библиотека / Классы для работы с графическими объектами / Базовый класс CChartObject / Window - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Чтобы что-то удалить с графика, это что-то нужно сначала туда покласть

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Либо я чего-то не понимаю:

но, в любом случае выдает ошибку 4014

int Handl;
long IDs;
int CWF;
string ShortName;
int win; 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

   Handl=iMomentum(Symbol(),PERIOD_CURRENT,14,PRICE_CLOSE);
   IDs=ChartID();
   ChartIndicatorAdd(IDs,0,Handl);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   Sleep(20*1000);
   ShortName=ChartIndicatorName(IDs,0,0);
   ChartIndicatorDelete(IDs,0,ShortName); 
   Print(GetLastError());
  }
//+------------------------------------------------------------------+
 

У Вас же есть хендл индикатора:

if ( Handl != INVALID_HANDLE )
{
    IndicatorRelease( Handl ); 
    ShortName=ChartIndicatorName(IDs,0,0);
    ChartIndicatorDelete( IDs, 0, ShortName ); 
}
 

Не удаляется

void OnTick()
  {
//---
if(win==0){
   Handl=iMomentum(Symbol(),PERIOD_CURRENT,14,PRICE_CLOSE);
   IDs=ChartID();
   ChartIndicatorAdd(IDs,0,Handl);
   win++;
}
   Sleep(20*1000);

if ( Handl != INVALID_HANDLE )
{
    IndicatorRelease( Handl ); 
    ShortName=ChartIndicatorName(IDs,0,0);
    ChartIndicatorDelete( IDs, 0, ShortName ); 
}
  }
 
alrane:

Не удаляется

У меня удаляется.

Посмотрите, что у Вас в IDs и ShortName 

И "попадаете" ли Вы в IndicatorRelease()

 
Есть ли способ полностью очистить график? От всего что на нем есть
Причина обращения: