MT4でEAを作りバックテストしてみた


mt4,mt5という有名なチャートアプリがあるのだけど、そこでeaという自動売買プログラムを稼働させられるので、mql4,mql5などの言語を使って適当に書いてみました。

MetaTrader4

MetaTrader5

で、その際、バックテストを少し調整しながら作ったのだけど、私は、システムトレードで利益をあげられるかというと、いくらバックテストの結果が良好でも、最高でも難しいんじゃないかと思いました。(あと、この分野、本当にまともなサイトや情報が少ない印象...)

バックテスト後、いくつか手動でエントリー、イグジットポイントを確認してみたところ、バックテストの結果が全く当てにならないと思いました。

また、ヒストリーデータがそれぞれ使用する口座によって異なること、実際に計算される値や描写がチャートとずれること、実取引においての不確定要素の多数(スプレッドや約定拒否、スリッページなど)が挙げられます。

個人的な話になるのだけど、MacBookProを買おうか、Amazonで20万円分のギフトを買おうかどうしようか最近、迷ってたけど、自分が作ったEAがどれくらいでダメになるか見てみるのも面白いかもしれないなあと思いました。

ちなみに、私のプログラムでは、ストップと言って100pipsの損失が出ると、自動的にプログラムが停止するようにしていますので、いつまで稼働してられるかということですね。あと、利益は、多分ほとんど出ないんじゃないかなあ。どれくらい損失が出るか否かの問題で...。

まあ、時間があればということですが(多分やらない...)。

##test-ea-01,sell

gbp/jpy,m5,forex,2015.01.01-2015.09.18





##test-ea-02,buy

gbp/jpy,m5,forex,2015.01.01-2015.09.18







どちらのEAも結構頻繁に損切りするようになってます。

特徴としては、パラメーターをいじることはほとんどしてなくて、主にエントリー、イグジットポイントを調整してるって感じです。あと、Buy(買)とSell(売)で分けています。まとめてもいいんですが、分けたほうが検証しやすそうだと思ったので。

##code

コードはCに似た感じで書ける。Cが書ける人はとっつきやすいと思われます。


//Custom Indicator
double HOGE
HOGE = iCustom(NULL, PERIOD_M5, 'hoge' ,fastperiod, 0.3, 0.3,0);

//Default Indicator
iWPR(NULL, 0, 14, 0);

//トレード回数制限, その日、1回に制限
static int TradeCnt = 0;
if(TimeHour(CurTime())==00 && TimeMinute(CurTime())==00) TradeCnt = 0;
if (OrdersTotal()==0 && TradeCnt < 1 )

//イグジット
int Exit_L = 0;
if (OrdersTotal()==1)
買いポジションのイグジット
Exit_L = OrderClose(Ticket_L,Lots,Bid,Slippage,Red);

//エントリー
int Ticket_L = 0;
if (OrdersTotal()==0)
//買いのエントリー
Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask - (StopLoss * Point),0,Comments,MAGIC,0,Blue);

//特定の時間を条件にする, 23時14分は条件から外す
if( TimeHour(TimeCurrent()) != 23
&& TimeHour(TimeCurrent()) != 14 )

//アラートを鳴らす
extern string SoundAlert = 'true';
if (SoundAlert == 'true')
PlaySound('alert.wav');


括弧は付けていません。このブログ、jsonで書いてるので書きにくい...。また、シングルクオートはダブルで。