タイトルが入力されていません。
コンテンツがありません。
There have no category
There have no subcategory
Ltotal=0; for(int i=0; i<PositionsTotal(); i++){if(PositionSelect(i)){Ltotal+=PositionGetDouble(POSITION_VOLUME);}}
というようなことをして、現在のポジションのロット数をすべて足したいのですが、「PositionSelect(i)」あたりが変です。 どのように変更するとよいのでしょうか?
PositionSelect関数の使い方が間違っております。
PositionSelect
PositionSelect関数は、シンボルを引数として、今後の作業で使用する保有ポジションを選択する関数です。 目的の機能を作成するには、PositionSelect関数の代わりにPositionGetTicket関数とPositionSelectByTicket関数を用いる、次の方法がよいでしょう。
PositionGetTicket
PositionSelectByTicket
double Ltotal = 0; for (int i = 0; i < PositionsTotal(); i++) { ulong ticket = PositionGetTicket(i); // インデックスからチケット番号を取得 if (PositionSelectByTicket(ticket)) { Ltotal += PositionGetDouble(POSITION_VOLUME); } }
余談ですが、特定の通貨ペア・マジックナンバーを指定してロットの合計値を計算する場合についても紹介します。 参考になれば幸いです。
int magic = 123456; // マジックナンバー string symbol = Symbol(); // 通貨ペア double Ltotal = 0; for (int i = 0; i < PositionsTotal(); i++) { ulong ticket = PositionGetTicket(i); // インデックスからチケット番号を取得 if (PositionSelectByTicket(ticket)) { if (PositionGetString(POSITION_SYMBOL) != symbol) continue; // 通貨ペアが異なる場合はcontinue if (PositionGetInteger(POSITION_MAGIC) != magic) continue; // マジックナンバーが異なる場合はcontinue Ltotal += PositionGetDouble(POSITION_VOLUME); } }
どうもありがとうございます!
コメント文がありません。
PositionSelect関数の使い方が間違っております。PositionSelect関数は、シンボルを引数として、今後の作業で使用する保有ポジションを選択する関数です。目的の機能を作成するには、PositionSelect関数の代わりに
PositionGetTicket関数とPositionSelectByTicket関数を用いる、次の方法がよいでしょう。余談ですが、特定の通貨ペア・マジックナンバーを指定してロットの合計値を計算する場合についても紹介します。
参考になれば幸いです。
どうもありがとうございます!