新しいMT4 EA(Expert Advisor)。コードネーム「エメラルド」を開発中です。

EA「エメラルド」イメージ

はじめにEAの説明を簡単にすると、EA(Expert Advisor)とはMT4で自動売買するための重要なプログラムで、どういったタイミングでポジションを取り、そして利益確定するかといったきわめて重要なことが書かれています。たとえるなら、スマホでは「MT4がiOS(Android)でEAがアプリ」、PCでなら「MT4がWindowsでEAがアプリケーション」のような関係です。つまり、プラットフォームとその上で稼働するアプリケーションのような感じです。
※MT4(メタトレーダー4)とは、ロシアのソフトウェア会社「MetaQuotes社」が開発したFXシステムトレードをするためのプラットフォーム。

以前、記事にした「夢のEAが出来た!6年間で資金665倍」は「過剰最適化(カーブフィッティング)」という状況に陥り、「バックテスト」では6年間で資金665倍にするというすばらしい成績を残せたのですが、テスト期間を外れた場所ではダメダメなEAになってしまうという状況でした。
※「バックテスト(Strategy Tester)」とはMT4(メタトレーダー4)の機能の一つで、過去の為替の値動きを元にEA(自動売買プログラム)がどのような損益をあげるか調べる機能。

コードネーム「エメラルド」ではそういった状況を回避するため、チャートの大局観を分析する方法で取り組んで行く予定で、「6年間で資金665倍」のEAで使用したロジックは使用せず、フルスクラッチで開発中です。


どのようなEAに仕上がる予定なのか。

よいEAとはどの様なものなのかを考慮し、「エメラルド」のガイドラインを作ります。

1,どのような通貨の組み合わせでも利益を上げることが出来る
2,レンジ相場、トレンド相場どちらでも利益が出せる
3,長期間にわたって利益を上げ続けることが出来る

このすべてを満たすことは難しいかもしれませんが、理想を目指しています。

1の「どのような通貨の組み合わせでも利益を上げることが出来る」という点は、今回のプログラミングにおいて重要視している点です。

何故か?

一般的なEAは「USD/JPY」「EUR/USD」「AUD/JPY」など、取引通貨を限定していることが多いと思います。それは自動売買プログラムはテクニカル分析を元にを作りますが、通貨を絞った方が、バックテスト「フォワードテストでも?」で好成績をあげるものを作りやすいからです。
※テクニカル分析とはチャートの、「移動平均線」「ボリンジャーバンド」「ローソク足」「MACD」「RSI」「一目均衡表」「ストキャスティクス」などを使用してトレンドやパターンを分析すること。

開発中のEA「エメラルド」も、最終的には通貨を限定する予定ですが、指定の通貨以外でもある程度の利益が出るようにしようと思っています。つまりテクニカル分析である以上、どのような通貨においてもある程度は共通性があり、通貨を絞るということは「過剰最適化(カーブフィッティング)」につながる可能性が高いからという認識に基づいています。

もちろん特定の通貨ペアだけの独自の法則はあると思います。しかし、そういったものは一時的なものである可能性が高く、長期で通用する法則にはならないのではないかと思っています。


古典的なテクニカル分析をチェックする。

よく知られているテクニカル分析を検証してEA「エメラルド」に生かせるかどうかを検証してみます。
はじめに超有名で古典的な「移動平均線のクロス」で売買を行うという手法があります。いわゆる「ゴールデンクロス」「デッドクロス」というもので、短期と長期の移動平均線が交差する場所での取引です。

■「ゴールデンクロス」短期の移動平均線が長期の移動平均線を下から上へ突き抜ける状態で「買い」でポジションを取る。

■「デッドクロス」短期の移動平均線が長期の移動平均線を上から下へ突き抜ける状態で「売り」でポジションを取る。

MT4のプログラムで上記の取引は抜粋ですが下記のようになります。

double sma1,sma2,lma1,lma2;
int    res;
//--- 重複オーダー回避
	if(Volume[0]>1) return;
//--- 移動平均値を取得する
	sma1=iMA(NULL,0,12,0,MODE_SMA,PRICE_CLOSE,0);
	sma2=iMA(NULL,0,12,0,MODE_SMA,PRICE_CLOSE,1);
	lma1=iMA(NULL,0,24,0,MODE_SMA,PRICE_CLOSE,0);
	lma2=iMA(NULL,0,24,0,MODE_SMA,PRICE_CLOSE,1);
