見出し画像

時間制限ありの逆指値発注(発注の応用)

//<<<<<>>>>><<<<<>>>>><< include >><<<<<>>>>><<<<<>>>>>
#include <Trade\Trade.mqh>

//<<<<<>>>>><<<<<>>>>><< 発注用変数 >><<<<<>>>>><<<<<>>>>>
CTrade mytrade;
ENUM_ORDER_TYPE_FILLING fillPolicy;
input group "MagicNumber"
input int MagicNumber_bid = 1111; // bidマジックナンバー
input int MagicNumber_ask = 1112; // askマジックナンバー

input group "order_time_limit"
input int order_time_limit = 300; // 発注後約定しなかったオーダーが自動消滅する時間(秒)

//<<<<<>>>>><<<<<>>>>><< オーダー用リクエスト >><<<<<>>>>><<<<<>>>>>
MqlTradeRequest myrequest_ask= {};
MqlTradeRequest myrequest_bid= {};
MqlTradeResult  myresult= {};

//<<<<<>>>>><<<<<>>>>><< Tick価格変数 >><<<<<>>>>><<<<<>>>>>
MqlTick last_tick;

//<<<<<>>>>><<<<<>>>>><< 取引ロット >><<<<<>>>>><<<<<>>>>>
input group "lot"
input double entry_lot = 0.01;//取引ロット

OnTick()

//発注価格取得(last_tick.ask:買う場合の価格 last_tick.bid:
売る場合の価格)
SymbolInfoTick(_Symbol,last_tick);

//逆指値注文(10pip先に逆指値注文)
bidrequest(MagicNumber_bid,entry_lot,last_tick.ask + 100*_Point,0,0);
askrequest(MagicNumber_ask,entry_lot,last_tick.bid - 100*_Point,0,0);

Deal_bidrequest(int magic,double volume,double price,double sl,double tp)

//+------------------------------------------------------------------+
//|BIDオーダーのテンプレートを反映した上で、requestベースで発注する       |
//+------------------------------------------------------------------+
void bidrequest(int magic,double volume,double price,double sl,double tp)
  {
   ZeroMemory(myrequest_bid); //初期化

//固定値
   myrequest_bid.action       = TRADE_ACTION_PENDING; //注文を指定
   myrequest_bid.symbol       = _Symbol;           //通貨ペア名
   myrequest_bid.deviation    = 20;                //スリッページ
   myrequest_bid.comment      = "bid";             //コメント
   myrequest_bid.type_filling = fillPolicy;
   myrequest_bid.type         = ORDER_TYPE_BUY_STOP;    //逆指値買

//時間制限
   if(order_time_limit > 60)//業者により、有効期限の下限制限あり
     {
      myrequest_bid.type_time    = ORDER_TIME_SPECIFIED; //有効期限あり;
      myrequest_bid.expiration   = TimeCurrent() + order_time_limit;  //有効時間
     }

//可変(オーダー時に代入)
   myrequest_bid.magic      = magic;   //マジックナンバー(識別用)
   myrequest_bid.volume     = volume;  //ロット数
   myrequest_bid.price      = price;   //注文価格
   myrequest_bid.sl         = sl;      //ストップロス価格
   myrequest_bid.tp         = tp;      //リミット価格

//発注
   OrderSend(myrequest_bid, myresult);
   TradeErrorCheck();
   Sleep(500);
  }

Deal_askrequest(int magic,double volume,double price,double sl,double tp)

//+------------------------------------------------------------------+
//|ASKオーダーのテンプレートを反映した上で、requestベースで発注する       |
//+------------------------------------------------------------------+
void askrequest(int magic,double volume,double price,double sl,double tp)
  {
   ZeroMemory(myrequest_ask); //初期化

//固定値
   myrequest_ask.action       = TRADE_ACTION_PENDING; //注文を指定
   myrequest_ask.symbol       = _Symbol;           //通貨ペア名
   myrequest_ask.deviation    = 20;                //スリッページ
   myrequest_ask.comment      = "ask";             //コメント
   myrequest_ask.type_filling = fillPolicy;
   myrequest_ask.type         = ORDER_TYPE_SELL_STOP;   //逆指値売

//可変(オーダー時に代入)
   myrequest_ask.magic      = magic;   //マジックナンバー(識別用)
   myrequest_ask.volume     = volume;  //ロット数
   myrequest_ask.price      = price;   //注文価格
   myrequest_ask.sl         = sl;      //ストップロス価格
   myrequest_ask.tp         = tp;      //リミット価格

//時間制限
   if(order_time_limit > 60)//業者により、有効期限の下限制限あり
     {
      myrequest_ask.type_time    = ORDER_TIME_SPECIFIED; //有効期限あり;
      myrequest_ask.expiration   = TimeCurrent() + order_time_limit;  //有効時間
     }

//発注
   OrderSend(myrequest_ask, myresult);
   TradeErrorCheck();
   Sleep(500);
  }


TradeErrorCheck()

//+------------------------------------------------------------------+
//| オーダー成否確認                                                    |
//+------------------------------------------------------------------+
void TradeErrorCheck()
  {
   if(myresult.retcode==TRADE_RETCODE_PLACED || myresult.retcode==TRADE_RETCODE_DONE)
     {
      Print("注文が成功しました。 リターンコード= ",myresult.retcode);
     }
   else
      Print("注文が失敗しました。リターンコード= ",myresult.retcode);
  }
//+------------------------------------------------------------------+



MQL5コード一覧はコチラ


この記事が気に入ったらサポートをしてみませんか?