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

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

スポンサーサイト

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

PageTop

コンテストアカウント

本日メールにて連絡が来ました。"ATC 2010: Start of the automatic checking of Expert Advisors" という件名のメールです。「あなたのコンテストアカウントが発行されましたので、ATC2010ウェブサイトの「ユーザース->ファイルズ」ページを見てね。」だそうです。筆者の今年のログイン番号は "661745" です。今年は通し番号じゃないのかな?早速ログインしてみました。なんと "Demo Account" のまんまです!大会開始してから "Contest Account" に変わるのでしょうか?確か一昨年は最初からコンテストアカウントと表示されていたように記憶しています。これだけが目的というか、楽しみだったのにちょっとがっかりですね。通貨ペアは大会ルールの12シンボルになってます。
件名にあるように今年からは EA の審査は自動でやるようです。メールには他に「EA を提出するときは必ず最新の build 298 でコンパイルせよ。」とあるのですが、筆者の MT5 は既に build 299 でした。
EA の締め切りは9/22、大会開始まで、2ヶ月と5日、現在までの参加(予定)者762名。

2010/8/19加筆
改めてルールをよく読むと「アカウントナンバーは600000から650000」とあるので661745はやはりただのデモアカウントだということになります。
コンテストアカウントナンバーはやはりまだお預けのようです。

スポンサーサイト

PageTop

コンテスト EA

現在参加(予定)者 740名だそうです。
前回参加 EA が705台(人?)でしたので一応上回っています。
もちろん筆者のようにまだ一行も書いてない人もいると思うので、最終的には何台になるのか分かりませんが。
前回は9月の登録終了までに 2420名が登録しましたが、EA を提出したのが 770名で、さらに審査を通過したのが705人という事ですので、やはり間に合わなかったという人達もいたのでしょう。

今回、最大ロット数が各シンボルごとに15ロット、つまり前回の12倍に引き上げられたことで、マルチシンボルが勝つための最低条件になってくると思われます。なかなか全ての通貨ペアに通じるロジックは無いとすると、各通貨ペアごとに EA を書いてそれを統合するというような事になるのでしょうか。それはちょっと大変過ぎです。一番簡単なのが、 thezen 式ですかね。各通貨ペアについて大会終了までに上がるか下がるかの長期判断だけを人間がして、 EA 自体はMA 一本で片張りなんて。12通貨ペア全てでやれば、意外とポートフォリオになるのでは?あとは資金管理と玉転がしを突っ込んでおけばそれだけで一丁上がりですね。
主催者受けするのは、たぶん相関関係を使ったロジックかと思われます。主催者がマルチシンボルを勧めているのは MetaTrader5 を株や商品のマーケットに売り込みたいからだと先日も書いたのですが、株や商品の方が季節要因によるアノマリーやシンボル間の鞘取り等の手法が多く聞かれるような気がしますし、EA 化しやすいのではないでしょうか?

いろいろ考えてはいるのですが、まだ1行も書いてません。
PageTop

ファイルで出来ました

3日前に断念とか言っておいて何なんですが・・・。
あきらめて“神”にお願いしたのですが、”とある”宝庫を漁っていたら、有るじゃないですか、ここに。
最初からネームドパイプなんてカッコ付けなければ良かったのだ・・・。
というわけであんまりカッコ良くは無いですが、何とか動くようになりました。ファイルもMQ4 とMQ5 の2つだけになってスッキリしました。タイムラグも思っていたより小さいようです。(ベタ褒め by 本人)
まだ細かいところをテストしていないので、興味のある方ご協力お願いします。
SotoumaTrancemitter.mq5 |EA
SotoumaReceiver.mq4 |Script
下記は必ず入力してください。(MT4 側)
extern string AccountNum = "0";
AccountNum は、同じコンピュータのMT5 上のコピー元のアカウントナンバーです。MT5 側は "000" のままでも自動でログインしているアカウントが入ります。
extern string BasePath = "C:\\Users\\xxxxxxxxx\\AppData\\Roaming\\MetaQuotes\\Terminal\\xxxxxxxxxxxxxxxxxxxxx\\MQL5\\Files\\";
BasePath は、同じコンピュータのMT5 のData Folder\MQL5\Files\ のパスです。¥を全て\\にするのが”おまじない”らしい。他のパラメータはデフォルトでも動きます。

サポートは有りません。上の説明とコード見て解らない人は使わないでください。
あくまでMT5 時代が来ても過去のMT4 資産を生かす為の研究用です。
例によってリアルで使って損しても筆者は知りません。
PageTop

MT5 to MT4 TradeCopier 断念

ギブアップです。
やっぱりもう基礎知識が無いのでだめです。もっと簡単に出来ると思っていたのですが・・・。

