記事"MQL5クックブック - スライディングウィンドウ内指標の高速計算のためのリングバッファの作成"についてのディスカッション - ページ 2

 
Vasiliy Sokolov:

あなたの言いたいことは1回目で完全に理解できた。

値変化シグネチャー」とは何か?ダイナミクスで変化する何らかの値です。したがって、それは指標である。この目的のためにリングバッファを開発する必要はなく、このリングインジケータのいくつかを基に、まさにあなたが言っている「変化の特徴」を計算するアルゴリズムを作れば十分です。

シグネチャーは値ではない。シグネチャーは値の変化特性である

それをチャートに表示したり、インジケーターを作ったりすることは重要ではありません。重要なのは、プログラムが現在の期間における価値の変化の特徴を見ることができることである。リング・バッファ であるデータ配列からこのシグネチャを抽出するメカニズムを構築することが重要である。

このメカニズムが一番複雑だ。作ってみればわかる。

単純にグラフに曲線をプロットすれば、私たちの脳は値の変化そのもののシグネチャーを見る。そのように適応しているのだ。

しかし、プログラムにそれを見させようとする。

 

補足する:

現在のところ、取引アルゴリズムは 市場環境パラメーターの特定の 値でのみ 動作する。異なる時間スケールで観測されたパラメーターの「挙動」を見ることはできません。

エキスパート・アドバイザーは、データ・アレイ(リング・バッファなど)に記録された値の変化の履歴から、意味のある集中力を抽出することができません。

リングバッファは、現在の期間における値の変化を「観察」することを可能にするが、変化の特徴を抽出しなければ、その使用は効果的でない。

シグネチャーを合成するメカニズムが存在することで、Expert Advisorの取引は新たなレベルに到達する。ユーザーは、自分のプログラムの取引条件の中で、市場パラメータの変化の性質を設定することができるようになります。

このようなプログラムのレベルと質は、現在我々が行っていることを凌駕するだろう。

 

興味深い記事です。

MT4でインジケータを最後の50本のバーで計算すると、テスターでは、そのようなインジケータはすべてのバーで計算する場合よりもはるかに速く動作します。

MT5では、この方法 最後のn本のバーによるインジケータの計算)はあまり速くないような気がします。この件について知っている人がいたら教えてください。

 
forexman77:

興味深い記事です。

MT4でインジケータを最後の50本のバーで計算すると、テスターでは、そのようなインジケータはすべてのバーで計算する場合よりもはるかに速く動作します。

MT5では、この方法 最後のn本のバーによるインジケータの計算)はあまり速くないような気がします。この件について知っている人がいたら教えてください。

計算についてよく理解していません。どのようなインジケータでも、その計算にはn個の期間が必要です。もしn=50なら、直近の50本のバーで計算することになります。また、すべてのバーで計算するとはどういうことですか?
 
Vasiliy Sokolov:
計算方法がよくわかりません。どのインジケータでも、計算にはn期間が必要です。もしn=50なら、直近の50本のバーで計算することになります。また、すべてのバーでの計算とは何でしょうか?


最後のn本のバーでの計算は50本のバーでの計算であり、すべてのバーでの計算はターミナルで利用可能なすべての履歴Bars-Period_)での 計算です。MT4では、このような構造を使っています:

P=Period_+10;
  
limit=Bars-counted_bars-1;
if (limit > P)limit=P;//つまり、限界値がPより大きい場合、Pの数字を持つバーから計算する。
for(int i=limit;i>=0;i--)

インジケータはExpert Advisorで、すべてのバーで呼び出されるのではなく、いくつかの条件がトリガーされたときに呼び出されます(インジケータの呼び出しは、いくつかの条件演算子の本体内にあります)。

MT5では、このアプローチによる最適化の速度はそれほど低下しません。

 
forexman77:

興味深い記事です。

MT4でインジケータを最後の50本のバーで計算すると、テスターでは、そのようなインジケータはすべてのバーで計算する場合よりもはるかに速く動作します。

MT5では、この方法 最後のn本のバーによるインジケータの計算)はあまり速くないような気がします。この件について知っている人はいますか?

唯一の違いは、テスターによって準備された1000バーの初期計算の速度です。それから、経済的に書かれたインジケータは、MT4でもMT5でも等しく高速に動作します。

 
Andrey Khatimlianskii:

テスターが用意した1000本のバーの初期計算の速度だけが異なります。それなら、どんな経済的に書かれたインジケータでも、MT4でもMT5でも同じように速く動作します。

スピードといえば、MQLは指一本で作られたものではなく、計算が非常に速いです。そのため、標準的なソリューションを追い越すのは容易ではありません。ArrayMaximum/ArayMinimumの例を見てみよう。どちらの関数も、渡された配列を完全に検索して最大値と最小値を求める。渡された配列の要素は常に未知であるため、この計算を減らすことは不可能である。この記事では、極値探索の変形を紹介する。その中の値は順次到着するという事実により、最適化されたアルゴリズムを書くことで探索を減らすことが可能である。しかし、このようなオプション化の利点は、十分に大きな系列にのみ現れる。もし系列が5-10-20要素と大きくなければ、どちらのアルゴリズムも同じように機能する。つまり、デフォルトでは、開発者は非常に高速なソリューションを提供し、原則としてそれを改善することは不可能である。
 
Vasiliy Sokolov:
コードを高速化できると思われるプログラミング構文でひねりを加えるのだ。

MT4では、このツイストの助けを借りて、最適化が何倍も速くなっている。MT5では、私が何か間違ったことをしている可能性があります。

もしかしたら、インジケーターではなくEAかもしれません。

 
forexman77:

MT4では、このツイストの助けを借りて、最適化は何倍も速くなり、私はそうは思いません、私はそれを見ることができます。MT5では、私が何か間違ったことをしている可能性があります。

もしかしたら、それはインジケーターではなくEAかもしれません。

Vasilyは初心者を対象にしています。90%のMTテスターとオプティマイザーのユーザーは、本当にそれを必要としないでしょう。
 
forexman77:


最後のn本のバーでの計算は50本のバーでの計算であり、すべてのバーでの計算はターミナルBars-Period_)で 利用可能なすべての履歴での計算です。MT4ではこのような構成にしています:

インジケータはExpert Advisorで、すべてのバーで呼び出されるのではなく、いくつかの条件がトリガーされたときに呼び出されます(インジケータの呼び出しは、いくつかの条件演算子の本体内にあります)。

MT5では、このアプローチによる最適化のスピードはそれほど低下しません。

最後のインジケータ値のみを計算し、新しいティックの到着でそれを完全に再計算しないことは、標準的な話であり、あなたがそれを議論し始めたことさえ不思議です。それをあなたが見つけたトリックのように言うのは二重におかしい。実際には、これはすべてのインジケーターを書くための標準です。ドキュメントにも記載されている。だから、誰もが最終バー/ティックで再計算するのです。