もう一度、マルチスレッドについて - ページ 3

 
Renat:

あなたの元の投稿をもう一度読み、あなたのすべての罵詈雑言に注意を払い、それから下の回答へ行くことをお勧めします。

何かの計算を並列化するためには、まず実現しなければならない」というような柔らかい質問から、「本当に並列化すべきは何か」という現状を説明し、冷静に回答がなされました。

しかし、あなたはすぐに学ぶどころか、さらにくだらないことを吹き込み、私たちに犬をかぶせたのです。その結果、厳しい反応が返ってきた。

OK、罵詈雑言に同意、ちょっとやりすぎました、謝ります。しかし、私は失礼なことは言っていません。ただ、過度に感情的な批判をしただけなのですが、それに対するあなたの反応の厳しさにはまったく及ばないのです。開発者が役立たずで何もわかっていないとはどこにも言っていないので、大げさに言わないでください。

この話題を出したからには、何のために必要なのか、並列化することはたくさんあるのだとよくわかった。すべてのアルゴリズムが「hello world!」で限定されるわけではなく、もっと複雑でリソースを大量に消費するものもある。だから、アルゴリズムも見ていないのに、並列化する必要があるもの、ないもの、といった道徳的な教えを聞くのはとても不思議なことなんです。

OpenCLを使うだけ でなく、DLLにコードを実装することについては、MQLとは関係ありません。そして、質問はMQLでのプログラミングについてでした。

OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • 2012.05.16
  • Sceptic Philozoff
  • www.mql5.com
В конце января 2012 года компания-разработчик терминала MetaTrader 5 анонсировала нативную поддержку OpenCL в MQL5. В статье на конкретном примере изложены основы программирования на OpenCL в среде MQL5 и приведены несколько примеров "наивной" оптимизации программы по быстродействию.
 

OpenCLは、MQL5のコード内で動作します。

以下はサンプルコード です。

 
meat:

OpenCLを使う のと同様にDLLにコードを実装することについては、もはやMQLとは関係ない。そして、MQLでのプログラミングの話でした。

マルチスレッドに対応したスクリプトがあります。また、テスターでは必要ありません
 
meat:

そして、その答えは?マルチストリームで活躍する、素晴らしい端末とテスターがいることを話し始めたんですね。そして、あなたの端末のことは一言も言っていない。もうひとつ、MQLのコードにおけるマルチスレッド化についてです。アルゴリズムがいくつかのパートに分割でき、それぞれのパートが並列に実行される場合。そして、その話題を理解してもいないあなたが、失礼なことを言い始めるのです。なるほど、このやり方では建設的なアプローチができないので、議論を続ける意味がありませんね。

現状でも建設的な解決策はある。複数のmqlプログラム(Expert Advisorsやindicators)がメッセージを交換し、その結果、タスクやタスクの実行結果を交換することができます - もちろん、適切な交換プロトコルを作成して手配した場合。すべてのExpert Advisorは異なるスレッド(それぞれ独自のスレッド)で動作します。したがって、このような共同計算スキームは明らかにマルチスレッドであり、複数のコアがある場合、それらに均等に負荷をかけることができます。

mql5 ツールを使用したメッセージの交換は、以下の方法で可能です。

1. 端末イベント

2.名前付きチャンネル

3.DLLについて

4. ファイル

5.その他

このツールセットから、最適なものを選ぶことも、複数(一度に)使用することも可能です。例えば、名前付きパイプはローカルネットワーク上で情報を転送できるため、複数のマルチコアプロセッサでタスクを並列化できる可能性があります。

頑張ってください。

 
Renat:

OpenCLは、MQL5のコード内で動作します。

以下はサンプルコード です。

まあ、効くというのは半信半疑なんですけどね。しかし、その後の編集やデバッグはどうするのでしょうか?文字列定数に含まれている場合、どのようにエラーを探すのでしょうか?外部プログラムで開発し、MQLに挿入する必要があるということです。しかし、常にこのような移植に対応していると、最初の投稿で指摘したように、おかしくなってしまうのです。どうせコード開発は他でやっているのだから、それを全部MQLに入れる意味はあるのだろうか?DLLとしてコンパイルし、インポートする方が簡単です。

もちろん、自作のDLLを一切使わず、オープンソースで作成することが目的であることは理解しています。しかし、これは特殊なケースです。通常、プログラムは自分のために書かれ、他の人のために書かれることはありません。また、あるプログラムから別のプログラムへのコードの引きずり込みに、常に無意味な操作に従事したいと思う人はほとんどいないでしょう。

しかし、これだけのためにビルトインコンパイラを作るとなると、話は別です。ところで、なぜダメなのでしょうか?つまり、そこにはC言語の構文があるようなものです。つまり、MetaEditorに関数を追加するだけで、通常のmqlコードの一部として、すべてを使用することができます。そして、コンパイラは対応するコード断片を、 \ を加えるなど、適切な方法で整形する。

 
meat:

まあ、効くというのは半信半疑なんですけどね。その後の編集やデバッグはどのように行うのですか?文字列定数の中にある場合、どのようにエラーを見つけることができるのでしょうか?外部プログラムで開発し、MQLに挿入する必要があるということです。しかし、常にこのような移植に対応していると、最初の投稿で指摘したように、おかしくなってしまうのです。どうせコード開発は他でやっているのだから、それを全部MQLに入れる意味はあるのだろうか?DLLとしてコンパイルし、インポートする方が簡単です。

もちろん、自作のDLLを一切使わず、オープンソースで作成することが目的であることは理解しています。しかし、これは特殊なケースです。通常、プログラムは自分のために書かれ、他の人のために書かれることはありません。また、あるプログラムから別のプログラムへのコードの引きずり込みに、常に無意味な操作に従事したいと思う人はほとんどいないでしょう。

しかし、これだけのためにビルトインコンパイラを作るとなると、話は別です。ところで、なぜダメなのでしょうか?つまり、そこにはC言語の構文があるようなものです。つまり、MetaEditorに関数を追加するだけで、通常のmqlコードの一部として、すべてを使用することができます。そして、コンパイラは対応するコード断片を、 \ を加えるなど、適切な方法で整形する。

欲しい人は、チャンスを探す。したくない理由 © Proverb

 
MetaDriver:

現状維持でも建設的な解決策はある。複数のmqlプログラム(Expert Advisorsやindicators)がメッセージを交換し、その結果、タスクやタスクの実行結果を交換することができます - もちろん、適切な交換プロトコルを作成して手配した場合。すべてのExpert Advisorは異なるスレッド(それぞれ独自のスレッド)で動作します。したがって、このような共同計算スキームは明らかにマルチスレッドであり、複数のコアがある場合はそれらに均等に負荷をかけることになります。

mql5 ツ ールを使用したメッセージの交換は、以下の方法で可能です。

1. 端末イベント

2.名前付きチャンネル

3.DLL。

4. ファイル

5.その他

このツールセットから、最適なものを選択してもよいし、複数を(一度に)使用してもよい。例えば、名前付きパイプはローカルネットワーク上で情報を転送することができるため、複数のマルチコアプロセッサでタスクを並列化できる可能性があるなど、それぞれの方法には利点と欠点があります。

頑張ってください。

まあ、全部が全部mql5ツールではないってことにしておこうか :)そして、この問題をどのように解決(回避)するかということではなかったのです。必ず回避できる道がある、それは間違いない。問題は、なぜmql5に対応する機能を追加できないのか、ということです。

多くのExpert Advisorを適切なチャートで起動し、その処理を複数のスレッドに配置することは合理的でなく、信頼性がないことは認めざるを得ません。

 
インジケータやExpert Advisorでマルチスレッドを必要とする人はほとんどいないでしょう。そして通常、これらの人々は、DLLなどを通じて、このマルチスレッドを自分で実装することができます。
 
Reshetov:

欲しい人、可能性を探す人。したくない人、その理由 © Proverb

まずは実現可能性を理解することが必要です :)MQL5全般とMT5、それぞれを使うことの合理性、このプラットフォームに乗り換える価値があるのか、という意味です。MT4のように、正常に動作させるためには、いくつかのEAを動かしたり、コードをDLLに転送したりと、魔法を使う必要があるのなら、ポンコツをポンコツに変える意味はないでしょう。もしコードをDLLで書かなければならないのであれば、Expert Advisor(および実行中のターミナル全体)の形で追加のパディングを持つよりも、オープンAPIを持つプラットフォームを使用する方が簡単で安全でしょう。

 
meat:

まずは実現可能性を理解することが必要です :)MQL5を一般的に使うことの合理性、MT5をそれぞれ、このプラットフォームにアップグレードする価値があるのか、という意味です。MT4のように、正常に動作させるためには、いくつかのEAを動かしたり、コードをDLLに転送したりと、魔法を使う必要があるのなら、ポンコツをポンコツに変える意味はないでしょう。もしコードをDLLで書かなければならないのであれば、Expert Advisor(および実行中のターミナル全体)という形で追加のパディングを持つよりも、オープンAPIを持つプラットフォームを直ちに使用する方が簡単で安全である。

誰もMQL5への切り替えを強制しているわけではありません。例えば、MQL4の機能が懐かしくて、MQL5に乗り換えたこともありました。

例えば、すべての機能をС++で実装し、MQL5は実行部分のみを含み、全体は名前付きチャンネルを 使ったプロトコルで結びつけられるようにします。バリエーションが多いですね。必要なのは、強い意志だけです。

Связь с MetaTrader 5 через именованные каналы без применения DLL
Связь с MetaTrader 5 через именованные каналы без применения DLL
  • 2012.10.15
  • MetaQuotes Software Corp.
  • www.mql5.com
Перед многими разработчиками встает одинаковая проблема - как пробиться в песочницу торгового терминала без применения небезопасных DLL. Одним из простых и безопасных методов является использование стандартных именованных каналов (Named Pipes), которые работают как обычные файловые операции. Они позволяют организовать межпроцессорное клиент-серверное взаимодействие между программами. Посмотрите практические примеры на C++ и MQL5 в виде сервера, клиента, обмен данными между ними и замер производительности.