文系人間のためのシステムトレーダー養成所 メタトレーダー講座第四回 演算 出力
--------

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009-03-09

メタトレーダー講座第四回 演算 出力

この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)
    


                         MQL4講座  
                         Coders'guru         
                          www.forex-tsd.com    
                               -4-
                          演算子&式

MQL4の第四回目の私の講義へようこそいらっしゃいました。
一番最近のData typesの講義では たくさんの新しい概念が出てきましたね。大変だったと思いますが理解できましたでしょうか。楽しんで頂けてましたらこれ以上の喜びはありません。

さて、今回は演算子と式です。

演算子と式ってなに?

あなた方は演算子について大変よく知っているはずですよ。もし私が(+,-,*,/)が基本的な算術演算子ですと言えば、あなたはすぐに演算の意味を思い出すのではないでしょうか。

「演算はわかりました。式について説明してくれませんか?」という声が聞こえてきました。
識別子(覚えていますか?もし覚えていませんでしたら、講義2のシンタックスをご覧ください。)と演算子が一緒になると式を作り出します。
難しいですか?例を取り上げて説明しましょう。
____________________________________________
x=(y*z)/w   (x=(y×z)÷w)
____________________________________________
ここではx,y,z,wはすべて識別子です。
=,*,/は演算子
行全体が式です。

式同士が結合するとそれはステートメントを作り出します。
そしてステートメント同士が結合するとそれは関数を作り出し、関数同士が結合するとそれはプログラムをつくりだします。


講義の残りは、MQL4で使われている演算子の種類について話していきたいと思います。

さぁそれでは。基本的な算術演算子から始めましょう。


1‐算術演算子

MQL4には9つの算術演算子があります。
以下はそれぞれの用法についてのリストです。
____________________________________________
演算子   名前       例         解説
+    加算演算子      A=B+C:   BにCをたして、その結果をAに当てがいます。
-    減算演算子      A=B-C;   BからCを引いて、その結果をAに当てがいます。    
+-   記号変更演算子    A=-A:    Aについている記号を逆にします。 
*    乗算演算子       A=B*C;   BとCをかけて、その結果をAに当てがいます。
/    除算演算子       A=B/C;   BをCでわってその結果をAに当てがいます。
%    剰余演算子      A=B%C;   AはB割るCの余り。(例10%2は0、10%3は1になる)
++   インクレメント演算   A++;     Aに1を足す(例 もしAが1ならそれは2になる。)
--   デクレメント演算    A--;     Aから1を引く。(例 もしAが2ならそれは1になる)
____________________________________________
メモ: 剰余演算子は次のように働きます。
10%5=0
なぜなら10割る5は2で余りがないからです。余り0なので値は0になります。
10%8=2
これは1余り2ですね。8×1+2=10になることからも証明できます。値は2です。
100%15=10
100を15でわれば余りは10ですね。
これはどうでしょうか?6%8
答えは6になります。なぜなら8×0+6だからです。余りは6として考えられます。

メモ:インクレメント演算子とデクレメント演算子は、他の式と一緒にしてはいけません。
以下のような記述は適応されません。
____________________________________________
A=(B++)*5
____________________________________________
次のように書く事ならできます。
____________________________________________
A++:
B=A*5
____________________________________________
メモ:上の例はどうやって記述するのか。ちょっとやってみましょう。
int A=1; //Aは整数値をとり、1だと指定します。
int B; //Bは整数値をとると宣言しました
A++;  //Aに1を加えます。 現在A=2です。
B=A*5 //この意味はB=2*5です。


2‐代入演算子

いくつかの式の目的が結果を生み出している時、代入演算子はその結果を左の演算数に設定しています。
例____________________________________________
A=B*C;
_____________________________________________
ここではBとCを乗じ、その結果の割り当てがAになります。
ここでは(=)が代入演算子になります。
他の役割も開設すると以下のようになります。
A,B,C←演算数
* ←乗算演算子(先ほどの算術演算子の一つ)
=  ←代入演算子

