スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
メタバイザー
スポンサー広告  

メタトレーダー講義 第6回 ループと分岐 第2部
深夜の雨のなかこんばんわ。FXボーイです。

ここまでお疲れさまでした。いつになったらインディケーター作れるの?って感じですよね。
僕はそうでした(笑)

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



この文章はCodersGuruさんのMQL4Lesson4の訳文です。(翻訳しての転載に本人の許可はとってあります)              
                     メタトレーダー講座                          
                     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



メタバイザーによる補足説明
今回は基本的なところだったので、特に解説する必要はないようだ。

とりあえずif文だけは理解しておくように。


何かあったらコメントを頂けると大変嬉しい。よりよいアカデミーを目指してるので批判や質問も大歓迎だ。メタバイザーの放課後まで遊びに来てほしい。 放課後の訪問者が少ないのだが、私は近寄りがたい存在なのだろうか。。

少し凹みつつもそれではまた会おう。お疲れ様。

人気ブログランキングに参加している。
にほんブログ村 為替ブログ FX システムトレード派へ

もしよろしければ応援してほしい。 どうもありがとう。

ちなみにブログをやっているメタトレーダー仲間は から見ることができる。


最後まで読んでくれたことに感謝している。

メタバイザー
メタトレーダー講義   1

:システムトレード - :株式・投資・マネー


http://metavicer.blog61.fc2.com/tb.php/68-55a46a55
インフィニットループ~古城が見せた夢~の最新動画や評価レビュー、攻略情報なら「インフィニットループ~古城が見せた夢~」へ!
| インフィニットループ~古城が見せた夢~ | 2009.10.06 04:11 |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。