カスタムインジケータ(機能-iCustom)使用時のEA加速度理論について

 

まず、私はプログラマーではないので間違っているかもしれませんが、以下に提案するアイデアについて、計算をもとにプロの方のご意見を伺いたいと思います。

Expert Advisorを開発する際、カスタムインジケータの 使用はいくつかのステージでトピックとなる問題である。特にプログラマーが入れ替わった場合、Expert Advisorのロジックの一部をインジケータに貼り付けて、ロジックをテスト(計算とその関連性を確認)してから、新しいアイデアの部分に取り組むのがよいでしょう。その結果、実際にインジケータに情報を要求し、予想されるデータと実際のデータを比較して判断する、それほど複雑ではないExpert Advisorを得ることができます。

しかし、この方法には、エキスパートアドバイザーの速度という大きな欠点があります。カスタム指標にデータを要求する頻度が高いほど、計算が遅くなり、最適化に必要なリソース(メモリ)も多くなるのが実情です。

今のところ、私はMT4で作業していますが、私が理解しているところでは、原理は同じです。

そして、問題はiCustomインジケータ自体の計算速度ではなく、Expert Advisorとの接続にあるのです。

仮にインジケータが5つのチャートバッファを使用し、EAがそれらのバッファからの情報を必要とする場合、コード内で5つのiCustom関数を使用する必要があり、実際に1つのインジケータではなく5つのインジケータをチャート上に置くことになり、5倍以上のリソースが必要となります。多分、私が間違っていて、コンパイラはこの状況を分析します - それは1つの指標のために計算し、一度に必要なバッファのためのすべての関数のデータを与えるのですか?そうであれば、私のこれ以上の推測は無駄である。

しかし、そうでないなら、インジケーターの情報を1つのパックに統合してはどうでしょう。

このテーマについて、Expert Advisorのパフォーマンスを測定する実験を行うことを提案します。

この場合、1つ以上のバッファを持つカスタムインジケータを取り出し、追加のバッファを追加する必要があります。

アルゴリズムは論理的である(数学的でない)。

1.インジケータ内のバッファを整数に変換し、数値ごとの桁数に応じて、合計3つのバッファ、だった:121101;113;5、になりました。

2.最初の数字の後に何桁の数字を入れるかを数えます。この場合、4、そして次の数字で次の数字 - 1、これらの値は乗算器の度数となります。

1,21101*10^4=1211010000

1.13*10^1=113

5*10^0=5 (0をチェック)

3.数字を合計して1211011135を求めます。

4.4.バッファに値を書き込む

5.Expert Advisorの4つの指標バッファを要求し、値を逆順に成分に分解し、Expert Advisorの作業にさらに使用できる3つの数値を得る。

どなたかこの方法の速度を比較してください、合理的でしょうか?

 
...Допустим, индикатор использует 5 графических буферов и для работы советника требуется информация с этих буферов, тогда в коде советника необходимо использовать 5 функций iCustom, и фактически вместо одного индикатора наносить на график 5 индикаторов, что требует в 5 раз больше ресурсов. Быть может я не прав и компилятор анализирует это обстоятельство - делая расчет по одному индикатору и дает сразу всем функциям данные по востребованным буферам!? Тогда дальше мои измышления пусты...

コンパイラはいろいろなことができるが、それはできない :-)

...しかし、このアプローチは、重要な欠点がある - そのようなエキスパート-アドバイザーの速度。実は、カスタムインジケータにデータを要求する頻度が高いほど、計算が遅くなり、最適化のためのリソース(メモリ)が多く必要になります ...

そして、このケースは最適化することができます。まず、インジケータ自体がインテリジェントに書かれていること(すべてのティックですべてのバーを再計算しない)、次に、インジケータが超重く、EAを何とか遅くすること...。長い話を短くすると...

そして、補助インジケータのメモリ消費量を削減する」という興味深い記事がありましたのでご紹介します。

多通貨のExpert Advisorで、8つのタイムフレームで28のシンボルのインジケータの読み取りを受信していました。

28*8=224枚のインジケーターでした・・・。どうすれば最適化できるのか、悩みました。多通貨処理で約700MBのRAMを消費した...。ターミナル設定の「チャート」タブにある「ウィンドウ内の最大バー数」フィールドに小さな値を設定するだけで、簡単に解決しました...。私の記憶では、この分野の最低ラインは5千本だと思うのですが...。

Уменьшаем расход памяти на вспомогательные индикаторы
Уменьшаем расход памяти на вспомогательные индикаторы
  • 2011.03.18
  • Andrew
  • www.mql5.com
Если индикатор для своих расчетов задействует значения множества других индикаторов, то такая система расходует много памяти. В статье рассмотрены несколько способов снижения расхода памяти при использовании вспомогательных индикаторов. Сэкономленная память позволит вам увеличить число одновременно используемых в терминале валютных пар, индикаторов и стратегий, что повысит надежность вашего торгового портфеля. Вот так простая забота о технических ресурсах вашего компьютера способна превратиться в материальные ресурсы на вашем депозите.
 

テスト時間が1.2~1.3倍増加しましたが、これはカスタムインジケーターが もたらす恩恵と比較すると非常に些細なことです。

5バッファという結論は間違っています。パラメータが同じ場合は、1つのインジケータのみ読み込まれます。

 

Integer:

5つのバッファに関する結論は誤りです。パラメータが同じ場合は、1つのインジケータのみ読み込まれます。

