文系人間のためのシステムトレーダー養成所 メタトレーダー講座
--------

スポンサーサイト

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

メタトレーダー入門 ウェルカムレッスン

始めに。

C言語の知識が無い身でメタトレーダーって難しいですよね。
C言語の知識が無い僕としてはC言語の知識が前提として書かれているものが多い気がしてなかなかプログラミング技術を自分のものにできません。
そんななか、メタトレーダーまとめwikiで紹介されていたCodersGuruさんのメタトレーダー講義がメタトレーダーの根本から解説していて、C言語の知識がない僕でも素晴らしく解りやすかったので、本人の許可を取って日本語訳を連載することにしました。

メタトレーダーまとめwikiの管理人さん、CodersGuruさん、そしてメタトレーダースレでの情報提供者の方々に謝意をこの場をお借りして申し上げたいと思います。ありがとうございます。


プログラミング言語はほぼ知らず、英語も得意じゃないので英語を韓国語に翻訳するような気分(?)です。

CodersGuruさんのメタトレーダーレッスンの原書は↓にあります。
http://www.forex-tsd.com/lessons/208-lesson-8-variables-mql4-2.html

いろいろ読みづらいところもあると思いますが質問や誤訳等ございましたらお申し付けください。すぐに修正します。



それでは始めましょう。以下訳文です。


                       MQL4講座
                       Coders'guru
                        www.forex-tsd.com

                             -1-
                          ようこそ

MQL4講座へようこそ。
このシリーズでは、しっかりとした例をあげながら包括的な個別レッスンをすることでQL4の秘密や混乱を剥ぎ取っていきますよ。

もしあなたがC言語(もしくはC++言語)を操れるのなら、あなたはMQL4について、もう私の講義が始まる前にたくさんのことを知っていることになります。もしあなたがなんのプログラミング弦をを扱ったことがなくても問題ありません。私は、プログラミングの一般的な概念もよく理解できるように導いていこうと思っています。

それでは、最初の授業をはじめましょう。

MQL4?何?なぜ?どこ?

MQL4はMetaQuotes Language 4を表しています。
メタクオーターはメタトレーダー、トレーディングプラットフォームをつくった会社です。
そして他のトレーディングプラットフォームよりも強くするために、その会社はプログラミング言語をいれて、ユーザー(あなた)が自分のトレード戦略を記述できるようにしました。

その言語によってあなたは以下のものを作り出せます。
    
    1エキスパートアドバイザー
    2カスタムインディケーター
    3スクリプト

    ・エキスパートアドバイザーは貴方のために自動でトレードしてくれるプログラムです。例えば
     それはあなたの市場でのエントリー注文に手時まいを注文、注文の差し替えやキャンセル
     を自働にしてくれあなたに利益を提供します。

    ・カスタムインディケーターはテクニカル指標機能を使うことを可能にさせるプログラムで、そ
     れは自動売買をするものではありません。

    ・スクリプトは一つの機能を実行するためにデザインされたプログラムです。エキスパートアド
     バイザーとは違って、スクリプトは一回のみの実行で(要求次第ですが)値動きによって行
     われるものではありません。そしてもちろん、インディケーター機能にアクセスできません。

これらがMQL4とは何か?なぜMQL4を使うのかでした。
さぁ今度は、MQL4をどこに書くのかです。

MQL4コードを書くにあたって、ここでも例外なく、あなたは二つの道を選ぶことができます。険しい道と、楽な道です。(険しい道は大変なことを示すだけなので斜め読みで構わないと思います)

1-険しい道
険しい道では、あなたのすきなテキストエディターを使ってあなたのプログラムをコンパイルするように命令します。
メモ帳は悪くない選択です。でも以下二つのことを忘れないでください。
    1-あなたが真っ白なテキストで作ったファイルを保存すること。
    2‐ファイルを保存するときに.mp4(メタエディターと一緒に開きやすくするために)とすること。
     ファイルの名前の長さは自分の好きなように保存できる。

プログラムを保存した後に、あなたのコードを適用させるための特別な手順があります。
その手順をコンパイルといいます。
コンパイルの意味は、あなたが書いた人が読めるような簡易プログラムから、機械が読み込めるように機械語に変換するというものです。

メタトレーダーはMetaLang.exeと呼ばれる自分のコンパイラー(あなたの簡易プログラムを機械語に変換するプログラム)をすでに持っています。

Metalang.exeとは.二つの設定値をもち、ex4file(メタトレーダーが読み込むことができるファイル)を出力する入力装置プログラムです。
一つ目の設定値はオプション設定値で、ただ-qを抜かすだけに使用されます。
二つ目の設定値はあなたの.mpl fileのフルパス(ファイル名を指定するときに、ドライブ名から始めてすべてのディレクトリ名を指定して入力すること。)です。

シンタックスで記述すると次のようになります。
metalang[options...]ファイル名


  1‐あなたのmetalang.exeのパス(ファイルやフォルダの所在を示す文字列。)をみつける。それは
   メタトレーダーのパスと同じところにあるだろう(D:\Program Files MetaTrader4)
  2‐バッチファイル(起動するプログラムを順に列挙したファイル)をつくりそれにcompile.batと名前
   をつける(他のあなたの好きな名前でも良い)
  3‐以下の文をそのファイルに書き込み保存する。
   cdD:ProgramFilesMetaTrader4
   metalang-q"D:ProgramFilesMetaTrader4my_first_mql4_script.mq4"
   (メタトレーダーをインストールしたパスの場所に移動させとくことを忘れないでください)
  4‐バッチファイルを起動し、もしあなたが私のようにラッキーな人間ならばこのような画面が出
   てきます。

figur1.png


2‐楽な道
メタトレーダーはメタエディターという良質なIDE(integrated development editor)を備え付けており、以下の特徴があります。

1‐テキストエディターは、MQL4言語の構造とは大きく違う特徴をもっている。

2‐メタエディターなら、ただF5をクリックするだけで、ex4fileをつくるための大変な作業をやってくれ、
  簡単にあなたのプログラムをコンパイルすることができる。
  加えて、エラータブがあなたのプログラムの問題点は何かということを教えてくれる。

3‐便利な辞書が備え付けられており、F1を押すことによって、あなたの知りたい主要なキーワード
  の特徴を知ることができる。

つぎの講義では、私たちはメタエディターについてもっと詳しくなると思いますよ。

今日は自己紹介しにきただけだから、明日は本当の仕事がはじまりますよ。
明日は、私たちはMQL4のシンタックス言語について学ぶでしょう。

それでは
Coders'Guru



以上です。拙い訳文の中最後まで読んで頂きありがとうございました。



もしよろしければお願いします。
人気ブログランキングへ




スポンサーサイト

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

2009-03-07

メタトレーダー講義2 シンタックス言語

前回に引き続き今回はシンタックス言語についてです。

いろいろ読みづらいところもあると思いますが質問や誤訳等ございましたらお申し付けください。すぐに修正します。
時々文章の中にある茶目っけやハイテンションなところはCodersGuruさんによるもので僕によるものではありません

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

以下訳文です


                       MQL4講座
                       Coders'guru
                        www.forex-tsd.com

                             -2-
                         SYNTAX



あなたは最初のウェルカムレッスンでMQL4とは何か、なぜMQL4なのか、MQL4はどこかという非常に基本的な質問を解き明かしたが、楽しんで頂けましたか?

常にもっとも重要な質問はどのように です。その質問についての答えはこれからのレッスンによって明らかにしていきたいと思います。

さて、今、あなたの頭の中から雑念を取り除いて空っぽの状態にしていただき、次の概念を注意深く読んでください。

今日話していることはMQL4のシンタックス言語のルールにたいするものです。
そして以前あなたに言ったようにもしあなたがC言語(もしくはC++)を操ったことがあるのならば、もう私がレッスンを始める前にたくさんのMQL4を知っていることになるでしょう。
なぜなら、MQL4のシンタックス言語はとてもC言語に似通っているからです。

シンタックスのプログラミング言語における項目を辞書で調べてみましょう。
"出力する際に、使用を許可されている予約後や、変数、正しい論理構造の型をシンタックス言語という"


だから、私たちが新タックス言語を学ぶとき、同時にシンタックス言語の文法や記述のルールを学ばなければなりません。それは以下の四つが含まれています。
      ・フォーマット
      ・コメント
     ・識別子     
     ・予約語

さぁ始めましょう。


1-フォーマット



あなたがコードを書くとき、あなたは自由にスペースやタブ、改行を使って、自分が見やすいように、コードを分けたり、区切ったりすることができます。

例をあげると、これらの文はMQL4ですべて適用されます。
____________________________________________________________________________________________
double MacdCurrend,MacdPrevious,SignalCurrent;
___________________________________________________________________________________________
double
MacdCurrend,
MacdPrevious,
SignalCurrent;
____________________________________________________________________________________________
double      MacdCurrend,      MacdPrevious,      SignalCurrent;
____________________________________________________________________________________________
でも、まぁ見て頂ければ、一番最初の文が最も見やすく理解しやすいのではないでしょうか。


そして、世界万事の共通事項ですが、このルールにも例外があります。

1-"コンパイラ制御"の中で改行してはならない。

  コンパイラ制御については次のレッスンで説明するので、今はただこのことだけを記憶しておいてください。

  たとえば、次のコード分は、適応されません。
____________________________________________________________________________________________
  #property
  copyright"Copyright C 2004.MetaQuotes Software Corp,"
____________________________________________________________________________________________

  こちらは適応されるコンパイラ制御です。
____________________________________________________________________________________________
  #property copyright"Copyright C 2004.MetaQuotes Software Corp,"
____________________________________________________________________________________________

2-定数、予約語、識別子のなかで改行してはならない。

  たとえば、この文は適応されます。
____________________________________________________________________________________________
  extern int MA_Period=13;
____________________________________________________________________________________________
  "extern"と"int"は予約語。"MA_Period"は識別子"13"は定数です。
  次のレッスンであなたはより詳しくなるでしょう。

  次の文は適応されません。
____________________________________________________________________________________________
  extern int MA_Period=1
  3;
____________________________________________________________________________________________
  ex
  tern int MA_Period=13;
____________________________________________________________________________________________
  extern int MA_Period=1    3;    (タブが1と3の間に入っている。)
____________________________________________________________________________________________


2-コメント


