記事"MetaTrader 5での並列計算"についてのディスカッション

 

新しい記事 MetaTrader 5での並列計算 はパブリッシュされました:

人類の歴史において時間は高価値であり、われわれはそれを無駄に費やさないよう努力しています。本稿では、マルチ コア プロセッサのコンピュータをご使用の場合、お手元のExpert Advisor の動作スピードを上げる方法について述べていきます。また、提案のメソッド実装には MQL5以外の言語知識は必要とされません。

図1 アプリケーションの同時実行

作者: Andrew

 

著者に感謝する。私もこの話題について考えていたのだが、記事にたどり着けなかった。

著者は、どの商品が何を動かしているのかを注意深くモニターすべきだと警告している。どのペアでも実行できるExpert Advisorを書くことを考えると、これは少し難しい。EAがどのペアで稼動しているかを把握し、パラレル・ストリームのペアを調整する必要がある。

この点に関して、(作者にというよりMQ開発者に)質問です: カスタムツールを導入することは可能でしょうか?

そうすれば、並列計算用の空の チャートの作成から始まり、自作のティックチャートの作成まで、多くのタスクを解決できるだろう。

データ転送バッファについては、グローバルな構造体を作り、その構造体によって異なるタイプのデータを転送することをお勧めします。計算結果を配列の形で返すのは必ずしも便利とは限らないし、カウンターを追跡しなければならないこともよくある。ちなみに、同じ構造体に配列を含めることもできる。
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Urain:

この点に関して、(作者にというより、MQ開発者に)質問です: カスタムツールの導入は可能でしょうか?

うーん、そのアイデアはいいね。
 

カスタム・ツールについては、すでにここで述べたことを繰り返すことになるかもしれませんが、補足しておきます。

現在、Expert Advisor(インジケータ、スクリプト)は特定のシンボルでのみ起動します。他のシンボルの現在のデータにもアクセスできますが、OnTickイベントはExpert Advisorが起動されたチャート上のホストシンボルに対してのみ生成されます。

おそらく、アドオンのような独自の「カスタムツール」を 作成する可能性を導入するのが論理的でしょう このツールは、Expert Advisorの上部構造のようなもので、複数のシンボルからティックを受信して処理する機能を持ち、その 結果を独自のスレッドで特定のシンボルを扱うプログラム(プログラムの一部またはExpert Advisor、インジケータ)に渡します。これにより、「マルチカレンシー」の作成が大幅に容易になり、拍車がかかった。そして、オブジェクト・プログラミングの概念そのものが、それを後押ししている。複数のシンボルを扱うのに、なぜExpert Advisorを特定のシンボルにバインドするのでしょうか?

P.S.さて、あるいはSymbolInf...関数に「このシンボルの新しいティックが到着しました」というイベントのようなものを追加するのもいいかもしれません。

 
lav888:

Expert Advisor(インジケータ、スクリプト)は特定のシンボルでのみ起動します。他のシンボルの現在のデータにもアクセスできますが、OnTick イベントは、Expert Advisor が起動されたチャートのホスト・シンボルに対してのみ生成されます。

開発者がなぜこのようなことを繰り返したのかは理解しがたい。結局のところ、MQL5アーキテクチャが開発されていたとき、onTickが どのシンボルのどのティックに対してもトリガーされる非常に強力なAPIがすでに存在していました。

一般的に、なぜ彼らがそのようなアーキテクチャを選択し、アーキテクチャの点で非常に有能 であった既存のAPIからほとんど手をつけなかったのか理解できない。

MQL5の開発者たちは、まるで車輪の再発明をしているかのように振る舞います:「この機能については検討します」、「はい、その通りです、追加します」など。

アーキテクチャの構築に1年以上費やしたことは何度か言及されている。つまり、なぜこの方法を採用し、そうでなかったのかという議論があるのだ。

追伸:おそらくその理由は、MetaTraderの開発者は証券会社やトレーディングの経験はほとんどないが、プラットフォームを書いた経験は非常に豊富であるという事実にある。逆に、他の開発者は、実際のブローカー業務や市場取引で膨大な経験を積んでいる。

追伸:推測ではなく、私の考えを書いた。批判することは、創造することよりも常に簡単である。開発者は、明らかな不手際にもかかわらず、尊敬に値する。

 
lav888:

