プログラミングは、今まで経験したことがない人にとっては
敷居が高いと思われがちです。

もちろん、向き不向きもあるでしょう、
文系気質の人よりも理系気質の人の方が
すんなり理解できる部分も多いと思われます。

全く経験したことがない人は、
まずは言語は何でもよいので
プログラミングの初歩的な参考書を買って
その構造的な流れを理解しておくと、
本商材の理解度も深まるでしょう。

参考までに、
今回は商材のソースコードの一部を掲載し
各文が何を意味しているのか、
初心者でも分かるように、なるべく専門用語を使わずに
解説してみたいと思います。

以下の解説が理解できれば、
本商材のソースコード全般も理解できるはずです。

ソースコードの一部を解説

以下は本商材で学習の題材となっている
「SwingSystem_for_Dveloper」のソースコードの一部です。
easeminar20111601
この文は、どんなEAでも必ずと言っていいほど書かれている
定型文とも呼べる構文です。

この文を上から順番に解説していきます。

224行目⇒ for ( int i = OrdersTotal() – 1; i >= 0; i-- )

for()文は、指定した回数だけ処理を繰り返したいときに用いられます。

上記の構文では何をやっているのかというと、
現時点での注文数を取得して、その注文一つずつに対して
次に続く{ }内で囲まれた処理を繰り返し実行(ループ処理)しています。

for()文の書式は決まっていて、

for(初期値; 条件式; 増減式)
{
処理内容
}

となっています。

要するに、変数に初期値を設定し、
その変数のもとで処理内容を実行します。

一通り処理が終わると、変数に増減式を実行します。

そのうえで、まだ条件式が満たされていたら
再度、その変数のもとで処理内容を実行します。

これを繰り返します。

以下、サンプルです。

for(int i = 1; i <= 5; i++) { Print("hello"); }

この場合、iという変数に1が入っています。

その状態で、Print(“hello”)が実行されます。
つまり、helloという文字が表示されます。

この処理を終えた後で、i++という増減式が実行されます。

i++というのは、iという変数に1を足す、という意味なので、
この増減式が実行されたのちは、iは2になっています。

そして、iが2という状態は、
条件式の i<=5 を満たしているので再びPrint("hello")が実行されます。

こうして条件式が満たされている間は、
何度も処理内容が実行されます(ループ処理)

上記サンプルでは、iが5以下の時はずっとループ処理が繰り返されることになるので、
iが1の時から5の時まで、合計5回処理内容が実行されるので、
helloという文字が5回表示されて終了、ということになります。

ここまでを踏まえたうえで
for ( int i = OrdersTotal() – 1; i >= 0; i-- )
この書式を眺めると、

OrdersTotal()は現在の注文数を取得する関数で、
注文数を変数iに入れています。

例えば、
現在ポジションを2つ持っていたらiに2が入りますし、
現在ポジションを3つ持っていたらiに3が入りますし、
現在ポジションを持っていなかったらiに0が入ります。

そして、増減式が i-- になっていますが、
i--というのは、iという変数に1を引く、という意味です。

そして、条件式が i>=0 になっていますが、
これは、iが0以上の時であれば処理内容を繰り返す、という意味です。

まとめると、
最初に注文数を取得して、処理を繰り返すごとに注文数を1ずつ減らし、
注文数が0になったらループを抜けて処理終了

という意味になります。

226行目⇒ if ( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false ) break;

if()文は、()内の条件が満たされた時に、続く構文を実行します。

上記の構文では何をやっているのかというと、
注文が選択できなければ(false)、for()文を抜ける(break)ようにしています。

ここでは、if()文自体よりも()の中身の方が難しいので、
先にそちらを解説します。

OrderSelect( i, SELECT_BY_POS, MODE_TRADES )

これは、注文を選択する関数でお決まり文です。

iには注文数が入っていることは先に説明しましたが、
このお決まり文で、何番目の注文なのかを特定して、
その注文を選択しているピックアップしているわけです。

例えば、iに3が入っていたら、注文数は3になり、
現在3つのポジションを持っていることになりますが、
その3つのポジションのどれについての処理を施すのか、
その一つ一つをここで特定しています。

そして、選択できたら(ポジションを特定できたら)trueが返り値になりますし、
選択できなかったら(ポジションが無かったら)falseが返り値になります。

つまり、
OrderSelect( i, SELECT_BY_POS, MODE_TRADES )がtrueなら
特定のポジションを選択できたので次に進めるが、
falseだったらbreakに進み、for()文全体から抜けることになります。

要するに、このif()文全体で何をやっているのかというと、
ポジションを選択できたら次の進むが、
ポジションが無かったら処理自体が終了

ということをしたいわけです。

227行目⇒ if ( OrderSymbol() == Symbol() && OrderMagicNumber() == Magic1 )

ポジションを選択できたらこちらのif()文に移ります。

同じくif()文ですが、
ここでは選択したポジションの通貨ペアとマジックナンバーが
同じかどうかを判定しています。

OrderSymbol()には選択したポジションの通貨ペアが入りますし、
Symbol()にはEAを設定した通貨ペアが入ります。
そして、
OrderMagicNumber()には選択したポジションのマジックナンバーが入りますし、
Magic1は外部パラメーターで指定したマジックナンバーです。

要するに、通貨ペアとマジックナンバーで
選択したポジションが本EAのものかどうかを確認しているわけです。

一つのMT4には様々な通貨ペアの様々なマジックナンバーのEAが稼働しています。

その中から、処理を施したいポジションを特定するために、
このような構文が必要になるんですね。

229行目⇒ if ( OrderType() == OP_BUY )

またしてもif()文ですが今度は簡単です。

ここでは選択したポジションが、
買いポジションなのかどうかを確認しています。

OrderType()は予約語で、選択したポジションの種類が入り、
OP_BUYは買い注文を示す定数です。

つまり、選択したポジションが買い注文なら、
次の{ }内の処理に移行します。

231行目⇒ Buy_position1++;

ここでようやく具体的な処理になります。

今までのfor()文やif()文は、条件の絞り込み、
ポジションの絞り込みのみで、
まだ何も処理を施していないことを確認してください。

で、実際に何をしているのかというと、
Buy_position1という変数に1を足しています。

これがやりたかったんですね。

これは先に説明した i++ と同じです。

243行目⇒ if ( OrderType() == OP_SELL )

こちらはもう説明するまでもないですが、
選択したポジションが、売りポジションなのかどうかを確認しています。

236行目⇒ Sell_position1++;

売りポジションであれば、
Sell_position1という変数に1を足しています。

以上、これで一連の流れの説明を終わります。

最終的には、
Buy_position1には買いのポジション数が
Sell_position1には売りのポジション数が入ることになります。

例えば、本EAが現在、
ロング2ポジ、ショート1ポジ持っていたとすると、
この一連の流れを通した後には、
Buy_position1には2が入り、Sell_position1には1が入ります。

そして、240行目以降の次の構文に続いていきます。

いかがだったでしょうか。
思った以上に説明が長くなってしまいましたが、
上記が理解できるなら、本商材のソースコードは理解できると思いますよ。

あなただけのオリジナルのEAを作ってみませんか?
EAプログラミングセミナーの詳細レビューへ