プログラミングの世界を簡単にするために、プログラミング言語の中には、コメントを書くためのスタイルをもっているものがあります。
あなたはコード内に、コンパイラーが読み取らない文を記述することができます。それはあなたのコードを理解しやすく、はっきりさせることができます。
もしあなたが夏にプログラムを書いて、冬にそのプログラムを読み直すことがあったと仮定しましょう。
もしコメントがなかったら、あなたがもし仮にプログラマーだったとしても、パズルのような文をすべて理解することはできないでしょう。


MQL4(&C/C++)は、二種類のコメントスタイルがあります。


1-一行コメント


この一行コメントは、始まりに // をいれて、終りに改行すれば適応されます。


例えば
____________________________________________________________________________________________
//これはコメント
extern int MA_Period=13;
____________________________________________________________________________________________
____________________________________________________________________________________________
extern int MA_Period=13//これはまた別のコメント
____________________________________________________________________________________________


2-数行コメント
数行のコメントをする場合には、始まりに /* をいれ、終りに  */ をいれます。
文の一行めの始まりに /* をいれ、最後の行の文の終りに  */ を入れることによって、数行のコメントをすることができるのです。


____________________________________________________________________________________________
/*これ

複数
行の
コメントです*/
____________________________________________________________________________________________

以下のように、一行コメントを複数行コメントの中に入れ込むこともできます。
____________________________________________________________________________________________
/*これ

複数     //別のコメントはここに入り込んでいるよ。
行の
コメントです*/
____________________________________________________________________________________________

これは適応されます。
____________________________________________________________________________________________
extern int /*こんにちは!ぼくはコメントだよ*/MA_Period=13;
____________________________________________________________________________________________

でもこれは適応されません。
____________________________________________________________________________________________
extern int //テスト MA_Period=13;
____________________________________________________________________________________________


3-識別子 


識別子は、あなたが変数、定数、関数につけるのに選ぶ名前です。


たとえば、ここで使われているMA_Periodは識別子です。
____________________________________________________________________________________________
extern int MA_Period=13;
____________________________________________________________________________________________

識別子の名前を選ぶにはいくつかのルールや制限があります。


1-識別子の長さは31字以上になってはならない。


2-識別子は文字(小文字でも大文字でも可)もしくはアンダーバー "_" から始めなくてはならない。
 つまり、数字やアンダーバー以外のその他の記号から始めることはできない。


3-あなたは如何なる予約語も識別子として使うことはできない。
  +次の項目で予約語のリストがあります。


4-識別子の名前はとても敏感な問題であるので、
 MA_PERIODも、ma_periodも、MA_Periodも同じじゃありません。


5-アンダーバー以外の記号を使ってはならない。


例をいくつか見てみましょう。
____________________________________________________________________________________________
Name1         適応
_Name1        適応
1Name         不適応(先頭が数字)
~name1        不適応(記号で使っていいのはアンダーバーだけ)
N~ame1        不適応(上に同じ)
i_love_my _country_and_my_country_loves_all_the_world  不適応(31字を超えている)
Color          適応
color          不適応(予約語のなかにcolorが入っている)
____________________________________________________________________________________________


4-予約語



言葉をつかって特定の行為を引き出す語があります。

それらは言語用法として登録されているために、それを識別子や、その他の目的で使うことができません。

これはそれらの予約語のリストです。
____________________________________________________________________________________________
data types memory classes  operators   other
bool       extern       break     false
color       static        case      true
datetime               continue
double                 default
int                   else
string                 for
void                  if
                     return  
                     switch
                     while
____________________________________________________________________________________________

例えば次の文のコードは適応されません。
____________________________________________________________________________________________
extern int detetime=13;
int extern=20;
double continue=0;
____________________________________________________________________________________________
楽しんでいただけたでしょうか。
次の講義は"Data type"についてです!
準備はできていますか?いよいよ難しいところがやってきましたよ!

それではまた。

Coders'Guru



以上です。誤訳等が見つかりましたら教えていただけると助かります。




わかりづらい訳のなか最後まで読んで頂きありがとうございました。







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


それでは訳文です。
この文章はCodersGuruさんの↓が原文の訳になります。(翻訳しての転載に本人の許可はとってあります)
http://www.forex-tsd.com/lessons/208-lesson-8-variables-mql4-2.html

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

2009-03-08

メタトレーダー講義3 Datatype

それでは訳文です。
この文章はCodersGuruさんの↓が原文の訳になります。(翻訳しての転載に本人の許可はとってあります)
http://www.forex-tsd.com/lessons/208-lesson-8-variables-mql4-2.html


                       MQL4講座
                       Coders'guru
                        www.forex-tsd.com

                             -3-
                       DATA TYPES



私のMQL4の第三回目の講義へようこそ。

シンタックス講義は楽しんでもらえたでしょうか?前回の講義では以下の疑問に対してお答しました。

   ・MQL4ではどのような書式がつかえるのか。
   ・プログラミング世界を分かりやすくするためのコメントはどうやって書き込めるか。
   ・識別子とは何か。またそれを選ぶためのルールは何か。
   ・RQL4の予約語は何か。

今回は予約語の中のData type(情報様式)について取り上げます。楽しみましょう!

Data typeの意味は?

どんなプログラミング言語でも、データの記憶貯蔵庫(memory)の説明をする名前の型を持っています。
例えば、もし-2147483648から2147483648までの数字を記録している記憶貯蔵庫があったとすれば、ほとんどのプログラミング言語は、そのデータをInteger(整数)データタイプだと名付けるでしょう。

変数?

変数とは、データを保存すべき記憶貯蔵庫の場所はどれかを言及する名称です。

このことが鮮明にわかる助けになるように、記憶貯蔵庫は一連のサイズの違う箱であるとイメージしてください。箱の大きさは記憶容量単位(バイト)が要求する記憶貯蔵庫収容空間の大きさです。

     ・データを貯める箱を使うために、その箱は名前をつけられなくてはなりません。この過程を、
      declaration(宣言)といいます。

     ・宣言の過程において、あなたはコンピューターにどのような種類か、そしてどのようなサイズ
      の箱が使いたいかを知らせる言葉を使わなくてはなりません。そのコンピューターに伝える
      言葉をキーワードといいます。キーワードを使って宣言してるわけですね。

     ・もしあなたが情報の種類と関係がある意義のある名称を箱につけたなら、そのデータをより
      簡単に見つけられるようになります。その箱につけた名称のことを変数名(識別子とほぼ同
      義)といいます。

     ・データは、箱にいれられるときに、振り分けられながら箱にいれられます。
     
     ・あなたが作った箱に価値を付けたとき、同じ行であなたは計量値を宣言しています。この過
      程を(変数生成時に指定された値である初期値を格納することになるので)initialization(初
      期化)といいます

私たちが変数を作るとき、私たちの変数に、特定の記憶貯蔵庫の長さ(大きさ)を割り振ってほしいとコンピューターに告げています。文字列や、簡単な数字、文章、大きな数字は同じ記憶貯蔵庫の場所に入れておくことができないので、コンピューターはどのような種類のデータで、どのくらいの長さのデータなのだと私たちに聞くわけです。これがData typeの意味です。

例えば、もし私たちがこのコード文をコンピューターに言う時、
____________________________________________________________________________________________
int MyVaraible=0;
____________________________________________________________________________________________
これは、私たちはコンピューターに4バイトの長さの単位を私たちのつけた変数名称であるMy Variableに与えてくれと頼んでいるわけです。

いま使用した例を使って説明すると
int ←キーワード
int ←Integer data type
int ←Declaration(宣言)
MyVaraible←変数名
=0←初期化

MQL4で、これらはData typeの種類です。

   ・Integer(int)  整数
   ・Boolean(bool)論理型
   ・Character(char)文字
   ・String(string)文字列
   ・Floating-point number(double) 浮動小数点数(小数点が動くので少数と整数に対応)
   ・Datetime(datetime)



1- Integer(整数)

Integerは+ーどちらかの記号から始まる数字です。この範囲の値は-2147483648から2147483648までとなっています。
MQL4は10進法もしくは16進法が使えます。
例えば、以下の数字はIntegerです。
_____________________________________________________________________________________________
12,3,2134,0,-230
0x0A,0x12,0X12,0x2f
____________________________________________________________________________________________
int というキーワードを使うことで、整数の変数を作り出します。

例____________________________________________________________________________________________
int intIntger=0;
int intAnotherintger=-100
int intHexinteger=0x12
_______________________________________________________________________________________________
10進法と16進法について

10進法は10を基本にした数の記述で、アラビア数字(0,1,2,3,4,5,6,7,8,9)を使って数を
表します。これらのアラビア数字は時々端数の最初に小数点をつけて使われたり、+やマイナスの記号とともに数をあらわしたりします。

16進法について。
16進法は16を基本とした数表示で0~9もしくはA~Fまたはa~fの記号を使って表記されます。
例えば、10進法の79を16進法であらわすと4Fと表記することができます。


2-Boolean

Boolean変数はわずか二つの価値しかもつことのできないdata type(情報様式)です。
その二つの価値とはtrue(真)かfalse(偽)で、数字で表記するとしたらば0と1で書かれます。
そしてこれは記憶貯蔵庫の1ビットを占めます。
MQL4ではfalse,FALSE,False,true,TRUE,Trueどれも同じように使えます。

Booleanは偉大な数学者Boole Georgeにちなんで名付けられました。
Boolを使うことによってboolean変数をつくることができます。

例_________________________________________________________________________________________
bool I=true;
bool bFlag=1
Bool bBool=False:
____________________________________________________________________________________________
3-Character(文字定数)

