MQL5でEA開発 64 条件で絞ったポジション数を計算する関数
MQL5でEA開発 63 条件で絞ったポジション数を計算する関数
条件で絞ったポジション数を計算する関数
条件で絞ったポジション数を計算する関数を作ります。
名前はPositionsTotalByFilters関数とします。
戻り値はint型です。
引数は
第1引数:銘柄。string型
第2引数:タイプ。long型
第3引数:マジックナンバー。long型
とします。
関数の作成にあたって、以下の関数を使用しました。
PositionsTotal関数
PositionGetSymbol関数
PositionGetInteger関数
ポジション数を返す関数としてPositionsTotal関数がありますが、この関数は口座内のすべてのポジションを数えます。
これから作るPositionsTotalByFilters関数は口座内のポジションのうち、指定した銘柄、タイプ、マジックナンバーに一致したポジションのみを数えます。
関数のコード
int PositionsTotalByFilters(string symbol, long type, long magic)
{
/*
symbol:銘柄
type:タイプ
magic:マジックナンバー
*/
int positions_total=PositionsTotal(); // ポジション数
int res=0; // 戻り値
for(int i=positions_total-1; i>=0; i--)
{
string position_symbol=PositionGetSymbol(i); // ポジションの銘柄
long position_type=PositionGetInteger(POSITION_TYPE); // ポジションのタイプ
long position_magic=PositionGetInteger(POSITION_MAGIC); // ポジションのマジックナンバー
if(position_symbol==symbol && position_type==type && position_magic==magic)
res+=1;
}
return(res);
}
サンプルコード
int PositionsTotalByFilters(string symbol, long type, long magic)
{
/*
symbol:銘柄
type:タイプ
magic:マジックナンバー
*/
int positions_total=PositionsTotal(); // ポジション数
int res=0; // 戻り値
for(int i=positions_total-1; i>=0; i--)
{
string position_symbol=PositionGetSymbol(i); // ポジションの銘柄
long position_type=PositionGetInteger(POSITION_TYPE); // ポジションのタイプ
long position_magic=PositionGetInteger(POSITION_MAGIC); // ポジションのマジックナンバー
if(position_symbol==symbol && position_type==type && position_magic==magic)
res+=1;
}
return(res);
}
void OnTick()
{
int buy_positions_total=PositionsTotalByFilters(_Symbol,POSITION_TYPE_BUY,20248); // 買いポジション数
Print("buy_positions_total=",buy_positions_total);
}
チャート上の、あるいはバックテストで設定した銘柄、買いポジション、20248のマジックナンバーという3つの条件でポジション数を絞ります。
メッセージ
まだポジションがないので実行しても意味がありませんが、もし銘柄がドル円、タイプが買いポジション、マジックナンバーが20248のポジションが1つあれば、
buy_positions_total=1
と出力されるでしょう。