タイトル画面を表示
為替ロボット研究所

~お知らせ~


2007年08月23日 このサイトの内容について>>
長らく放置が続いていてすみません・・ フォーラムのほうもなぜ... 続き

2006年07月18日 メンテナンス>>
サイト全体のメンテナンスをしますので、しばらくコメントやトラ... 続き

2006年03月09日 wiki いれてはみたものの・・>>
先日pukiwikiをインストールしてみたんですが、全然わか... 続き

2006年01月21日 あけましておめでとうございます>>
遅すぎるご挨拶で申しわけありません・・ 早いもので1月ももう... 続き

2005年08月27日 更新が遅くてすみません>>
ここしばらく、いろいろと更新が滞ってしまっています。。 ブロ... 続き

~最近のエントリー~

2005年11月26日

プログラムの作成 練習2-4 繰り返しフォー

次は繰り返し処理を行なう方法です。

"Hello"と10回表示させたい時、
Print("Hello"); を10回書いてもいいですが、このようにfor()を使うと楽にできます。

int i;
for(i=0; i<10; i++){
Print("Hello"); // *
}

*の行が10回繰り返し実行されます。

for(i=0; i<10; i++){  ~ } を翻訳(?)すると、
「①始めに i=0をセットします。そしてi<10なら、{}の処理を行いなさい。
 ②{}の処理が終わったら、i++(iを1増やす)を行ない、
 ③それでも i<10なら{}の処理を行いなさい。
 (以下、②③のくりかえし)

こんな感じです。

最初は、i=0なので i<10 ( 0<10 )となり、*のPrint文が実行されます。
それが終わったところで、i++ で iが1になりますが、それでも i<10 ( 1<10 )なので、*のPrint文が実行されます。
そして、i=2、3、4・・・と繰り返していって、iが9の時、*のPrint文を実行したあと最初に戻り、
i++をすると、iは10になります。
i=10だと i<10 の条件を満たさなくなるので、forの処理は終了です。

つまり、i=0からi=9まで合計10回、処理が行なわれるわけです。

この実行結果を見ると分かりやすいと思います。
int i;
Print("forの前");
for(i=0;i<10;i++){
Print("Hello i="+i);
}
Print("forの後");

結果は、
「forの前」
「Hello i=0」
「Hello i=1」
 ・・・
「Hello i=9」
「forの後」
となります。


for( ) は入れ子式にすることもできます。

int I,J;
for(I=0; I<10; I++){
 for(J=0; J<10; J++){
  Print("I="+I+ ",J="+J);
 }
}
Print("end");

結果は、
I=0,J=0
I=0,J=1
 ・・・
I=0,J=8
I=0,J=9
I=1,J=0
I=1,J=1
 ・・・
I=1,J=9
I=2,J=0
 ・・・
 ・・・
I=9,J=9
end

応用として、
このようにするとティック更新の度に、直近10足分の始値が出力されます。
int start(){
int i;
for(i=0; i<10; i++){
Print("Open["+i+"]="+ Open[i]);
}
}
結果は
Open[0]=114.40
Open[1]=114.23
Open[2]=114.30
...
Open[9]=114.89

Open[ ]はMT4に備わっている機能で、指定した本数分 前の足の始値を得るものです。
Open[0]は現在の足、Open[1]なら一つ前の足の始値になります。
上の例だと新しいものから順に出力されますが、古い順に出力したい場合には、

Print("Open["+i+"]="+ Open[i]);
iを下のように(9-i)に変えます。
Print("Open["+(9-i)+"]="+ Open[9-i]);

もしくは、

int start(){
int i;
for(i=9; i>-1; i--){
Print("Open["+i+"]="+ Open[i]);
}
}
のように、繰り返しのたびにiを減らしていくように、for文を変更するといいでしょう。
( i=9,8,7,,,1,0 と変化していきます)

結果
Open[9]=114.89
Open[8]=114.80
Open[7]=114.20
...
Open[0]=114.40

投稿者 kawarobo : 16:00 | コメント (0) | トラックバック (2)

2005年11月20日

プログラムの作成 練習2-3 条件分岐

プログラミングに欠かせない処理、条件分岐を練習してみましょう。

条件分岐は、
「こういう状態なら○○の処理を、そうでないならxxの処理を実行せよ」
というふうに、条件に応じて処理内容を変えるものです。

mq4ではif()を使います。

int start(){
 int i;
 i=1;
 if(i==1){
  Print("OK");①
 } else{
  Print("NG");②
 }
}

if()は「もし()内の条件が真ならば、そのあとの{}内の処理を行い、偽ならば、else以下の処理を行え」というものです。
つまりこの例では, i が1なら①の処理を行い、iが1以外なら②の処理を行ないます。iには1を代入していますので、①が実行されて「OK」が出力されます。

i==1と「=」が二つ並んでいることに注意してください。=を一個だけにしているとエラーが出ます。

