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

 
Mohammad Hossein Sadeghi:
いい記事だね。WinINetの非同期モードはどうですか?

そのようなものを実装する予定はないんだ。

 

この記事のロシア語版ディスカッションでは、このアプローチのさらなる研究と、チャートオブジェクトに基づく代替の実装を見ることができる。

Оборумпотрейдингу,автоматическимторговым системам и тестированию торговых стратегий

"WebRequestのMQL5への移行"

Stanislav Korotky, 2018.11.14 14:20

エキスパートのアシスタントを持つテンプレートを使用 するグラフオブジェクトの助けを借りて、ウェブリクエストを起動する別の方法を投稿します。これは、エキスパートとインジケータの両方から使用できます。依存関係は記事と同じです。新しい実装のファイル

  • multiwebobjectworker.mqh - 共通クラスを含むヘッダーファイル;
  • multiwebobjectworker.mq5 - グラフ・オブジェクトの中でウェブ・リクエストを実行するエキスパート;
  • multiwebindicator.mq5 - ウェブリクエストの起動を示すバッファなしのインジケータ;

リクエストごとにオブジェクトが作成され、その中にエキスパートアシスタントが作成され、リクエスト終了時にオブジェクトが削除されます。記事のように、クエリーデータと結果の交換はリソースを通して行われる。

ログから判断すると、オブジェクトはおそらく共通のイベントキューを共有しているので、このメカニズムは本格的なクエリ実行の並列性を提供しません。ログの例:

2018.11.14 15:11:58.492 multiwebindicator (EURUSD,H1)   129912254742671348: Starting chart object WRS1 129912254742671349
2018.11.14 15:11:58.694 multiwebindicator (EURUSD,H1)   129912254742671348: Starting chart object WRS2 129912254742671350
2018.11.14 15:11:58.819 multiwebindicator (EURUSD,H1)   129912254742671348: Starting chart object WRS3 129912254742671351
2018.11.14 15:11:58.960 multiwebobjectworker (EURUSD,H1)        129912254742671349: OnInit
2018.11.14 15:11:58.960 multiwebobjectworker (EURUSD,H1)        129912254742671349: Reading request \Indicators\multiwebindicator.ex5::WRS_0_129912254742671348
2018.11.14 15:11:58.960 multiwebobjectworker (EURUSD,H1)        129912254742671349: Got 64 bytes in request
2018.11.14 15:11:58.960 multiwebobjectworker (EURUSD,H1)        129912254742671349: GET https://User-Agent: n/a 5000 
2018.11.14 15:11:58.975 multiwebobjectworker (EURUSD,H1)        129912254742671350: OnInit
2018.11.14 15:11:58.975 multiwebobjectworker (EURUSD,H1)        129912254742671350: Reading request \Indicators\multiwebindicator.ex5::WRS_1_129912254742671348
2018.11.14 15:11:58.975 multiwebobjectworker (EURUSD,H1)        129912254742671350: Got 60 bytes in request
2018.11.14 15:11:58.975 multiwebobjectworker (EURUSD,H1)        129912254742671350: GET https://User-Agent: n/a 5000 
2018.11.14 15:11:59.084 multiwebobjectworker (EURUSD,H1)        129912254742671351: OnInit
2018.11.14 15:11:59.084 multiwebobjectworker (EURUSD,H1)        129912254742671351: Reading request \Indicators\multiwebindicator.ex5::WRS_2_129912254742671348
2018.11.14 15:11:59.084 multiwebobjectworker (EURUSD,H1)        129912254742671351: Got 72 bytes in request
2018.11.14 15:11:59.084 multiwebobjectworker (EURUSD,H1)        129912254742671351: GET https://www.startpage.com/ User-Agent: n/a 5000 
2018.11.14 15:11:59.162 multiwebobjectworker (EURUSD,H1)        129912254742671350: Done in 187 ms
2018.11.14 15:11:59.178 multiwebindicator (EURUSD,H1)   129912254742671348: Result code 200
2018.11.14 15:11:59.178 multiwebindicator (EURUSD,H1)   129912254742671348: Reading result \Experts\multiwebobjectworker.ex5::WRS_0_129912254742671350
2018.11.14 15:11:59.178 multiwebindicator (EURUSD,H1)   129912254742671348: Got 16592 bytes in response
2018.11.14 15:11:59.178 multiwebindicator (EURUSD,H1)   GET https://ya.ru
2018.11.14 15:11:59.178 multiwebindicator (EURUSD,H1)   Received 3734 bytes in header, 12775 bytes in document
2018.11.14 15:11:59.256 multiwebobjectworker (EURUSD,H1)        129912254742671350: OnDeinit
2018.11.14 15:11:59.272 multiwebobjectworker (EURUSD,H1)        129912254742671349: Done in 297 ms
2018.11.14 15:11:59.334 multiwebindicator (EURUSD,H1)   129912254742671348: Result code 200
2018.11.14 15:11:59.334 multiwebindicator (EURUSD,H1)   129912254742671348: Reading result \Experts\multiwebobjectworker.ex5::WRS_0_129912254742671349
2018.11.14 15:11:59.334 multiwebindicator (EURUSD,H1)   129912254742671348: Got 12688 bytes in response
2018.11.14 15:11:59.334 multiwebindicator (EURUSD,H1)   GET https://google.com/
2018.11.14 15:11:59.334 multiwebindicator (EURUSD,H1)   Received 790 bytes in header, 11813 bytes in document
2018.11.14 15:11:59.350 multiwebobjectworker (EURUSD,H1)        129912254742671349: OnDeinit
2018.11.14 15:11:59.833 multiwebobjectworker (EURUSD,H1)        129912254742671351: Done in 749 ms
2018.11.14 15:11:59.833 multiwebindicator (EURUSD,H1)   129912254742671348: Result code 200
2018.11.14 15:11:59.833 multiwebindicator (EURUSD,H1)   129912254742671348: Reading result \Experts\multiwebobjectworker.ex5::WRS_0_129912254742671351
2018.11.14 15:11:59.833 multiwebindicator (EURUSD,H1)   129912254742671348: Got 45212 bytes in response
2018.11.14 15:11:59.833 multiwebindicator (EURUSD,H1)   GET https://www.startpage.com/
2018.11.14 15:11:59.833 multiwebindicator (EURUSD,H1)   Received 822 bytes in header, 44307 bytes in document
2018.11.14 15:11:59.849 multiwebindicator (EURUSD,H1)   > > > Async WebRequest workers finished 3 tasks in 1357 ms
2018.11.14 15:11:59.880 multiwebobjectworker (EURUSD,H1)        129912254742671351: OnDeinit

