メタトレーダー自動売買チャンピオンシップ挑戦記

MT4・MT5の発売元であるMetaQuotes Software Corp社主催だった Automated Trading Championship の参加記録でしたが、今年から非公式のに。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

1.63倍

去年のブログを見てみると昨年7月29日時点の参加(予定)者は740名でした。
今年は現時点で、約1.63倍ですね。

登録終了まで、1ヶ月と26日、現在までの参加(予定)者1203名。

スポンサーサイト

PageTop

コンテストにEAジェネレータは使えるのか?(6)

筆者やる気を無くしてます。
EAジェネレータで作ったEAで5ロット以上のオーダーをするためには、先日の記事で挙げたクラスの外に、AccountInfo.mqhとその参照位置を記述しているExpertBase.mqh、MoneySizeOptimized.mqhなど<Expert\Money\>以下の全てのクラスを変更しなければならないことが判明したからです。
ロット調整関係はどれかひとつにするにしても、これでIncludeフォルダの5枠を超えてしまいます。
これら全てをアップするためには、どれかをコンバインする必要があるわけです。美しくなーい!(めんどくさーい!)

もうひとつの理由は、ひとつのシンボルにつきシグナルを2つも入れると筆者の環境では最適化に時間が掛かりすぎ、尚且つその後の再現性指数で機能しそうなパラメータを探すのが意外と難しいということです。
とても残り2ヶ月で全てのシンボルは出来そうにありません。どーすっかなー。

P.S.以前のTradeATC.mqhのバグ修正をしました。逆ポジションがある場合と、ペンディングオーダーがある場合の不具合を修正しました。

登録終了まで、1ヶ月と28日、現在までの参加(予定)者1178名。
PageTop

コンテストブログ

英語版ですが、同じようなブログを見つけました。
「Road to ATC2011」だそうです。参加EAを作るところから細かく書いてあり、なかなか興味深いです。
エントリーは全くランダムで、なんでも「Z-Score Optimization」なるロジックを使って、負けトレードを減らすことにより、勝率を上げるという戦略のようです。コンテストが終わったら、EAを公開するとのこと。楽しみですね。

彼のブログも下記のようなカウントダウンをしていました。

登録終了まで、2ヶ月と1日、現在までの参加(予定)者1129名。
もう2ヶ月だー!
PageTop

コンテストにEAジェネレータは使えるのか?(5)

本当に監視されていると思います。
見るにみかねて本家が動いてくれました。

1000人超えました。(昨年は7月末時点で740名でした。)
登録終了まで、2ヶ月と7日、現在までの参加(予定)者1023名。

追記:よく見てみるとまだ全然ダメですね。記事に書いてある通りにやってもコンパイルすら通らないという状態です。つまり、検証すらしていないということです。分割オーダーなどの機能もなく、姿勢を示しましたよっていう程度のものですね。もう少し待つ必要があるようです。
ひとつグッドニュースは、記事の中のコードで
//--- Initializing expert
if(!Expert[i].Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber+i))
と書いちゃっているところがあるのですが、Expert[i]ってことは、iの中に何が入るか?
皆さんならもうお分かりですよね。
PageTop

外馬ツール

筆者も昨年作ったのですが、他の方が作ったMT5toMT4トレードコピーツールがフォーラムにありました。
MT5が書いたファイルをMT4で読み込む部分に筆者も苦労したのですが、この方の解決方法が面白い。
なんと、MT4そのものをC:\Program Files\MetaTrader 5\MQL5\Files\の中にインストールしちゃってます。
MT5が書き込むファイルのアドレスは、
C:\Program Files\MetaTrader 5\MQL5\Files\MetaTrader 4\experts\files\xxx
になります。
あまりの強引さに思わず笑っちゃったのですが、この発想はありませんでした。凄い!

登録終了まで、2ヶ月と10日、現在までの参加(予定)者981名。
PageTop

コンテストにEAジェネレータは使えるのか?(4)

コンテストにEAジェネレータを使った場合、世界中のどこかの参加者と偶然全く同じEAが出来てしまった場合、マルチエントリーの嫌疑をかけられ失格になる可能性があるということがそもそもの問題だったのですが、それでも「コンテストには出たいけど、MQL5は見たくない」という方のために、とりあえずマルチシンボルにしてそれぞれの通貨ペアに別々の尚且つ複数のシグナルを与えることで、その可能性を減らせるのではないかというのが、前回までのお話でした。
今回は大会ルールに合わせたオーダークラスの使い方とアップロードについてのお話です。