MQL4は、このDatatypeをLiteral(文字の)と名付けています。
Aというアルファベット文字は、ASCII(American Standard Code for Information Interchange)が定められているアルファベット、数字、特殊なキー等計256種類の中の一つの”文字”(整数値)である。
“文字”はASCIIの位置と一致している整数の価値をもちます。
あなたは文字定数を書くときに、その文字の周りにクオーテーションマーク(')をつけなければなりません。(補足です。MQL4では、アルファベットや数値に対してそれぞれ決められた整数値が与えられています。ASCIItableをみて頂きたいのですが、たとえば0なら10進法で48の整数値が、Nなら78の整数値が与えられているわけです。character変数では' 'で囲むことにより、ASCIIに対応してない僕らが普段使っているアルファベットとして使えるようになります。)

例_________________________________________________________________________________________
‘a’, ’$’, ’Z’
____________________________________________________________________________________________
int キーワードを使ってcharacter変数を作り出すことができます。

例_________________________________________________________________________________________
int chrA=’A’;
int chrB=’$’;
____________________________________________________________________________________________
いくつかの文字の中で特別文字と呼ばれている文字があり、それはクオーテーションマークで囲まれても直接あらわすことができません。なぜならば、MQL4言語で、特別な用法として予約されているからです。
ここに私たちが特別な文字を表すためにエスケープシークエンス(拡張表記)とよばれるものを使います。そして、それはバックスラッシュを(╲)その文字の前につけることで表します。
尚、バックスラッシュはキーボード右下の「ろ」のところにおかれていますが、\がでてくるだけでバックスラッシュは通常でてきません。しかし\で代用できます。
 
例_________________________________________________________________________________________
int chrA=’╲╲ ’:  //スラッシュ
int chrB=’ ╲n’; //改行
____________________________________________________________________________________________

これらはMQL4におけるエスケープシークエンスです。
____________________________________________________________________________________________
╲r       復帰(現在の行の先頭位置へ移動する)
╲n       改行
╲t       水平タブ(次の水平タブ位置へ移動する)
╲╲       逆斜線
╲’       ‘
╲”       “
╲xhh       hhは任意の桁数の16進法  
____________________________________________________________________________________________
ascii.png


4-String(文字列)

String data typeは、ダブルクオーテーションマーク(”)で囲まれた一続きの文字列のことです。

一続きの文字列は文字が次々と続いていく配列で、その最初の添字は0からはじまります。
最後の文字データのあとに、NULL文字が次の配列の場所に置かれます。そのあとに使われていない配列の場所があろうが関係ありません。

NULL文字は、特別文字(ASCIIコードの0で表わされる。)で、文字列タイプの終わりの目印として使われます。

下の図をみてください。文字列定数のhelloの、文字配列について説明したものです。(CodersGuruさんのpdfファイルより転送)
 null

MQL4には文字列変数の大きさを255字を限界としており、どのような文字でも255字時を超えると、一般的に次のエラーがでるでしょう(too long string(255 characters maximum))

あなたは上で論じた特別な文字をどれでも前にバックスラッシュ(╲)をいれることによって、文字列定数でも使うことができます。

stringキーワードを使って文字列変数を作り出せます。

例_________________________________________________________________________________________
string str1=”Hello world。Coders guruです”;
string str2=”CopyrightC2005, ╲”Forex-tsd forum ╲”.”  // (“)に注目して
↑これはCopyrightC2005, ”Forex-tsd forum ”. のように表示されるのだと思います(バックスラッシュをいれなければ”はプログラミング上で表示されません。)
string str3=”1234567890”;
____________________________________________________________________________________________

5-浮動小数点(double)

浮動小数点は実数(これは、整数の部分とわけるためにドット.をつけて分数部分も含めることができる。)例をあげれば3, 0, -115, 5, 15, 0.0001等

浮動小数点のとれる値の範囲は-2147483648から2147483648です。

doubleキーワードを使うことによって浮動小数点変数を作り出すことができます。


例_________________________________________________________________________________________
Double dbnumber1=10000000000000;
Double dbnumber3=1/4;
Double dbnumber3=5.75;
____________________________________________________________________________________________

6-Color

Color data typeはMQL4の特別なdata typeです。MQL4は自分のExpert AdviserもしくはCustom Indictorを作った時に、メタトレーダーのチャートに表す色をもっています。そしてユーザーはExpert AdviserもしくはCustom Indictorのプロパティーを使って色を変えることができます。

あなたはcolor変数を以下の三つの方法で定めることができます

1- カラーネームによる指定>:良く知られているウェブカラーセットのカラー名をcolor変数に指定することが可能です。ウェルカラーセットは下を見てください。

2- 文字描写による指定:この方法は、あなたはキーワード(C)のあとにクオーテーションマーク(‘)を二つ使います。二つのクオーテーションマークの間に、赤、緑、青の明度を指定します。これらの明度は0~255までで指定してください。この明度は、10進法でも16進法でも記述することが可能です。

3-整数値による指定:ウェブカラーのすべてのカラーはそれぞれ整数値をもっています。あなたは10進法でも16進法でも記述することができます。そしてあなたはcolor変数を、その色が割り当てられた整数値で指定することができます。16進法での色指定の記述はこのようになります0xBBGGRR BBは青GGは緑RRは赤の明度を表します。

例_________________________________________________________________________________________
//1のカラーネームによる指定
Red
Yellow
Black

//2の文字描写
C’128,128,128’ //灰色
C’0x00,0x00,0xFF’//青

//3の整数値での描写
0xFFFFFF  //白
16777215  //白
0x008000  //緑
32768    //緑
____________________________________________________________________________________________
colorキーワードを使ってcolor変数を作り出します。

例_________________________________________________________________________________________
color clrl=Red;
color clrl=C’128,128,128’;
color clrl=32768;
____________________________________________________________________________________________
ウェブカラー

7-Date time

Datetime data typeはMQL4の特別なdata typeで、それは、データとタイムデータをもちます。あなたはキーワード(D)と、それに続くふたつのクオーテーションマーク(‘)を使用してDatetime変数を設定することができます。
二つのクオーテーションマークの間に、あなたは年、月、日、時間、秒の5つの値の文字列を記述します。
Datetime定数は1970年1月1日から2037年12月31日までの値をとることができます。

例____________________________________________________________________________________________
D’2004,01,01 00:00’//新年
D’1980.07.19 12:30:27’
D’19.07.1980 12:30:27’
D’19.07.1980 12’ // =D’1980.07.19 12:00:00’
D’01.01.2004’ //=D’01.01.2004 00:00:00’
____________________________________________________________________________________________
datatimeキーワードを使うことでdatetime変数をつくりだすことができます。

例_________________________________________________________________________________________
Datetime dtMyBirthDay=D’1972.10.19 12:00:00’;
Datetime dtl=D’2005.10.22 04:30:00’;
____________________________________________________________________________________________
楽しんでいただけましたでしょうか?
次のレッスンは、Operations&Expressionsです。
それでは
Coders’Guru

拙い訳文のなか最後まで読んで頂きありがとうございました。
プログラミング言語の知識がないのでプログラミング言語の辞書も引きながら訳してみたのですが、完璧に訳せているかは自信がありません。なにか誤訳がみつかりましたら教えて下さると幸いです。



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


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

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 : 株式・投資・マネー

2009-03-11

メタトレーダー講義第五回 ループと分岐第一部

この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)                
                   MQL4講座             
                   Coders'guru
                    www.forex-tsd.com                       
                         -5-
                    ループと分岐第一部

MQL4講座の第五回目の講義へようこそいらっしゃいました。

貴方が書いたプログラムの普通の流れのはステートメントからステートメントへと上から下へ実行していきます。(ステートメントとは、特定のアクションを実行または指定する言語エレメントです。while,if,for,else等)

ステートメントはコンピューターにある行動をしろと伝えるためのコード文です。

Print("hello world")
return 0;

最後についているセミコロンはシンタックスの重大な部分です。しかし、簡単に忘れてしまいまして、エラーの90%の原因がだいたいこのセミコロンのつけわすれになります。

しかし、上から下へと実行していくというケースには二つの例外がありまして、その例外にあたるのがループと分岐です。

貴方が書いた -人間が -決定する というこのようなプログラムは、環境が変わっている時にどのような反応をすればよいのでしょうか?このような場合、流れのコントローラーが、あるプログラムの部分から、他のプログラムへと飛び越します。そのような、飛び越しを起こすステートメントのことを、コントロールステートメントと呼ばれます。
そのようなコントロールにループと分岐があります。


               ループ
              --------


ループはあなたのプログラム区間をある決まった回数繰り返すことを命令します。
そしてこの繰り返しは、ある条件内に当てはまっている時は続き、ある条件に満たなくなった時に終わります。
ループが終わったとき、ループのコントロールを飛ばして、ループ区間の次のステートメントに移行します。

そしてMQL4では、二種類のループがあります。


forループ
-------


forループは最も簡単なループだと考えられています。なぜなら、すべてのコントロールエレメント(調整要素)が同じ場所に集まるからです。
forループはコード区間を決まった回数実行します。

例____________________________________________________________________________________________
int j;
for(j=0;j<15;j++)←コントロールエレメント(ループの動きを指定する要素)が同じ場所にきてますね。
print(j);
_______________________________________________________________________________________________

これはどのように働くのでしょうか?
forステートメントにはforキーワードが存在します。forの後のカッコ内の、セミコロンで分けられている三つの式がそのキーワードにあたります。

for(j=0;j<15;j++)

これらの三つの式は、前から順に初期値式、テスト式、インクレメント式になります。

j=0←初期値式    
j<15←テスト式
j++←インクレメント式 
ループ本体とは、ループの回数実行されるコードのことを言います。

Print(j);
↑が例における、15回実行されるコードなので、これがループ本体にあたります。

メモ:forステートメントは後にセミコロンがつきません。これは、forステートメントと、ループ本体はプログラムステートメントとして一緒の存在になるからです。

for(J=0;J<15;J++)
 ↑;がたしかについてないですね。

初期値式

初期値式は一回目の繰り返しの時しか実行されません。そしてループ変数に整数値(今回の例では0)を与えます。

ループ変数は、先ほどの例のように、前もってループ本体の外で宣言することもできます。

int j;

もしくは、下の例のように、ループのカッコ内で宣言することもできます。

for(int j=0;j<15;j++)

最初の例と上の例のコードはそれぞれの変数の範囲を除けば同じです。(変数の宣言と範囲については、変数講義のほうで詳しく説明します。)
外で宣言する方法は、コード全体の全ての文に変数を適応します。一方、括弧内での宣言は、forループだけに変数を適応させることになります。

下の例のようにコンマでforループを区切ることによって初期値式を増やして利用できるようになります。
____________________________________________________________________________________________
int i;
int j;
for(i=0,j=0;i<15;i++)
print(i)
____________________________________________________________________________________________

テスト式

テスト式は常に関係演算子をつかった関係式になります。(メタトレーダー講義第4回を参照なさってください。)

繰り返が行われている時はいつでも、繰り返しは続けるべきなのか止めるべきなのかの決定をするために評価している。もしも式の結果がtrue(真)ならば繰り返しは続けられるだろうし、false(偽)ならば繰り返しは止まるでしょう。

