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を 行うことが非常に重要です。

興味深いことに、このようなIndicatorReleaseが行われるたびに、インジケータ・ハンドルが1つずつ増分される。

 
fxsaber:
フィギア

OnDeinitの前にIndicatorReleaseを行うことが非常に重要です。

興味深いことに、このようなIndicatorReleaseが行われるたびに、インジケータ・ハンドルが1つずつ増分される。

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:
良い話題

今、必要なもの、関連するもの。ずっと自分で原因を探っていたのですが、自分のコードのバグだと思い、このスレッドのおかげで問題が解決しました。

皆さん、ありがとうございました。