素人でも出来るEA作成②追記
EA内のプログラムの書き方の説明
先日、素人でも出来るEA作成②と銘打って下記のブログを書きましたが、内容が難しいというコメントがあったので、細かい部分の説明を追記します。
//+---------------------------------------------------------------------+
// パラメーター設定
//+---------------------------------------------------------------------+
extern string C1="フィルター|移動平均線とローソク足(順張り)";
int TimeScale1 = 0;
int Entry1 = 1;//1_直近確定の足、2_二本前、3_三本前
extern int MaType1 = 0; //平均線種類
extern int MA1_1 = 5; //移動平均線期間
extern int PriceType1 = 0; //価格タイプ
//+---------------------------------------------------------------------+
// インジケーター
//+---------------------------------------------------------------------+
//1-4 フィルター|移動平均線とローソク足(終値)の位置関係(順張り)
- int Indicator1_4(int i,int TimeScale,int LineType,int MaPer, int PType)
- {
- double Ma1=iMA(NULL,TimeScale,1,0,0,0,i);
- double Ma2=iMA(NULL,TimeScale,MaPer,0,LineType,PType,i);
- int ret=0;
- if (Ma1>Ma2)
- {
- ret=1;
- }
- else if (Ma1<Ma2)
- {
- ret=-1;
- }
- return(ret);
- }
まず、1行目ですが、ここに関してはインジケーターの中身を説明している内容で今回はスルーしています。
3行目の「double」は、小数点がつく可能性がある数値を格納する時に使用します。次の「Ma1」は自由に設定できます。今回の場合、移動平均線とローソク足のプログラムとなる為、便宜的に設定しています。
始値を出したい場合、「Maopen」、終値を出したい場合「Maclose」などとすれば、後でプログラムを見直す時に便利なので、分かりやすい名前をつけます。
次の「=」は「Ma1」に何が入っているかを示しています。
次の「iMA」はiMA関数と言われ、移動平均線の値を計算する関数です。
iMA(通貨ペア、時間軸、期間、バーの数、移動平均線の種類、終値など、取得したいバーの位置)
となります。
EAを使用する場合、通貨ペアなどを指定しなければ、開いているチャートの通貨ペア時間軸をベースとして計算することとなります。
1時間足で使用するプログラムに日足の要素を入れたい場合、時間軸を1440として使用する場合があります。
3行目では通貨ペアが「NULL」となっていますが、通貨ペアを指定しないという意味で基本的にどの通貨ペアでも使用できます。
通貨ペアを指定する場合、気配値ウインドウの記載通りに記載する必要がある為「NULL」を使用する場合が多いようです。
次の時間軸「TimeScale」はパラメーター設定の「int TimeScale1 = 0;」の0が入ります。時間軸を指定する場合、1分単位の数値を入れていきます。
1分足は1、15分足は15、60分足は60、4時間足は240、日足は1440と入れれば指定した時間足で使用できます。
指定する必要がない場合、「0」とします。
次の期間ですが、「5」とすれば5日移動平均線となります。3行目の場合、「1」となっており、1日移動平均線、つまりローソク足となります。
次の「バーの数」に関しては触っていません。
次の「移動平均線の種類」は、単純移動平均線は0、指数移動平均線は1、平滑移動平均線は2、線形加重移動平均線は3を入れます。
上記の場合、0が入っているので単純移動平均線ですね。
次の「終値など」に関しては、終値は0、始値は1、高値は2、安値は3、中央値は4、代表値(高値+安値+終値)÷3は5、加重終値(高値+安値+終値+終値)÷4は6、を入れます。
最後の「取得したいバーの位置」ですが、どのタイミング足を取得するかということですが、3行目は「i」となっていますが、これは直近の足となります。
その前の足を取得したい場合「i+1」とし、その前は「i+2」となります。
単純に数値を入れてもOKです。0の場合、直近の足、その前の足は1、その前は2とすれば任意の足を取得出来ます。
式に関する説明
7行目は「Ma1>Ma2」となり、日足チャートで設定したとすると前日の終値が5日移動平均線の上で引けたという内容になります。
「Ma1<Ma2」は日足チャートで見ると前日の終値が5日移動平均線の下で引けたという内容になります。
まとめ
細かいところまで全て理解することは難しいですが、「double」の使い方や関数の使い方を覚えれば自分の実行したいEAを作る自由度が上がるので、面白いですよ。
インジケーター内のプログラムを修正することが出来るようになれば、自分の手法の見直しなども出来るので是非、覚えて見てください。
EAに関する記事はこちらのカテゴリーをみてくださいね。