==は比較演算子と呼ばれるもので、両辺の値を比較するための記号です。

・A == B AとBが等しければtrue(真)
・A != B AとBが等しくないならtrue
・A > B Aのほうが大きいならtrue
・A >= B AがB以上ならtrue(A=Bの場合を含む)
・A < B
・A <= B

A==B かつ A > C というような条件を調べるには、
&&をつかって、 
A==B && A > C
というふうに書きます。
この場合、A=2、B=2、C=1ならば真、A=2、B=2、C=3ならば偽になります。

「または」は|| (Shift+¥キーで出る「|」を2つ)です。
A==B || A < C
AとBが等しい、または、AよりCが大 なら真
 A=2,B=2,C=3は真、A=2,B=3,C=1も真、A=2,B=2,C=1も真です。
 A=2,B=1,C=3は偽になります。

()でくくればさらに複雑な条件を調べることが出来ます。
(A==B && A > C) || A < D
AがBと等しくてCより大きい、または、AがDより小さいなら真
A=2、B=2、C=1、D=3ならば真、A=2、B=2、C=3、D=1の場合も真、A=2、B=2、C=3、D=3は偽になります。


真や偽のときの処理が一行で終わる場合には{}を省略することが出来ます。
if( i==1) Print("OK");
else Print("NG");

入れ子式に使うこともできます。
if( i==1 ){
 if( j==2 ){
  Print("OK");
 } else {
  Print("NG j");
 }
} else Print("NG i");

偽の場合に何もしないのなら、elseは省略できます。

int start(){
int i,j;
i=1;
j=2;
if( i==1) {
 Print("i ==1");
}

if( j==1) Print("j=1");
else Print("j !=1");

return(0);
}
//結果、「i==1」と 「j !=1」が表示される

投稿者 kawarobo : 00:40 | コメント (2) | トラックバック (0)

2005年11月19日

プログラムの作成 練習2-2 演算

前回のコードに少し手を加えてこのようにしてみました。
結果はどうなるでしょうか。

int i;
int start(){
string mojiretsu; //文字列変数mojiretsuを宣言
i++;
mojiretsu ="i="+i ;
Print(mojiretsu);
return(0);
}
結果は「i=1」、「i=2」、、、となります。
太字の部分で、変数mojiretsuには文字列「i=」にiの値をくっつけたものが代入されているからです。

*ここではわざわざ変数を使っていますが、print()内に直接入れてしまっても構いません。
Print(mojiretsu); → Print("i="+i);

数値同士の場合は、その計算結果が表示されます。
int i,j;
i=1;
j=2;
Print(i+j);//結果「3」が表示される

つまり、「文字列+文字列」や「文字列+数値」は文字列になり、「数値+数値」は数値になります。

ではこうするとどうなるでしょう?
int i,j;
i=1;
j=2;
Print("i+j="+i+j);

結果は「i+j=12」になります。
これはまず文字列"i+j="+数値iが行なわれて文字列"i+j=1"になり、続いて文字列"i+j=1"+数値jが行なわれるからです。
i+jを数値として計算したい場合は、()でくくって
Print("i+j="+(i+j) );
とします。

プログラム内では算数の演算と同じ優先順位があります。
( )内が最優先、次が*(掛ける)や/(割る)、そのあとで+や-、という順番です。
例えば、1*2+3は5で 、1+2*3=7、(1+2)*3=9 となります。

ということは
Print("i*j="+ i * j );
とすると、i*jの部分が先に計算されますので、結果は「i*j=2」になります。

投稿者 kawarobo : 13:36 | コメント (0) | トラックバック (0)

2005年11月17日

プログラムの作成 練習2-1 >>

変数についてさらに練習してみましょう。 その前に気をつけてお... 続き

11:55 | コメント (0) | トラックバック (0)

2005年11月16日

コンパイル時エラーの対処方法 >>

mql4プログラムをコンパイルした時に出てくるエラーの見方で... 続き

11:09 | コメント (0) | トラックバック (0)

プログラムの作成 練習1-4 >>

つづいて、変数の使い方を練習してみましょう。 前回のプログラ... 続き

10:12 | コメント (0) | トラックバック (0)

2005年11月05日

プログラムの作成 練習1-3 >>

[サンプルコード:Hello World] では、これをベー... 続き

03:28 | コメント (2) | トラックバック (0)

2005年11月02日

プログラムの作成 練習1-2 >>

[自動作成されるコードの内容] 初めてみると何だかわけの分か... 続き

01:25 | コメント (0) | トラックバック (0)

2005年11月01日

プログラムの作成 練習1-1 >>

【プログラム作成の練習】 [準備] とりあえず実際にやってみ... 続き

03:13 | コメント (0) | トラックバック (0)

2005年10月28日

プログラミング >>

ではいよいよ、最も敷居が高い(?)プログラミングに入ります。... 続き

01:32 | コメント (0) | トラックバック (0)