Init()和DeInit()执行顺序 - 页 28

 
Alexey Viktorov:
窗口的数量是明确的,但不同参数的MA数量如何确定?
你需要查询和解析指标参数。
 
想通了
int GetShortNames( string &ShortNames[], const long Chart_ID = 0, const int SubWindow = 0 )
{    
  const int Total = ChartIndicatorsTotal(Chart_ID, SubWindow);

  ArrayResize(ShortNames, Total);
  
  for (int i = 0; i < Total; i++)
    ShortNames[i] = ChartIndicatorName(Chart_ID, SubWindow, i);
    
  return(Total);

}

// Возвращает свое "Короткое имя" - ShortName
string GetMyShortName( void )
{  
  string Res = "";
  
  const int SubWindow = ChartWindowFind();
  
  string ShortNames[];

  GetShortNames(ShortNames, 0, SubWindow);
  
  const string TmpShortName = __FUNCSIG__ + (string)MathRand();

  IndicatorSetString(INDICATOR_SHORTNAME, TmpShortName);    

  string NewShortNames[];

  const int Total = GetShortNames(NewShortNames, 0, SubWindow);
  
  for (int i = 0; i < Total; i++)
    if (NewShortNames[i] == TmpShortName)
    {
      Res = ShortNames[i];
      
      IndicatorSetString(INDICATOR_SHORTNAME, Res);
      
      break;
    }
  
  return(Res);
}

// Возвращает свой хэндл
int GetMyHandle( void )
{
  const string ShortName = GetMyShortName();
  
  const string TmpShortName = __FUNCSIG__ + (string)MathRand();  
  
  IndicatorSetString(INDICATOR_SHORTNAME, TmpShortName);

  const int Res = ChartIndicatorGet(0, ChartWindowFind(), TmpShortName);
  
  IndicatorSetString(INDICATOR_SHORTNAME, ShortName);  

  return(Res);
}

在OnDeinit之前对其手柄进行IndicatorRelease 是非常重要的。

有趣的是,在每一次这样的指示器释放之后,指示器句柄都会递增一个。

 
fxsaber:
想通了

在OnDeinit之前对其手柄进行IndicatorRelease是非常重要的。

有趣的是,在每一次这样的指示器释放之后,指示器句柄都会递增一个。

IndicatorRelease 已经在测试器中工作?以防万一--以前没有工作。
 
Andrey Dik:
IndicatorRelease在测试器中工作了吗?以防万一--以前没有工作。
没有测试。
 
fxsaber:
我还没有测试过。
我的意思是,如果没有可能从测试器的内存中卸载一个指标,将导致系统暂停,例如,如果你通过自己的手段在飞行中优化指标。或者,例如,动态改变指标参数会导致内存溢出,因为每次都会创建一个新的句柄,而旧的句柄在测试器中不会被删除。
 
https://www.mql5.com/ru/code/18138
Init_Sync
Init_Sync
  • 2017.04.17
  • fxsaber
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов
 
好话题
 
Alexberrr:
好话题

目前,这是一个必要的和相关的问题。我自己找了很久的原因,以为是我的代码有问题,多亏了这个主题,问题才得以解决。

谢谢大家!

原因: