超初心者向けEAプログラミング入門③

EA
スポンサーリンク

ここではEAプログラミング未経験者や超初心者といった方向けに、MT4のMetaEditorで新規作成から表示されたソースコードに対して、こういった時はこうしたい、ああいった時はああしたい(これを条件分岐といいます)際にどうやってプログラミングしたらいいか説明します。

※プログラムなんて書けないよという方はまずはこちら

if文を使う

概要

if文(条件分岐)についてですが、条件分岐と聞いても何それ?って単語かもしれません。簡単に日常の例で例えると、LINEとかで友達にコンビニで弁当を買ってきて欲しい時に伝える状況で、

『パスタがあればパスタ買ってきて、パスタが無ければカレーで良いよ』

この状況です。これが条件分岐です。

もし、パスタがあれば
{
      パスタ買って
}
パスタがなければ
{
      カレー買って
}

こんな感じです。({と}は後々プログラムで使うのでわざと入れてます)

FXの話に戻すと「この時より値段が上がったら買いエントリーして、この時より値段が下がったら売りエントリーして 」といったように使っていきます。

プログラミング的に書くとこんな感じです。

if(ドル円が上がった場合)
{
      ドル円が上がった場合の処理を書く
}
else
{
   ドル円が下がった場合の処理を書く 
}

「if」というのは日本語で「もし」という意味なので、「もしドル円が上がったら」というような感じで書きます。

次に、「{」と「}」については「始まり」と「終わり」という風に読めましたでしょうか。入門①で説明した通りに読めたのであればGOODです。

「{」と「}」に挟まれた「条件に合った場合の処理を書く」のところに、ドル円が上がった時にやりたい事を書きます。こうすることで、ドル円が下がった場合はこの「{」と「}」に挟まれた処理はスキップされて処理されません。

そして、elseを付け加えるとドル円が上がった場合以外(言い換えるとドル円が下がった場合)に処理するようになります。ドル円が下がった場合(ドル円が上がらなかった場合)、スキップされるのではなく全部else側の処理が行われます。

応用で、else ifという使い方もあります。コンビニの話に戻すと

if(パスタがあれば)
{
      パスタ買って
}
else if(カレーがあれば)
{
   カレー買って
}
else
{
   何も買わなくていい
}

こんな書き方ができます。『パスタ欲しいけど無ければカレーで、でもどっちも無ければ何も買わなくていい』といった指示ができます。else ifを使わないと・・・

if(パスタがあれば)
{
      パスタ買って
}
else
{
   カレー買って
}

こんな感じで、『パスタがなければ絶対にカレー買ってきて』ってなっちゃいます。

FXの値動きのように上がる下がるの2択であれば、ifとelseだけで書けますが、3択以上になる条件分岐になってくるとこのelse ifが活躍します。

if文の練習

先ほどのパスタとカレーのメッセージの話で、if文を練習していきましょう。

if(パスタがあれば)
{
      パスタ買って
}

まず、if文でこの(elseを書かない)書き方ができます。この場合、パスタが無かったらもちろん友達は何も買ってきません。
※この書き方だと、もしかしたらパスタないんだけどどうする?って電話がかかってくるかもしれないですね(不親切なメッセージでもありますね)

if(パスタがあれば)
{
      パスタ買って
}
else
{
   何も買わなくていい
}

この書き方が一番オーソドックスな書き方です。この場合、パスタが無かったらもちろん友達は何も買ってきません。

if(パスタがあれば)
{
      パスタ買って
}
else if(カレーがあれば)
{
   カレー買って
}
else
{
   何も買わなくていい
}

パスタ以外に他に条件をつけ足したい場合、else ifを使います。この場合、パスタが無ければカレーを、カレーもなければ友達は何も買ってきません。

さらに、else ifの応用です。

if(パスタがあれば)
{
      パスタ買って
}
else
{
   if(カレーがあれば)
   {
      カレー買って
   }
   else
   {
      何も買わなくていい
   }

}