//--- 売りオーダー
	if ( sma2>lma2 && sma1<lma1 ) {
		res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,NormalizeDouble(Bid+30*Price_pitch,Digits),NormalizeDouble(Bid-50*Price_pitch,Digits),"",MAGICMA,0,Red);
		return;
	}
//--- 買いオーダー
	if ( sma2<lma2 && sma1>lma1 ) {
		res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,NormalizeDouble(Ask-30*Price_pitch,Digits),NormalizeDouble(Ask+50*Price_pitch,Digits),"",MAGICMA,0,Blue);
		return;
	}
//---

この実験をする前は、使い古された手法なので使い物にならないだろうと思っていました。おそらく「ゴールデンクロス」して買うと下がり、「デッドクロス」して売ると上がる。つまり、タイミングが遅すぎてクロスしたときにはすでに短期では反転してしまうだろうなと・・・。

実際にMT4のバックテストを行ってみた結果です。

ドル円1時間足を使用し期間2015.01.01〜2016.01.01、短期移動平均線12、長期移動平均線24、利益確定50PIPS、ストップロス30PIPSに設定した場合の結果は下記のようになりました。思った通り勝率が悪いです(^-^; チャートを見ても少し遅れ気味で売り買いが行われています。

USD/JPY 1時間足チャート

■設定1
USD/JPY (2015.01.01 - 2016.01.01)損益グラフ

通貨ペア USDJPY (USD/JPY) 1時間足
短期移動平均線 12
長期移動平均線 24
利益確定幅 50PIPS
ストップロス 30PIPS

しかし、設定を変更して、短期移動平均線12、長期移動平均線40、利益確定50PIPS、ストップロス40PIPSにすると、この期間においては、わりとよい成績です。

■設定2:移動平均、利益確定、ストップロス変更
設定2 USD/JPY (2015.01.01 - 2016.01.01)損益グラフ

通貨ペア USDJPY (USD/JPY) 1時間足
短期移動平均線 12
長期移動平均線 40
利益確定幅 50PIPS
ストップロス 40PIPS

さらに期間を2006.01.01〜2016.01.01の10年に変更してみます。さすがに10年ですので、きっと損益が悪くなるだろうなと思いきやそれほど悪くありません。波はあるものの何とか右肩上がりです。

■設定2を10年間バックテスト
設定2を10年間バックテスト USD/JPY (2015.01.01 - 2016.01.01)損益グラフ

それでは同じ設定をユーロ円で調べてみると下記のようになりました。ドル円で良かった設定もユーロ円ではだめなようです。

■設定1(EUR/JPY)
EUR/JPY (2015.01.01 - 2016.01.01)損益グラフ

■設定2:移動平均、利益確定、ストップロス変更(EUR/JPY)
設定2 EUR/JPY (2015.01.01 - 2016.01.01)損益グラフ

■設定2を10年間バックテスト(EUR/JPY)
設定2を10年間バックテスト EUR/JPY (2015.01.01 - 2016.01.01)損益グラフ


移動平均線のクロスはテクニカルとしてどうなのか?

移動平均線のクロスはテクニカル分析として、EA「エメラルド」に使用できるかどうかを考えると、1の「どのような通貨の組み合わせでも利益を上げることが出来る」という部分に反します。ただ、ドル円の設定を少し変更するだけで損益が大きく変動することから、おそらくユーロ円にもあった設定があるのだと思われます。しかし、通貨ごとに設定の変更を行ってしまうことは完全なテクニカル分析とは呼べないと思っています。

今回のテストは、移動平均線の数値、利益確定幅、ストップロス値などを固定値にしています。この部分を現在のチャートから動的に取得して設定し、幾つかのテクニカルと組み合わせれば、おそらく移動平均線のクロスは有効なテクニカル分析になるのではないでしょうか。

EA「エメラルド」に実装するかどうかはわかりませんが、このような分析をたくさん実施して、強力なEAに仕上げる予定です。もし、ご利用中のEAが利益確定額やストップロス値が固定のものでしたら、それはよいEAではないかもしれません。♪~( ̄ε ̄;)


この記事へのコメント