今回はMT4の自動売買用EAサンプルソース(FX用)を、プログラミング初心者の方向けに解説しています。
はじめに
ナンピンEAを作る際など全ポジションのpips数計算や、単ポジでもpips数を確認したい場合があるのでpips数を計算する機能を関数化しました。
ソースコード
以下サンプルの関数になります。そのままコピペでお使いください。
//+------------------------------------------------------------------+
//| 【関数】指定ポジション種別のpipsを返す |
//| |
//| 【引数】type:0=BUY, 1=SELL |
//| 【引数】mode:0=総数, 1=最新1ポジのみ |
//| 【引数】magic:EAのマジックナンバー(-1ならすべて対象) |
//| |
//| 【戻値】指定ポジションの合計pips |
//+------------------------------------------------------------------+
double getTotalProfitPips(int type, int mode, int magic) {
double totalPips = 0.0;
for(int i = OrdersTotal() - 1; i >= 0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if(OrderSymbol() != Symbol()) continue;
if(OrderType() != OP_BUY && OrderType() != OP_SELL) continue;
if(type == 0 && OrderType() != OP_BUY) continue;
if(type == 1 && OrderType() != OP_SELL) continue;
if(magic != -1 && OrderMagicNumber() != magic) continue;
double pips = 0.0;
if(OrderType() == OP_BUY) {
pips = Bid - OrderOpenPrice();
} else if(OrderType() == OP_SELL) {
pips = OrderOpenPrice() - Ask;
}
// 通貨の桁数に応じたPIPS換算
if(Symbol() == "GOLD") {
pips *= 10;
} else {
if(Digits == 2 || Digits == 3) {
pips *= 100;
} else if(Digits == 4 || Digits == 5) {
pips *= 10000;
}
}
totalPips += pips;
// 単ポジモードの場合は1回で抜ける
if(mode==1){
break;
}
}
}
return totalPips;
}
今回はマジックナンバーも考慮した関数となっています。マジックナンバー等が違うと『continue;』で次の繰り返し処理にスキップしています。”GOLD”の桁数を調整していますが、これはXMのGOLDだけDigitsで桁数が合わなかったので決め打ちで調整しています。
解説
とてもシンプルなつくりで、引数は
- type:0=BUY, 1=SELL
- mode:0=総数, 1=最新1ポジのみ
- magic:EAのマジックナンバー(-1ならすべて対象)
の3つです。
呼び出し例
double B_pips = getTotalProfitPips(OP_BUY,0,MAGIC_NO) //買いポジションの総pips数を取得
double S_pips = getTotalProfitPips(OP_SELL,1,MAGIC_NO) //売りポジションの単pips数を取得
具体的な使用例
具体的な使用例として、単ポジと複数ポジションで決済するpips数を分けたい場合等に使います。
int total=OrdersTotal();
if(total > 0){
//単ポジの場合は+20pipsで決済する
if(total==1){
if(getTotalProfitPips(e_type,1,MAGIC_NO) >= 20){
//決済処理
}
//複数ポジの場合はトータル+10pipsで決済する
}else{
if(getTotalProfitPips(e_type,0,MAGIC_NO) >= 10){
//e_typeポジション全決済処理
}
}
}
その他注意事項
上記関数をご使用の際は、動作確認等を行い自己責任でお使いください。
さいごに
以上、『ポジションのpips数を計算する関数』でした。
※ EAのサンプルソース一覧表へ
コメント