例では、ループの本体はj<15がtrueの間は i (Print(i))を出力し続けるでしょう。
i<15というのは、j=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14の時です。
そしてi15に到達したとき、ループはとまり、コントロールがループ区間を通過して、ループ区間の後のステートメントにいくでしょう。

インクレメント式
インクレメント式はループ変数(例ではjがループ変数)を1ずつ増やしていきます。
それはループの式の中で最後の段階として扱われます。初期値式でループ変数への処理がおわったら。テスト変数で条件が満ているかテストされ、ループ本体が実行されます。

このフローチャートがforループのフローチャートになります。
loop.png



初期値式のように、forループ本体の中に、一つ以上のインクレメント式もコンマで区切って挿入することができます。
____________________________________________________________________________________________
int i;
int j;
for(i=0,j=0;i<15;i++,j++)
print(i);
____________________________________________________________________________________________
でも、テスト式は一つだけしか使えません。(テスト式はfor(a;b;c)のうちのbです。一つ目の;から初まり、二つ目の;の前がおわりになります。コンマではなく、セミコロンで初期値式、テスト式、インクレメント式をわけているのを注目してください。上の例ではi<15がテスト式です。)

他にインクレメント式で注目しておくべきことは、ループ変数をふやすだけではなく、ループ変数をデクレメント(一つずつ減らす)する操作を行うこともできることです。例をみてください。
____________________________________________________________________________________________
int i;
for(i=15;i>0;i--);
Print(i);
____________________________________________________________________________________________

上の例では、iの初期値が15に設定されてループが始まります。そしてループする時に1ずつ減っていき、テスト式によってi>0であるかどうかチェックされます。
上の例では、15.14,13,12,11,10,9,8,7,6,5,4,3,2,1.が結果として生み出されるでしょう。

ループ本体の複数ステートメント

今までの例では、一つのステートメント(Print)しか使っていませんでしたが、例外もあります。
ループ本体を大括弧で区切ることによって複数のステートメントを使うことができるのです。例をみてください。
____________________________________________________________________________________________
for(int i=1;I<=15;i++)
{
Print(i);
PlaySound("alert.wav");
}
____________________________________________________________________________________________

上のループ本体のコードには二つのステートメントが含まれます。プログラムは最初のステートメント(Print)を実行し、そのあと二つ目のステートメント(Play Sound)を、ループが実行されるたびに実行するでしょう。
すべてのステートメントの後に、セミコロンを入れるのを忘れないでください。

Breakステートメント


forループ(whileループでもswitchiループでも)の中にキーワードがあると、ループの実行は終了し、ループ区間の後のステートメントにスキップします。

例_________________________________________________________________________________________
for(int i=0;i<15;I++)
{
if(i==10)
break;
Print(i);
}
____________________________________________________________________________________________
上の例では、i10に届くまでループが実行され、10になるとbreakキーワードがループを終わらせるでしょう。ですので、上のコードが生み出す値は0,1,2,3,4,5,6,7,8,9になります。

continueステートメント

breakステートメントは実行の流れをループの外に持っていきましたが、continueステートメントはループの一番上に戻させます。
例えば
____________________________________________________________________________________________
for(int i=0;i<15;I++)
{
if(i==10)continue;
Print(i);
_}
___________________________________________________________________________________________
上の例ですと、i10になるまでループを実行し、10になったら、continueキーワードがiの10回目を出力せずに、ループの先頭にループを戻します。つまり、上のコードが生み出す値は:0,1,2,3,4,5,6,7,8,9,11,12,13,14.になります。

最後に
もし貴方が望むなら、いくつかあるいはすべての式をforループから外すことができます。例えば
for(;;)
このループはテスト式がつねにtrue(真)であるというwhileループと似ています。
いまからwhileループについて説明しますね。


whileループ
---------


forループは普通、何回ループを実行するか分かっている時に使います。
もしあなたが何回ループを実行したいのか分からない時はどうしたら良いのでしょうか?
そのような時はwhileループを使用すればいいのです。

whileループはforループのようにテスト式があります。それでも、初期値式や、インクレメント式がありません。

これが例です。
____________________________________________________________________________________________
int i=0
while(i<15)
{
Print(i);
i++;
}
____________________________________________________________________________________________
この例で、あなたは次のことに注目してください。
    ・このループ変数は宣言と初期化がループ前に行われています。whileループでは、forループ
     のように宣言もしくは初期化を括弧内で行うことはできません。
    ・ここのi++ステートメントは誤解されがちなのですが、インクレメント式ではありません。しかし、
     whileループ本体には必ず何かのループ変数を変えるステートメントが存在します。そうでなければ、
     ループが終わることは永遠にないのですから。

上の例はどのように実行されるのか?

whileステートメントはテスト式しか含まれません。そして、それはすべてのループでチェックするでしょう。もしそれtrue(真)ならループは続くでしょうし、それがfalse(偽)ならループは終わり、コントロールはループセクションの次のステートメントへと移動するでしょう。

例では、ループはi16に届くまで実効するでしょう。i<15=falseになった時にループは終了します。

whileループのフローチャートがこちらになります。
whileflow.png


先ほど私は、whileループとforループは似ているといいましたね。これらは似た特徴があります。

1.breakステートメントやcontinueステートメントを使うことができます。
2.ループ本体に、ステートメントを1つで使うことも、2つ以上で使うこともできます。2つ以上で使う場合
 は、大括弧でくぎってください。
3.for(;;)while(true)は同じです。

楽しんで頂きましたでしょうか。これで今回の講義は終了になります。

それでは。
Coders'guru



以上です。最後まで読んで頂きありがとうございました。誤訳や、何かおかしいと感じられる点等ございましたら報告していただけると大変たすかります。

最後までお読み頂きありがとうございました。



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







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

2009-03-13

メタトレーダー講義 第六回ループと分岐第二部

この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)              
                     MQL4講座                          
                     Coders'guru               
                      www.forex-tsd.com                                  
                           -6-
                     ループと分岐
                          第二部
                      -------------------

第六回目のMQL4講義にお越し頂きありがとうございます。
前回の授業は楽しんでいただけましたでしょうか?

前回の授業では、ループについてお話しいたしました。
そして、一般的な一番上から下へとプログラムを実行していく流れを変える方法は二つあり、ループはそのうちの一つだとお話しいたしました。二つはめは、分岐です。

分岐がプログラムの中にあると、一回だけ、式の値によって別のプログラム部分へと飛び越します。
今からMQL4で使用可能な分岐ステートメントを紹介していきます。


ifステートメント

ifステートメントは 最も単純なステートメントです。例えば
____________________________________________________________________________________________
if(x<100)
print("hi");
____________________________________________________________________________________________

ifキーワードの後には括弧が続きます。括弧の中身はテスト式x<100)が入ります。テスト式の値がtrue(真)だった時はif本体が(Print("hi"))を実行します。値がFalseだった時はコントロール(何を実行するかを決めるもの)はif区間から抜け出し後に続くステートメントに移行します。

これがifステートメントを示すフローチャートです。
ifflow.png


if本体の中の複数ステートメント

ループのように、大括弧で区切ることによって、2つ以上のステートメントをif本体の中にいれることができます。(本体とは実際に実行されるコードの部分のことを指します。例では{}で囲まれた部分が本体です。)

____________________________________________________________________________________________
if(current_price==stop_loss)
{
     Print("you have to close the order");
     PlaySounde("awrning.wav");
}____________________________________________________________________________________________
==の記号に注目してください。 これは第四回講義、演算子と式で学んだ関係演算子です。
これを代入演算子である=と間違えてエラーをすることが頻繁におこるので気をつけてください。

ネスティング(複数の命令群をひとまとまりの単位にくくり(まとまりをネストといいます。)、ネストを何段階にも組み合わせていくことでプログラムを構成すること。)

ループと分岐構造は、お互いを本体の中に縫い付けることができます。あなたはifステートメントの中にループステートメントをいれることもできますし、その逆もできますし、ifステートメントの中にifステートメントをいれたりすること等もできます。

これは例です。
____________________________________________________________________________________________
for(int i=2 ; i<10 ; i++)
     if(i%2==0)
{
         Print("It's not a prime nomber");
PlaySound("warning.wav");
}____________________________________________________________________________________________
この例では、forループの中に、if構造が入り込んでます。
あなたはループ本体の周りに大括弧が無いのに気がつくでしょう。これは、ifステートメントと、ステートメント本体(ここではループ本文)の中にあるステートメントは、一つのステートメントとして考えられているからです。

if...elseステートメント
ifステートメントはもし条件がtrue(真)だった時のみ、何か実行させるようにしますが、もしfalse(偽)が出た時に違うことを実行させたいとおもったならば、if...elseステートメントの出番になります。
記述の仕方は、ifステートメント後に続くステートメントやステートメントのまとまりを書き終えた後に、elseキーワードとそれに続く他のステートメントもしくはステートメントのまとまりを書き込むのです。
例を見るほうが早いのでこちらをご覧ください。
____________________________________________________________________________________________
if(current_price>stop_lose)
     Print("It's too late to stop,please stop!");
else
     Print("you playing well today!");
____________________________________________________________________________________________
もしifステートメントのテスト式がtrue(真)なら、プログラムは最初のメッセージを表示し、もしもtrueでないなら、後の方のメッセージを表示します。

これは、if...elseステートメントのフローチャートです。
ifif.png


if...elseのネスティング

if...elseステートメントの中にifステートメントをいれたり、if...elseステートメントの中にif...elseステートメントを入れることができます。

このような感じです。
____________________________________________________________________________________________
if(current_price>stop_lose)
     Print("It's too late to stop,please stop!");
if(current_price==stop_lose)
     Print("It's time to stop");
else
     Print("you playing well today!");
____________________________________________________________________________________________
if..elseステートメントをネスティングするとちょっとした問題があります。うっかりelseを、意図していなかったif文とくつけてしまうのです。

この問題を解決するためには、二つの方法がありすのでどちらかをお使い下さい。

1-if...elseを括弧でくくって自分の対応させたいifとペアにして分けてください。このように
____________________________________________________________________________________________
if(current_price>stop_lose)
{
     Print("It's too late to stop,please stop!");
if(current_price==stop_lose)
     Print("It's time to stop");
else
     Print("you playing well today!");
}____________________________________________________________________________________________