ソースもここに添付します。

また、依存関係で使われているfxsaberのインクルードファイルの更新版もチェックしてください - バグフィックスやスピードアップが含まれているかもしれません。

ファイル:
 
素晴らしい記事。多くの可能性の扉を開く。ありがとう。
 

本当に素晴らしい記事だ!

おめでとう、そしてありがとう、@marketeer !

 

実行できません。

エラー4002。

少し分析したところ、ワイカーがURLを受信していないことがわかりました。代わりにnull値を受け取る

 
Someone Else:

うまくいかないんだ。

エラー4002。

少し分析したところ、ワイカーがURLを受信していないことがわかりました。代わりにnull値を受け取ります。

具体的にどのようなプログラム/ライブラリが使用されたのでしょうか?具体的なログも必要です。MT5のバージョン。MT5の他の以前のバージョンでも試してみてください。

 

全ては簡単だ。私はサイトからアーカイブをダウンロードし、テキストに記載されている診断モードで実行し、サイトのみを変更し、3つの代わりに、端末のウェブクエストで 指定されたgoogle.comのみを指定しました。

バージョン5のビルド2085は、現時点では最新ではありません。このバージョンの前に私は覚えていない、それはまた、その時点で最新だった。

ログより

2019.07.04 14:11:31.882 multiwebclient (AUDUSD,M5) > > 標準のWebRequest 1コールが141msで終了しました。

2019.07.04 14:11:31.882 multiwebclient (GBPUSD,M5) Pool manager transfers taQuotesTerminal TaQuotesTerminal::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) Accepted: taQuotesTerminalD0E8209F77C8CF37AD8BF550E51FF075MQL5Expertsmultiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732 after 0 retries

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Reading request taQuotesTerminal AAUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Got 0 bytes in request

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: 0

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) WebRequest error code 4002

2019.07.04 14:11:31.890 multiwebclient (GBPUSD,M5) 131797648225084729 の結果コード: 4002, now idle

2019.07.04 14:11:31.890 multiweb (GBPUSD,M5) 131797648225084729: コード 4002 で失敗しました。