この書き方、実は先ほどのelse ifと全く同じ結果になります。パスタが無ければカレーを、カレーもなければ友達は何も買ってきません。
※この書き方でも、else if でもどちらでも使いやすいほうを使って頂いてかまいません(最初はこっちの方がわかりやすいかも)

ただ、以下のようにif文の中にどんどんif文を書いていくと、ネストが深くなるといいます。あまりにも深くなると、非常に分かり辛いソースコードになりプログラマーには嫌われます。

if(パスタがあれば)
{
      パスタ買って
}
else
{
   if(カレーがあれば)
   {
      カレー買って
   }
   else
   {
      if(おにぎりがあれば)
      {
         おにぎり買って
      }
      else
      {
         if(カップラーメンがあれば)
         {
            カップラーメン買って
         }
         else
         {
           何も買わなくていい
         }
      }
   }
}

これが、if文の全てです。

使用例

さて、if文の説明はこれぐらいにして実際にFXに沿ったソースコードを書いてみましょう。書く場所は、前回説明した 「OnTick()」の34行目です。前回書いた「Comment」は一旦削除して(34行目)に以下の文を書いてみてください。 ※今回は記号が多いので1行ずつコピー&ペーストでもOKです

31行目:void OnTick() 
32行目: { 
33行目://---
34行目:   if(Ask < High[1])
35行目:   {
36行目:      Comment("↓:",Ask);
37行目:   }
38行目:   else
39行目:   {
40行目:      Comment("↑:",Ask); 
41行目:   }
42行目: }

以下の点に注意してください。

  • 半角英数で書いていること
  • 先頭にスペースを入れる場合は半角スペースであること
  • 最後に;があること(ifとelseと{と}には無い事)
  • High、Ask、Commentの先頭が大文字であること

これは、もし(if)現在の買値(Ask)が前回バー(ローソク)の最高値(High[1])よりも小さかった場合は「↓:買値」を表示する。それ以外(else)の場合は「↑:買値」を表示するというソースコードになります。前回バーというのは現在ローソク足の1個前のローソク足です。
※2個前のバーの最高値と比べたい場合はHigh[2]となります

※実際MT4のチャートで確認するとこんな感じ

現在の買値の方が 前回ローソク足の最高値より低かったら↓矢印と買値が表示され、それ以外の場合は↑矢印と買値が表示されます。要は、現在の値段が前回のローソク足の最高値よりも高い状態の場合↑が表示されて、低い場合は↓が表示されるというプログラムになります。

では実例を踏まえてもう少し詳しく説明します。 値段は凄い大雑把ですが、例えば現在の買値が100円で1個前のローソク足の最高値が101円の場合はどうでしょうか。この場合、黄色マーカーの部分だけがプログラムとして実行されて、赤色マーカーの部分はスキップされます。

34行目:   if(Ask < High[1])
35行目:   {
36行目:      Comment("↓:",Ask);
37行目:   }
38行目:   else
39行目:   {
40行目:      Comment("↑:",Ask); 
41行目:   }

よって、 「↓:買値」 という文字が出るんですね。

次は、現在の買値が100円で1個前のローソク足の最高値が99円の場合はどうでしょうか。この場合は逆に、黄色マーカーの部分はスキップされて、赤色マーカーの部分だけがプログラムとして実行されます。

よって、 「↑:買値」という文字が出るんですね。

では、現在の買値が100円で1個前のローソク足の最高値が100円の場合はどうでしょうか。この場合は、黄色マーカーの部分はスキップされて、赤色マーカーの部分だけがプログラムとして実行されます。「Ask < High[1]」の「<」は「より小さい」という意味なので、値が同じ場合はelse側が実行されるという形です。

ちなみに「<」のことをプログラム用語で「演算子」と言います。演算子は「<」の他にもあります。

次回、入門④ではif文等で大活躍する演算子について書いています。

コメント

タイトルとURLをコピーしました