EAジェネレータで生成されたEAは、SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX)を確認しているので、5ロットの最大オーダー制限には引っかからないようですが、最大ロット制限や、ペンディングオーダーの12個までの制限等は考慮されていないようなので、オーダーとポジションのロット制限の部分をクリア出来るように、標準のTrade.mqhを改造したTradeATC.mqhを作りました。
ところが、EAジェネレータで生成されたEAは、Expert.mqhというクラスを使っているためにEAそのものの中ではTrade.mqhを使っていないんですね。どこで使っているかというと、Expert.mqhから呼び出されるExpertTrade.mqhの中です。というわけで、ExpertTrade.mqhから変えていく必要があります。
またこれらのオリジナルのクラスをコンテストのウェブサイトからアップロードする際に、Includeフォルダ直下にしか上げられないようなので、それぞれのファイルの中にある参照位置の記述を書き直す必要があります。
そのため、EA本体以外に、
ExpertMultiSymbol.mqh、
ExpertTradeATC.mqh、
TradeATC.mqh
をIncludeフォルダにアップロードします。(ローカルのテストでは、Includeフォルダ直下にコピーしてください。)

先日の記事
のExpertMultiSymbol.mqhとそれを使うことを前提とした全てのファイルを、サンプルのEAと共にフォーラムに上げてありますので、参考にしてください。
マルチシンボルにする理由は、それぞれの通貨ペアに別々のストラテジを与えることで、全く同じEAが出来てしまう可能性を低くするためです。
なるべく12通貨ペア全てで別々の複数のシグナルを組み込む事で、あなたのオリジナリティーを高めましょう。

こんな時だからこそ、一人でも多くの日本人参加者が増えることを願っております。

登録終了まで、2ヶ月と14日、現在までの参加(予定)者903名。
PageTop

歴史のお勉強(2)

どうもMQ社の中の人もこのブログを読んでるようで(ンナワキャネー)、先日の記事に呼応するように、ATCのウェブサイトのニュースページに、過去の上位入賞者のストラテジーの詳細や統計などの記事がアップされています。
各年の上位20位の最終残高、勝率、PFなどの統計も出ていて興味深いですね。

結論の部分だけ要約しておきます。
「ほとんどの好成績のEAはトレンドフォロー型であり、大きなトレンドが発生したときに主となる利益を得ている。MAクロスといった単純な手法にしっかりとした資金管理を組み合わせたEAの方が、複雑な物よりも好成績となる場合も見受けられる。

上記の分析から、最適化はバランスだけでなくPFやシャープレシオも考慮すべきである。

過去のEAから学び、MT5の様々な武器を使って最強の戦略で、ATC2011に参加しよう!」

登録終了まで、2ヶ月と16日、現在までの参加(予定)者860名。
PageTop

コンテストにEAジェネレータは使えるのか?(3)

EAジェネレータで生成されたEAのコードを読み解くこと数日、自分の能力の素人度を思い知らされた気がします。
筆者がいかにオブジェクト指向というものが理解できていなかったかを改めて認識しました。
やたらたくさんのクラスの組み合わせで作られているコードなので、単純なMAクロスのEAですら、一体どこでMAの計算そのものをしているのかもわかりません。
何か少しでも手を加えようとすると、ほぼ全てのクラスを読み理解しなければ思ったようにいじることが出来ないようです。

何だかよく解らないまま、とりあえずマルチシンボル化にトライしてみました。
まず単純なMAだけをシグナルとするEAを生成します。中身を見てみるとint OnInit()の中で全ての処理が記述されており、メインとなるvoid OnTick()の中身はExtExpert.OnTick();だけであることが解ります。

void OnTick()
{
ExtExpert.OnTick();
}
void OnTrade()
{
ExtExpert.OnTrade();
}
void OnTimer()
{
ExtExpert.OnTimer();
}

下の2つ、void OnTrade()とvoid OnTimer()も同じですが、今回は使わないので削除します。
さてここで呼び出されているExpert.mqhの中身を見てみると、

//--- returns false if the EA is initialized on a symbol/timeframe different from the current one
if(symbol!=Symbol() || period!=Period())
{
printf(__FUNCTION__+": wrong symbol or timeframe (must be %s:%s)",symbol,EnumToString(period));
return(false);
}

