記事"DIY マルチスレッド非同期 MQL5 WebRequest"についてのディスカッション - ページ 5

 

ファイアウォールとディフェンダーを無効にして試してみたが、結果は同じだった。

Win 10 Home。ウイルス対策はなし。

 

こんにちは、

この記事はとても興味深い。

小石を投げてもいいのですが...。

開発者が多くのカレンダー機能を導入したため、httpリクエストはあまり要求されなくなりました(他のデータリクエストはあまり使われていなかったと思います)。私は主に、最適化アルゴリズムを並列に実行する可能性に興味があります(定期的、ドローダウンパラメータ別など、それは問題ではありません)。

可能であれば、そのようなメカニズム(別スレッドでの実行)がサービス上で可能かどうかお答えいただけますか?

著者の仕事に敬意を表します。

 
Олег Миронов:

開発者が多数のカレンダー機能を導入したため、httpリクエストはあまり要求されなくなりました(他のデータリクエストはあまり使われていなかったと思います)。私は主に、最適化アルゴリズムを並列に実行する可能性に興味がありました(定期的、ドローダウン・パラメーター別など、それは問題ではありません)。

可能であれば、そのようなメカニズム(別スレッドでの実行)がサービス上で可能かどうかお答えいただけないでしょうか?

ビルトインのカレンダーはかなり汎用的なので、サードパーティのソースからダウンロードする有用なプロファイル情報がまだたくさんあります。また、ニュースだけでなく、シグナルや暗号通貨取引所の相場などもあります。ウェブリクエストの代わりに並列スレッドを使って計算するというアイデアもあるが、まだ実装されていない。しかし、サービスについてはよくわからない。MQL5のプログラムのようなサービスのことですか?MQはサービスに対して他のプログラムとの双方向通信を提供していない(計算のための "タスク "を送信して結果を得ることはできない)。ですから、これらのサービスは除外されています。

 

現在のチャート(ウィンドウ)上のチャートオブジェクトに自動的に配置されるエキスパート電卓に長い並列計算を要求するインジケータの例をコードベースに投稿しました。

バッファのないインジケーターは、他のスレッドで重い計算を要求する可能性を示すためだけのものです。エキスパート・アドバイザから、この方法で行うことも確かに可能です。これを実装するには、呼び出すMQLプログラム側とエキスパート計算機側の両方で、パラメーターのパッカーとアンパッカーを独自に記述する必要があります。

コードベース

非同期マルチスレッド計算による疑似インジケータのデモ

Stanislav Korotky, 2020.01.16 20:13

これは、ワーカー・エキスパート・アドバイザーをホストするチャート・オブジェクトにおける並列マルチスレッド計算を実演する、バッファーのないインジケーターです。

ログの例

1コアで4タスク

1コア(スレッド)で4タスク実行

2コアで4タスク(2倍高速):

コア(スレッド)上での4タスク実行

 
Stanislav Korotky:

Expert Advisorで長い並列計算を要求するインジケータの例を コードベースに投稿し 、現在のチャート(ウィンドウ) 上のチャートオブジェクトに自動的に配置される ようにした。

バッファのないインジケーターは、他のスレッドで重い計算を要求する可能性を示すためだけのものです。Expert Advisorsからこの方法で実行することも確かに可能です。これを実装するには、呼び出すMQLプログラム側とエキスパート計算機側の両方で、パラメーターのパッカーとアンパッカーを独自に記述する必要があります。


そうすれば、そのインジケーターもEAに突き刺さります :-)

 

Expert Advisorはターミナルを起動する際に、チャート上にグローバル変数が 存在するかどうかをチェックし、存在しない場合は作成してその番号を設定します。チャートクライアントはチャートマネージャーにメッセージを送信します。

その後、ユーザーはチャート・マネージャーのウィンドウを閉じます。クライアントはもはや存在しないウィンドウにリクエストを送る。

つまり、この記事ではチャート・マネージャーを変更する問題を無視している。つまり、チャート・マネージャーを閉じるだけで、すべてのスキームは崩壊する。

 
Алексей Барбашин:

Expert Advisorはターミナルを起動する際に、チャート上にグローバル変数が 存在するかどうかをチェックし、存在しない場合は作成してその番号を設定します。チャートクライアントはチャートマネージャーにメッセージを送信します。

その後、ユーザーはチャート・マネージャーのウィンドウを閉じます。クライアントはもはや存在しないウィンドウにリクエストを送る。

言い換えれば、この記事はチャート・マネージャーを変更する問題を無視している。つまり、チャート・マネージャーを閉じるだけで、すべてのスキームは崩壊する。

この記事はある技術とその最小限の実装を提案している。起こりうるすべての問題状況をチェックすることは、記事の範囲を超えていた。クライアントは、そのID(pool.getManagerIDで入手可能)によってチャートの存在をチェックすることができる。すべてのソース・コードはオープン・ソースです。

この記事で提示されたアイデアを開発する過程で、オブジェクトを使用した簡略化されたマルチスレッド・クエリー処理のスキームが開発されたことに注意してください。そこで言及された問題は「設計によるもの」ではありません。ソースもこのスレッドに添付されています。ですから、それらを使用することをお勧めします。

 
Stanislav Korotky:

この記事では、技術とその最小限の実装を提案した。起こりうるすべての問題状況をチェックすることは、記事の範囲を超えていた。クライアントは、そのID(pool.getManagerIDによって利用可能)によってチャートの存在をチェックすることができる。すべてのソース・コードはオープン・ソースである。

この記事で提示されたアイデアを開発する過程で、オブジェクトを使用した簡素化されたマルチスレッド・クエリー処理のスキームが開発されたことに注意してください。そこで言及された問題は「設計によるもの」ではありません。ソースもこのスレッドに添付されています。ですから、それらを使用することをお勧めします。

トピックの展開を拝見しました。)ただ、残念ながら、オブジェクト「チャート」の使用は、ご指摘の通り、MT5でしか使用できません。

 
Stanislav Korotky:

内蔵カレンダーはごく一般的なものなので、サードパーティーのソースからダウンロードする有用なプロフィール情報がまだたくさんある。さらに、ニュースだけでなく、シグナルや暗号通貨取引所の相場などもある。ウェブリクエストの代わりに並列スレッドを使って計算するというアイデアもあるが、まだ実装されていない。しかし、サービスについてはよくわからない。MQL5のプログラムのようなサービスのことですか?MQはサービスに対して他のプログラムとの双方向通信を提供していない(計算のための "タスク "を送信して結果を得ることはできない)。ですから、これらのサービスは除外されています。

ありがとうございます。サービスについてはすべて正しくご理解いただけました。エキスパート電卓が直接的な答えでした。非常に興味深い。本当にありがとう。
 
標準ライブラリ(IncludeControls)からのUIエレメントがプログラムで使用されている場合、ユーザー・イベントの オフセット(input intMessageBroadcast)は何にすべきですか?どうすれば分かりますか?