2024.03
林貴晴/AMSER Inc.
MQL4における基本的なループ構造であるforループに焦点を当て、continueおよびbreakの使い方や特殊な使い方について説明します。
forループは、指定された回数だけブロックを繰り返し実行するために使用されます。MQL4でforループを使用する基本的な構文は以下の通りです。
for(式 1 ; 式 2 ; 式 3) { // 繰り返し実行されるコード }
式1: ループが始まる前に実行され、カウンタ変数を初期化します。
式2: この式がtrueを返す限り、ループは続けられます。
式3: 各反復の後に実行され、通常はカウンタ変数をインクリメントまたはデクリメントします。
例えば、1から10までの数値を出力する簡単なforループは次のようになります。
for(int i = 1; i <= 10; i++) { Print(i); }
解説)
int i=1;はループが始まる前にカウンタ変数iを宣言し1を代入しています。
i <= 10がtrueかどうかを評価します。初回はiが1なので、条件はtrueになり、コードが実行され、Print(i);によりiの現在値が出力されます。
i++によりi の値が1増加します。
i <= 10に戻り、iの値が10を超えるまで繰り返します。
iの値が11になった時、条件i <= 10はfalseになるため、ループは終了します。
結果:1,2,3…10がPrint()で出力されます。
continueは、ループ内の残りのコードをスキップし、次のループに進むために使用されます。これは、特定の条件下で一部のコードを実行したくない場合に便利です。
例えば、1から10までの数値の中で偶数のみを出力し、奇数をスキップする場合は次のようにします。
for(int i = 1; i <= 10; i++) { if(i % 2 != 0) { continue; } Print(i); }
解説)
if (i % 2 != 0)でiが奇数か偶数かを評価します。
i % 2はiを2で割った余りの値です。
iが奇数の場合continueが実行されループの残りの部分をスキップし、次のループへと進みます。iが偶数の時にはcontinueは実行されずPrint(i)が実行されます。
結果:2,4,6,8,10が出力されます。
breakは、ループを完全に終了します。特定の条件が満たされたときにループの実行を停止したい場合に役立ちます。
1から10までのループで5を出力した後にループを停止したい場合は、以下のようにbreakを使用します。
for(int i = 1; i <= 10; i++) { if(i == 5) { break; } Print(i); }
解説)
i == 5 の条件を満たす時にbreakが実行されます。breakが実行されるとforループは終了します。
結果:1,2,3,4が表示されます。
省略
for(式 1 ; 式 2 ; 式 3) { // 繰り返し実行されるコード }
for文の式1、式2、式3は省略できます。
式2は省略するとtrueとみなされます。
以下は式1、式2、式3を省略し同様の動作をするようにコードを入れた例です。
int i=1; for(;;) { Print(i); if(i>=10)break; i++; }
複数式
また、式1、式3には複数の式を入れることができます。
次のコードでは式1,式3に変数i , jの宣言と計算を入れてフィボナッチ数列を生成して出力します。
for(int i = 0,j = 1; //式1 i < 100; //式2 j = i + j,i = j-i) //式3 { Print(i); }
結果:0,1,1,2,3,5,8,13,21,34、55,89が出力されます。
解説)
式1では変数iとjを同時に宣言し、それぞれに0と1を代入します。
式3はまず変数jにi+jを代入し、次に変数iには新しいjから iを引いた値を代入します。
このように式1、式3に複数の式を入れて、フィボナッチ数列を出力することができます。
まとめ
MQL4におけるforループは、繰り返し処理を実行する最も基本的なループです。特にポジション、オーダー管理に不可欠です。continueおよびbreakステートメントを理解し、適切に使用することで、より効率的で読みやすいコードを書くことができます。
林 貴晴(AMSER株式会社代表取締役)
内資系薬品会社で約10年勤務の後、
外資系製薬会社(現IQVIA及びGSK)で合計約10年を勤務
その後EA AMSERを開発し、その成績を評価され、株式会社ゴゴジャンの部長として抜擢。
現在はAMSER株式会社代表取締役。