ビジュアルモードのバックテストが速過ぎる時の対処法(2)

アイキャッチ

ポジション数が増減した時だけ一時停止させる

ビジュアルモードのバックテストが速過ぎる時の対処法で、ビジュアルモードでのバックテストのスピードが速すぎる場合のスピードダウンテクニックをお伝えしました。

今回は、さらに一歩進めて、ポジション数が増減した時だけバックテストを一時停止させる関数をお伝えしようと思います。

ネタ元はfaiさんの記事です。

VisualMode でのバックテスト中に、日付が変わる度に一時停止させる。

手前味噌で恐縮ですが、結構便利な関数だと思いますので、良かったらお使いください。

PostMessageA()とMessageBoxW()はWindows APIです。MT4の標準関数ではないので、要注意です。PostMessageA()でPauseキーを押す操作を、MessageBoxW()でダイアログ表示を実現しています。

faiさんの記事でも書かれていますが、MT4標準のMessageBox()はバックテストでは無視されてしまうため、Windows APIを使う必要があります。

if(r == 1)は、ダイアログのOKボタンが押されたら、Pauseキーが再度自動的に押されてバックテストが再開するための条件式です。ダイアログが表示されて、Enterキーを押したら、またバックテストが動き出すといった挙動になります。

faiさんの記事ではMessageBoxA()が使われていますが、MessageBoxA()では文字列の引数が正しくやり取りされないため、MessageBoxW()を使っています。MT4内部の文字コードがUTF-8に変わったことによる影響と思われます。

最初のif(aOpenOrderNumber != aPrvOpenOrderNumber)で、どういう時にバックテストを一時停止するかを判断しています。今回はポジション数の変動をトリガーにしていますが、待機注文を含めた注文数の変動で停止させるといった使い方も可能です。

本関数を使うにあたって注意事項が2点あります。1点は、Windows APIを使えるようにするために、EAの冒頭に#include を記述することです。もう1点は、この関数を呼び出す側で、if(IsVisualMode())により呼び出しを制御することです。IsVisualMode()の条件式を関数内部に持ってきても構いません。その辺はお好みです。

サンプルEA

全体像が分かるように、要所だけ記載したEAを載せておきます。

スポンサードリンク

ブログランキングに参加中!

ポチっとクリック頂けると励みになります♪
(クリックしてもランキング一覧が表示されるだけですが、それでOKです)

にほんブログ村 為替ブログ FX システムトレード派へ

5件のコメント

  • non

    最高に素晴らしい知識をご教示いただき、感謝します。
    今EAを自作しておりライブラリを利用させていただいております。

    質問のですが、
    ストラテジーテスターのヴィジュアルモードでEAを動かすと、
    pauseExecEAメソッドにて、以下のエラーが出てしまいます。
    Cannot call ‘user32.dll::MessageBoxW’, DLL is not allowed
    DLLを許可しようにも、ストラテジーテスターなので、DLLを許可するという設定もできませんし、どのようにすれば良いのでしょうか?

    • りゅーき

      お役に立っているようで光栄です。

      さて、ご質問の件ですが、MT4のメニューから、[ツール]-[オプション]-[エキスパートアドバイザ]タブを開き、「DLLの使用を許可する」にチェックを入れてみてください。

      これでエラーは解消するはずです。

      • non

        りゅーきさん
        (゚Д゚;)すみません、
        ストラテジーテスターばかりに目が行って
        ツールのオプションを失念して盲目になっていました。

        EAを作り始めたばかりで手探り状態ですが
        やっと4年テストでプラスのものができ始めたところです。
        ここから本番用には安全性を高めていけるようにいろいろと
        苦心しているところです。

        またいろいろ面白い話が読めることを楽しみにしています^^
        ありがとうございました!

        • りゅーき

          私もまだ手探り状態ですよ。

          プラスになってきたというのは素晴らしいですね!
          安全性の高い勝てるEAが完成することを陰ながら応援しています。

          • non

            りゅーきさん
            ありがとうございます^^
            りゅーきさんのさらなるご発展を
            祈念してます^^

コメントを残す



one × 1 =