どうもネームドパイプがうまく通信できません。MT4 同士, MT5 同士だとうまくいくのですが、MT5 to MT4 だとだめです。1回目の通信は出来るのですが、2回目からは読み込めません。
MT4 の方が CreateNamedPipeA しか呼べないのに対し、MT5 の方は CreateNamedPipeW しか使えないのが原因だと思うのですが、よくわかりません。
自然治癒力を信じてぶっ壊れたやつを上げときますので、どなたかパイプとか詳しい方お願いします。。
SotoumaTrancemitter.mq5 (EA)、MT5用送信クライアントEA、ファイルメニューからデータフォルダを開き、その中の\MQL5\Expertsに入れる。
CNamedPipes_mod.mqh (Pipe for MT5)、ファイルメニューからデータフォルダを開き、その中の\MQL5\Includeに入れる。
SotoumaReceiver.mq4 (Script)、MT4用受信サーバスクリプト、\MT4\experts\scriptsに入れる。
NamedPipeServer_mod.mqh (Pipe for MT4)、\MT4\experts\includeに入れる。
そろそろコンテストEA 書かないと・・・。

その他の問題点
送れる String の長さが256文字までなので、32文字でひとつのシンボルですから、8シンボルまでしか送れません。(たぶん)
これはどうしようもないのですが、MT5 側で何度もナンピンやピラミッディングをすると、MT4 側ではそのシンボルのポジション数がその回数分どんどん増えます。その後何回か部分決済をすると、ポジション数は変わらずに個々のサイズが小さくなっていくので、最後は NormarizeDouble されて無くなってしまう可能性があります。

ところでまだログインもパスワードも送って来ません。
「Your data have been accepted after moderator's check」には7月21日にやっとチェックが付いた。
400人を捌くのに丸1ヶ月。ロシア人のペースにしては早い方か?
まあどうせまだEA も一行も書いていないし、どうでもいいのだが、早くMT5 の”Contest Account”が見たいと思っているのは筆者だけでしょうか?
PageTop

プログラミングとアイデア

筆者のような素人には、EAの方がインディケイターよりも表現の部分が無いだけ作るのは楽です。
それで以前はインディケイターの類は面倒くさくて敷居が高かったのですが、相場そのものを学ばなければ基本が分からないのではないかと考えたときに、こんなインディケイターやあんなスクリプトが欲しいなどと思い始め、また、faiさんや00さんのようなプロ作家の方々の作品に啓蒙されて、最近はインディケイターやスクリプトの制作ばかりでEAはサボっていました。もちろん、基本的な相場の動きを知らなければ、結局オリジナルの良い EA はつくれません。しかし EA で何が出来るかを知らなければ、アイデアを考えることすら出来なのではないでしょうか?
自分でコードを書く気が無い方でも、EAで何が出来て何が出来ないかを知っているか否かが重要です。つまり、EAやインディケイターのアイデアとコードを書く能力はまた別の話であるということです。ですから最低限コードを読むことができるようになった方が、この先の相場の世界ではお得です。
プログラミングそのものは、少し前に流行った魔法使いの学校を舞台にした映画のように呪文を覚えるだけの話です。映画と違うのは、あなたが何をどのように間違えても世界がが壊れることは無いということで(コンピュータは爆発するかもしれませんが?)、安心してトライアンドエラーが出来るということでしょう。
呪文が読めるようになると、呪文の区切りが見えてきます。そうなったら後は、呪文のコピペでレゴでも組み立てるように好きなことが出来るようになってきます。
PageTop

MT4 and MT5 間通信

MT4 and MT5 間通信
この技術がうまくいけば、いろいろ夢が広がります。

MT5のティックを MT4 に流す
MT4上のEAからMT5上のリアルアカウントにオーダーを出す
MT5上のEAは、VOM管理をしながら、ポジションを動かす。

インジケータバッファに全てのデータを入れておけば、EA やインジケータなどの
いままでの MT4 資産が全て生かせます。名付けて
MT4_MT5_Mirror.mq5
これってもしかして、FXDD が言ってたやつ?

MT5 の行方
MT5 の特徴として、株にも対応するということだろう。
だから、MetaQuotes サイドも、FX 業者はメインターゲットではないのだと思う。
もしかしたらそれが、例の疑問?の答えかもしれない。
確かに株に使うとしたら、マルチシンボルのEA が増えてほしいと思うのは納得がいく。

PageTop

Named Pipe

fai さんは御忙しいようで、仕方ないのでいろいろ探し回ってみたら、
A DLL-free solution to communicate between MetaTrader 5 terminals using Named Pipes
「ネームドパイプを使ってDLL無しで通信する」なんて記事がありました。
これは MT5 同士の通信なのですが、同じような記事でネームドパイプを使った MT4 同士の通信に関するものもありました。これを使えば筆者でも何とかなりそう。よく分からないままとりあえずあてずっぽで適当にコードを改造してやってみます。
PageTop

SotoumaReceiver.mq4