2-もしあなたが上の解決策ができない(たくさんのif...elseステートメントがあるもしくは、めんどくさくてわけたくない等)場合は、以下のルールを守ってください。
elseは一番近くにあるifとくっつきます(上の例では、if(current_price==stop_lose)が一番近いif文ですね。)


switchステートメント

もし大きな分岐構文があって、すべての分岐が同じ変数値を使っているときは、switchステートメントを使うのはいかがでしょうか。

以下例文です。
____________________________________________________________________________________________
switch(x)
{
case'A':
 print("CASE A");
 break;
case'B':
case'C':
  Print("CASEB or C");
     break;
default:
Print("NOT A,B or C");
 break;
}
____________________________________________________________________________________________
caseのあとにはついているのはセミコロン( ; )ではなくコロン( : )であることに注意してください。
上の例で、switchキーワードのあとに括弧が続きます。括弧の中にはswitch定数がはいります。この定数はinteger(整数),character定数、定数式のいずれかが入ります。定数式は、例のように変数がはいることはできません。

caseX+Y: これはswitch定数には適応されません。

どのように働くのか。

switchステートメントは定数case定数のうちの一つとを結びつけます。
x=='A'のプログラムでは"CASE A"と出力し、breakステートメントがコントロールをswitch区間外へと移動させるでしょう。

x=='B'もしくはx=='C'のプログラムでは"CASE B or C"と出力します。なぜならbreakステートメントがcase 'B'の後ろにないからです。

x==どのcase定数にも当てはまらない時は、swtchステートメントは、default本体である
"NOT A, B or C"を出力します。

switchステートメントのフローチャートを載せますのでご覧ください。
switchflow.png


楽しんでいただけましたでしょうか。

それでは。
Coders'Guru



どうもお疲れ様でした。
あとは関数、変数、プリプロセッサの講義と続き、その次に待望のインディケーターの作り方に入ります! 基礎を固めておくことでインディケーター作りの意味が理解できるようになると思いますのでもう少々辛抱してください。

追記「今回訳していて、ループ本体の説明(メタトレーダー講義第5回のforループの所)と、キャラクター変数(メタトレーダ講義第3回DataType)の説明が一部間違っていたことに気がついたので、修正しておきました。簡単に言いますと、
ループ本体とは、ループによって実行されるコード(Print PlaySound等)のところを指します
キャラクター定数は、' 'を使うことによってASCIIに対応する整数を呼び出すのではなく、ASCIIに対応する整数を呼び出さずに、アルファベットとして表示する。
ということになります。
失礼いたしました。3月14日以前に今取り上げた講義をご覧になったかたはお確かめ下さい。
3月14日以降にご覧になっている方は修正してあるので問題ありません。」
↑この「」内の文章は4月15日になりましたらば消させていただきます。よろしくお願いします。


何かございましたらコメント頂けると嬉しいのでなんでもお書き下さい。よりよいサイトを目指してるので批判や質問も大歓迎です。よろしくお願いします。

最後までお読み頂きありがとうございました。


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






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

2009-03-14

メタトレーダー講義第七回 関数

皆さんこんにちわ。今回は関数についての講義ですね。これが終わればあと二つの講義でインディケーター作成の説明にはいりますので頑張りましょう!


この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)   
                            MQL4講座
                            Coders'guru   
                             www.forex-tsd.com                      
                                  -7-
                                関数


MQL4の関数の世界へようこそ。
関数には、どの言語の関数でも二つの段階があります。
つまらないものとして学んでいる段階
常に救命ボートとして使っている段階 です。

いつものことですが、今回も言わせて下さい。
前のレッスンは楽しめて頂けたでしょうか?楽しめて頂けると嬉しいのですが。

さぁ、それでは講義にまいりましょう。

関数ってなに?
関数はソーセージ製造器に大変よく似ています。とスパイスを入れると、ソーセージがでてきますよね。
お肉とスパイスが関数仮引数で、ソーセージが関数返却値(return値)になります。製造器それ自体が関数本体になります。
ソーセージ製造器と関数にはただ一つだけの違いがあります。その違いとは、関数の中にはなにも出さないことがあることです。(MQL4で何もreturn値に返さないことをvoid(空洞)といいます)

いくつかの例をみてみましょう。
____________________________________________________________________________________________
double //ソーセージの種類-返却値
my_func(double a, double b,double c)//関数名と仮引数リスト(肉とスパイス)
{
return(a*b+c)    //出てくるソーセージ-返却値
}
____________________________________________________________________________________________

上の例のように、関数は返却値のtypeである"double"から始まります。そして、括弧が後に続く関数名が続きます。
括弧の中にはお肉とスパイス...失礼しました。仮引数を入れてください。
ここでは三つの仮引数に対してdouble a, double b, double cを入れました。
それから、関数本体には始まりと終わりに大括弧をいれます。私たちの例では関数本体には演算子が生み出されています(a*b+c).
returnキーワードには最終結果を返す責任があります。


Returnキーワード

returnキーワードは関数を終わらせます(breakキーワードがループを終わらせたのと似ています)
そして、それは関数呼び出し式にコントロールを引き渡します。
returnキーワードは、上の式のように、その括弧の中に式を入れることができます。
例 return(a*b+c);この意味は関数を終わらせ、式の結果を返すというものです。
そして、これには、式がない場合や、今回のケースのように、式を終わらせるだけに使用することがあります。

注目:全ての関数がreturnキーワードを使うわけではありません。特に返却値がない場合は使わないことが多いです。例をご覧ください。
____________________________________________________________________________________________
void //voidはソーセージが-return値がないことを示します。
my_func(string s) //関数名と関数パラメーター(肉とスパイス)
{
  Print(s);
}____________________________________________________________________________________________

上の関数はreturn値がありません。でもそれは貴方が調達したパラメーターsを出力します。
関数に返却値がない時はvoidを関数返却タイプとして使います。
これらの関数の種類は、いくつかのプログラミング言語で"Methods(方法)"と呼ばれていますが、MQL4では、関数と呼びます。

関数呼び出し

私たちは関数が何かについて大変よく理解しましたね(私の希望的観測でしょうか?)。MQL4ではどのように関数を使うのでしょうか?

関数を書いて、あなたのプログラムで関数を使った後に、特別な処置が存在します。
この処置を、呼び出しといいます。

あなたが二つの整数(integer)の総和を集める(collect)関数を使ったとしましょう。
下の関数になります。
____________________________________________________________________________________________
int collect(int first_number,int second_number)
{
   return(first_number+second_number);
}___________________________________________________________________________________________

あなたは上の関数がどのように働くかわかるでしょう。しかし使ってはなりません。

このように使ってください。
____________________________________________________________________________________________
int a=10;
int b=15;
int sum=collect(a,b);
print(sum);
____________________________________________________________________________________________

上の例では魔法ように25が出力されます。でもどのようにしてわかるのでしょうか?
この魔法の行はint sum=collect(a,b)です。ここで貴方は変数(sum)に関数と返却値をもつように宣言し、関数に二つの仮引数(a,b)を与えたのです。
これを一般的に関数呼び出しといいます。
MQL4があなたの作った関数名を見た時、仮引数を持って、関数に行き、すぐに結果を持って戻ってきて、同じ行に結果を置きます。
これは、あなたが呼び出した関数の中の場所の代わりにすべての関数の文をコピーするようなものです。わかりましたか?

関数の中に関数をいれこむ。

あなたは関数本体のなかに、他の関数をまとめることができます。なぜなら、呼び出し文は普通のステートメントとして扱われるからです(実際ステートメントです)

例えば

今から上記のcollect関数の中に、collectionの結果を出力する新しい関数が入ったものを使います。

____________________________________________________________________________________________
void print_collection(int first_number,int second_number)
{
   int sum=collect(first_number,second_mumber) 
   Print(sum);
}____________________________________________________________________________________________

ここで私たちはprint_colllection関数本体の中にcollect関数を呼び出し結果を出力しました。voidの意味は返却値を返さないという意味でしたね。


MQL4の特別な関数 init(),deinit() start():

MQL4では、すべてのプログラムの始りに関数"init()"(初期化)があります。それはあなたのプログラム(エキスパートアドバイザー、カスタムインディケーター)とメタトレーダーチャートをくっつける時、もしくはあなたがチャート周期や通貨ペアをかえたりした時に発生します。
そしてその仕事はあなたのプログラムのメイン変数を初期化することです(初期化変数については次回の講義で触れることにします)

あなたのプログラムがその仕事を終えた時もしくは、チャートウィンドウをしまった時や、チャート周期
や通貨ペアをかえた時、メタトレーダーターミナルを終了した時に関数"deinit()"(de-initialize)が発生します。

第三の関数(最も重要な関数)は"start"()で、これは、新しい値段が記録されるたびに発生します。あなたのプログラムの90%はここの関数のなかで行われています。

これらの関数は、実際にエキスパートアドバイザーや、カスタムインディケーターのコードを打ち込んでいる時に、必須の知識としてより詳しくしることになるでしょう。

楽しんでいただけましたでしょうか。

それでは。
Coders'Guru


今回の講義は変数に次ぐ難しさでしたね。。プログラミング使える人ってすごいですよね。。
まぁ使ってるうちに分かるようになるというCoders氏を信じましょう。

ともかくお疲れ様でした。使っていくうちに感覚的にわかっていくと思います。


最後までお読み頂きありがとうございました。




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






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

2009-03-14

メタトレーダー入門第八回 変数

この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)         
                      MQL4講座      
                      Coders'guru             
                       www.forex-tsd.com
                           
                            -8-
                          変数 

MQL4変数の講義へようこそ。

前回の講義は楽しんでいただけましたでしょうか。そしてあなたが変数の難関に立ち向かう準備ができていることを祈ります。
わたしはDATA TYPESの講義をこの講義をよむ前に読んでおくことをお勧めします。

それでは変数を楽しみましょう

変数って何?

以前にこの秘密を貴方にお話したように、変数とは、データを保存すべき記憶貯蔵庫の場所はどれかを言及する名称です。

