スポンサーリンク
ホーム » MQL5でEA作ろう講座 » 【超入門】MQL5 EA講座 第62回「実際に注文を出すコードを書いてみる」【EAの作り方】
a

【超入門】MQL5 EA講座 第62回「実際に注文を出すコードを書いてみる」【EAの作り方】

MQL5でEA作ろう講座
スポンサーリンク

-<PR>-

※【おススメのMT5MQL5対応のFX業者】

MQL5にて開発した、MT5EAを実運用するにあたり、

当サイトでは以下のFX業者をおススメいたします。

外為ファイネスト

EAの利用制限なし。スキャルピングもOK

外為ファイネストに関する記事はコチラ

アヴァトレードジャパン

自動売買界最狭スプレッド水準

アヴァトレードジャパンに関する記事はコチラ

フィリップ証券

フィリップ証券に関する記事はコチラ

———————————————–

前回MqlTradeResult構造体 について解説しました。

改めて前回の内容をおさらいをしておくと、

  • MqlTradeResult構造体は、トレードサーバーに送られた注文内容の結果がどうなったのかを受け取る役割を担っている。
  • MqlTradeResult構造体は注文が正しく行われたかどうかの確認と、正しく行われなかった場合の回路を組み込むために主に利用される。
  • メンバ変数 .retcode には注文の成功/失敗(失敗理由)が格納される。
  • メンバ変数 .retcode に格納されている値が、コード10008(TRADE_RETCODE_PLACED)と10009(TRADE_RETCODE_DONE)の場合は注文が成功。それ以外のコード値が格納されている場合、何らかの問題があったことを示す。

ということをお伝えしました。

さて、【中級・実際にEAを作ろう編】に突入してからの、直近5回の講座記事でEAから注文を出すための知識は身についたはずです。

今回は、今までの知識を使って、実際に注文を出す記述を、順を追って書いていきたいと思います。

スポンサーリンク

MqlTradeRequest構造体とMqlTradeResult構造体のインスタンスを宣言する。

今回は成行買い注文を入れるプログラムを記述していきます。

まず最初にやることは、MqlTradeRequest構造体MqlTradeResult構造体インスタンスを宣言することです。

void OnStart()

  {
      //MqlTradeRequest構造体とMqlTradeResult構造体のインスタンスを宣言
      MqlTradeRequest request={};
      MqlTradeResult result={};
      
  }

request と result というインスタンスが完成しました。

構造体の各メンバ初期値をまとめてゼロにリセットするには、インスタンスに空白の{}を代入するか、ZeroMemory関数を使います。この初期値リセットが行われていないと売買がされない可能性がありますので確実に記述しておくようにしましょう。

構造体メンバをまとめて初期化する手順、ZeroMemory関数などについては↓の記事で言及しておりますのでご参照ください。

これで、まずはOrderSend関数に渡す引数ができたことになります。

これをたたき台にして、MqlTradeRequest構造体インスタンスであるrequest の各メンバに、成り行き買い注文に必要な値を記述していきます。

スポンサーリンク

MqlTradeRequest構造体の各メンバに必要な値を入れていく

成行買い、ロットは0.1ロット、取引銘柄はプログラムを実行するチャートの銘柄、ストップロスとテイクプロフィットは設定しない。

という前提でサンプルコードを記述します


    request.action=TRADE_ACTION_DEAL;
     

成行注文なので、.action にはTRADE_ACTION_DEALを設定します。

 request.type=ORDER_TYPE_BUY;
      

買い注文なので、.type にはORDER_TYPE_BUYを設定します。

request.symbol=_Symbol;

取引銘柄はプログラムを実行するチャートの銘柄を指定したいので、.symbolには定義済み変数_Symbolを設定します。

      request.volume=0.1;
    

ロット数は0.1としたいので、.Volumeは0.1とします。

request.type_filling=ORDER_FILLING_IOC;

 フィルポリシーを設定する.type_fillingですが、どのフィルポリシーを選択すればよいのかは、執行方式によって変わります。コチラの→フィルポリシーの確認方法をご参照ください。

※現在私がサンプルコードの挙動確認しているのがXMTradingであり、確認の結果選択すべきフィルポリシーORDER_FILLING_IOCと判明しているので、.type_fillingには今回ORDER_FILLING_IOCを設定します。

request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);

成行の買い注文なので、注文価格を設定する.Price にはAsk値が入ります。Ask値を取得するには、SymbolInfoDouble関数を使います。第2引数に、定数SYMBOL_ASKを記述することによって取得できます。

request.sl=0;
request.tp=0;
      

今回はストップロス(損切り価格)とテイクプロフィット(利益確定価格)は設定しないので、.sl と.tpには0を入れておきます。

request.deviation=3;

スリッページを設定する.deviationについてですが、XMTradingの執行方式がmarket執行方式のため、値入力は省略してもいいのですが、もしinstant執行方式またはRequest執行方式の場合は入力する必要があります。一応.deviation にも暫定的に「3」 という数字を入れておきます。

request.magic=1234;

マジックナンバーを設定する.magicには「1234」 という数字を便宜上設定しました。

今回は直接数字を入力しましたが、マジックナンバーinput変数を使ってパラメータ化したものを代入できるようにしておくのが、便利で一般的です。

input変数については↓の記事をご覧ください。

とりあえずこれで、各メンバの値設定は完了しました。

