2024.01
林貴晴/AMSER Inc.
プログラムにおいて条件分岐は最も基本であり、特にトレーディングの自動化において欠かせません。MQL5において、最も一般的な条件分岐は’ if ’文です。
‘ if ‘文は以下のように使用されます。
if(条件式){ //条件が真のときの処理 }
例えばif(a>3){Print(“a”);}というコードは変数aが3より大きい場合、条件が「真」のため{}内の処理が作動します。
if文では、条件式が真(true)か偽(false)かを判断します。MQL5では、論理値はbool型で表され、true(真)またはfalse(偽)のいずれかの値を取ります。
例えば、int a = 5; Print(a > 3); というコードはtrueを表示し、int a = 2; Print(a > 3); ではfalseが表示されます。
MQL5では、数値を論理値に変換できます。この場合、0はfalse、それ以外の数値(正数、負数、小数)はtrueと見なされます。
void OnInit(){ Print((bool) 0 ); //false Print((bool) 1 ); //true Print((bool) 0.5 ); //true Print((bool) -1 ); //true }
三項演算子は、条件に基づいて値を選択するシンプルな方法です。
条件 ? 値1 : 値2
三項式は条件が真の時’ 値1 ’に偽の時は’ 値2 ‘になります。
例) int a= b>3 ? 3 : 0;
このコードは変数a に b>3が「真」の時は3を代入し、「偽」の時は0を代入します。
if文で同じことを書くと以下になりますが、三項式はより簡潔です。
ただし三項式を二重三重にすると理解が難しく間違えが発生しやすいため注意しましょう。
int a; if(b > 3) { a = 3; } else { a = 0; }
以下の式で、分母のcが0の場合、プログラムは致命的なエラーと判断しEAを停止させます。運用中のEAが停止することは、特にポジションを保有している時に停止することは非常に重大な問題です。すべての割り算にゼロ除算の回避コードを入れることは必須です
a = b / c;
そこで割り算に三項式をつかってゼロ除算を回避します。
a = c ? b / c : 0;
ここでは条件式に変数cを入れています。数字の代入された変数を条件式に入れた場合先程のif文でご紹介したように0の時はfalse、0以外の時はtrueになります。
今回はゼロ除算を回避したいため、変数cが0でない時は b/cの計算結果を 変数a
に代入し、変数cが0の時には変数aに0を代入します。
条件式と数値を利用した便利な方法になりますのでぜひご活用ください。
利用頻度の高いif文と論理値、三項式を理解することでコーディングが非常に便利に見やすくなります。理解してコーディングのスキルをあげましょう。
林 貴晴(AMSER株式会社代表取締役)
内資系薬品会社で約10年勤務の後、
外資系製薬会社(現IQVIA及びGSK)で合計約10年を勤務
その後EA AMSERを開発し、その成績を評価され、株式会社ゴゴジャンの部長として抜擢。
現在はAMSER株式会社代表取締役、株式会社トリロジー他で役員を兼任。