このことが鮮明にわかる助けになるように、記憶貯蔵庫は一連のサイズの違う箱であるとイメージしてください。箱の大きさは記憶容量単位(バイト)が要求する記憶貯蔵庫収容空間の大きさです。

     ・データを貯める箱を使うために、その箱は名前をつけられなくてはなりません。この過程を、
      declaration(宣言)といいます。

     ・宣言の過程において、あなたはコンピューターにどのような種類か、そしてどのようなサイズ
      の箱が使いたいかを知らせる言葉を使わなくてはなりません。そのコンピューターに伝える
      言葉をキーワードといいます。キーワードを使って宣言してるわけですね。

     ・もしあなたが情報の種類と関係がある意義のある名称を箱につけたなら、そのデータをより
      簡単に見つけられるようになります。その箱につけた名称のことを変数名(識別子とほぼ同
      義)といいます。

     ・データは、箱にいれられるときに、振り分けられながら箱にいれられます。
     
     ・あなたが作った箱に価値を付けたとき、同じ行であなたは計量値を宣言しています。この過
      程を(変数生成時に指定された値である初期値を格納することになるので)initialization(初
      期化)
といいます

私たちが変数を作るとき、私たちの変数に、特定の記憶貯蔵庫の長さ(大きさ)を割り振ってほしいとコンピューターに告げています。文字列や、簡単な数字、文章、大きな数字は同じ記憶貯蔵庫の場所に入れておくことができないので、コンピューターはどのような種類のデータで、どのくらいの長さのデータなのだと私たちに聞くわけです。これがData typeの意味です。

例えば、もし私たちがこのコード文をコンピューターに言う時、
____________________________________________________________________________________________
int MyVaraible=0;
____________________________________________________________________________________________
これは、私たちはコンピューターに4バイトの長さの単位を私たちのつけた変数名称であるMy Variableに与えてくれと頼んでいるわけです。

いま使用した例を使って説明すると
int ←キーワード
int ←Integer data type
int ←Declaration(宣言)
MyVaraible←変数名
=0←初期化

MQL4で、これらはData typeの種類です。

   ・Integer(int)  整数
   ・Boolean(bool)論理型
   ・Character(char)文字
   ・String(string)文字列
   ・Floating-point number(double) 浮動小数点数(小数点が動くので少数と整数に対応)
   ・Datetime(datetime)


以前のDATA TYPES講義の中から数行コピーしておきました。復習になりましたでしょうか。
さて、今から変数をどのように宣言するかについてから始めましょう。

宣言

変数の宣言の意味は、その世界への紹介と、変数タイプの指定です。宣言は、あなたがDATATYPESで学んだキーワード(int,double,char,bool,string,color and datetime)と、あなたがその変数のために選んだ名前を使うことによって行います。

例_________________________________________________________________________________________
int MyVaraible;  
____________________________________________________________________________________________
今あなたはMyVaraibleと名付けた整数タイプの変数を宣言しました。そして宣言する前に、MyVaraibleをあなたのコードに使うことはできません。もしも宣言なしで使用すれば、MQL4コンパイラは不平を漏らし、あなたに'MyVaraible'-varaible not defind.1 error(s),0 warning(s)とこのようなことを言うでしょう。

初期化

変数の初期化の役割は、ある一つの値を代入することです。例:MyVaraible=0;
宣言と同じ行で変数の初期化をすることもできます。     例:int MyVaraible=0;

そして、変数の宣言をある場所でして、初期化を他の場所で宣言することもできます。このように。
____________________________________________________________________________________________
int MyVaraible
...
...
MyVaraible=5;
____________________________________________________________________________________________
それでも、宣言は初期化の前に行わなければならないということは忘れないでください。

宣言の有効範囲

変数の有効範囲には二つの種類があります。 ローカル(局部)とグローバル(全体)です。

有効範囲の意味は、どの部分のコードが、変数を感知し、使用することができることというものです。

ローカル変数は、変数が宣言された外の世界は見られないものになっています。たとえば、関数の中で宣言された変数は、その関数ブロックのコードの一部になります。そして、コードのループや分岐ブロックのコードの中で宣言された変数はそれらのブロックの一部になり、外からはその変数を使うことはできません。

例えば、
____________________________________________________________________________________________
double my_func(double a,double b,double c)
{
int d;
return(a*b+c);
}
d=10  ←こういうことはできません。
____________________________________________________________________________________________

上記の例では、変数a,b,c,dはローカル変数になります。そしてそれは、関数ブロック(大括弧 { } の中に入っているものをブロックと呼びます)のコードの中でのみ使うことができます。そして、外のコードによって使われることはできません。ですので、上述のように、私たちは関数の後にd=10;等のような文を書くことはできません。なぜなら、関数の次の行からは、関数の外の存在になるので、dの変数を見ることができないからです。

第二の有効範囲はグローバル変数です。グローバル変数は、どのブロックコードにも属さず、ブロックコードの外側で宣言されたもので、あなたのコードのすべての場所から見られることができます。

例_________________________________________________________________________________________
int Global_Variable;
double my_func(double a,double b, double c)
{
return(a*b+c+Global_variable);
}
____________________________________________________________________________________________

ここでは、Gloval_Variable変数が関数の外側で宣言されていますので、あなたのプログラムの中のすべての関数によって見られることができます。
グローバル変数は、もしあなたが初期値を設定しなければ、自動的にゼロにセットされます。

Extern変数(外部変数)

externキーワードは特別な種類の関数の宣言のために使われます。このような関数は、プログラムデータを入力するのを決める時に使われます。そして外部変数はエキスパートアドバイザーやカスタムインディケーターのプロパティから配置することができます。

例_________________________________________________________________________________________
extern color Indicater_color=C'0x00,0x00,0xff'; //青
int init()
{
...

____________________________________________________________________________________________

ここにIndicator_color変数がextern変数として定義されました。これはあなたが最初に見るときは自分のインディケーター(もしくはEA)をメタトレーダーチャートに貼り付ける時になります。貴方はプロパティシートウィンドウで変えることができます。 これをみてください。

propertys.png


これらの
%K_period,%D
period,Slowing,
price_field,
移動平均の種別,
下限設定,
上限設定
変数が、externキーワードを使って定められた変数になります。ですのでプロパティーシートに現われました。
貴方の作るプログラムで変更可能な変数をつくりたいと思いましたら、extern変数を使えばどれでも可能です。

楽しんでいただけましたでしょうか。

それでは。

Coders'Guru


これで基礎知識の残すはプロパリティー一つとなりました!
お疲れ様でした。

あと少しなので気合いをいれて頑張りましょう!


最後まで読んで頂きましてありがとうございました。


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







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

2009-03-19

メタトレーダー講義第十回 初めてのインディケーター第一部

皆さんこんにちわ!ついに今回からインディケーター作成の実践ということになります。長かったですね!それでは張り切ってCodersさんの講義を見ていきましょう!


この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)       
                         MQL4講座  
                         Coders'guru   
                          www.forex-tsd.com
                               -10-
                         初めてのインディケーター
                           第一部


MQL4の実践講座へようこそ。今回はMQL4での初めてのインディケーターの講義になります。

これから続く実践講座の前に、今までの9回にわたって説明してきた講義をじっくりと読み返すことをお勧めいたします。なぜなら、これからの講義で取り上げて、作成していくカスタムインディケーターと、エキスパートアドバイザーの講義では、今までの知識をたくさん使うことになるからです。

本日は、とても簡単なインディケーターを作ろうと思います。それは、トレードにおいてそれほど意義のあるものではありませんが、MQL4のプログラミングの理解には大変大きな助けになるものです。

それは高値から安値を引いた値を出すというものです。急がないでください。すぐにあなたはすべてのことを理解できるようになります。

さぁいきましょう!

メタエディター

これはMT4(MetaTrader4)に備えられているプログラムで、それはプログラムを作成すること、MQL4を読み込む助けをし、プログラムをコンパイルしたり等することを可能にさせます。

私は簡単にアクセスできるようにするために、メタエディターのショートカットをデスクトップに作りました。もしあなたがメタエディターを起動させたいなら、3つの選択肢があります。

   1-MT4を起動し、F4をクリック、,ツールメニューからメタトレーダーを選ぶか、スタンダードツール
    バーのアイコンをクリック
   2-スタートメニューから、プログラムのなかからMetaTrader4のフォルダをさがして、MetaEditorを
     クリック
   3-MT4の備え付けられたパス(普通はC:/ProgramFiles/MetaTrader4)をみつけ、MetaEditor.e
     xeを探し出し、それをクリックする(私としてはこのショートカットをデスクトップに作ることをお勧
     めします。)


上にあげた方法を使うことによって、下の図のようなメタエディターが起動します。

図1をみればわかるように、メタエディターには三つのウィンドウがあります。

   1-エディターウィンドウ。プログラムを書き込むところです。
   2-ツールボックスウィンドウ。その中には3つのタブが含まれています。
     a. Errorsタブ。もしエラーがコードの中にあればそこで見れます。
     b. Find in filesタブ。Editに含まれているFind in fileを使うか、ホットキーとして登録されてい
       るCTRL+SHIFT+Fを押すことで、検索条件のキーワードが含まれているファイルをここで見
       ることができます。
     c. Helpタブ。貴方がより知りたいと思っているキーワードを強調(範囲を選択して青くすること)
       しF1をクリックすると、このタブで指定したキーワードに対する解説をみることができます。
   3-ナビゲーターウィンドウ。その中には三つのタブがふくまれています。
     a.Filesタブ。MT4フォルダ内に保存したファイルを簡単にアクセスするようになります。
     b.Dictionaryタブ。MQL4のヘルプシステムに簡単にアクセスできるようにします。
     c.Searchタブ。MQL4辞書を簡単に検索できるようにします。

エディター
                           図1-メタエディターウィンドウ

メタエディターメニューにツールバー、ウィンドウどれもをうまく使いこなすことをお勧めします。

それでは、初めてのインディケーター政策を楽しみましょう!

カスタムインディケーターはテクニカル指標を使うことができるようにするプログラムで、自動売買ができるようにするものではありません。


最初の三ステップ

さぁメタエディターを起動して、メニュー、ツールバー、ウィンドウをうまく使いこなしながらやってみましょう!

カスタムインディケーターを作るために、まず3ステップ踏む必要があります(後にこのめんどくさい作業を飛ばす方法を教えます。私の個人的な方法ですが)

ステップ1:Fileメニューをクリックします。→New(CTRL+Nのホットキーを使うか、スタンダードツールバーにあるNewアイコンをクリックすることでも可能です。)
そうすると、操作ガイド(図2参照)が次のステップへと案内してくれます。
Custom Indicator programをクリックして、次へを押してください。

