x64プラットフォーム用の新しいMQL5コンパイラーをテスト - 2~10倍計算が速い! - ページ 14

 

今日は超高速を期待してExpert Advisorの計算の高速化を試したかったのですが(CPUも高速のものを使用)、、、。最適化されたExpert Advisorは、なぜかテスターでは3倍も動作が遅くなっていました。あなたにはなかったことですか?ローカライズして問題が再現され次第、コードを掲載します。そこにはシステムコールはなく、配列の束を使った操作と基本的な算術演算のみ です。

また、いくつかの要望を紹介します。

1.デバッグせずにエディタからスクリプトを起動する、つまりナビゲータから実行したかのように起動できる機能を追加する可能性があります。このような起動は、どのような開発環境にも存在します。sysのようにCtrl + F5を提案しようと思ったのですが、この組み合わせはすでにあなたに取られています :)

2.スクリプトからwindのコンソールstdoutを呼び出すようにし、スクリプトの結果を見るためにいちいちターミナルに切り替えないようにしました。もっとも、私の理解では、WinAPIを使って呼び出してみることも可能ですが。

3.少なくとも遺伝的最適化の設定を追加する。例えば、組み合わせの数が1e35になることがあり、10kパスでは必ずしも十分ではなく(オプティマイザは10kを超えると新しいパスを生成しない)、20~30kで十分だと理解していても、それをチューニングすることはできません。逆に、あるパラメータを固定し、あるパラメータを残してより細かい調整をしたり、分布を調べたりすると......。そのため、組み合わせの数が50kと少ない場合、GA用のオプティマイザは2k回しか実行できず、これもこの特定のタスクには十分ではありませんが、これらのパラメータに対する関数の挙動をよりよく調べることができます。つまり、50kをすべて調べるのは愚かであり、一方、GAは2kのランしか生成せず、十分な画像を得ることができないのです。私の言っていることを理解してほしい。

 
Renat Fatkhullin:

改良はこれからです。

ストラテジーテスターで 履歴のデバッグをすでにテストされた方はいらっしゃいますか?

多くの人がテストしたいと思うと思いますが、通常はコードを書いてトレードするつもりのところでテストするのが難点であり現実です。MT5を提供しているブローカーが非常に少ないため、トレーダーによるすべての新機能のテストが遅くなり、必然的にMT5の開発速度が遅くなります。だから、この問題を解決し、MT5を使うモチベーションを上げるような、自明でない解決策を探すのは意味があるのかもしれません。
 
Renat Fatkhullin:

改良はこれからです。

ストラテジーテスターで 履歴のデバッグをすでにテストされた方はいらっしゃいますか?

何か間違っているような気がする。私のビジュアライザーはシンプルに開き、いつも通り動作します。ブレークポイントはOnInit()の最初のステートメントで合っています - しかし、それは動作しません。
 
Renat Fatkhullin:

改良はこれからです。

ストラテジーテスターで 履歴のデバッグを既にテストされた方はいらっしゃいますか?

また、コンテキストメニューから「用途の検索」を選択できるようになると良いと思います。

ちょっと話がそれますが、私は変更を書く必要はないのですが、こういうのがあると開発者としては嬉しいですね。

新コンパイラでMoving Average、MACD Sampleを確認しましたが、特に違いは見当たりません。私のEAで試してみます。

 

完全にデバッグしてバグを発見したわけではありませんが(やり方が全く違う)、今のところOptimize=1では以下のような問題があることがわかりました。早速ですが、私のExpert Advisorには約100の入力パラメータがあり、配列を使って多く動作します。また、取引は行わず、計算のみを行う。

私の行動の順番を説明します。

1.ターミナルを立ち上げ、テスターで「最適化=無効」を選択し、入力パラメータのマスターセットを与えています。テスターは正しい結果を出します。

2.最適化 = 高速 (遺伝的アルゴリズム)」を選択して起動すると、テスターは最初のステップを生成することすらできません。代理店(プロセッサー)が反応しない。最初はパラメータ設定に問題があり、計算ミスでテスターが死んでしまったのかと思いました。

3.再び「最適化 = 無効」を選択し、再びリファレンスセットを与える。現在、テスターは全く結果を表示しない。

4.EAコードをエディターで開き、F5キーを押して最適化されていないコードを生成する。テスターで、再びリファレンスセットで実行すると、ほら、結果が出ました。さて、最適化によりExpert Advisor内部で何か不具合が発生しているようです。

Expert Advisorの入力パラメータを ファイルにログ出力する機能を追加しました。そのため、ステップ2(最適化が実行され、テスターのステップはほとんど生成されない)で、パラメータが変更不可能か設定範囲外のため、全く提供されないいくつかのパラメータについてランダムな値がポップアップしていました。例えば、あるパラメータを80に設定したところ、不変になりました。ログでは0.01355835795402527に設定されていた(?)もう一方は0に設定され、4.940656458412465e-324と記録された。どちらのパラメータもダブルである。しかし、intにも全く不適切な値があることを知りました。

次に、Expert Advisorの「不要な」コードをカットして、同じくエラーが発生するコードだけを残しました。それでも割と多くなってしまった。さらにロギング機能では、すべてのパラメータの値が出力されていました。しかし、パラメータのほとんどを削除しても(64や80以下になった)、テスターは死なない。とはいえ、このエラーと私のロギング機能との間に奇妙な関連性も見いだされました。コメントアウトされると(つまり、すべてのパラメータがコード内で使用されないと)、テスターは死にます。ログを取ると、テスターが死ぬ。とても不思議です。

