MT5でプログラミングを初めて行う人が、「MT5 プログラミング」と検索すると、メタクオーツ社のMT5ブログに辿り着くかと思います。
第二回のページに、ごくごく簡単な書い注文・売り注文のサンプルコードが載っています。
第二回 プログラムで取引をしよう!:https://metaquotes.co.jp/2019/03/25/blog02/
しかし、これをコピペしてもこのままでは動きません!後学のために問題が出てきた点や変えるべき箇所を記します。
問題が出てきた箇所
私が実際にハマった点を記していきます。
MT5上で実行しようとしてもファイルが見つからない
コンパイルを忘れていませんか?MetaEditor上でコンパイルしましょう。
それでも出てこない場合、ファイルが変な場所に入ってしまっている可能性があります。
EXPERT_MAGICが定義されていない
EXPERT_MAGICには適当な一意の番号が入っている想定ですが、この値は定義されていないため、このままだとコンパイルエラーになります。とりあえず適当な数字(例:12345)に置き換えればコンパイルエラーは無くなります。
wrong type, loading of faildエラーが発生する
ストラテジーテスターテスターで実行すると”wrong type, loading of <ファイル名> failed”というエラーが出ることがあります。
この場合、エキスパートアドバイザとしてファイルを作成しているかと思いますが、エキスパートアドバイザのコードにはOnStartイベントを入れることができないため、このエラーが発生しています。
コードを、エキスパートアドバイザとしてではなく、スクリプトとして作成してください(MT5のナビゲータペイン上で、スクリプトの中に入るようにする)。スクリプトとして実行すると、このエラーは発生しないはずです。
Unsupportd filling typeエラーが発生する
このエラーが出た場合、request変数のtype_fillingが設定されていない or 不適切かと思います。
OANDA FXを使用している場合は、OrderSend関数を呼ぶ前にtype_fillingにORDER_FILLING_IOCをセットしましょう(恐らく、他のFX業者も同じ)。
正常終了したが注文が出されていない
MT5のツールバーにある「自動売買」がOFFになっていると実際の注文は行われません。これをONにして実行すると注文が出されると思います。
なお、そのまま注文が成立してしまうと当然ながら損益が動くので、デバッグ中やテスト中は「自動売買」をOFFにしておきましょう。また、実際の自動売買を行う場合も、慣れるまでは注文量(volume)を小さくしておき、なおかつマーケットが荒れているときもの自動売買は避ける方が無難です。
終わりに
一儲けしようとFXを始める人は結構居ると思いますが、多くの人はFX業者が提供するWeb画面やスマホアプリを使っており、メタクオーツ社のツール(MT4/MT5)を使っている人は多くないと思います。その中でも、MetaQuotes Language (MQL)で自動化を実際に行う人は少なく、さらにMQL4ではなくMQL5を扱った日本語の情報は限られています。
初見だと謎のエラーに悩まされますが、MT5はなかなか面白いプラットフォームだというのが率直な印象です。学習していきましょう。