ライブラリ: リングバッファ作成クラス

 

リングバッファ作成クラス:

このクラスは、エキスパートアドバイザーや指標の内部に中間ストリームデータを格納するために、ミニ時系列、指標ミニバッファと短いサイズのバッファを整理することができます。

作者: Konstantin Gruzdev

 

このクラスはインジケータが消費するメモリを削減できますか?

また、このようなインジケータを複数使用するExpert Advisorが消費するメモリについてはどうでしょうか?

それとも、単にストリーミング・データへの便利なアクセスを提供するという、異なるタスクが設定されたのでしょうか?

 
komposter:

このクラスはインジケータが消費するメモリを削減できますか?

また、このようなインジケータを複数使用するExpert Advisorが消費するメモリについてはどうでしょうか?

それとも、単にストリーミング・データへの便利なアクセスを提供するという、異なるタスクが設定されたのでしょうか?

もちろんそうです。このクラスはメモリを削減するために正確に書かれました。中間データ用のバッファを含むすべてのバッファでは、ユーザーによって指定された最後のデータのサイズだけがメモリに保存されます。

例を公表すべきだ。

 
Lizar:

事例を公表しなければならない。



Class for buildingMoving Average
Class for buildingAverage True Range
Class for buildingAverage Directional Movement Index.

例題はすでにありますが、リンクが切れているのは2つと3つだけです。
 
fyords:
すでに例があるが、2番目と3番目のリンクだけが切れている。
これらの例はまだ公開されていません。まだチェック中です。公開されればリンクは機能します。
 

よりよく理解するために、ちょっとした例えをしよう:

  • この実装におけるリングバッファは、時系列のアナログである。
  • リングバッファのサイズはTERMINAL_MAXBARSのアナログですが、TERMINAL_MAXBARSとは異なり、バッファサイズは初期化時にユーザーによって設定され、使用中に変更することができます。
  • TERMINAL_MAXBARSと同様に、バッファサイズを超えたデータは利用できませんが、バッファサイズ内のすべての最新データは利用可能です。
  • インジケータ・データはインジケータ・バッファと 同様にリング・バッファに保存できますが、チャート上に表示するには、データをインジケータ・バッファにコピーする必要があります。
  • インジケータ・データを表示する必要がない場合は、インジケータ・バッファにコピーする必要はなく、リング・バッファから直接計算に使用します(例を参照)。

 
Lizar:
  • インジケータ・データはインジケータ・バッファと 同様にリング・バッファに保存できますが、チャート上に表示するには、インジケータ・バッファにデータをコピーする必要があります
  • インジケータ・データを表示する必要がない場合は、インジケータ・バッファにコピーする必要はなく、リング・バッファから直接計算に使用します(例を参照)。

これが私が質問したことです。

本格的なインジケータ・バッファがまだ必要なのに、どうやってメモリを節約できるのでしょうか?

結局のところ、中間計算をリング・バッファに転送する場合にのみメモリを節約することができ、これはすべての問題を解決するわけではありません。

私が望んでいるのは、20個の表示バッファを持つインジケータが、直近の1000本のバーを計算し、"Max. bars in window" = 1000のときと、"Max. bars in window" = 9999999999のときで、同じ量のメモリを占有することです。

そして、これは明らかに不可能です。

 
でも、とにかく、あなたの公共労働に感謝します。
 
komposter:

それを聞きたかったんだ。

それでも本格的なインジケーター・バッファが必要な場合、どうやってメモリを節約するのか?

中間的な計算をリング・バッファに転送する場合のみ、メモリを節約できることがわかりました。

私が望んでいるのは、20個の表示バッファを持つインジケータが、直近の1000本のバーを計算し、"Max. bars in window" = 1000のときと、"Max. bars in window" = 9999999999のときで、同じ量のメモリを占有することです。

そして、これは明らかに不可能である =(

インジケータ・バッファに 保存する必要のないデータだけを保存することは可能です。

この場合にも、メモリ消費を抑える方法がいくつかあります。

インジケータ・バッファが必要となるのは、チャート上に画像を表示する必要がある場合と、他のインジケータやExpert Advisorのインジケータ・バッファからデータを取得する必要がある場合です。例えば、テスター(ビジュアライゼーション・モードではない)では、インジケーター・バッファーの代わりにリング・バッファーを使用することができます。これにより、最適化時にメモリを節約することができます。私は最適化の速度を上げることさえできた。インジケータ・バッファからのデータ転送についても同様に、インジケータからデータを取得する他の方法を試してみて、インジケータ・バッファの代わりにリング・バッファを使用することができます。

 
Lizar:

はい、インジケータ・バッファに 保存する必要のないデータだけを保存することは可能です。

この場合にも、メモリ消費を抑える方法がいくつかあります。

インジケータ・バッファが必要となるのは、チャート上に画像を表示する必要がある場合と、他のインジケータやExpert Advisorのインジケータ・バッファからデータを取得する必要がある場合です。例えば、テスター(ビジュアライゼーション・モードではない)では、インジケーター・バッファーの代わりにリング・バッファーを使用することができます。これにより、最適化時にメモリを節約することができます。私は最適化の速度を上げることさえできた。インジケータ・バッファからのデータ転送と同様に、インジケータからデータを取得する他の方法を試してみて、インジケータ・バッファの代わりにリング・バッファを使うこともできます。

もちろん、すでに興奮していたのに残念だ。

とにかくありがとう。

開発者からの正常な解決策を待つことにします。

 
komposter:

もちろん、すでに興奮していたので残念だ。

とにかくありがとう。

開発者からの正常な解決策を待つことにするよ。

オーケー。