はい、そうですね。

CopyBuffer()関数は、異なる引数(バッファ番号)で5回呼び出されることになります。そして、インジケーターのコピー-ハンドル-も同じになります。

著者は「加速度論...」と派手な題名をつけたが、基本的なことについては無知である。

-アレックス、このテーマに関する記事はたくさんありますよ。


 
denkir:

はい、そうですね。

CopyBuffer()関数は、異なる引数(バッファ番号)で5回呼び出されることになります。そして、インジケーターのコピーは1つだけとなります - ハンドル。

著者は「加速度論...」と派手な題名をつけたが、基本的なことについては無知である。

-Aleks-、指標をテーマにした記事が多いですね~。


一度、iCustomで内蔵インデックスとアナログインデックスの呼び出し速度を計測してみました。内蔵のものは20〜50%程度高速化されています。MQLではなくC++で書かれているためと思われます。
 

デンケル 最適化時のEAの動作についてなのですが、チャートのローソク足の数は計算量に影響するのでしょうか?記事を読んで勉強したところ、インジケータの最適化にはバリエーションがあることがわかりました。しかし、今回はインジケータは完璧だと信じて、インジケータからEAへのデータの渡し方を検証してみたいと思います。私はプログラマーではないので、インジケータのコードの最適性をチェックするのは困難です。私がTORで規定できるのは、せいぜい1バーの遅れと計算のための履歴の制限です。

Integer:

私が測定したところ、テスト時間は1.2~1.3倍増加しましたが、これはカスタムインジケーターが もたらす利点に比べれば、まったく重要なことではありません。

5バッファという私の結論は正しくありません。パラメータが同じ場合は、1つのインジケータのみ読み込まれます。

何を測っていたんですか?そして、30%というのは、私にとってはそれほど少ないものではありません。

5バッファについてですが、もし私の理解が正しければ、インジケータの入力パラメータが同じで、Expert Advisorが最後のインジケータを複数回呼び出し、異なるバッファから情報を取得する場合、1つのインジケータに対してのみ計算が行われるのでしょうか。

そうであるならば、カスタム・インディケータを組み合わせることで、Expert Advisorの動作が高速化するはずですが?例えば、1つのインジケータに、独立した設定を持つ異なるインジケータのロジックを実装し、そのいずれかが呼び出されたときに、すべてのバッファから一度に情報を受け取り、同じパラメータを持つ別のバッファからの情報要求の場合に使用することができるのでしょうか。

VDev:
iCustomを通じて、組み込みインデックスとそのアナログの呼び出し速度を測定してみました。内蔵のものは20〜50%程度高速化されています。MQLではなくC++で書かれているためと思われます。

それは事実です。
 

GODZILLA さんの中間計算のためのバッファを追加しない価格系列平均化」という記事が非常に興味深いです。

2010年に書かれたものです。

3.クラスを使用して得られたインジケータと、コード内のテクニカルおよびカスタムインジケータのコールを使用した類似のインジケータの比較

Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
denkir:

はい、そうですね。

CopyBuffer()関数は、異なる引数(バッファ番号)で5回呼び出されることになります。そして、インジケーターのコピーは1つだけとなります - ハンドル。

著者は声高に「加速度論...」と連呼していたが、基本的なことが全く分かっていない。

-Aleks-、指標をテーマにした記事が多いですねー。


そして、あなたは、私の言葉を数字で確認しながら、私の仮説を(できれば4で)反証すればいいのですね?

トピックは私の理論についてで、タイトルはOKです :)

 
-Aleks-:

Denkir 、私は最適化時のEAのパフォーマンスについて話しているのですが、チャート上のローソク足の数は、そこでの計算量に影響するのでしょうか?

-Aleks-、 テスターについて 開発者に聞く必要がある ...

しかし、議論における用語に問題があるように思います。計算速度を下げるか、インジケータで作業するためのRAMを節約するか、どっちがいいんだ?



 
denkir:

-Aleks-、 テスターについて 開発者に聞いてみないと...。

しかし、私が思うに、議論における用語に問題があるのではないでしょうか。計算速度を下げるか、インジケータで作業するためのRAMを節約するか、どっちがいいんだ?

私の方法は、この2つの問題を解決することができそうです。私が間違っているかもしれません。

最適化を行う場合、速度は重要ですが、RAMが詰まると、やはり私の観測では、1パスあたりの処理速度が低下します。

 
-Aleks-:

どなたかこの方法の速度を比較できる方、その根拠はありますか?

この方法だと、インジケータのメモリ消費量は減りますが(前後のバッファ数の差の約倍)、プロセッサの負荷は増えます(「組み立て」と「分解」の両方を常に行う必要があります)。

また、インジケータに5つのバッファがある場合、iCustomの最初の呼び出しはすべてのバッファを計算し、その後の呼び出しと他のバッファの要求は、(計算用の新しいデータが現れるまで)準備のできた情報のみを読み込みます。

本当に重いインジケータを使う場合は、独自のキャッシュシステムを考え、最初の呼び出しでデータを計算してファイルに 書き込み、次の呼び出しでは読み取り専用にする。私はこの方法でやったことがありますが、その方がずっと速いです。

しかし、95%のケースでは、そのようなことは必要ありません。テスターはそのままでも十分速いですし、5ではクラウドも接続することができます。

がんばってください。

理由: