どうも潤奈です( ・Д・)
今回はエントリー(成行)しているポジション数を取得するオリジナル関数を作成したいと思います。
オリジナル関数って?という方はこちらのEA講座を最後まで閲覧して頂くと理解して頂けると思います。
オリジナル関数を作成
では早速オリジナル関数の全文をご覧下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//ポジション数を取得 int Position(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_BUY)res++; if(OrderType()==OP_SELL)res++; }else if(PositionDirection==1){ if(OrderType()==OP_BUY)res++; }else if(PositionDirection==-1){ if(OrderType()==OP_SELL)res++; } } } } return(res); } |
では順番に説明して行きます。
枠を作成
1 2 3 4 5 6 |
//ポジション数を取得 int Position(int PositionDirection,int magic){ //のこ中にプログラムを記入する } |
Position関数をint型で宣言します。
引数はPositionDirection変数をint型と、magic変数をint型を宣言して準備します。
PositionDirection変数には取得したいポジションを買いなら1を、売りなら-1を渡して使用します。
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_BUY)res++; if(OrderType()==OP_SELL)res++; }else if(PositionDirection==1){ if(OrderType()==OP_BUY)res++; }else if(PositionDirection==-1){ if(OrderType()==OP_SELL)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=Position(1,2021); //売りポジション数を取得する時 pos=Position(-1,2021); //買い売り両方のポジション数を取得する時 pos=Position(0,2021); |
この様なコードを入れる事で、今回のオリジナル関数を使用してそれぞれのポジション数を取得する事が出来ます。
まとめ
複数ポジションを取るEAを作成する時に、各ポジションを取得したい時にこのオリジナル関数を作成しておいて設置しておく事で、1行の簡単なコードで取得出来るようになります。
こういったオリジナル関数を増やして引き出しを増やして行きましょう。
では( ・Д・)
コメント