オペレーション P33
オペレーション P33
数学演算を実行し、結果を変数に割り当てることができます。操作で他の変数を使用することもできます。MQL5で基本的な数学演算を実行する方法を示しましょう。
足し算と掛け算 P33
//追加
int varAddA = 3 + 5 ; // 結果 : 8
double varAddB = 2.5 + varAddA ; // 結果 : 10.5
//乗算
int varMultA = 5 * 3 ; // 結果 : 15
double varMultB = 2.5 * varMultA ; // 結果 : 37.5
各演算の最初の例では、2つの整数を加算または乗算し、その結果をint変数(varAddAおよびvarMultA)に割り当てます。2番目の例では、実数(または浮動小数点数)を整数値を含む変数で加算または乗算します。結果はdouble変数(varAddBまたはvarMultB)に格納されます。
2つの値が整数型になることがわかっている場合は、それらを整数変数に格納しても問題ありません。1つの値が浮動小数点数になる場合は、doubleやfloatなどの実数型を使用してください。
減算と否定 P33
// 減算
int varSubA = 5 – 3 ; // 結果 : 2
double varSubB = 0.5 – varSubA ; // 結果 : -1.5
// 否定
int varNegA = -5 ;
double varNegB = 3.3 – varNegA ; // 8.3
減算の例では、まず2つの整数を減算し、その値をint変数varSubAに割り当てます。次に、整数変数を浮動小数点数0.5から引きます。結果は負の浮動小数点double変数varSubBに割り当てられる数値。
数値定数の前にマイナス記号(-)を付けるだけで、数値定数を負の数として指定できます。int変数varNegAには、値-5が割り当てられています。次に、3.3から-5を引き、その結果をvarNegBに代入します。静の数から負の数を減算しているため結果は加算演算となり、値は8.3になります。
除算と係数 P34
// 除算
double varDivA = 5 / 2 ; // 結果 : 2.5
int varDivB = 5 / 2 ; // 結果 : 2
// 係数
int varMod = 5 % 2 ; // 結果 : 1
最初の除算の例varDivAは、2つの整数を除算し、結果をdouble変数に格納します。5/2は均等に分割されないため、除算するときは常に実数型を使用する必要があります。
2番目の例は、次のことを示しています。5/2を除算し、結果をint変数varDivBに格納します。整数型は小数値を格納しないため、値は最も近い整数に切り捨てられます。
モジュラスの例では5を2で割り、整数の剰余をvarModに格納します。モジュラス演算子(%)は2つの整数に対してのみ使用できます。したがって、残りをint変数に格納しても安全です。
割当操作 P34
変数を使用して数学演算を実行し、その結果を元の変数に代入する必要がある場合があります。加算を使用した例を次に示します。
int varAdd = 5 ;
varAdd = varAdd + 3 ;
Print(varAdd) ; //出力 : 8
変数varAddを宣言し、値5に初期化します。次に、varAddに3を追加し、結果をvarAddに代入します。結果は8です。これを行う簡単な方法です。
int varAdd = 5 ;
varAdd += 3 ; // varAdd = 8
ここでは、算術演算子(+)と代入演算子(=)を組み合わせます。これは、「varAddに3を加算し、その結果をvarAddに代入する」と読むことができます。これは、ほかの数学演算子でも行うことができます。
varSub -= 3; //減算代入
varMult *= 3 ; //乗算代入
varDiv /= 3 ; //部門代入
varMod %= 3 ; //モジュラスの割り当て
リレーション操作 P35
多くの場合、より大きい、より小さい、等しい、または等しくない関係で2つの値を比較する必要があります。この操作は、trueまたはfalseのいずれかのブール値の結果に評価されます。大なり小なりの操作を見てみましょう。
オペレーション :
a > b //より大きい
a < b //未満
最初の例ではaがbより大きい場合、結果はtureになり、それ以外の場合はfalseになります。2番目の例ではaがbより小さい場合、結果はtrueになります。等しいかどうかも確認できます。
a >= b //以上
a <= b //以下
最初の例ではaがb以上の場合、結果はtrueになります。2番目の例ではaがb以下の場合、結果はtrueになります。等しい操作と等しくない操作を見てみましょう。
a == b // に等しい
a !=b // 等しくない
最初の例では、aがbと等しい場合、結果はtrueになります。2番目の例ではaがbと等しくない場合、結果はtrueになります。等価演算子(==)は代入演算子(=)と同じではないことに注意してください!これは、新人プログラマーがよくする間違いです。
実数を使用する場合、数値を特定の小数点以下の桁数に正規化または収めることが重要です。これは、NormalizeDouble()関数を使用して行われます。最初の引数は、正規化するdouble値です。2番目の引数は収められる小数点以下の桁数です。次に例を示します。
double normalA = 1.35874934 ;
double normalB = 1.35873692 ;
normalA = NormalizeDouble(normalA, 4 ) ; // 結果 : 1.3587
normalB = NormalizeDouble(normalB, 4 ) ; // 結果 : 1.3587
if(normalA = normalB)
{
Print(“Equal”) ;
}
この例では、小数点以下8桁までの小数値を含む2つのdouble変数があります。NormalizeDouble()関数を使用して、これらの数値を小数点以下4桁に収め、結果を元の変数に割り当てます。次に、等式ステートメントでそれらを比較できます。この場合normalAとnormalBは等しいため、文字列“Equal”がログに出力されます。
数値化せずに2つの価格で等価演算を実行しようとすると、等しい結果が得られる可能性はほとんどありません。内部的には、価格と指標値は多数の有効桁数で計算されます。数値を正規化することにより、より少ない桁数を使用して等しいことを確認できます。
bool演算 P36
ブール演算は、論理演算子を使用して2つ以上の演算(数学、ブール、または関係)を比較し、式が真/偽かを評価します。AND、OR、NOTの3つの論理演算があります。
AND演算の例を見てみましょう。AND演算は、式のすべての演算がtrueの場合にtrueです。ANDの論理演算子は&&(2つのアンパサンド)です。
int a = 1 ;
int b = 1 ;
int C = 2 ;
if(a == b && a + b == c )
{
Print(true) ; // 結果 : true
}
まず、3つの整数変数a、b、cを宣言して初期化します。ブール演算を評価するためにif演算子を使用します。操作がtrueの場合、括弧内のコードが実行されます。
aの値は1、bの値は1です。式a==bは真なので、次の式に進みます。加算演算a+bは2です。Cの値も2なのでこの式は真です。ブール演算ANDはtrueと評価されるため、trueの値がログに出力されます。
ANDブール演算に偽の式があると、どうなるかを見てみましょう。
int a = 1 ;
int b = 1 ;
int C = 3 ;
if(a == b && a + b == c )
{
Print(true) ;
}
else
{
Print(false) ; // 結果 : true
}
この例では、cの値を3に初期化します。a+bはcと等しくないため、式はfalseと評価され、ブールAND演算はfalseと評価されます。この場合、実行はelse演算子にスキップし、falseの値がログに出力されます。
次に、ORブール演算を調べます。いずれかの式がtrueと評価された場合、OR演算はtrueです。OR演算子は||です。(2つのパイプ):
int a = 1 ;
int b = 1 ;
int C = 3 ;
if(a == b || a + b == c )
{
Print(true) ; // 結果 : true
}
このコードは、OR演算子を使用していることを除いて、前の例とほとんど同じです。式a==bは真ですが、a+b==cはそうではありません。少なくとも1つの式がtrueであるため、ブールOR演算はtrueと評価され、trueの値がログに出力されます。
最後に、NOTブール値を調べます。NOT演算子(!)は、単一のブール式に適用されます。式がtrueの場合、NOT演算子はfalseと評価され、その逆も同様です。基本的に、NOT演算子はブール式のtrue/false値を逆にします。次に例を示します。
bool not = false ;
if(!not)
{
Print(true) ; // 結果 : true
}
変数notはfalseに初期化されます。ブール式!notはtrueに評価されます。したがって、真の値がログに出力されます。NOT演算子はより複雑な式でも機能します。
int a = 1 ;
int b = 2 ;
if(!(a == b))
{
Print(true) ; // 結果 : true
}
式a==bは偽です。式を括弧で囲み、NOT演算子を適用すると、式はtrueと評価され、trueの値がログに出力されます。