おそらく、独自の"カスタムツール "を 作成する可能性を導入するのが論理的でしょう。それは、Expert Advisorsのアドオンのようなもので、複数のシンボルからティックを受信して処理する機能を持ち 結果をプログラム(プログラムの一部またはExpert Advisors、特定のシンボルで動作するインジケータ)に渡します。これはEAの上部構造のようなもので、複数のシンボルからティックを受信して処理し、 その結果を独自のスレッドで特定のシンボルで動作するプログラム(プログラムの一部またはEA、インジケータ)に渡す機能を備えています。これにより、「多通貨」の作成が大幅に容易になり、拍車がかかった。そして、オブジェクト・プログラミングの概念そのものが、それを後押ししている。複数のシンボルを扱うのに、なぜExpert Advisorを特定のシンボルにバインドするのでしょうか?

P.S.さて、あるいはSymbolInf...関数に「このシンボルの新しいティックが到着しました」というイベントのようなものを追加するのもいいでしょう。

このような "アドオン "は、標準的なMQL5ツールを使って実装することができます:多通貨ティックハンドラー OnTickMarketWatch
 
Lizar:
この「アドオン」は、MQL5標準ツール:多通貨ティック・ハンドラーOnTickMarketWatchを 使用して実装できます。

ありがとう。上記の結論に至ったのは、この記事のおかげです。しかし、この記事でお気づきのように



1.この多通貨ティック・ハンドラーの亜種は、かなりリソースを消費します。delay変数を使用して、スクリプト内でティックを受信する時間の遅延を増やすことで、プロセッサの負荷を軽減することができます。しかし同時に、いくつかのティックをスキップすることもできます。


遅延時間を1秒まで増やせば、OnTimer()を使っても同じ効果が得られる。残念ながら、同じ欠点がある。

同時に、ターミナルは "Market Window "からシンボルのティックを継続的に受信し、処理します。私たちはこれらのティックにアクセスできますが、これらのデータが更新されたというシグナルはありません。そのため、人為的にチェックする必要があるのです。MQL5の利点はそれができることです。しかし、ターミナル関数にソリューションを組み込んだ方がはるかにエレガントであることには同意します。OnTrade()のような別のイベントにして、開発者が自分の裁量で使えるようにすればいい(あるいは使わなくてもいい)。

そして、「カスタム・ツール」やエキスパートを超える上部構造についてですが......。これは一種の "夢想 "であり、設計段階で考えるべきことだったとは思いますが......残念です!

 
lav888:

ありがとう。私が上記の結論に至ったのは、この記事のおかげだ。しかし、あなた自身がこの記事で指摘しているように

使用上のヒント:

1.この多通貨ティック・ハンドラーのバリエーションは、かなりリソースを消費します。delay変数を使用して、スクリプトでティックを受信する時間の遅延を増やすことで、プロセッサの負荷を軽減することができます。しかし同時に、いくつかのティックをスキップすることもできます。


遅延時間を1秒まで増やせば、OnTimer()を使っても同じ効果が得られる。残念ながら、同じ欠点がある。

同時に、ターミナルは "Market Window "からシンボルのティックを継続的に受信し、処理します。私たちはこれらのティックにアクセスできますが、これらのデータが更新されたというシグナルはありません。そのため、人為的にチェックする必要があるのです。MQL5の利点はそれができることです。しかし、ターミナル関数にソリューションを組み込んだ方がはるかにエレガントであることには同意します。OnTrade()のような独立したイベントにして、開発者が自分の裁量で使用できるようにしましょう(あるいは使用しないこともできます)。

そして、「カスタム・ツール」やエキスパートに対する上部構造についてですが......。これは単なる "夢 "で、設計段階で考えるべきことだったとは思いますが...残念です!

そうですね。夢に関しては、今あるものはすべて、かつては誰かの夢だった。強い主張があれば、"カスタムツール"は現れる。
 

オーケー!あとは開発者に聞いてもらうだけだ。このアドオンにスレッド管理機能が搭載されるといいですね。

それぞれの処理をそれぞれのスレッドで実行できるようになる。おそらく、現在のティックを処理しながら新しいティックを処理できるようになるだろう。

 

役に立つ記事。新たな展望が開けました。

質問があります。OnTick()関数を OnTick(EURUSD)のようなパラメータ付きの関数にして、1つのExpert Advisorで異なる商品のティックを並行して処理できるようにすることはできますか?もちろん、単一パラメータ関数の各インスタンスを別々のスレッド(別々のカーネル上)で処理する場合です。

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
素晴らしい記事だ。シェアしてくれてありがとう。