どうも潤奈です( ・Д・)
今回は待機注文(指値・逆指値)しているポジション数を取得するオリジナル関数を作成したいと思います。
オリジナル関数って?という方はこちらのEA講座を最後まで閲覧して頂くと理解して頂けると思います。
オリジナル関数を作成
では早速オリジナル関数の全文をご覧下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//保留ポジション数を取得 int PendingPosition(int PositionDirection,int magic){ int res=0; for(int i=0;i<OrdersTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){ if(OrderSymbol()==_Symbol && OrderMagicNumber()==magic){ if(PositionDirection==0){ if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP)res++; if(OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)res++; }else if(PositionDirection==1){ if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP)res++; }else if(PositionDirection==-1){ if(OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)res++; } } } } return(res); } |
では順番に説明して行きます。
枠を作成
1 2 3 4 5 6 |
//保留ポジション数を取得 int PendingPosition(int PositionDirection,int magic){ //のこ中にプログラムを記入する } |
PendingPosition関数をint型で宣言します。
引数はPositionDirection変数をint型と、magic変数をint型を宣言して準備します。
PositionDirection変数には取得したいポジションを買いなら1を、売りなら-1を、両方なら0を渡して使用します。
magic変数は取得したいポジションのマジックナンバーを確認するのに使用します。
ポジション数を格納する変数
1 2 3 4 5 |
int res=0; //取得するコード return(res); |
取得したポジション数を格納するres変数をint型で宣言して、0リセットします。
最後にはreturn処理でres変数に格納された数値を返します。
ポジション数をチェック
1 2 3 4 5 6 7 |
for(int i=0;i<OrdersTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){ //この中に選別するコードを記述する } } |
ループ処理のfor文を使用して、OrdersTotal関数で取得した数をチェックして行きます。
そして最初のif文でその注文データに問題がないかチェックします。
ポジションを絞ります
1 2 3 4 5 |
if(OrderSymbol()==_Symbol && OrderMagicNumber()==magic){ //買いか売り指値・逆指値ポジションかチェックするコードを記述します } |
次のif文でその注文データが現在のチャートの通貨ペアと同じか?調べたいマジックナンバー取引の注文データか?をチェックします。
ポジションを絞り込みます
1 2 3 4 5 6 7 8 9 10 |
if(PositionDirection==0){ if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP)res++; if(OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)res++; }else if(PositionDirection==1){ if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP)res++; }else if(PositionDirection==-1){ if(OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)res++; } |
次のif~else if文でPositionDirection変数に渡した数値でそれぞれカウントします。
PositionDirection変数が0の時は、買い指値・逆指値ポジション&売り指値・逆指値ポジションの両方の時にresに1が足されます。
1の時は買い指値・逆指値ポジションの時のみで、-1の時は売り指値・逆指値ポジションの時のみ1が足されます。
オリジナル関数を使用する際のコード
1 2 3 4 5 6 7 8 9 10 11 12 |
//マジックナンバー=2021の時 int pos=0; //ポジション数格納変数 //買い指値・逆指値ポジション数を取得する時 pos=PendingPosition(1,2021); //売り指値・逆指値ポジション数を取得する時 pos=PendingPosition(-1,2021); //買い売り両方の指値・逆指値ポジション数を取得する時 pos=PendingPosition(0,2021); |
この様なコードを入れる事で、今回のオリジナル関数を使用してそれぞれの指値・逆指値ポジション数を取得する事が出来ます。
まとめ
複数ポジションを取るEAを作成する時に、各ポジションを取得したい時にこのオリジナル関数を作成しておいて設置しておく事で、1行の簡単なコードで取得出来るようになります。
こういったオリジナル関数を増やして引き出しを増やして行きましょう。
では( ・Д・)
コメント