「チャートのシンボルと違ってたら、エラーにする」という部分があるので、このif文をばっさり削除し、ExpertMultiSymbol.mqhなどと名前をつけて保存。
同時に、EAの始めの方にある、

#include <Expert\Expert.mqh>

を、

#include <Expert\ExpertMultiSymbol.mqh>

と書き換えます。これでチャートのシンボルと関係なく、トレード対象を自由に指定できるようになりました。
さて、ここから先は力技です。

//+------------------------------------------------------------------+
//| Global expert object |
//+------------------------------------------------------------------+
CExpert ExtExpert;

これを、

//+------------------------------------------------------------------+
//| Global expert object |
//+------------------------------------------------------------------+
CExpert ExtExpert0;
CExpert ExtExpert1;
CExpert ExtExpert2;
CExpert ExtExpert3;
CExpert ExtExpert4;
CExpert ExtExpert5;
CExpert ExtExpert6;
CExpert ExtExpert7;
CExpert ExtExpert8;
CExpert ExtExpert9;
CExpert ExtExpert10;
CExpert ExtExpert11;

と書き換えて、12通貨ペア分別々のインスタンスを作ります。
次に、同じように初期化部分も関数化して12個作ります。

//+------------------------------------------------------------------+
//| Initialization function of the expert |
//+------------------------------------------------------------------+
int OnInit()
{
int res=SubInit0("USDCHF");
res=SubInit1("GBPUSD");
res=SubInit2("EURUSD");
res=SubInit3("USDJPY");
res=SubInit4("USDCAD");
res=SubInit5("AUDUSD");
res=SubInit6("EURGBP");
res=SubInit7("EURAUD");
res=SubInit8("EURCHF");
res=SubInit9("EURJPY");
res=SubInit10("GBPJPY");
res=SubInit11("GBPCHF");
//--- ok
return(0);
}

同じように下記も無造作に12個並べちゃいます。(インスタンスをループで回す方法がわからなかった・・・。)

//+------------------------------------------------------------------+
//| Deinitialization function of the expert |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ExtExpert0.Deinit();
ExtExpert1.Deinit();
ExtExpert2.Deinit();
ExtExpert3.Deinit();
ExtExpert4.Deinit();
ExtExpert5.Deinit();
ExtExpert6.Deinit();
ExtExpert7.Deinit();
ExtExpert8.Deinit();
ExtExpert9.Deinit();
ExtExpert10.Deinit();
ExtExpert11.Deinit();
}
//+------------------------------------------------------------------+
//| "Tick" event handler function |
//+------------------------------------------------------------------+
void OnTick()
{
ExtExpert0.OnTick();
ExtExpert1.OnTick();
ExtExpert2.OnTick();
ExtExpert3.OnTick();
ExtExpert4.OnTick();
ExtExpert5.OnTick();
ExtExpert6.OnTick();
ExtExpert7.OnTick();
ExtExpert8.OnTick();
ExtExpert9.OnTick();
ExtExpert10.OnTick();
ExtExpert11.OnTick();
}

後は関数化したInt SubInit“番号”(string sym)を12個作り、元のInt OnInit()の中身をぶち込み、
中のSymbol()をsymに替え、ExtExpertをExtExpert“番号”に書き替えて完了です。

泣きたいほど不細工な、強引というか情けないコードですが、これで一応EAジェネレータで生成されたコードをマルチシンボル化することが出来ました。
オブジェクト指向の悪い例として教科書に出て来そうですが・・・。

この例では、使われているシグナルとそのパラメータは12シンボルで全て共通となっていますが、SubInit“番号”()の中身を通貨ペアごとに変えることも出来ますので、それぞれの通貨ペアごとに最適な手法とパラメータを与えることも可能です。そのへんのちゃんとしたEAジェネレータの使い方はコチラを参照してください。後は時間との勝負ですね。
http://blog-imgs-17.fc2.com/a/l/o/alohafx/simpleMAmulti_mq5.txt

次回、コンテストのルールに合わせたオーダー処理クラスとアップロードに関する注意について考えて見ます。(たぶん)

登録終了まで、2ヶ月と18日、現在までの参加(予定)者839名。
PageTop

歴史のお勉強

「ATCの歴史はEAの歴史である」と言っても過言ではない。
というわけで、過去のATCの歴史について簡単に学んでみよう。(なんてね。筆者は歴史の時間は苦手でした。)

2006年
参加258名 優勝400173 Rich (Ukraine) PF2.47 $35,175.56
黎明期。さすがに皆さん小手調べ程度のEAで参加されていたようです。
全体的に普通のテクニカルの組み合わせで作ったEAが多かったように見える。

2007年
参加603名 優勝500008 Better (Ukraine) PF2.18 $130,475.45
この年のBetterさんの優勝をきっかけに人工知能を使ったEAが流行りました。
その後、NN理論のMQL4での研究が進み、ライブラリもできたのでニューラルネットワークのEAへの導入がとても楽になりました。

2008年
参加705名 優勝600349 Liliput (Bulgaria) PF3.20 $169,584.64
いわゆる”朝スキャ”のワンツーフィニッシュとなった年でした。この後、ご存知の通りEAと言えば朝スキャと言うほど、商用EAのほとんどはこれというぐらいの朝スキャ時代の幕開けとなる。
ちなみに、この手法の元祖はViseuさんという日本人が作ったDP-002というEAである。(筆者も貰いました。)しかし、その後ブログの更新も途絶え、現在は杳として行方がわからない。筆者がEAという際限の無い趣味に足を踏み入れ、コンテストに出場するきっかけにもなった方だけにとても寂しい。

2009年
MT5への移行のため開催なし。

2010年
参加314名 優勝630049 bobsley (Russian Federation) PF1.15 $77,102.79
初のMT5での大会。参加者数、優勝者の最終バランス共に初めて前回を下回る。
MT5の普及が進んでいないことを如実に現す大会となった。

2011年
果たして今年は?またここから新たなEAのムーブメントが生まれるのでしょうか?

登録終了まで、2ヶ月と19日、現在までの参加(予定)者820名。
PageTop

2011コンテスト EA 作製記(0)

番号が前後しますが、昨年の失格となったEAについてネタバラシをしておこうと思います。
筆者がメインエンジンと呼んでいた物は、実は“トライアングルアービトラージ”だったんです。
MQ社はブローカの向こう側にある会社なので、当然ブローカが嫌いな戦術はNGにするわけで失格になったのも無理は無いと思います。
この手法は、3つのポジションを取りますから、個々のポジションの内、利益側のポジションはルールにある「スプレッド以下の利益」にはならないと考えたのです。しかし、3つのポジションの損益を合計すると数ピップスの小さいものになるため、「スキャ」と判断されてしまったのでしょう。
もちろんこの手法はそれぞれのレートの瞬間的な“ズレ”を利用するため、3つのポジションをほぼ同時に取る必要があるので、実戦ではほぼ不可能です。
スタート前に勝手に走らせてたことや、急遽前日失格になった事から見ても、たぶんMQ社の中でも直前まで揉めていたのでしょう。
その後、テスターのExcution欄にRandom Delayモードが付きました。これって上のような事情が無きゃ、全く何のためのものか解りませんよね・・・。

登録終了まで、2ヶ月と21日、現在までの参加(予定)者775名。
PageTop

2011コンテスト EA 作製記(1)

さて、筆者のEAの方針ですが、まだずいぶん時間があるのでいくつかの候補があり、まだ固まっていません。

(1)主催者側が求めている(と思われる)戦略に迎合するために、昨年作ったManovモドキをMQL5に移植し、12通貨ペア版にしました。これに、昨年も使ったブースターエンジンを搭載し、スタートダッシュでの瞬間最高順位自己ベストを狙います。
(2)ちょっと気になるインジケータがあるので、それを使って普通にちゃんとしたEAを作る。
(3)EAジェネレータを使って各通貨ペアごとにオプティマイゼイションをして、それを12通貨ペア全部で回す。
割と単純なロジックの組み合わせでも結構凄いのが出来そうな気がするが、膨大な時間が掛かるかも。

(1)はもうほとんど出来ているので楽なのですが、何しろ低レバナンピンなので、あまりパフォーマンスは期待できない。リーマンショックのような相場にさえならなければ、プラスで完走という目標だけは何とかなりそう。
(2)はまだ構想段階で全く手付かずなので、一番大変。ダメだと思うけど一応やってみる。
(3)は新しいおもちゃで遊ぶのが意外と面白いのでやってます。結局、強カーブフィッティングになってしまうと思うのですが、コチラの再現性指数などを参考に良いものが出来ればやってみても面白いかななどと考えています。

登録終了まで、2ヶ月と24日、現在までの参加(予定)者729名。
PageTop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。