ブログタイトルを「FX自動売買システム開発部」から「autoFX」に変更しました!

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

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

価格ではなく値幅(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日

MQL4プログラミングの最新記事8件

>完全放ったらかしEA 「AutoEndlessCatchRange」

完全放ったらかしEA 「AutoEndlessCatchRange」

「本業が忙しい!」「でも資産運用したい!」そんなあなたに最適なEAです。兼業トレーダーの方はチャートを毎日みて分析してトレードする時間はなかなか確保できないものです。トレードは本EAに任せて、本業やプライベートの時間をもっと増やしませんか?元々は自分自身のために開発したEAですので、手抜き無しのガチものです。

CTR IMG