わからなくなってきたら、各用語のリンクをクリックして調べられるようになっているので都度確認していただければと思います。

メンバの値設定が完了したら、次はOrderSend関数を記述します。

スポンサーリンク

OrderSend関数を記述する。

OrderSend関数の記述については、requesとresultというMqlTradeRequest構造体MqlTradeResult構造体データ型としたインスタンスをそれぞれ第1引数と第2引数OrderSend関数に記述するだけです。

OrderSend関数の後の記述は、前回も使ったものです。

MqlTradeResult構造体メンバである.retcodeに格納されている値が10008(TRADE_RETCODE_PLACED)もしくは10009(TRADE_RETCODE_DONE)なのか、

それ以外なのかで注文の成否を確認する記述です。

 OrderSend(request,result);

   
   if(result.retcode==TRADE_RETCODE_PLACED ||result.retcode==TRADE_RETCODE_DONE)
   {
      Print("注文が成功しました。 リターンコード= ",result.retcode);
   }
   
   else Print("注文が失敗しました。リターンコード= ",result.retcode);
スポンサーリンク

全体のコード

全体のコードは以下のようになっています

// スクリプトが実行されたときに呼び出される特別な関数
void OnStart()
{
    // MqlTradeRequest構造体のインスタンスを初期化。取引リクエストのパラメータを設定するために使用
    MqlTradeRequest request={};
    // MqlTradeResult構造体のインスタンスを初期化。取引の結果を受け取るために使用
    MqlTradeResult result={};

    // 取引のアクションタイプを指定 (TRADE_ACTION_DEAL = 即時実行)
    request.action=TRADE_ACTION_DEAL;
    // 注文のタイプを指定 (ORDER_TYPE_BUY = 買い注文)
    request.type=ORDER_TYPE_BUY;
    // 取引する通貨ペアを指定 (現在選択している通貨ペア)
    request.symbol=_Symbol;
    // 取引量を指定 (ここでは0.1ロット)
    request.volume=0.1;
    // 注文の執行方式を指定 (ORDER_FILLING_IOC = Immediate or Cancel、即時実行またはキャンセル)
    request.type_filling=ORDER_FILLING_IOC;
    // 注文の価格を指定 (現在のAsk価格)
    request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
    // ストップロス価格を0に設定 (使用しない場合)
    request.sl=0;
    // テイクプロフィット価格を0に設定 (使用しない場合)
    request.tp=0;
    // 価格の逸脱度を指定 (最大3ポイントの逸脱を許容)
    request.deviation=3;
    // 注文に割り当てるマジックナンバーを指定 (EAが注文を識別するために使用)
    request.magic=1234;

    // 注文送信関数を実行し、結果をresultに格納
    OrderSend(request,result);
    // 注文の結果をチェック (TRADE_RETCODE_PLACED または TRADE_RETCODE_DONE = 注文が成功した場合)
    if(result.retcode==TRADE_RETCODE_PLACED || result.retcode==TRADE_RETCODE_DONE)
    {
        // 注文成功のメッセージを出力
        Print("注文が成功しました。 リターンコード= ", result.retcode);
    }
    else
    {
        // 注文失敗のメッセージを出力
        Print("注文が失敗しました。リターンコード= ", result.retcode);
    }
}

プログラムを実際に実行してみると・・・↓

スポンサーリンク

まとめ

今回は 今までの知識を生かして実際に成り行き買い注文を出すコード について順を追って解説しました。

今回の記事では以下のことを学びました

注文は、

MqlTradeRequest構造体MqlTradeResult構造体インスタンスを宣言する。

MqlTradeRequest構造体の各メンバに必要な値を入れていく。

OrderSend関数を記述する。

というプロセスで記述していく。

今回は以上になります。

最後までお読みいただきありがとうございました<m(__)m>

【超入門】MQL5 EA講座 第61回「MqlTradeResult構造体について」【EAの作り方】

【超入門】MQL5 EA講座 第63回「約定したポジションにSLとTPを設定する」【EAの作り方】

—————————————————————

-<PR>-

※【おススメのMT5MQL5対応のFX業者】

MQL5を使って自作したEAシステムトレードに利用するには、取引プラットフォームとしてMT5を提供しているFX会社に口座を開設しなくてはいけません。

当サイトでは以下のFX会社での口座開設・EA運用をおススメしています。

おススメする理由の詳細につきましては、各FX会社について解説する記事を書いておりますので、下記のリンク記事を参考にしていただければと思います。


外為ファイネスト

EAの利用制限なし。スキャルピングもOK

外為ファイネストに関する記事は↓をご覧ください。

アヴァトレードジャパン

自動売買界最狭スプレッド水準

アヴァトレードジャパンに関する記事は↓をご覧ください。

フィリップ証券

フィリップ証券に関する記事は↓をご覧ください。

関連用語リンク集

MQL5FX関連の用語リンク集です。
当サイトでは、元々わからない言葉や概念に出くわしたら、すぐその言葉に立ち戻れるよう、かなり細かく内部リンクを張り巡らせており、多様な用語を網羅しています。

興味のある内容に直接アクセスし、疑問の解決にお役立ていただければと思います。

スポンサーリンク
MQL5でEA作ろう講座
スポンサーリンク
シェアする
エムキューエルをフォローする
スポンサーリンク
【超入門】MQL5 でEAを作ろうブログ

コメント

タイトルとURLをコピーしました