解決済み

MQL5で、現在のポジションの総ロット数を取得する方法が知りたい

2024/07/13 13:45
161

Ltotal=0;
for(int i=0; i<PositionsTotal(); i++){if(PositionSelect(i)){Ltotal+=PositionGetDouble(POSITION_VOLUME);}}

というようなことをして、現在のポジションのロット数をすべて足したいのですが、「PositionSelect(i)」あたりが変です。
どのように変更するとよいのでしょうか?

コメント

GogoJungle
2024/07/17 11:17

PositionSelect関数の使い方が間違っております。

PositionSelect関数は、シンボルを引数として、今後の作業で使用する保有ポジションを選択する関数です。
目的の機能を作成するには、PositionSelect関数の代わりに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);
    }
}
kkkk
2024/07/20 17:21

どうもありがとうございます!

関連トピックス

検索結果がありません。

ノーコードで誰でも簡単EA開発!MQL言語学習にも使える! | GogoJungle

注目トピックス

検索結果がありません。