MT5の場合、12通貨ペアしかなければ最大で12ポジションしか取れないので、全ての通貨ペアについて、そのロットを比較し、違っていれば、その増減を MT4 側でオーダーする。
だけなのですが、実は大変だったのは MQL4 側のコンバインポジションの処理でした。
MT5ではひとつの通貨ペアにひとつのポジションしか建てられません。
ある通貨ペアを2回買うとMT4では、二つのポジションになるのに対し、MT5では、その平均値のひとつのポジションになるわけです。これを一度に決済してくれればいいのですが、EAによっては半分とか1/3だけ決済したりもする場合があったりするわけです。するとMT4側では、平均価格を維持するためには、二つのポジションを同時に同じ比率で決済しなければなりません。このコードがややこしいというか、無駄が多いのです。どなたかもっと簡潔な方法があればご教授ください。
現在、MT4 to MT4 でテスト中です。
PageTop

SotoumaTrancemitter.mq5

まずはいきなり MQL5 をスクラッチから書いていくのは大変なので SotoumaTrancemitter.mq4 (慣れてる方の MQL4 です。)を作り、動作確認をし、それを MQL5 に移植します。またまた fai さんのお世話になります。
MQL5 では、int start() の代わりにいろいろなイベントが使えるようなので、今回の目的に一番よさそうな void OnTrade() を使ってみます。そこにとりあえずそのまま MQL4 のコードを貼り付けてコンパイルしてみると、62 error(s), 22 warning(s) だそうです。
MQL4 を勉強し始めた頃のことを思い出しますね。
最近は、スクラッチからコードを書いてもエラーが出ないようにはなってきたのですが、以前はエラーが出るのが当たり前で、それをひとつずつ潰していくごとにひとつ学んでいくという作業をしたものでした。
また同じことの繰り返しです。
当時はまだ豊島先生の本も出版されていませんでしたし、ネットの情報だけで、MT4 をいじりたおして学ぶ以外に方法がありませんでした。今は、fai さんをはじめとしてすばらしい方々が様々な情報を提供してくださり、本当に有り難いと思います。
おかげで MQL5 への翻訳は思ったほど苦労しませんでした。
というわけで送り側は出来たのですが、なぜかメモリに書き込んでくれません。
もしかしたら、 MQL4 の DLL ってそのままじゃ MQL5 には使えないの?
ちょっと fai さんの所行って聞いて来ます。(困ったときの"神"頼み・・・)
http://blog-imgs-43.fc2.com/a/l/o/alohafx/SotoumaTrancemitter-mq5.txt
PageTop

SotoumaTransmitter.mq5

まずはいきなり MQL5 をスクラッチから書いていくのは大変なので SotoumaTransmitter.mq4 (慣れてる方の MQL4 です。)を作り、動作確認をし、それを MQL5 に移植します。またまた fai さんのお世話になります。
MQL5 では、int start() の代わりにいろいろなイベントが使えるようなので、今回の目的に一番よさそうな void OnTrade() を使ってみます。そこにとりあえずそのまま MQL4 のコードを貼り付けてコンパイルしてみると、62 error(s), 22 warning(s) だそうです。
MQL4 を勉強し始めた頃のことを思い出しますね。
最近は、スクラッチからコードを書いてもエラーが出ないようにはなってきたのですが、以前はエラーが出るのが当たり前で、それをひとつずつ潰していくごとにひとつ学んでいくという作業をしたものでした。
また同じことの繰り返しです。
当時はまだ豊島先生の本も出版されていませんでしたし、ネットの情報だけで、MT4 をいじりたおして学ぶ以外に方法がありませんでした。今は、fai さんをはじめとしてすばらしい方々が様々な情報を提供してくださり、
本当に有り難いと思います。
おかげで MQL5 への翻訳は思ったほど苦労しませんでした。
というわけで送り側は出来たのですが、なぜかメモリに書き込んでくれません。
もしかしたら、 MQL4 の DLL ってそのままじゃ MQL5 には使えないの?
ちょっと fai さんの所行って聞いて来ます。(困ったときの神頼み・・・)
PageTop

MT5 to MT4 TradeCopier

さて、今年も外馬でうまうまと思っていたのですが、MT5になってしまったので、前回使ったコピーソフトは使えません。
つまり、コンテスト出場者のトレードを覗くのはたぶん MT5 しか使えませんが、実際リアルアカウントで売買するためには MT4 でしか出来ないわけです。
というわけで自作にチャレンジです。
コンテストEA書くより重要です。(って?)
MQL5で、 SotoumaTransmitter.mq5 というEAを作り、fai さんのところで頂いた MemMap.dll を介して、SotoumaReciever.mq4 でリアルアカウントで同じトレードを再現します。MT4 と MT5 には OrderType の違いがあるためペンディングオーダーはコピーされません。(筆者には荷が重過ぎます。)処理に時間差があるため、スキャル系のEAに使うにはキツイかもです。出来上がったら、うpしますね。
PageTop

まだこない

コンテストアカウントのログインナンバーとパスワードがまだ来ません。
先月22日にはエントリーしているので、既に10日経っています。

前回のときはすぐに来たような気がするのですが。
なんか間違ってるのかな?
もう来てる人いますか?
PageTop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。