MQL4では11の代入演算子があります。
これがその用法のリストになります。
____________________________________________
演算子   名前        例       解説
=   代入演算子     A=B     BをAに割り当てる
+=  加算代入演算   A+=B;    A=A+Bと同じ。BをAに加算し、その結果をAに割り当てる
-=  減算代入演算   A-=B;    A=A-Bと同じ。BからAを減算し、その結果をAに割り当てる。
*=   乗算代入演算    A*=B;    A=A*Bと同じ。 AとBを乗じ、その結果をAに割り当てる。
/=   除算代入演算    A/=B;    A=A/Bと同じ。AをBで割り、その結果をAに割りあてる。
%=   剰余代入演算    A%=B;    A=A%Bと同じ。AをBで割った余りをAに割り当てる。
>>=  左シフト代入演算  A>>=B;   Aのビットを右に、Bで指定したビット分動かします。
<<=  右シフト代入演算  A<<=B;   Aのビットを左に、Bで指定したビット分動かします。
&=   AND代入演算    A&=B;    詳しくはビット演算子の説明項目をみてください。
|=   OR代入演算     A|=B;     詳しくはビット演算子の説明項目をみてください。
^=   XOR代入演算    A^=B;    詳しくはビット演算子の説明項目をみてください。
____________________________________________


3-関係演算子


関係演算子は二つの値(演算数)を比べ、真か偽かの値をだす働きをします。
「ジョンはアルフレッドよりも高い?YesかNoか」といった質問ににています。
もしその結果が偽ならば0、真だったら0以外の数が生み出されます。

例____________________________________________
4==4;    //真
4<4;     //偽
4<=4;    //真
_____________________________________________

MQL4では、六つの関係演算子があります。
それぞれの使用法リストをみてみましょう。
____________________________________________
演算子   名前     例       解説
==    等値演算子  A==B;    もしA=Bなら真で、そうでないなら偽
!=    非等値演算子 A!=B;    もしA=Bでないのなら真で、そうでないなら偽
>     右不等演算子 A>B;    もしAの値がBより大きければ真、そうでなければ偽
<     左不等演算子 A<B;    もしAの値がBより小さければ真、そうでなければ偽
<=  等価右不等演算子 A<=B;   もしAの値がBより小さいか、等しければ真、そうでなければ偽
>=  等価左不等演算子 A>=B;  もしAの値がBと大きいか、等しければ真、そうでなければ偽
____________________________________________ 

4-論理演算子

論理演算子は一般的にブール代数から派生したものです。それは実際の概念の意味を考慮せずに、抽象的な概念で、真の値を機械的な方法で動かします。
実際の概念の意味というのは、ブール値での真の値は真か偽かのまさに二つしかもたないのです。
AQL4では、論理演算子をブール演算子と名付けています

MQL4は最も重要な三つの論理演算子が使われている。
これがそれぞれの用法のリストです
____________________________________________
演算子   名前     例       解説
&&   条件AND演算子  A&&B;    両辺の値が1(真)の時のみ1(真)の値になり、それ以外
                         は全て0(偽)の値を返す。もし左の値が0(偽)ならその時
                         点で式の値は偽が決定するので右の値は考慮されない。

||    条件OR演算子   A||B:      少なくとも一方が1(真)の値なら式の値は真になる。それ
                          以外はすべて0(偽)の値がくる。左の値が0でないなら
                          その時点で右の値は考慮されない。       

!    論理否定演算子   !A;       真なら偽を、偽なら真の値を返す。
____________________________________________

5-ビット演算子

ビット演算子は論理演算子と似ています。違うのは小さな尺度(2進法のデータ)でやっていることです。 
以下の演算子がMQL4では使えます。
(よほどの特殊なコードでなければMQL4で使う機会はなさそうです。)
____________________________________________
演算子   名前      例    解説
&     AND演算子   A&B;   二つのビットをくらべて、もしその両方のビットが1なら1をそうで
                      ないなら0の値を返します。

|      OR演算子   A|B;    二つのビットを比べて、もしその二つのびっとが相補的なら1を
                      生み出し、そうでないなら0を返します。

^    排他的OR演算子  A^B:   二つのビットをくらべて、もしどちらか、もしくは片方が1なら1を
                       返します。そうでないなら0を返します。

~      補数演算子    ~A;    演算数のすべてのビットを反転させるために使います。

>>    右シフト演算子  A>>B;  右側の遠いビットを削除し、ビットを右に動かす。そして一番左
                       のビットの値に0を割り振る。それぞれの有効な右の動きひと
                       つにつき対象の整数を2で割っていく。

<<    左シフト      A<<B;  左側の遠いビットを削除し、ビットを左に動かす。そして一番右
                       のビットの値に0を割り振る。それぞれの有効な左の動きひと
                       つにつき対象の整数1に2を掛けていく。
____________________________________________
メモ:ビット演算子で結びついた演算数はどちらも(AもBも)整数でなければならない。


6‐その他の演算子

MQL4では、今紹介してきたどのカテゴリーにも入らないオペレーターがいくつかある.

   1-配列添字演算子( [] )
   2-関数呼び出し演算子( () )
   3-関数引数分離演算子( , )

   配列と関数については次の講義でとりあげますね。ですので、この3つの演算子はただ"その他   の演算子"とここでは記憶しておいてください。


