本記事で公開しているライブラリーは公開当時のままで、古くなっております。最新版のライブラリーはメルマガ登録いただくことでダウンロードできます。
価格ではなく値幅(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を載せておきます。