MQL4プログラミングにおけるfor文の追加方(サンプルコードあり)

目次

MQL4におけるfor文とは?

MQL4のfor文は、指定した回数だけ繰り返し処理を行うための制御構文です。主な特徴は以下の通りです。

  1. 基本構文
for (初期化; 条件式; 更新式) {
    // 繰り返し実行したい処理
}
  1. 使用例
for (int i = 0; i < 10; i++) {
    Print(i);
}
  1. 主な用途
  • 配列の要素を順に処理する
  • 一定回数の繰り返し処理を行う
  • チャートデータを遡って処理する
  1. 特徴
  • 初期化、条件チェック、更新を1行で記述できる
  • カウンタ変数のスコープをループ内に限定できる
  • 繰り返し回数が明確な場合に適している
  1. 応用
  • break文でループを途中で抜ける
  • continue文で現在の繰り返しをスキップして次に進む
  • ネストして使用することも可能

for文を使いこなすことで、効率的なEAやインジケーターの開発が可能になります。特に、過去のデータを分析したり、複数のポジションを管理したりする際に非常に有用です。

サンプルコード

MQL4でfor文を使用して複数のポジションをすべて決済するサンプルコード(オリジナル関数)を以下に示します。

void CloseAllPositions()
{
    int total = OrdersTotal();
    
    for(int i = total - 1; i >= 0; i--)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            int type = OrderType();
            
            // 現在のシンボルのポジションのみを対象とする
            if(OrderSymbol() == Symbol())
            {
                bool result = false;
                
                // 買いポジションの場合
                if(type == OP_BUY)
                {
                    result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, clrRed);
                }
                // 売りポジションの場合
                else if(type == OP_SELL)
                {
                    result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, clrBlue);
                }
                
                if(!result)
                {
                    Print("OrderClose error: ", GetLastError());
                }
                else
                {
                    Print("Position closed: ", OrderTicket());
                }
            }
        }
    }
}

コードの説明

  1. OrdersTotal()関数を使用して、現在のオープンポジションの総数を取得します。
  2. for文を使用して、すべてのオープンポジションをループ処理します。ループは最新のポジションから開始するため、逆順(total – 1から0まで)で処理します。
  3. OrderSelect()関数を使用して、各ポジションを選択します。
  4. 現在のシンボル(通貨ペア)のポジションのみを対象とするため、OrderSymbol() == Symbol()で確認します。
  5. ポジションのタイプ(買いまたは売り)に応じて、適切な決済価格(BidまたはAsk)を使用します。
  6. OrderClose()関数を使用してポジションを決済します。
  7. 決済が成功したかどうかを確認し、エラーが発生した場合はエラーメッセージを出力します。

このコードを実行すると、現在のシンボルに関するすべてのオープンポジションが決済されます。必要に応じて、特定のマジックナンバーを持つポジションのみを決済するなど、条件を追加することもできます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

池田 直哉 池田 直哉 メタプロアカデミー創業者・講師

オリジナルのEAを作ることができるようになるWebスクール【メタプロアカデミー】を運営しています。プログラミング未経験の方が最短1ヵ月で勝てるオリジナルEAが作れるようになります。

目次