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

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

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

前回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関数を記述する。

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構造体とMqlTradeResult構造体のインスタンスを宣言
      MqlTradeRequest request={};
      MqlTradeResult result={};
      
      request.action=TRADE_ACTION_DEAL;
      request.type=ORDER_TYPE_BUY;
      request.symbol=_Symbol;
      request.volume=0.1;
      request.type_filling=ORDER_FILLING_IOC;
      request.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      request.sl=0;
      request.tp=0;
      request.deviation=3;
      request.magic=1234;
 
      
     OrderSend(request,result);
      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の作り方】

ツイッターでも、

今回のブログ記事に関連したつぶやきをまとめたモーメント

を用意していますので、よろしければご参照ください。<m(__)m>140文字で完結させようとしているなりに、別の味わいがあるかと思います(^^♪

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

コメント

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