Resourceの日付を上記のコメントにあったように置き換えても状況は変わりません。

原則的には自分で繰り返して動作を確認すればいいのですが......。

 
Someone Else:

全ては簡単だ。私はサイトからアーカイブをダウンロードし、本文に書かれている診断モードで実行し、3つのサイトの代わりにサイトだけを変更し、ターミナルのウェブクエストで 指定されたgoogle.comだけを指定した。

バージョン5のビルド2085は、現時点では最新ではありません。 私は以前のバージョンを覚えていない、それはまた、その時点で最新だった。

過去ログより

2019.07.04 14:11:31.882 multiwebclient (AUDUSD,M5) > > 標準のWebRequest 1コールが141msで終了しました。

2019.07.04 14:11:31.882 multiwebclient (GBPUSD,M5) Pool manager transfers taQuotesTerminal TaQuotesTerminal::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) Accepted: taQuotesTerminalD0E8209F77C8CF37AD8BF550E51FF075MQL5Expertsmultiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732 after 0 retries

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Reading request taQuotesTerminal AAUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Got 0 bytes in request

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: 0

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) WebRequest error code 4002

2019.07.04 14:11:31.890 multiwebclient (GBPUSD,M5) 131797648225084729 の結果コード: 4002, now idle

2019.07.04 14:11:31.890 multiweb (GBPUSD,M5) 131797648225084729: コード 4002 で失敗しました。


Resourceの日付を上記のコメントにあったように置き換えたが、状況は変わっていない。

原則的には自分で繰り返して動作を確認すればいいのですが......。

再現できませんでした。ビルド2093で実行したログです:

2019.07.06 23:13:31.313 multiweb (EURUSD,H1)    OnInit 132069173221452536
2019.07.06 23:13:31.313 multiweb (EURUSD,H1)    WebRequest Pool Manager started in 132069173221452536
2019.07.06 23:13:32.810 multiweb (EURUSD,H1)    OnInit 132069176123428674
2019.07.06 23:13:32.810 multiweb (EURUSD,H1)    WebRequest Worker started in 132069176123428674; manager in 132069173221452536
2019.07.06 23:13:32.998 multiweb (EURUSD,H1)    OnInit 132069176125768678
2019.07.06 23:13:32.998 multiweb (EURUSD,H1)    WebRequest Worker started in 132069176125768678; manager in 132069173221452536
2019.07.06 23:13:33.169 multiweb (EURUSD,H1)    OnInit 132069176127796682
2019.07.06 23:13:33.169 multiweb (EURUSD,H1)    WebRequest Worker started in 132069176127796682; manager in 132069173221452536
2019.07.06 23:14:36.159 multiwebclient (GBPJPY,H1)      > > > Standard WebRequest 3 calls finished in 874 ms
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    Pool manager transfers \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_1_132069176509557415
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176123428674: Reading request \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_1_132069176509557415
2019.07.06 23:14:36.159 multiwebclient (GBPJPY,H1)      Accepted: \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_1_132069176509557415 after 0 retries
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    Pool manager transfers \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_2_132069176509557415
2019.07.06 23:14:36.159 multiwebclient (GBPJPY,H1)      Accepted: \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_2_132069176509557415 after 0 retries
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176125768678: Reading request \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_2_132069176509557415
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176123428674: Got 64 bytes in request
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176123428674: GET https://User-Agent: n/a 5000 
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176125768678: Got 60 bytes in request
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176125768678: GET https://User-Agent: n/a 5000 
2019.07.06 23:14:36.174 multiweb (EURUSD,H1)    Pool manager transfers \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_3_132069176509557415
2019.07.06 23:14:36.174 multiwebclient (GBPJPY,H1)      Accepted: \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_3_132069176509557415 after 0 retries
2019.07.06 23:14:36.174 multiweb (EURUSD,H1)    132069176127796682: Reading request \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_3_132069176509557415
2019.07.06 23:14:36.174 multiweb (EURUSD,H1)    132069176127796682: Got 72 bytes in request
2019.07.06 23:14:36.174 multiweb (EURUSD,H1)    132069176127796682: GET https://www.startpage.com/ User-Agent: n/a 5000 
2019.07.06 23:14:36.283 multiwebclient (GBPJPY,H1)      132069176509557415: Result code 200
2019.07.06 23:14:36.283 multiwebclient (GBPJPY,H1)      132069176509557415: Reading result \Experts\multiweb.ex5::WRR_132069176125768678
2019.07.06 23:14:36.283 multiweb (EURUSD,H1)    132069176125768678: Done in 125 ms
2019.07.06 23:14:36.283 multiweb (EURUSD,H1)    Result code from 132069176125768678: 200, now idle
2019.07.06 23:14:36.283 multiwebclient (GBPJPY,H1)      132069176509557415: Got 17664 bytes in response
2019.07.06 23:14:36.283 multiwebclient (GBPJPY,H1)      GET https://ya.ru
2019.07.06 23:14:36.283 multiwebclient (GBPJPY,H1)      Received 4043 bytes in header, 13540 bytes in document
2019.07.06 23:14:36.439 multiwebclient (GBPJPY,H1)      132069176509557415: Result code 200
2019.07.06 23:14:36.439 multiwebclient (GBPJPY,H1)      132069176509557415: Reading result \Experts\multiweb.ex5::WRR_132069176123428674
2019.07.06 23:14:36.439 multiweb (EURUSD,H1)    Result code from 132069176123428674: 200, now idle
2019.07.06 23:14:36.439 multiweb (EURUSD,H1)    132069176123428674: Done in 281 ms
2019.07.06 23:14:36.439 multiwebclient (GBPJPY,H1)      132069176509557415: Got 12744 bytes in response
2019.07.06 23:14:36.439 multiwebclient (GBPJPY,H1)      GET https://google.com/.
2019.07.06 23:14:36.439 multiwebclient (GBPJPY,H1)      Received 736 bytes in header, 11927 bytes in document
2019.07.06 23:14:36.455 multiwebclient (GBPJPY,H1)      132069176509557415: Result code 200
2019.07.06 23:14:36.455 multiwebclient (GBPJPY,H1)      132069176509557415: Reading result \Experts\multiweb.ex5::WRR_132069176127796682
2019.07.06 23:14:36.455 multiweb (EURUSD,H1)    Result code from 132069176127796682: 200, now idle
2019.07.06 23:14:36.455 multiweb (EURUSD,H1)    132069176127796682: Done in 280 ms
2019.07.06 23:14:36.471 multiwebclient (GBPJPY,H1)      132069176509557415: Got 32520 bytes in response
2019.07.06 23:14:36.471 multiwebclient (GBPJPY,H1)      GET https://www.startpage.com/
2019.07.06 23:14:36.471 multiwebclient (GBPJPY,H1)      Received 956 bytes in header, 31482 bytes in document
2019.07.06 23:14:36.471 multiwebclient (GBPJPY,H1)      > > > Async WebRequest workers [3] finished 3 tasks in 312 ms

