信頼できる仕掛け注文関数(値幅指定)

本記事で公開しているライブラリーは公開当時のままで、古くなっております。最新版のライブラリーはメルマガ登録いただくことでダウンロードできます。

価格ではなく値幅(pips)による仕掛け注文関数

「信頼できる仕掛け注文関数」で、注文失敗時にリトライしたり注文の詳細情報をログに出力したりする仕掛け注文関数としてorderSendReliable()を作成しました。

orderSendReliable()における損切りと利食いのパラメータは価格指定になっており、ちょっと扱いにくい印象です。例えば、USDJPYの現在レートが115円だとした場合、ロング成行注文、損切り50pipsにしようとすると、損切りのパラメータには114.5円を指定することになります。いちいち頭の中で50pips→0.5円(EURUSDなら0.0005ドル)と暗算しないといけませんね。価格指定(114.5円)ではなく、値幅指定(50pips)で書きたいところです。

というわけで、orderSendReliable()を値幅指定できる仕掛け注文関数を紹介します。

//|
//|【関数】信頼できる仕掛け注文(値幅指定)
//|
//|【引数】 IN OUT  引数名             説明
//|        -----------------------------------------
//|         ○      aSymbol            通貨ペア
//|         ○      aCmd               注文種別
//|         ○      aVolume            ロット数
//|         ○      aPrice             仕掛け価格
//|         ○      aSlippage          スリッページ(ポイント)
//|         ○      aStoploss          損切り価格
//|         ○      aTakeprofit        利食い価格
//|         △      aComment           コメント
//|         △      aMagic             マジックナンバー
//|         △      aExpiration        待機注文の有効期限
//|         △      aArrow_color       チャート上の矢印の色
//|
//|【戻値】チケット番号(エラーの場合は、-1)
//|
//|【備考】△:初期値あり
//|
int orderSendReliableRange(string aSymbol,
                           int aCmd,
                           double aVolume,
                           double aPrice,
                           int aSlippage,
                           double aStoplossPips,
                           double aTakeprofitPips,
                           string aComment = NULL,
                           int aMagic = 0,
                           datetime aExpiration = 0,
                           color aArrow_color = CLR_NONE)
{
  int plusMinusSign = 1;

  if(aCmd == OP_SELL ||
     aCmd == OP_SELLLIMIT ||
     aCmd == OP_SELLSTOP){
    plusMinusSign *= -1;
  }

  double sl = 0.0;
  double tp = 0.0;

  if(aStoplossPips > 0.0){
    sl = aPrice - aStoplossPips * gPipsPoint * plusMinusSign;
  }

  if(aTakeprofitPips > 0.0){
    tp = aPrice + aTakeprofitPips * gPipsPoint * plusMinusSign;
  }

  int result = orderSendReliable(aSymbol,
                                 aCmd,
                                 aVolume,
                                 aPrice,
                                 aSlippage,
                                 sl,
                                 tp,
                                 aComment,
                                 aMagic,
                                 aExpiration,
                                 aArrow_color);

  return(result);
}

orderSendReliable()との違いは、損切りと利食いのパラメータの内容が価格から値幅(pips)に変わったことだけです。orderSendReliableRange()の内部で値幅を価格に変換後、orderSendReliable()を呼び出しています。

値幅を価格に変換する際、ロングとショートで仕掛け価格から値幅分だけ足し引きが異なりますので、その点は注意です。変数plusMinusSignで足すのか引くのかを制御しています。

この関数では損切りと利食いの価格をdouble sl = 0.0とdouble tp = 0.0で初期化していますので、うっかりマイナスの損切り・利食いのパラメータを与えてしまっても、内部で0(損切り、利食いの指定なし)にしてorderSendReliable()を呼んでくれる副次効果があります。

サンプルEA

関数だけではイメージが沸きづらいと思いますので、サンプルEAを載せておきます。

「信頼できる仕掛け注文関数(値幅指定)」のSample.mq4
サイズ: 4.0KB
バージョン: 1.0
公開:2019年10月17日

MT4の無料プログラミング講座

メルマガ登録して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG