MT5(MetaTrader 5)の基本

2021/07/16

やっし〜です♪

MetaTraderを使ったことありますか?

自前でシステムトレードをやろうとすると必須になってくるソフトになるのですが、Version 4のMT4 と version 5 のMT5があります。

MT4とMT5では互換性がなく、MT4の方がいまだにシェアが大きく、対応しているFX業者もMT4の方が多いです。

MetaTraderでは自動売買のプログラムをEA(Expert Advisor)というのですが、EAもMT4で書かれたものが多いのも、MT5が普及しない要因なのかと思います。

一番肝心となる取引関数(Order〜)からしてMT4とMT5では使い方が違うので、MT4で書いたプログラムはコピペでMT5では動きません。

MT4は開発が終了しているので、セキュリティーやバグといった観点からもあまり使いたくなかったのと、どうせ一から勉強しても時間がかかるだろうし、実際に取引することになるのもずっと先だろう(日本国内ではMT5に対応した業者がない)ということで、MT5から勉強しました。

当面はバックテストなどでシミュレーションとして使うことがメインになるというのもMT5から始めた理由です。

取引関数

EA(Expert Advisor)を書くにあたって、一番大事な部分はなんといっても取引関数です。

この関数をまず理解しないことには、まず注文ができないので、当然ポジションを作ることができません。

でも、この関数さえ分かれば、後はどうにでもなると思います。

注文さえ通せる仕組みが分かれば、あとはその注文をいつ、どれだけ行うかという処理を書くだけですので。

実際に私はMT5の使い方と取引関数の学習に時間がかかってしまいましたが、実際にポジションが出来ると、なんか達成感もあり、そこからプログラムをいろいろかけるようになりました。

例えば、トラリピ系のプログラムを書くなら、100円から105円まで0.5円刻みに取引関数を実行するといった内容になってくるでしょうし、なにかオシレータ系の値で注文を入れるプログラムなら80以下なら売り注文、30以上なら買い注文といった具合に、プログラム自体は意外とそんなに複雑にならないはずです。

いろいろ自動取引したいと思って始めたのに、全然ポジションが出来なければ、そこで挫折してしまいますよね。

なので、まずは OrderSend 関数を動かすことだけを第一歩にすると良いと思います。

取引関数はOrderSendという関数で、OrderSend(取引内容、実行結果)という感じで実行します。

注文内容を MqlTradeRequest という構造体に入れて実行すると、実行結果が MqlTradeResult という構造体で返されます。

要は MqlTradeRequest 構造体に取引の種類を指定して実行します。

買いなのか売りなのかとか、成行なのか指値なのかとか、ロット数とかを指定していくわけです。

一般的に注文する内容と変わらないです。

ただこのOrderSendという関数は必ず使う関数ですし、何回も使いますし、EAを作るたびにコピペするか、もしくはヘッダファイルやライブラリといった形で同一のものを参照といった形で使うことになるので、わかりやすく、使いやすく、くしておくと良いと思います。

OrderSend関数の使い方

取引に関わる注文はすべてOrderSend関数に集約されているのですが、やはり一般的によく使うのは成行注文と指値(逆指値)注文だと思います。

まずはこの2つの注文に対応できるようにしましょう。

まず、OrderSend関数を直接使わなくても簡単に使えるようにラップ関数にしてしまいましょう。

ここでは MyOrderSend 関数としました。名前は好きな名前で良いです。

int MyOrderSend() {
    MqlTradeRequest request= {0}; // 初期化
    MqlTradeResult  result= {0}; // 初期化

    // リクエストの送信
    if( !OrderSend(request, result) ) {
        // リクエストの送信が失敗した場合、エラーコードを出力する
        Print( StringFormat("OrderSend error %d",GetLastError() ) );
    }
}

このままでは動きませんが、これをベースに作っていきます。

リクエスト内容の変数と結果用の変数をセットして、OrderSendを実行するという内容になります。

MT5

Posted by やっし〜