figure3.png
                             図2-新規立ち上げ操作ガイド

ステップ2:次へをクリックすると、次の操作ガイドが現れます。(図3参照)そこではあなたのプログラムの特性を編集することができます。このステップで、今からあげていく特性を設定することができます。

   1-プログラム名。これは世界があなたをプログラムと一緒に呼び出す名前でもあります。そして、
     これはanatano_eranda_namae.mp4として保存されます。
   2-作者名。プログラムを作った人の名前。
   3-あなたのウェブサイトへのリンク
   4-外部変数リスト:少しここで外部変数について思い出してもらいたいのでとまります。
    外部変数は貴方のインディケーターのユーザーが、貴方のインディケーターのプロパティータブ
    から設定を変えることができる変数です。例えば、移動平均線のインディケーターにある移動平
    均線期間等
がそれにあたります。これらの変数はあなたのコードの中では"extern"キーワード
    で宣言されます。(変数の講義を読み返してみてください。)
    ここの操作ガイドでは、これらの種類の変数を追加することが可能です。

    私たちの初めてのインディケーターでは、外部変数について記述する必要はありません。図4
    に書かれていることだけ書いて、ステップ3に進みますので終わりましたら次へをクリック
    してください。
figure4.png
                             図3プログラム特性操作ガイド 


ステップ3:三つ目にでてくる操作ガイドはDrawing propaty操作ガイドです(図5参照)
ここでは、インディケーターのラインの描写プロパティーを設定することができます。例えばラインは何本か、色は何色か。どこにあなたのインディケーターを描くか(メインチャートか、それともセパレートウィンドウか。)

この設定ガイドは以上の設定をします。
   
   1-Indicator in separate windowオプション:これをクリックすると、そのインディケーターはメインチ
    ャートではなく、セパレートウィンドウに描かれます。もしクリックしなければ、そのインディケータ
    ーはメインチャートウィンドウに描かれることになります。
   2-Minimumオプション:これは貴方がセパレートウィンドウオプションをチェックした時にのみ利用
    可能なもので、チャートの底辺の値を設定する役割を持ちます。
   3-Maximumオプション:これは貴方がセパレードウィンドウオプションをチェックした時にのみ利用
     可能で、チャートの天井の値を設定する役割を持ちます。
   4-Indexesリスト:インディケーターのラインを増やしたり、初期設定の色をきめることができます。

これらのオプションについての詳しい解説は次の講義まで待って頂きたく存じます。どうか急がないでください。
私たちの最初のインディケーターでは、Indicator in separate windowオプションを選びAddボタンをクリックしてください。Addボタンをクリックすると、設定ガイドはindexesリストに、図5のようにラインを追加します。

Fifure5.png
                           図4描写特性設定ガイド

完了をクリックすると魔法が始まります。設定画面は立ち消えて、焦点はメタエディターへと戻りますが、、何だと思いますか?

貴方の最初のインディケーターで使うコードのしたが気の準備ができているのです。

これが貴方が得られるであろうコードです。

//+------------------------------------------------------------------+
//| my_first_indicator.mq4 |
//| Codersguru |
//| http://www.forex-tsd.com |
//+------------------------------------------------------------------+
#property copyright "Codersguru"
#property link "http://www.forex-tsd.com"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red

//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{

//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int
counted_bars=IndicatorCounted();
//----

//----
return(0);
}
//+------------------------------------------------------------------+

上のコードを見ればわかるように、設定ガイドはたくさんのコードを貴方のために書いてくれていたのです。ここで私は設定ガイドとあなた方に感謝の念をささげたいと思います。

次の講義では、上記の全てのコード文と、はじめてのインディケーターを作るために追加したコードを発見することがでるでしょう。準備が整ったことを願います!

それでは。
Coders'Guru


いよいよ始まりましたね。これからも頑張って訳していきたいと思いますので、よろしくお願いいたします。


本日もお疲れ様でした。


サイトを訪れてくれる皆様に感謝しています。最初このブログを立ち上げた時は1日に20人くらいしかこなくて無駄な作業をしてるような気分になったこともありました。自分一人でやっていたらば丁寧に訳そうとか思わないので中途半端な理解しかできなかったと思います。
今回初めて訪れて下さった方、もう何回か訪れてくださっている方、温かく見守ってくれている方、たまたま通りがかった方。ここにいらっしゃった理由は様々だと思います。
それでも、相場は孤独なものですので余計に、メタトレーダーを使おうとしているのだなぁと思うとつい親近感を

勝手に覚えています(笑)

本日はいかがだったでしょうか。勝たれた方も負けてしまった方も、ゆっくり休んでまた明日に備えてください。

本日も最後まで読んで頂きありがとうございました。





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



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

2009-03-20

メタトレーダー講義第11回 初めてのインディケーター第2部

この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)         
                      MQL4講座       
                     Coders'guru                               
                      www.forex-tsd.com                          
                           -11-
                 初めてのインディケーター
                 第2部



初めてのインディケーターの第2回目の講義へようこそ。
前回の講義では、私たちは何もコード文をかきませんでした。それはなぜなら、操作ガイドが私たちのためにコードを書いてくれていたからです。ありがとう!

今日は、私たちのプログラムがより役立つものになるように操作ガイドが作ってくれたコードに少し文章を追加していきましょう。
その後、コード文の1行1行説明していきます。

さぁ記述しましょう!

追加するコード

追加するコードは前回のコード文に太字の蒼黒色で描き込みます。

//+------------------------------------------------------------------+
//| my_first_indicator.mq4 |
//| Codersguru |
//| http://www.forex-tsd.com |
//+------------------------------------------------------------------+
#property copyright "Codersguru"
#property link "http://www.forex-tsd.com"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red

//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{

//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
string shotr_name="Your first indicator is running!";
IndicatorShortName(short_name);



//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int
counted_bars=IndicatorCounted();
//----check for possible errors
  if (counted_bars<0) return(-1);
//----last counted bar will be recounted
  if(counted_bars>0) counted_bars--;

  int pos=Bars-counted_bars;
  
  double dHigh , dLow , dResult;
  Comment("hi! I'mhere on the main cart windows!");


//----maincaluculation loop
  while(pos>=0)
   {
      dHigh=High[pos];
      dLow=Low[pos];
      dResult=dHigh - dLow;
      ExtMapBuffer1[pos]=dResult ;
      pos--;
    }

return(0);
}
//+------------------------------------------------------------------+

____________________________________________________________________

どのように動くの?

コード文を書いたらそのあと、そのコード文を説明していきます。もしそのコード文に取り上げるべきトピックス(テーマを決めて行うべき学習)がないのなら、その時はコード文を直接説明します。しかしほとんどの時間は、いくつかの一般的なトピックスを議論するために立ち止まることになります。

それでは、コードを1行1行解明していきましょう。
//+------------------------------------------------------------------+
//| my_first_indicator.mq4 |
//| Codersguru |
//| http://www.forex-tsd.com |
//+------------------------------------------------------------------+


コメント:

最初の五行のコード(灰色のコードです)はコメントになります。
コンパイルが無視するであろうコード文を書くためには、コメントを使用します。
コメントを書くべき理由はたくさんの理由があります。
    ・コード文をきれいにするため
    ・著作権や、制作日等を記述するため
    ・コード文をよりわかりやすくするため
    ・私たちにあなたのコードがどのように動くかを説明するため。
    ・etc...

コメントは2種類書くことができます。

1行コメント:  1行コメントは"//"で始まり、終わりには改行を使います。

複数文コメント:複数文コメントは"/*"で始まり、"*/"で終わらせます。これによって1行以上のコメント
         がかけるようになります。

MQL4操作ガイドはプログラム名著作名リンクを記入したデータを取り入れ、それらをコメントとし私たちのプログラムの先頭に記述します。
____________________________________________________________________

#property copyright "Codersguru"
#property link "http://www.forex-tsd.com"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red



propertyコマンド

貴方が注目したように、これらの文はすべて"#property"から始まっています。これはなぜなら、プリプロセッサコマンドのうちの一つである、propatyコマンドと呼ばれているものだからです。

プリプロセッサーはコードを読み込む前にそれらを実行できるようにするためにコンパイラーに渡す取扱い説明書です。

propertyコマンドは、MQL4に内蔵され、予め定義された定数でコンパイル制御と呼ばれています。
役割は、あなたのプログラムの特性を指定するものです。
例えば、あなたのインディケーターは、メインチャートウィンドウもしくはセパレートウィンドウのどちらに現わしますか?プログラムの作成者は誰ですか?といったものです。

メモ:プリプロセッサーの文の終わりはセミコロンの記号ではなく、改行でおこなってください。

link:
このプロパティーはあなたのウェブサイトのリンクをしていするものです。操作ガイドの2ステップめで記入したものが表わされます(詳しくは前回の講義をご覧ください。)
データタイプはstringになります。

copyright:
プログラムの著作者の名前です。link propertyと同じように、操作ガイドのステップ2で記入したものが表示されます。
データタイプはstringです。

stacksize
すべてのスレッド(ソフトウェアの実行単位)のために割り当てられたメモリーの大きさ。整数値で表わされる。初期設定値は16384。データタイプはintegerです。

indicator_chart_window:
このプロパティーを指定すると、あなたのインディケーターはメインチャートウィンドウ(図1参照)に描かれるようになります。貴方はインディケーターを二つのオプションのうちから一つを選ばなくてはなりません。このpropertyを使ってメインチャートウィンドウに描くか、それとも indicator_separate_windowのpropertyをつかって、セパレートウィンドウに表示させるかです。同時に二つを使用することはできません。
データタイプはvoidを使用しますつまり、何も値をとらないということです。

indicator_separate_window:
このpropertyをセットすると、あなたのインディケーターはseparate window(図1参照)に描かれます。セパレートウィンドウのとる範囲を二つのpropertyを使うことによって指定することができます。indicator_minimumを使って最小値を指定し、indicator_maximumを使って範囲の最大値を指定することができます。
そして、indicator_levelNのpropertyを使うことによってインディケーターのレベルの範囲も指定できます。インディケーターに割り当てられた数字がNになります。

indicator_chart_windowindicator_separate_windowの二つのpropertyはvoidのデータタイプです。voidは何も値を取ることがないことを示し、ただそれを書き込んでください。

今回のプログラムでは、セパレートウィンドウにインディケーターを割り振ります。
#property indicator_separate_window

