2015年06月26日

EA作成における関数化のススメ





MT4を使ってFXの自動売買をされる方の中には、自分でEAを作成して動かすという方もいらっしゃるかと思います。

しかしこのEA作成作業、手書きでプログラムしていくとかなり時間を要する上に、デバッグ作業もかなり大変です。EAを作るたびにこの作業をするのは非常に大変で、その上、EAなんてのは10個作って1個良ければいいというくらいのシロモノですので、2〜3個作ってダメだと、もう投げ出してしまう方も多いかと思います。

#今回の記事は、そんな方への内容となります。やってる人にとっては至極当たり前の話なので、「そんなのわかっとるわ!」という方は特に見なくてもいいかもしれませんw

EAと言うのはかなり複雑な処理をしているように見えますが、実は基本ロジックはそんなに差分はないのです。

基本フローとしては、

@ポジシションがない場合、エントリーの判定を行う
 →エントリー可と判断したら、実際に新規注文を入れる
Aポジションがある場合、イクジットの判定を行う
 →イクジット対象と判断したら、決済注文を入れる
Bポジションがある場合、トレイリングの判定を行う
 →トレイリング条件を満たしたら、トレイリングを行う

実はこれだけなんです(実際にはこれにフェールセーフの処理などが入ってきますが)。

EAごとに違うのって、基本的には判定ロジックの違いだけなんですね。
#ポジション数が複数だったり、成り行き系ではなく指値系のEAになるともう少し複雑な状態管理も必要になりますが、本記事の本旨ではないのでとりあえずおいておきます。

つまり、何が言いたいかというと・・・「判定部分以外はテンプレートで関数化してしまえばいい」のです!!

例えば、私が築き上げてきたEAのテンプレートはこんな感じです。

int OnInit()
{
//初期化関数
UnitPip = MakePips(); // 業者ごとの桁数を補正して共通化
if (InitFunction()) return(INIT_SUCCEEDED); // グローバル変数の初期化など
else return(INIT_FAILED); // 初期化失敗の場合はTickを動かさない
}

void OnTick()
{
bool ordersuccess; //注文が通ったかどうか

//管理外のポジションがあったら強制決済させるフェールセーフ処理
if (!OutOfStatePositionCheck(MagicNo)) return;

//ポジションがTP/SLに掛かっていたらポジション未保有のステートに遷移
if (position && isOrderStopped(Ticket)){
position = false;
return;
}

//トレイリング条件を満たしていたら実施
Trailing(trailpips);

//足が確定していない場合はこの先に進まない
if (!NewFoot()) return;

//エントリー条件
if (!position){
if (買い条件){
Ticket = MakeOrder(OP_BUY, SL, TP);
if (Ticket != -1) position = true;
}
else if (売り条件){
Ticket = MakeOrder(OP_BUY, SL, TP);
if (Ticket != -1) position = true;
}
}
//イクジット条件
else{
if (買い決済条件){
ordersuccess = CloseOrder(OP_BUY);
if (ordersuccess) position = false;
}
else if (売り決済条件){
ordersuccess = CloseOrder(OP_SELL);
if (ordersuccess) position = false;
}
}
return;
}


MakePips、OutOfStatePositionCheck、isOrderStopped、Trailing、NewFoot、MakeOrder、CloseOrder関数はどれも汎用性があるように作りこんでおり、基本的にはコード内にペタペタするだけで使えてしまいます(InitFunctionはEAによってちょっと書き換えますが)。

ここまで作りこんでおくと、新たにEAを作る際には条件のところだけ追加するだけでよく、非常に簡単です。
また、すでに実績のあるコードがほとんどになるので、デバッグの必要性もあまり出てこないという嬉しさもあります(デバッグ作業がコーディングのほとんどを占めますからね・・・)。

ということで、EAの関数化について、基本的ですが記事にしてみました。
いや、そんなのできないよ・・・という方には、以下の様なEA作成ツールを使用することをオススメします。

ここで紹介する「EAつくーる」は、ビジュアル的に簡単にEAを作ることができます。
また、出てきたコードについてもかなりちゃんと関数化されている上に、それぞれコメントでしっかりと内容が説明されており、テンプレート作成という意味でも非常に有用なツールだと思います。

月額かかるというところにコスト感を感じる方もいらっしゃると思いますが、そこで上記の関数の考え方を取り入れると良いのです。
つまり、これを使って関数テンプレートさえ作ってしまえば、あとはちょっとした勉強でこれが要らなくなるわけです。つまり、1月分だけ購入してテンプレートを作りこんでしまえばいいわけですね。

ということで、興味がある方はこの「EAつくーる」を見てみてください。

MQL言語の学習ができ、裁量トレーダーもEA開発が可能になる!
EAつくーる【定期購入版】
EAつくーる【定期購入版】 | fx-on.com

EAつくーる【定期購入版】
EAつくーる【定期購入版】 | fx-on.com

以上です。

タグ:MT4 EA
posted by しがないあらさー at 04:31 | Comment(0) | TrackBack(0) | MT4 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

↓ランキング参加してるみたいです↓
↓イイネ!って思っていただけたらFacebookのノリでポチッとご協力お願いしますw↓
ブログ王ランキング

この記事へのトラックバック
ゼニカル
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。