記事"DIY マルチスレッド非同期 MQL5 WebRequest"についてのディスカッション - ページ 3 1234567 新しいコメント Реter Konow 2018.11.12 12:14 #21 Stanislav Korotky:WebRequestはインジケーターでは動作しません(このライブラリを使用すると、この制限を回避できます)。MTの別スレッドはエキスパートとスクリプトだけに割り当てられていますが、スクリプトはイベントと連動しません。なるほど、ありがとう。知りませんでした。 fxsaber 2018.11.12 15:44 #22 Stanislav Korotky:MT4 1146では、リソースは完全に機能しています。このアイデアは第4バージョンに安全に移植できる。 Stanislav Korotky 2018.11.14 00:23 #23 fxsaber:そうです。しかし、それはMT5でのみ機能します。私はこのアイデアを実装しました(チャートオブジェクトを使って)。 iCustom-indicatorを マネージャーとして使えば、WebRequestAsyncごとにスクリプトでWebRequestを起動します。 ウィンドウが追加されないので、デザインはよりシンプルで信頼性が高くなるはずです。結果は以下のようになった。 スクリプトが動作しないのは、起動時にパラメータを渡すことができないからです。スクリプトはチャート・テンプレートとまったく相性が悪いようです。Expert.mqhライブラリの助けを借りて(パラメータなしだが)、Expert Advisorになぞらえれば、なんとか実行できる。 スクリプトではなくExpert Advisorでウェブリクエストを実行する場合、このスキームは中途半端に機能する。つまり、入力パラメータは正常に機能し、データ付きのリソース名をExpert Advisorに渡すことができる。しかし、なぜかチャートオブジェクトで起動したExpert AdvisorではOnInitイベントだけがトリガーされ、例えばOnTickやOnTimerはトリガーされない。OnInitでWebリクエストを実行するのはあまり良いことではありませんが、可能です。しかし、リクエストごとにチャート・オブジェクトを開くと 多くのオーバーヘッドが発生するため、このロジックはすべて処理速度をひどく低下させます。 fxsaber 2018.11.14 02:10 #24 Stanislav Korotky:このアイデアを実装した(チャート・オブジェクトを使って)。結果は以下の通りである。 スクリプトを起動する際にパラメータを渡すことができないため、スクリプトが動作しない - スクリプトはチャート・テンプレートとまったく相性が悪いようだ。Expert.mqhライブラリを使えば、Expert Advisorになぞらえて、(パラメータなしで)スクリプトを起動することができる。 私はこのトピックを勉強しなければならなかった。スクリプトはテンプレートと通常のチャート上で実行されるが、入力パラメーターを設定 する機能はない。ですから、PlaySoundメソッドは間違いなく機能します。 ウェブクエリーをスクリプトではなく、Expert Advisorsで実行すると、この方式は中途半端に機能する。つまり、入力パラメーターは正常に機能し、データ付きのリソース名をExpert Advisorに渡すことができる。しかし、なぜかチャートオブジェクトで起動したExpert AdvisorではOnInitイベントだけがトリガーされ、例えばOnTickやOnTimerはトリガーされない。OnInitでWebリクエストを実行するのはあまり良いことではありませんが、可能です。しかし、リクエストごとにチャート・オブジェクトを開くと オーバーヘッドが多くなるため、このロジックはすべてひどく遅くなる。私には何も効果がない。 Stanislav Korotky 2018.11.14 10:46 #25 fxsaber:私はこのトピックを勉強しなければならなかった。スクリプトはテンプレートと通常のチャートで実行されるが、入力パラメーターを設定する機能はない。ですから、PlaySoundメソッドは間違いなく機能します。私には何も機能していません。プライベート・メッセージで送った セットはExpert AdvisorのOnInitで動作します。それはログから見ることができる。ログを送ってください。 Stanislav Korotky 2018.11.14 14:20 #26 チャート・オブジェクトの助けを借りて、エキスパート・ヘルパーを持つテンプレートを適用した、ウェブ・リクエストの別の起動方法を掲載します。これは、エキスパートとインジケータの両方から使用できます。依存関係は記事と同じです。アプローチ実装の直接新しいファイル: 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 ファイル: multiwebobject.zip 15 kb fxsaber 2018.12.09 00:52 #27 Stanislav Korotky:更新されたResource_Data.mqhを試してみてください。ウェブページを転送する際の遅延がなくなるはずです。 #include <fxsaber\TradeTransactions\ResourceData.mqh> //https://www.mql5.com/ja/code/22166 #define BENCH(A) \ { \ const ulong StartTime = GetMicrosecondCount(); \ A; \ Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \ } const RESOURCEDATA<uchar> Resource("::" + __FILE__); // データ転送用リソース(バイト) uchar BytesIn[]; const int Init = ArrayResize(BytesIn, 1000000); void TestResource() { uchar BytesOut[]; Resource = BytesIn; Print(Resource.Get(BytesOut)); } void OnStart() { BENCH(TestResource()); } 旧バージョン 1000000 Time[TestResource()] = 103746 新バージョン 1000000 Time[TestResource()] = 5222 Stanislav Korotky 2018.12.10 10:09 #28 fxsaber:更新されたResource_Data.mqhを試してみてください。ウェブページを転送する際の遅延がなくなるはずです。古いバージョン新バージョン20倍のスピードアップのために何をしたのですか?古いコードとの互換性は維持され、クライアント・コールを変更する必要はない? fxsaber 2018.12.10 10:24 #29 Stanislav Korotky:20倍のスピードアップのために何をしなければならなかったのか?古いコードとの互換性は維持され、クライアント・コールを変更する必要はない?互換性は残っています。 取引、自動取引システム、取引戦略のテストに関するフォーラム。 ライブラリ: TradeTransactions fxsaber, 2018.12.09 01:23 pm. ライブラリソースには、ある型の配列を別の型の配列に素早く変換 するConvert.mqhが あります。TypeToBytesは大きな配列では遅かった(現在はどちらの配列型も他方の倍数でない場合にのみ使用される)。 TypeToBytesはuchar[]には使用されない。 Mohammad Hossein Sadeghi 2019.01.10 21:27 #30 いい記事だね。WinINetの非同期モードはどうですか? 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
WebRequestはインジケーターでは動作しません(このライブラリを使用すると、この制限を回避できます)。MTの別スレッドはエキスパートとスクリプトだけに割り当てられていますが、スクリプトはイベントと連動しません。
なるほど、ありがとう。知りませんでした。
MT4 1146では、リソースは完全に機能しています。このアイデアは第4バージョンに安全に移植できる。
そうです。しかし、それはMT5でのみ機能します。
私はこのアイデアを実装しました(チャートオブジェクトを使って)。
iCustom-indicatorを マネージャーとして使えば、WebRequestAsyncごとにスクリプトでWebRequestを起動します。
ウィンドウが追加されないので、デザインはよりシンプルで信頼性が高くなるはずです。
結果は以下のようになった。
スクリプトが動作しないのは、起動時にパラメータを渡すことができないからです。スクリプトはチャート・テンプレートとまったく相性が悪いようです。Expert.mqhライブラリの助けを借りて(パラメータなしだが)、Expert Advisorになぞらえれば、なんとか実行できる。
スクリプトではなくExpert Advisorでウェブリクエストを実行する場合、このスキームは中途半端に機能する。つまり、入力パラメータは正常に機能し、データ付きのリソース名をExpert Advisorに渡すことができる。しかし、なぜかチャートオブジェクトで起動したExpert AdvisorではOnInitイベントだけがトリガーされ、例えばOnTickやOnTimerはトリガーされない。OnInitでWebリクエストを実行するのはあまり良いことではありませんが、可能です。しかし、リクエストごとにチャート・オブジェクトを開くと 多くのオーバーヘッドが発生するため、このロジックはすべて処理速度をひどく低下させます。
このアイデアを実装した(チャート・オブジェクトを使って)。
結果は以下の通りである。
スクリプトを起動する際にパラメータを渡すことができないため、スクリプトが動作しない - スクリプトはチャート・テンプレートとまったく相性が悪いようだ。Expert.mqhライブラリを使えば、Expert Advisorになぞらえて、(パラメータなしで)スクリプトを起動することができる。
私はこのトピックを勉強しなければならなかった。スクリプトはテンプレートと通常のチャート上で実行されるが、入力パラメーターを設定 する機能はない。ですから、PlaySoundメソッドは間違いなく機能します。
ウェブクエリーをスクリプトではなく、Expert Advisorsで実行すると、この方式は中途半端に機能する。つまり、入力パラメーターは正常に機能し、データ付きのリソース名をExpert Advisorに渡すことができる。しかし、なぜかチャートオブジェクトで起動したExpert AdvisorではOnInitイベントだけがトリガーされ、例えばOnTickやOnTimerはトリガーされない。OnInitでWebリクエストを実行するのはあまり良いことではありませんが、可能です。しかし、リクエストごとにチャート・オブジェクトを開くと オーバーヘッドが多くなるため、このロジックはすべてひどく遅くなる。
私には何も効果がない。
私はこのトピックを勉強しなければならなかった。スクリプトはテンプレートと通常のチャートで実行されるが、入力パラメーターを設定する機能はない。ですから、PlaySoundメソッドは間違いなく機能します。
私には何も機能していません。
プライベート・メッセージで送った セットはExpert AdvisorのOnInitで動作します。それはログから見ることができる。ログを送ってください。
チャート・オブジェクトの助けを借りて、エキスパート・ヘルパーを持つテンプレートを適用した、ウェブ・リクエストの別の起動方法を掲載します。これは、エキスパートとインジケータの両方から使用できます。依存関係は記事と同じです。アプローチ実装の直接新しいファイル:
クエリーごとにオブジェクトが作成され、その中にエキスパート・ヘルパーが作成され、クエリーが終了するとオブジェクトは削除される。クエリのデータと結果は、記事のようにリソースを介して交換される。
ログから判断すると、オブジェクトはおそらく共通のイベントキューを共有しているため、このメカニズムではクエリ実行の本格的な並列性は得られません。ログの例
更新されたResource_Data.mqhを試してみてください。ウェブページを転送する際の遅延がなくなるはずです。
旧バージョン
新バージョン
更新されたResource_Data.mqhを試してみてください。ウェブページを転送する際の遅延がなくなるはずです。
古いバージョン
新バージョン
20倍のスピードアップのために何をしたのですか?古いコードとの互換性は維持され、クライアント・コールを変更する必要はない?
20倍のスピードアップのために何をしなければならなかったのか?古いコードとの互換性は維持され、クライアント・コールを変更する必要はない?
互換性は残っています。
取引、自動取引システム、取引戦略のテストに関するフォーラム。
ライブラリ: TradeTransactions
fxsaber, 2018.12.09 01:23 pm.
ライブラリソースには、ある型の配列を別の型の配列に素早く変換 するConvert.mqhが あります。
TypeToBytesは大きな配列では遅かった(現在はどちらの配列型も他方の倍数でない場合にのみ使用される)。
TypeToBytesはuchar[]には使用されない。