演算子の優先順位

もしあなたが合成した式の中の演算子が自分の思ったように機能するような命令を明確に指示していないなら、その命令はその式の用途の中で優先順位が高く割り当てた演算子によって決定されます。つまり、優先順位の高い演算子は最初に処理されます。たとえば、除算演算子は加算演算子よりも高い優先順位にありますので、下の二つの例は同じように働きます。
____________________________________________
x+y/100
x+(y/100) //上の式をより明確にしたもの。
____________________________________________
結合した式を書くとき、かっこ()を使ってどの演算子を最初に処理するか明確に指示さなければなりません。その試みはあなたのコードを読むのを、また保持するのを簡単にしてくれるでしょう。

以下の表は、MQL4で優先順位が割り当てられている演算子を示したものです。その表の中に入っている演算子は、先行命令リストです。演算子の優先順位が高いものを上から順にならべてあります。
優先順位の高い演算子はそれと比べて優先順位の低い演算子よりも先に処理されます。同じグループの演算子は同じ優先順位です。同じ優先順位の演算子が同じ式で表れたら、どちらが先に処理されるかは、ルールにのっとって処理されます。代入演算子以外のすべての2進法演算子は左から右に処理されます。代入演算子は右から左に処理されます。
____________________________________________
() 関数呼び出し    左から右
[] 配列要素区間
____________________________________________
____________________________________________
! 否定           左から右
~  2進法の排他
+- 記号変換演算子
____________________________________________
____________________________________________
* 乗算         左から右
/ 除算
% 剰余
____________________________________________
____________________________________________
+ 加算          左から右
- 減算
____________________________________________
____________________________________________
<< 左シフト       左から右    
>> 右シフト
____________________________________________
____________________________________________
<  左不当       左から右
<= 等価左不等
>  右不等
>= 等価右不等
____________________________________________
____________________________________________
==  等価        左から右
!=  非等価
____________________________________________
____________________________________________
& 2進法AND演算子    左から右  
____________________________________________
____________________________________________
^ 2進法排他的OR演算子 左から右
____________________________________________
____________________________________________
&& 論理AND演算子    左から右
____________________________________________
____________________________________________
||  論理OR演算子     左から右
____________________________________________
____________________________________________
=  代入           右から左
+= 代入加算
-= 代入減算
*= 代入乗算
/= 代入除算
%= 代入余剰
>>= 代入右シフト
<<= 代入左シフト 
&= 代入ビットAND
|= 代入ビットOR
^= 代入排他的OR
____________________________________________
____________________________________________
,  コンマ              左から右
____________________________________________
楽しんでいただけましたでしょうか。

それでは。
Coders'Guru




FXボーイです。難しいですね!早くインディケーターの解説にいかないかなとか思いながら訳してます。今回ビットのことがよくわからずにopとかあまりわからないまま訳している形になってしまいました。Coders'Guruさんの講義でそのうち取り上げられるのでしょうか。。
opわかる方いらっしゃいましたら教えていただけると幸いです。

追記
opはおそらくオペランドであるということを指摘してくださった読者の方がいらっしゃいました。
以下引用します。

、「op1」という単語はよくわからないのですが、おそらくここでは「ビット列を1つ右にずらすと、左オペランドを2で割った数になる」という意味のことが書かれていると思います。(op1=左オペランドのこと?)
そして、ビット列を右にずらすと、左端のビットに補完が必要になるので、「一番右のビットに0を割り振る」は「一番左」だと思うのですがいかがでしょうか。
参考URL
http://www.hellohiro.com/basic/shift.htmです。

なるほど!おそらくそのとうりだとおもいます。
ご指摘ありがとうございました。参考URLも大変わかりやすいですね。

ビッド演算子はプログラミング経験のある方でないと理解しづらいと思うのですが、メタトレーダーではビッド演算子を使うことはほとんどありません。ですのでもしよくわからないという方がいらっしゃいましたら心配なさらないでください。






ともかくお疲れ様でした。最後までお読み頂きありがとうございました。





押していただけると大変嬉しいです。よろしくお願いします。
人気ブログランキングへ



theme : FXでシステムトレード
genre : 株式・投資・マネー

コメントの投稿

管理者にだけ表示を許可する

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

修正しておきました

間違いのご指摘ありがとうございした!参考URLも大変わかりやすかったです。

なんだか推敲して頂いてるみたいで恐縮です(笑)
すごく助かってます。これからもよろしくお願いいたします^^

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。