設定やシステムに問題がないか確認してください。

 

デフォルトの設定では、スクリプトが 動作しないことを確認しました - 同じ"WebRequest error code 4002..." が表示されます。


メタトレーダー5

バージョン: 5.00 ビルド 2093

02 Jul 2019


===ここをクリックしてください。

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) Accepted: aQuotesTerminalD0E8209F77CF37AD8BF550E51FF075MQL5Expertsmultiwebclient.ex5::USDJPY_PERIOD_H1_2_128968169154443359 after 0 retries

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) WebRequest エラーコード 4002

===ここをカット====


Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для совершения торговых операций на рынках, а вторые — для анализа котировок и выявления закономерностей в их изменении. При этом индикаторы могут использоваться непосредственно в роботах, образуя полноценную...
 
Igor K:

デフォルトの設定では、スクリプトが 動作しないことを確認しました - 同じ"WebRequest error code 4002" が表示されます.. .。


メタトレーダー5

バージョン: 5.00 ビルド 2093

02 Jul 2019


===ここからカット

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) Accepted: aQuotesTerminalD0E8209F77CF37AD8BF550E51FF075MQL5Expertsmultiwebclient.ex5::USDJPY_PERIOD_H1_2_12896816915443359 after 0 retries

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) WebRequest エラーコード 4002

===ここをカット====


OSのバージョン、アンチウイルスなど詳細を書いてください。私はWin 7で、MT5 build 2093は上記のように問題なく動作しています。

基本的に、エラーは「内部コール」に関連しているため、質問はMQに対するものですが、私はヘルプを信じていません - サポートは終了しています。

記事のソースコードはオープンソースなので、エラーが再現するマシンで問題を解決してみてください。