2008年12月の記事一覧

カスタムインディケータをEAにする方法2



前回の記事「カスタムインディケータをEAにする方法

の続きです!

③シグナルに換える。

iCustom関数の()内の書き方は、

iCustom(通貨ペア,時間足,インディケータ名,,...,インデックス,バーシフト);

でしたね。

・シグナルが出た瞬間の売買/シグナルが出た次のバーの始値で売買の切り替え

を実現するために、パラメータを作りましょうか。

iCustom関数のバーシフトの部分に入れるためのパラメータ

extern int SignShift=1;

としましょうか。
場所はインディケータのパラメータをコピペした下あたりでいいと思います。

そして、これを使ってインデックス2番と3番の値を取得するコードが

double upsign=iCustom(NULL,TimeFrame,"BBands_Stops_mtf",0,Length,Deviation,2,SignShift);
double dnsign=iCustom(NULL,TimeFrame,"BBands_Stops_mtf",0,Length,Deviation,3,SignShift);

となりますね!

こうすれば、パラメータ SignShift が0で、シグナルが出た瞬間に対応できますし、
SignShift が1でシグナルが出た次のバーの始値で売買に対応できるようになりました!

この取得できた値を使って、シグナルを作ってみましょう!

int sign;
if(upsign!=-1) sign=1;
if(dnsign!=-1) sign=-1;

シグナル用変数を sign として
upsign が-1ではないとき sign に1を代入
dnsign が-1ではないとき sign に-1を代入

といった感じです。


あとは基本的なEA製作と同じです。

1つ注意することは、
シグナルが出た瞬間に取引をする場合に、
同じ足で何度もシグナルが変わることがあるので、制限をつけるとよいということです。


途中ですが、続きは次回にしたいと思いますm(..)m

カスタムインジケータをEAにする方法の関連記事

2008年12月31日|コメント (37)

カテゴリー:indicators

カスタムインディケータをEAにする方法


今回は、
BBands_Stops_mtf
というインディケータを使って
・途転売買を実行する/しない、の切り替え
・シグナルが出た瞬間の売買/シグナルが出た次のバーの初値で
売買の切り替え
の機能がついたEAの作り方を知りたいといったお便りを頂きましたので、
書いていこうと思います!

まずはインディケータダウンロード
BBands_Stops_mtf.zip(mq4ファイルのダウンロード)


今回のように、インディケータにマルチタイムフレーム機能(違う時間足のものを表示させる機能)がついたものは、
バックテストのビジュアルモードでちゃんと表示できなかったり、ちゃんとバックテストできなかったりしますので、気をつけなければなりません。
バックテストでもちゃんと表示させるようにするにはインディケータを修正する必要がありますので省略させていただきますね^^;


では、早速。
手順としましては、

①インディケータのインデックスを大体把握する。
②iCustom関数で必要なインデックスの値を取得する。
③シグナルに換える。

といった具合です。


①インディケータのインデックスを大体把握する。

通常のインディケータは、特別な配列(インディケータ用配列)をつかって計算します。
普通の配列とは違い、新しい足ができる度に同じように配列の先頭に1つ記憶スペースができるといった機能があります。

そのインディケータ用配列には、

SetIndexBuffer(インデックス番号,インディケータ用配列);
という形でインデックス(番号)が割り当てられています。

BBand_Stops_mtfの場合も、

init()関数の中に

SetIndexBuffer(0,UpTrendBuffer);
SetIndexBuffer(1,DownTrendBuffer);
SetIndexBuffer(2,UpTrendSignal);
SetIndexBuffer(3,DownTrendSignal);
SetIndexBuffer(4,UpTrendLine);
SetIndexBuffer(5,DownTrendLine);


といった具合に、0~5のインデックスがそれぞれ割り当てられています。

この中のどれかを使うわけですが、幸いこのインディケータの場合、

・シグナル系だということ
・インディケータ用配列の名前が分かりやすいということ

で、インディケータの表示と照らし合わせても
買いシグナルにはインデックス2番
売りシグナルにはインデックス3番
を使えばよさそうですね!


②iCustom関数で必要なインデックスの値を取得する。

では早速、Newボタンで新規EA作成しましょう!
ファイル名は、何でもよいですが、BBands_Stops_EAとしましょうか。

iCustom関数の()内の書き方は、

iCustom(通貨ペア,時間足,インディケータ名,,...,インデックス,バーシフト);

です。

インディケータ名は、文字列で入力してあげましょう。

その後ろの【,,...,】が気になりますが、ここにはインディケータのパラメータ(インディケータのプロパティで表示されるもの)が入ります。
省略することもできますが、正確には、『以下省略』という具合に、後ろ側を省略するという感じです。
なので、「1つ目のパラメータを省略して2つ目を入力する」ということができません。
インディケータのパラメータの最後のものをEAで変更して使いたいというときは、
インディケータのパラメータを全部並べてあげる必要があるわけですね^^;

インデックスはインディケータ用配列に割り振られたインデックスです。

バーシフトは、何本前の足の値を使うかという値です。
現在変動中の足での値を取得する場合は、0と入力してあげます。

以上のことを考えると、インディケータで使っているパラメータを
EAでもパラメータ化してあげる必要がありますね!

インディケータのコードの

//---- input parameters
extern int TimeFrame = 0;
extern int Length=13; // Bollinger Bands Period
extern double Deviation=1.62; // Deviation was 2

の部分をコピーして、EAのコードに貼り付けてしまいましょう!
場所は、#property ... の下あたりにしましょう。

そして、start関数の中でiCustom関数を使って、買いシグナルの値を取得してみましょう!

int start()
{
//----
double upsign=iCustom(NULL,0,"BBands_Stops_mtf",TimeFrame,Length,Deviation,2,0);

...

といった感じです。

その後、

Comment(upsign);

として、バックテストのビジュアルモードで確認してみましょう!

んが(T□T;)!!このインディケータ、バックテストではTimeFrameの機能がちゃんと作動しないようです。

こんなときは、インディケータのTimeFrameの機能をつかわず、
iCustom関数のTimeFrameの機能を使いましょう!

int start()
{
//----
double upsign=iCustom(NULL,TimeFrame,"BBands_Stops_mtf",0,Length,Deviation,2,0);

...

という具合です。

これで、TimeFrameで設定した時間足のシグナルが取得できるようになりました。
おまけに、シグナルが出ているときはシグナルの高さ(レート)の値になり、
そうでないときは、-1という値になることがわかりました(^0^)/

このComment関数を使った確認方法はいろんなケースで使えますので、
ぜひ覚えておいてくださいね!


まだ、途中ですが続きは次回とさせていただきますm(..)m

でわでわ。

カスタムインジケータをEAにする方法の関連記事

2008年12月28日|コメント (33)

カテゴリー:EAの作成方法

VQpsV2テスト終了



EAテスト用口座でのVQpsV2のテストを終了しました。

少資金のため、ロスカットになってしまいましたが^^;、
最低資金量を守れば、パラメータをそのままでもプラスになっているので、
まずはこのバージョンで実運用しようかと思ってます。


121証券

先月まで、通貨ペア名の最後に【_】アンダーラインがついてましたが、
今月からなくなりました。

EAでの情報取得時も、楽になりましたね!


でわ、このへんで。

タグ

2008年12月 3日|コメント (24)

カテゴリー:その他