そして3つ目。計算を並列化しても、全体の実行速度が直線的に 向上するわけではないことに気づきました。例えば、同じコードのスクリプトとExpert Advisorのファイルを添付しています。これは私のExpert Advisorから切り出した実際のコードですが、配列の名前が変更されています。Optimize=1の場合、私のスクリプトは156ミリ秒、つまり1秒間に6回ほど実行されます。(Optimizeを使用しない場合は、3倍の時間がかかります)。私は8スレッドを持っているので、理論的には1秒間に48回の実行が可能です。テスターでExpert Advisorを実行したところ(Slow Optimizeを実行、ダミーパラメータを有効にして、例えば2000回実行)、1秒間に4回強しか実行できず、つまりシングルコアよりさらに遅くなりました。正直なところ、タスクマネージャーには8つのプロセスがぶら下がっていたけれど。なぜそうなのでしょうか。複数のプロセスがメモリへのアクセスをブロックしている?配列の初期化が長い?(確かに、そこでは配列は大きくない)。

テスターで1つのテストを実行すると、Print: 156ms。つまり、Expert Advisorではすべてが正常であるように見えるのです。

ところで、MQLにポインターが登場することはあるのでしょうか?:)アレイコピーをしてしまったからです。

ファイル:
 
xfo:

テスターでは、なぜか最適化を行ったエキスパートが3倍も遅く動作しました。

1つのエージェント(ランダム)だけが動作し、他のエージェントは失敗するため、常に数秒に1回の割合で試行されます。テスターログからは何もわかりません。私の理解では、もし最新のエージェントも失敗したら、先に書いたように、テスターのステップが全く生成されないということが起こります。

Build 1117では、上記の問題(構造体配列も含む)がすべて解決されたわけではありません。

 

本日1117に更新しましたが、過去データでのデバッグ-まだ進みません。

ExpertMACD.mt5を取り出し、Init関数に入るところでブレークポイントを置き、履歴データでデバッグを開始(ボタンを押す)、エディタウィンドウが閉じ、ストラテジーテスター設定が 開かれます。期間(2015年の場合、日数、全目盛)を設定し、可視化-チェックボックスをオンにし、スタートボタンを押すと可視化が開始されます。ブレークポイントが機能しなかった。

私は何を間違えているのでしょうか?

 
George Merts:

本日1117に更新しましたが、過去データでのデバッグは-まだ進みません。

ExpertMACD.mt5を 使い、Init関数の入り口にブレークポイントを置き、履歴データでデバッグを開始(ボタンを押す)、エディタウィンドウが閉じ、ストラテジーテスターの設定が 開く。期間を設定し(2015年の場合、日記、全ての刻み)、可視化-チェックボックスをオンにし、スタートボタンを押すと、可視化が始まります。ブレークポイントが機能しなかった。

私は何を間違えているのでしょうか?

MetaQuotes-Demoで デモ口座を開設する必要があるのですが、その場合

moexデモ口座のMACD Sample.mq5でUSDRUB_TOMのシンボルが動作せず(最初に始まり、数ステップで停止)、簡単なバックテストも動作しません。

しかし、デモ口座moex USDRUB_TOMのMoving Average.mq5は問題なく動作します(簡易バックテストも同様です)。

デモ口座ではEURUSDのシンボルが正常に動作しています(簡易バックテストも同様)MACD Sample.mq5とMoving Average.mq5

MACD Sample.mq5 EURUSD symbol on demoforex accountのデバッグビデオを録画しました。(毎日でも問題なし)

ファイル:
capture-mt5-1.zip  5457 kb
 
xfo:

完全にデバッグしてバグを発見したわけではありませんが(やり方が全く違う)、今のところOptimize=1では以下のような問題があることがわかりました。早速ですが、私のExpert Advisorには約100の入力パラメータがあり、配列を使って多く動作します。さらに、取引は行わず、計算だけを行う。

ところで、MQLにポインターが登場することはあるのでしょうか?:)アレイコピーをしてしまったからです。

こんにちは、もう少し具体的に説明したいと思います。

1.Expert Advisorは計算を行ったが、取引は行っていない。Expert Advisorは何を、どのように表示するのですか?ストラテジーテスターで Expert Advisorを実行する場合、どのようなことを期待しますか?最適化を伴うテストでは、どのようなデータが得られるとお考えですか?添付のExpert Advisorのテストでは、エラーは見つかっていません。あなたの言うエラーはそれに関係するものですか?

2. ステップバイステップで、あなたが行うこと、あなたが期待すること、あなたが使用するコードを添付してください。

3.最適化した場合としない場合のテストログを添付してもらえますか?

4.お使いの端末のバージョン、OSは?

 

Eduard Vavrin さん、添付のファイルは、説明したエラーとは関係ありません。エラーになるコードを用意して送ってみます。ただ、時間がかかりますし、今のところこのコードにはExpert Advisorのソースが多く含まれています。

添付したファイルについて:添付したEAを1回実行するのに156ms、つまり1/6秒かかると書いてありました。8スレッドで1秒間に48 回の実行を想定しています。実際には、8スレッドで複数回実行(そのためのダミーパラメータであるSlow Optimization modeがある)しても、1秒間に4~5回 しか実行できないスピードです。問題は、「なぜ速度が落ちているのか?Agents タブでは、すべてのスレッドが実行されており、各スレッドが実行に 1 秒以上費やしていることが確認できます。Expert Advisorが返すrand()は、動作したことを確認するためのティックに過ぎません。