chartwindow.png
                      図1



indicator_minimumu
このpropertyによって、セパレートウィンドウの目盛の最小値を決めることができます。これはウィンドウの底辺になります。具体的にいうと
#property indicator_minimum     0
#property indicator_maximum     100
ここではウィンドウの底辺を0に、天井を100(indicator_maximumをご覧ください)に指定しました。そのようなわけで、もしこのコード文を書き入れると、私たちのインディケーターが描かれるセパレートウィンドウ目盛範囲は0から100になります。
データタイプはintegerになります。

indicator_maximum:
このpropertyにより、セパレートウィンドウの目盛の最大値を決めることができます。これはウィンドウの天井になります。値はindivator_minimumの値よりも大きくなくてはなりません。データタイプはintegerになります。

indicator_levelN
このpropertyにより、インディケーターの範囲内でレベルを指定することができます。その範囲は、indicator_minimumuと、indicator_maximumuで作りだした範囲内に収めなくてはなりません。つまり、indicator_levelNの値は、indicator_minimumよりも大きく、indicator_maximumの値よりも小さくなくてはならないということです。
Nは、レベルを指定しているインディケーターナンバーで、1から8までの値しかとれません。(なぜなら、プログラムでは、8つのインディケーターバッファーしか使用することが許されていないからです。ですので、indicactor__levelは、使っているNの数それぞれにレベルを指定することができます。)例えば
#Property indicator_minimum   0
#Property indicator_maximum   100
#Property indicator_level1     10   //最初のインディケーターバッファーレベルの指定
#Property indicator_level2     65.5  //二度目のインディケーターバッファーレベルの指定

このpropertyのデータタイプはdoubleになります。

indicator_buffers:
このpropertyを使用することにより、ラインを描くために割り当てたメモリー空間(配列)の数を指定します。数を指定(1の範囲で)するときに、私たちはMQL4に「私のインディケーターラインを描くためにメモリー空間を割り当てておくれ」と伝えていることになります。

私たちのプログラムでは、ひとつのバッファーしか使いません。
#property indicator_buffers 1
これは私たちが一つのラインしか使わないからです。
(ラインとは指標の線のことを指し、MACDやストキャスティクスなら2本、RSIなら一本といったことになります。MACDやストキャスティクスならindicator_bufferは2になります。)

indicator_colorN:
私たちは8つのラインをインディケーターに使用することができますが、indicator_colorNのpropertyを使用することによって、それぞれのラインの色を指定することができます。Nは、indicator_bufferで定めたラインナンバーに対応します。(今回はindicator_bufferでNをに指定したのでindicator_colorのN以外取ることができません。)
あなたのインディケーターのユーザーは、この色をインディケータープロパティから変更することができます。(図2参照)
私たちのプログラムでは、インディケーターラインの色は赤に設定しています。
"#property_indicator_color1 Red
このデータタイプはcolorをとります。
____________________________________________________________________

colorpro.png
                     図2

____________________________________________________________________

double ExtMapBuffer1[];

配列:

私たちの人生は、普通似た目的も人たちが集まりグループを形成します。プログラミングでも、同じタイプのデータ項目が一緒になってグループを作る必要があります。この仕事を配列を使うことによっておこないます。(こうすることで、例えば50あるintegerタイプの変数をいちいち宣言しないで済むようになります。)
配列は一覧表と大変よく似ています。あなたは表の中に分類分けした項目を集め、そしてその項目を行数を指定することで利用します。配列の中での行数はインデックスと呼ばれます。


使用する配列を宣言するためには以下のようにおこないます
int my_array[50];
ここでは、配列をintegerタイプだと宣言しました。そして、その配列には50項目のintegerタイプの変数を持つことができます。

項目のインデックスを使用することで、配列の中のそれぞれの項目を利用することができます。
My_array[10]=500;
ここでは、配列の中の項目番号(インデックス)10のものを500と指定しました。(My array[10]は自然とintegerタイプになります。)

同じ列の配列の宣言を同時に行い初期化することもできます。
int my_array[5]={1,24,15,66,500}:

私たちのプログラムではこのコード文をつかいました。
double ExtMapBuffer1[];

ここでは、私たちはdoubleタイプの配列と宣言しています。これは、配列をチャートに描くための値を算出するために使うことになります。(今回のコードの一番最後の方に書かれているExtmapBuffer1=dResult;で値の結果がつねにdoubleであると指定して、割り振っていることになります。)

____________________________________________________________________________________________

int init()
{
}


特別関数

関数はコードのひとかたまりで、機械のように材料を投げ込まれると、製品を生み出す働きをします。(詳しくは第7回講義―関数をご覧ください。)
MQL4は3つの特別な関数があります。
init():
全てのプログラムはその他のどの関数よりも前に、この関数から起動します。ここには貴方の変数の初期値を入れなければなりません。
start();
ここが最も働く場所になります。新しいティックが受け取られるたびにあなたのプログラムは関数を呼び出します。
deinit();
これは、プログラムが終了される前に呼び出される最後の関数になります。ここでは貴方が望めばどのような処理でも行うことができます。
____________________________________________________________________
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
string shotr_name="Your first indicator is running!";
IndicatorShortName(short_name);




Custom indicator function:

今回の講義ですべてのインディケーター関数の解説を行うことはできませんが、次の講義ではその詳細とともにすべてを取り上げたいと思います。ですので、今回は私たちが作っているプログラムに出てくるもののみを取り上げたいと思います。

SetIndexStyle
____________________________________________________________________________________________
void SetIndexStyle(int index,int type,int style=EMPTY,int width=EMPTY,color clr=CLR_NONE)
____________________________________________________________________________________________

この関数は描かれるラインのスタイルを指定します。

この関数のインデックス(項目番号)設定値の範囲は0~7です。(なぜなら配列は0から始まり、ライン数の限界は8本と決まっているからです。)そしてSetIndexStyleを使用してラインのスタイルを指定していきます。(今回は、ラインは一本だけなので、必然的にインデックスは0です。1から始まるのではなく0から始まることに注意してください。)

type設定値はラインの形の種類を決定するもので、以下のtype定数から一つ選ぶことができます。
DRAW_LINE(ラインで描く)
DRAW_SECTION(セクションで描く)
DRAW_HISTOGRAM(棒グラフで描く)
DRAW_ARROW(マークで描く)
DRAW_NONE(何も描かない)
初期設定値はDRAW_LINEになります。

style設定値は、ラインを描く時の線種を設定するものです(点線とか太い線とか)以下のstyle定数から選ぶことができます。
STYLE_SOLID(通常の線をかく)
STYLE_DASH(ダッシュの線を書く   ― ― ―)
STYLE_DOT(ドットの線を書く      ・・・・・・・・・)
STYLE_DASHDOT(ダッシュとドットの線を書く  ― ・ ― ・ ― ・)
STYLE_DASHDOTDOT(ダッシュの後にドットが二つ続く線をかく   ― ・ ・ ― ・ ・ ― ・ ・)
初期設定値はSTYLE_SOLIDになります。線の太さ(width)が2以上の時は設定できないので気を付けてください。

width設定値は線の太さを決めるもので1から5までの範囲で選択できます。初期設定値はになります。

clr設定値はラインの色をきめるものです。それはcolor変数の値をとります。初期設定値はになります。

私たちのラインに関するコード
SetIndexStyle(0,DRAW_LINE);
インデックスは0に指定しました。これは私たちは第一の(そして唯一の)ラインに指定したことになります。

そしてラインの形のタイプをDRAW_LINEに指定しました。その他のstyleの設定は、何も記述していないので初期設定(STYLE_SOLID,1,黒)に設定されることになります。ただしここでラインの色は、#property indicator_buffers 1で赤に設定されているため赤が表示されます。ちなみにDRAW_LINRも初期設定値に設定されているため、 SetIndexStyle(0,DRAW_LINE);は記述しなくても同じ結果が得られます。
SetIndexStyleは、 SetIndexStyle(インデックス(ラインの指定),type,style,width,color) のように記述するので、ラインのスタイルをあらかじめ指定したい場合には以下のように記述します。

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_DOT,1,Blue);

コンマで区切っていくことを忘れないでください。


SetIndexBuffer:
____________________________________________________________________________________________
bool SetIndexBuffer(int index,double array[])
____________________________________________________________________________________________
この関数は、インディケーターを描くインディケーターバッファーの値に割り当てる配列を指定します。

この関数はバッファーのインデックスをとります。0というのは最初のバッファーで、1というのは二つ目ということになります。そのあと、配列の名前をとります。
今回はラインが一つしかないので、必然的に配列のインデックスは最初のバッファーである0になります。
もしその関数が成功すればtrueが帰ってくきますし、falseが帰ってきたらば成功ではなかったことになります。
私たちのプログラムでは、算出値をとどめておく配列はExtMapBuffer1になります。
そして私たちはただ一つのインディケーターバッファーを持っています。(#property indicator buffers 1)ですので、これが、割り振られたバッファーです。

IndicatorShortName
____________________________________________________________________________________________
void Indicator ShortName(string name)
____________________________________________________________________________________________

この関数はチャートウィンドウ左上の角(図3)に表示される文章を指定します。
私たちのプログラムでは、string変数を宣言し、その値を"Your first indicator is runnning"と割り振りました。それからその変数をIndicatorShortName関数に受け渡します。

string shotr_name="Your first indicator is running!";
IndicatorShortName(short_name);



shortname.png
                          図3
____________________________________________________________________
return(0);

これがinit()関数の戻り値であり、関数の終着点になります。そして次のstart()関数の実行へとプログラムを渡します。
____________________________________________________________________________________________


int deinit()
{

//----

//----
return(0);
}
denit()関数について新しく言うことはありません。

次の回に残りのコードについて解説しようと思います。
楽しんでいただけましたでしょうか。

それでは。
Coders'Guru


本日もお疲れ様でした。
ようやく実践にはいってきて楽しいですね!
まず自分でコードを作って、そのコードと見比べながら読み進めていき、バッファー0の意味がわからなかったら1にしてやってみるとか試行錯誤しながらやっていくとより詳しく理解できるのではないかとおもいます。

質問等ございましたらできる限り答えられるように努力いたしますのでお気軽にどうぞ。

インディケーターが自分の手で作れるようになるためにも頑張りましょう^^

本日もありがとうございました。



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




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

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