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

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

スポンサーサイト

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

PageTop

MT4、MT5 大幅に翻訳を修正

現在、300クレジットで日本語訳をやる人を募集しています。
興味のある方はコチラから。

メタクォーツの中の人とお友達になれるという特典が付いてます。



実質残り日数16日

スポンサーサイト

PageTop

コードベース

先日の「ワンクリック通貨ペア合成ツール」が、CodeBaseにアップされました。

審査というか、アップしてから公開されるまでに、1ヵ月半掛かりました。
そんなに厳しいのか、単に放置プレイなだけなのか?


登録終了まで、1ヶ月と21日、現在までの参加(予定)者1555名。前年ほぼ同日比129.3%
PageTop

MT5で両建て(その2)

「どうしてもMT5で両建てしたい」という貴兄のために。

以前作った三角裁定EAを応用して、「ワンクリック通貨ペア合成ツール」を作りました。

ryodate tool

例えば、既にあるEURUSDポジに触らずに逆方向にEURUSDをポジりたい時、EURGBPとGBPUSDをロットを合わせてポジれば、合成通貨ペアでEURUSDをポジったことになります。
このツールは、あらかじめ設定した2つのコンポーネントペア(部品となる通貨ペア)を、ロットを自動計算し、(ほぼ)同時にポジります。ドルストはユーロを媒介通貨とし、クロスはドルを媒介としています。EURUSDのみポンドを媒介通貨としました。
今の所、ATCの12シンボルとAUDJPY,ZARJPYの14シンボルしか実装していませんが、金ドルとドル円を合成してXAUJPY等お好きな通貨ペアを(擬似的に)作る事が出来ますので、何か他の用途もあるかもしれません。
もちろんスプレッドや証拠金は2倍になるし(通常の場合。たまに上の画像のように合成通貨ペアの方がスプレッドが狭い場合もある。瞬間的には逆転することもあり、これを利用したのがトライアングルアービトラージ。)、筆者は両建てはあまり使わないので、利点は理解できないのですが、コンセプトモデルということで。

EA SymbolSynthesizer_mq5.txt
Include SymbolSynthesizerDialog_mqh.txt
Include SpinEditDouble_mqh.txt

PageTop

MT5で両建て

先日MT5のブローカ側両建て対策について書いたのですが、ロシア(たぶん)のブローカで両建て出来るMT5がありました。

この会社、通常のEURUSDなど以外にEURUSDLなどという全く同じ価格の“裏”シンボルが全てのシンボルにあり、オモテでショート、ウラでロングという風に両建て出来るようになっています。

ryoudate
PageTop

スマホでメタトレーダー

今、iPhone版とAndroid版のMT4、MT5の日本語版の翻訳をしています。(例によって安いのですが、最近MQL5クラウドの使いすぎでクレジットが減ってきているので、受けちゃいました。)
Android版のMT4は今日現在まだ出ていないのですが、近々出るらしいです。

翻訳ホントに難しいです。一つ一つがクイズみたいなもんです。前後の文脈もなく、「close」を訳せといわれても、「アプリケーションを閉じる」のか「建玉を決済」するのか分かりません。
例のMT4のテスターの「from」と「to」を、「差出人」と「宛先」と訳していたのも無理からぬ話というか。

英語が悪いのか、日本語が難しいのか判りませんが、英語の方が語彙が少ない分、多義語が多いような気がします。
また、「about」なども多くの場合、「バージョン情報」という意味に使われていますが、「について」とか訳してしまうと文法上の違いから「についてメタトレーダー」と訳されてしまうかもしれないわけです。
特に筆者が気に入らないのは「Investor password」という言葉です。直訳すると「投資家パスワード」ということになりますが、本来は「閲覧専用パスワード」という意味であり、筆者はMT5の翻訳をする時に「パートナーパスワード」と訳したのですが、「Investor」だけを訳せといわれると、それがどこでどのように使われるか分からないので、「投資家」としか訳さざるをえないのです。

というわけで、スマホ版MT4/5の日本語訳は“変な所満載”となる可能性がありますが、すべて筆者の責任です。ご容赦下さい。(御指導、御指摘、歓迎。お願いします。)

筆者は半自動売買派ですので、あまりスマホの有用性は感じられないのですが、EAがちゃんと動いているかとかをいつでも簡単に確認できるだけでもいいですよね。
PageTop

MT5の行方

saru999さんにコメントを頂いたのですが、コチラなどでも気に掛けておられるようで、みなさんどうお考えでしょうか?

このブログでは、極力ATCまたはMT5に関連する話題に絞っています。FXとか、システムトレードとか、たまに触れてもそれは逸脱です。つまり、「違う方向へ行っちゃってる人」の最果てです。
MT5はそんな人達の玩具で終わっちゃうんじゃないの?と筆者は思います。

MT5のユーザー側の利点といえば、やはりバックテストでしょう。ですから、開発とテストはMT5、実運用はMT4などのように、棲み分け出来れば問題無いんです。MQL4が書けてMQL5が書けない人はいっぱいいても、逆はそれほどいないはずです。いたとしても、トレースEAも有りますしね。そこらに落ちているインディケータやEAの数もMT4の方が桁違いに多いでしょう。
つまり、ユーザー側には積極的に移行する利点も動機も無いのです。

コメントでも書きましたが、ユーザーにとってもブローカにとっても導入を躊躇する一番大きな壁は、両建て禁止でしょう。両建ての是非はそこここで議論されていますが、アメリカ式に追従する国が無い以上マイノリティーであることは明白です。
VOM(VPMですかね、MQL5的に言うと)、仮想ポジション管理をするようなプラグインをブローカ側がプリインストールするとか解決方法はありそうですけどね。いずれにせよ、FXブローカにとってもそれほど利点も動機も無さそうです。

唯一の光明は、株ですね。筆者は株式の自動売買ソフトウェアに詳しくないのですが、MT5は板表示に対応していますから、ロシア株の取引シンガポール商品市場や、ドバイ金商品市場などで採用されています。
株式しか扱っていないブローカでも、メタトレーダーという名前ぐらいは知っているのではないかと。そのへんにセールスすればMT5も広がるかもしれない。
PageTop

ビジュアルモードでインディケータを表示する

MT5になってストラテジーテスターのビジュアルモードが別窓で開くようになったので、MT4の時のようにドラッグアンドドロップでインディケータを載せることが出来なくなってしまいました。

ビジュアルモードでインディケータを表示するには、以下の2つの方法があります。
(1)EA内でiMA()等の標準インディケータまたはiCustom()を使う
コードの中でMT5に最初から付いている標準インディケータまたはiCustom()を使っていれば、そのインディケータは自動的に表示されます。線種や色などは変更出来ません。
iCustom()を使わずにEA内部でインディケータの値を計算しているような場合は、表示されません。
(2)テンプレートを作る
少し面倒ですが、EAと同名のテンプレートを作る方法でしかインディケータを表示することは出来ないようです。
テンプレートを作るときは、コードの中で標準インディケータを使っている場合、そのインディケータは外しておかないと、二重に表示されてしまいます。

ちなみにMTFやマルチシンボルのEAの場合、それぞれの時間足、またはシンボルの全てのチャートが開きますが、EAをアタッチしたチャート以外のチャートにインディケータを載せる事は、残念ながら出来ないようです。
(訂正)上記(1)の方法で出来ます。

PageTop

MQ社のMT5用過去データ

例の2006年9月以前の「ヒゲ問題」はMT4から継承されてしまっているようで、MQ社のMT5用の過去データで、スキャル系のEAの10年ぐらいのバックテストをすると、こんな資産曲線になります。

スキャルEAバックテスト

スキャ系のEAで長期のバックテストをする時には注意が必要です。


MT5になって、フローティングスプレッドに対応するためにヒストリーデータにスプレッドが含まれるようになったのですが、昔は変動スプレッドなんて無かったのに、どうなっているのかと思ったら、
EURUSDの場合、2003年末以前は5Pips、2004年が4Pips、2005年が3Pips,2006年から2009年9月22日までが2Pipsの固定スプで、その後が変動となっているようです。(コチラのインディケータで調べました。)

symbol.selファイルが無くなってしまったので、スプレッドチェンジャーも使えません。
ヒストリーセンターも無いので、修正は一切できません。
フォーラムでも聞いてみましたが、スルーでした。

誰か偉い人*.csv to *.hcc コンバータ作って下さい。
PageTop

MQL5クラウドネットワークを全開にする

昨年までは自宅のリモートエージェントを駆使して使っていたMQL5クラウドネットワークですが、その有料化による目覚しいスピードの進化には感激すら覚えます。
去年は何日も掛かっていた最適化が、ほんの数時間で出来たりするのですから。

最適化が激速になるMQL5クラウドですが、遺伝的アルゴリズムを使っていると、1箇所のアクセスポイントにしか継りません。完全アルゴリズムの場合にのみ全てのアクセスポイントを利用します。
全開を見たい人は、完全アルゴリズムにして、尚且つ最適化のパターン総数を100万通り以下(32ビットの場合。64ビットは1億通り以下。)にしてください。(登録時に貰えるお試し用2ドル分クレジットは瞬く間に消えていきます。)

全開中


普通は遺伝的アルゴリズムで十分です。
PageTop

最適化の結果に勝率を表示する---OnTester()関数

筆者は、MT4の頃から、何故最適化の結果に勝率が表示されないのかと、不思議に思っていたのですが、皆さんあまり勝率とか気にしないのでしょうか?(MT4でやりたい人はコチラ。)

というわけで、MT5で最適化の結果に勝率を表示するようにしてみました。

MT5になって、OnTester()という関数ができました。これって一体何?と思っていたのですが、これが、最適化の結果に好きな基準を適用するための物だったんです。->kwsk
勝率だけでなく大概の統計は何でも出来ます。(たぶん)

テスターカスタム

ストラテジーテスターのオプティマイズの右のドロップダウンメニューの一番下に「Custom max」という項目がありますが、下記のコードを貼って、これを選ぶと勝率で最適化されます。

勝率を計算するコード
//--------------------------------------------------------------
// The handler of the event of completion of another test pass:
//--------------------------------------------------------------
double OnTester()
{
double trades = TesterStatistics(STAT_TRADES);
double win = TesterStatistics(STAT_PROFIT_TRADES);
double winratio = 0;
if(trades>0) winratio = NormalizeDouble(win/trades*100,2);

return(winratio);
}
//+------------------------------------------------------------+

オプティマイズ結果のタブの「結果」の列に勝率が表示されます。
また、「Custom max」以外で最適化した場合は、オプティマイズ結果のタブで右クリックして、*.xmlに出力すると、Customという列(H)にそれぞれの勝率が表示されます。(キャッシュの中のナンチャラ.xmlでも同じです)
PageTop

MT5日本語バージョン(2)

ビルド506になって日本語ランゲージファイルが追加になりました。
かなりいい加減な訳もありますので、文句があればコメントでお願いします。
(マジでお願いします。変な所があったら教えて下さい。)

サーバーとウェブがまた落ちてる~?
やはり根本解決はなされていないようで。

登録終了まで、6日と23時間35分、現在までの参加(予定)者2124名。
(キャッシュより)
PageTop

MT5日本語バージョン

“EAジェネレータとオプティマイズだけ”の待ち時間の長さの副産物として、また、bighopeさんのTwitterに触発されて、MT5日本語化にトライしてみました。
MQL5.comの「Jobs」では、既に“OutDated”になっていたのですが、とりあえず聞いてみたら、横柄なOKの返事が来た。
>aknyazev:
>
>OK, we have chosen you to do this job.
>
>Please tell me, what technical translation skills do you have? Have you previously translated any software into your native language?
「オーケー、私達は、この仕事をさせるのにあなたを選びました。」
あえて直訳を書いておきます。横柄かそうじゃないかはロシア語や英語、日本語の訳の問題もあるので。
でも誰もやる奴いなかったじゃない?大体相当暇な奴(筆者?)じゃなきゃこんなもん$300じゃヤらネーと。
まあ、上から目線って言うの?はいつものことなので置いといて、MT5ではMultiLanguagePackをインストールすれば、MT4と違って、変な訳があっても自分で直せるのです。全部をやろうと思うとその膨大な量に驚かされますが(筆者は10日ぐらい掛かりました)、一部なら簡単です。いやそれだけではなく、自分の好き勝手なオリジナルバージョンだって作れちゃったりします。関西弁MT5とか、名古屋弁バージョンとか。
日本語MT5

登録終了まで、17日、現在までの参加(予定)者1838名。
PageTop

MQ社復活の兆し?

metaquotes.net は、復活しています。が、サーバダウンについては何も出ていません。
コチラのブログで今後の経過報告をするらしい。
(ソース:TSD, faiさん)

それにしても長すぎやしませんか?
サーバダウンもそうですが、それに関する報告がTSDに出たのが約40時間後です。
もちろんリアルアカウントではないので実害はないのですが、企業姿勢としてはこんなもんだということですね。

今回のことで考えさせられました。
今、FXで自動売買と言えばEAです。自動でなくてもMT4をチャートとして使っている人も多いはずです。もし仮に、MQ社が亡くなったとしたら、当然それを使っているブローカーも取引ツールを変えざるを得ません。つまり、ソフトウェアは残ってもティックデータは配信されなくなるわけでただのゴミになってしまうわけです。要は世界中のFXトレーダーの相当な数の人たちが、「こんなもん」の企業姿勢の会社に依存しているという脆弱性に曝されているのです。

追記:日本時間の午前5時ごろMT5のティック配信が復活したようです。
PageTop

MQ社まだ死んでます?!

既に30時間が経過していますが、何の情報もありません。
TSDロシアのフォーラムなどでもチラホラ話題になっています。
TSDは今回のコンテストのメディアスポンサーでもあるので、何か情報が出てきてもよさそうなものですが。

過去にデモサーバのティックデータが切れたり、ウェブサイトが落ちたりなどはありましたが、
今回は、mql4.com、mql5.com、metaquotes.netとMT5、MT4のデモ口座のティックデータ全てがこれだけの長時間落ちています。生きているのはバックテストのヒストリーデータとクラウドネットワークのサーバのみです。

FXはブローカーリスクが一番心配だとは言われますが、まさかこんなことはないですよね。
faiさんのブログのタイトルが「とある25万円のソフトウェアの備忘秘録」に変わらない事を祈っています。
PageTop

MQ社死す?!

MQ社のウェブサイトが死んでます。
MT5のティックも既に10時間以上止まったままです。
何が起きているんでしょう?
MT5あまり売れていないようだし、開発費が経営に重くのしかかって・・・なんて。
最悪の場合、このままオワコン?
うーん、コンテストが無くなるのはまだしも、今後の自動売買の行く末にも影響しそうですね。
もちろんこのブログも終わります。

登録終了まで、??日、現在までの参加(予定)者無し???
PageTop

バックテスト

適当なインジケータの組み合わせでジェネレータでEAを生成してはバックテストに明け暮れる日々ですが、出来合いのEAの成績を判断する、または、未来の成績を予想するための最適化、バックテストというツールは、よく言われているように、当てにならない、意味の無い物なのかも知れません。
しかし1つのバックテストの使い方として、手法の有効性を試す、ないし、手法を発掘するという役割があると思います。
インプットパラメータにしても、特にコンテストだけのことを考えれば、必要ないわけです。だから、自分がオプティマイゼイションをしたい変数だけをインプットパラメータにすればいいのです。
確実なことは、なにか手法のアイデアを思いついたときに、さらっとEAにしてテストしてみるなんて、ちょっとMQLが出来ると便利ですよね。
筆者もたまに酔っ払って何か思い付いて、夜中にガリガリ書き出してテストして、翌朝「ナニコレ?」なんてことがよくありますが。

登録終了まで、29日、現在までの参加(予定)者1664名。
PageTop

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

テンプレートとなるサンプルEAをバージョンアップしました。

AccountInfo.mqhの一番下で定義されているdouble CAccountInfo::MaxLotCheck()は、どうもポジションの最大ロット制限には関係ないらしい。
ということで、先日の問題点のうちひとつは解決されたので、ついでにクラスをひとつのファイルにまとめました。

以前の、
ExpertMultiSymbol.mqh
ExpertTradeATC.mqh
TradeATC_v103.mqh
は、1つのファイル、
ExpertMultiSymbolATC2011.mqh
になりました。

残るは、m_symbol.LotsMax()を使っているクラス、
MoneyFixedLot.mqh
MoneyFixedRisk.mqh
MoneySizeOptimized.mqh
の中をm_symbol.LotsLimit()に変えるだけです。
MoneyFixedLotATC.mqh
MoneyFixedRiskATC.mqh
MoneySizeOptimizedATC.mqh
これら以外のマネーマネジメントクラスしか使わない場合、
一度に5ロット以上のオーダーを出さない場合などは、上記3つのファイルは不要です。

それから、フォーラムの方で指摘のあった、OnTimer()の代わりに OnChartEvent()を使う方法に変えました。
別にiSpy.mq5が必要になりますのでココからダウンロードして、MQL5\Indicatorsフォルダに入れます。


登録終了まで、1ヶ月と18日、現在までの参加(予定)者1303名。
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

コンテストに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

コンテストに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

コンテストに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

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

例のウェブの方で聞いてみた質問に、Interestingさんというロシア人の方(MQ社の中の人ではないみたい)から返答を戴きました。
やはり、「コンテストのルールに適応させるためには、MQL5をいじる必要があり、プログラマーじゃないと無理じゃないの?」ということでした。

筆者としては、プログラマーじゃなくてもテクニカルで書き表せるようなシステムトレードをしている手動トレーダーがいると思うので、EAジェネレータは、コンテストの参加者の裾野を広げるという意味では大きな意味を持つと思うのですが、主催者側(?)は残念なことにそうではないようです。というか問題は、もし全く同じEAでエントリーされた場合に、それがマルチエントリーかどうかを見分けることが出来ないということです。
まあEAジェネレータにはシグナルだけでも20通り用意されているので全く同じ手法になる可能性も低いので、これで出ちゃってもいいんじゃないの?とも思えますが。
もし偶然にも同じ手法でEAジェネレータで生成したEAで出場した人がいた場合は、失格になってもあきらめるしかないでしょう。所詮運に左右される部分は排除できませんから。
いや逆に運がよければ、昨年のベラルーシチーム大量失格事件のように、インタビューされちゃうかもしれません。(?)
実際、EAジェネレータの威力は凄いです。数クリックで作ってオプティマイズするだけで、(バックテストでは)PF2.0を超えるようなEAが簡単に出来てしまうのですから。

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

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

過去にも、フリーの物から超高額な物(ボッタクリにしか見えない)まで様々なEA生成ソフトなるものがありましたが、MT5には標準でその機能が付いています。(詳しくはコチラ

この機能を使えば、MQL5が大嫌いなあなた(もちろんデフォルトです)もMQL5と格闘することなく、コンテストに参加できるというわけです。
気をつけなければいけないのは、オーダーの最大ロット制限があるために、5ロット以上のオーダーにはコンテスト特有の「分割オーダー」をするようなコードを入れておく必要があります。
例:
while(PositionLot>5.0)
{
ret=m_trade.PositionOpen(Symbol(),type,5.0,mode,0,0);
if(ret)PositionLot=PositionLot-5.0;
}
ret=m_trade.PositionOpen(Symbol(),type,PositionLot,mode,0,0);

SL、TP以外でクローズするときも同様です。

ただ問題は、もしかして世界中の誰かが全く同じシグナルの組み合わせでEAジェネレータで生成したEAで参加した場合、主催者側にはそれがただの偶然なのか、マルチエントリーなのかは判断できないということです。
昨年の大会でもMT5に付属しているサンプルEAで参加しようとした何名かは失格になっています。パラメータやちょっとしたコードの変更などは認めないと「How to Participate in the Automated Trading Championship 2011」の記事の中で説明されています。また、「ちょっとでもクサイと思ったら、理由も言わずに失格にしまっせ」とも書いてあります。

コンテストのウェブに6/16に出した筆者の質問には、主催者側からの回答は未だありません・・・。

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

ビジュアルモード

ビルド468になってやっとテスターにビジュアルモードが付きました。
別窓で開きます。ティックチャートも動きます。チャートは1枚しか表示されませんが、多通貨ペアのEAの場合、ツールボックスのトレードタブには他の通貨ペアのポジションも表示されます。
まだ途中で突然死んだりするようですが、やっぱりビジュアルモードは有った方が楽しいですね。
ビジュアルモード

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

過去6年間の通貨ペアごとのボラティリティ

トラリピ型のEAを作るとすると、それぞれの通貨ペアのボラティリティを考えておく必要があります。
というわけで、2005年から2010年までの10月、11月、12月、3ヶ月総計のボラティリティをエクセルに出力してみました。
参考のためにそれぞれの月のATR(12)も出してみました。(ATRの3ヶ月のセルは平均)
とりあえず2008年が突出しているということ、ATRと比べると年末3ヶ月はボラが大きいということぐらいはわかるのですが、意外と年毎のばらつきが大きく、予測は難しいようです。(あまり役に立たない?)

出力に使用したスクリプトはこちらです。そのうちこれを応用して、月ごとのアノマリーなどを探してみようと思っています。

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

MQL5 クラウドネットワーク

バックテストの最適化をするときに「MQL5 クラウドネットワーク」なる新機能が付いたので早速使ってみた。
使い方は簡単。ストラテジーテスターのAgentsタブで右クリックし、「Allow to use」のサブメニューの「MQL5 Cloud Network」にチェックを入れるだけ。
これでキプロス、ヨーロッパ、香港、シンガポール、米国のエージェントが使えるようになる。ちなみに「Local」と「Remote」のチェックをはずすと、手元のリソースを一切使わずに最適化できる。

cloudnetwork

ところが、結論から先に言うと、速くなっているのか遅くなっているのかよくわからない。クラウドネットワークにチェックを入れてあるとローカルやリモートのエージェントが、勝手に休んでいるときがあるようで、最適化が終わっていないのにどのCPUも動いていない状態になることがある。
自分のリソースがある程度あれば、使わない方が速いようだ。
また、自分のリソースをエージェントとして開放することも出来るのだが、怖いのでまだ試してない。
誰か人柱お願い。

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

ATCTradeWriterZ

VisualHistoryちゃんとした版を現在日本人トップの 630046 bighope さんが作ってくれました。

コードを見ても全く違いますね。とてもキレイでプロの仕事という感じがします。
筆者の場合いつも取り敢えずが多いので、いじっているうちに段々ぐちゃぐちゃになってきて最後はもうバグがあっても対処できなくなってしまう場合が多いので・・・。というわけで VisualHistory.mq5 はお蔵にします。というかずっと表示しているとなんか MT5 がフリーズするようなので。
PageTop

標準機能でVisualHistory

先日の記事で VisualHistory.mq5 を紹介しましたが、 MT5 には標準でヒストリーをチャート表示する機能があるようです。
ツールボックスのヒストリータブから、任意のトレードをドラッグアンドドロップするだけでチャート上に表示されます。ただ、ひとつずつしか出来ないようです。

HistoryD&D
PageTop

マウスでモディファイ

昨日気づいたので、どのビルドからかは分かりませんが、マウスのドラッグでTPやSLを動かせる機能が付いていたんですね。全然知りませんでした。まあ MT5 でリアルトレードすることはまだまだ無いでしょうからあんまり関係ないですけど。
PageTop

トレード解析用インディケイター

MQL5 の履歴は見づらいのでチャート上に表示するインディケイターを作りました。トレードを利確は青線、損切りは赤線で表示するだけのものです。取り敢えず版です。マルチシンボルの場合自動でチャートを開く機能、TP,SLに水平線を入れる機能等追加していこうかなとも思っていますが、あまり MQL5 をいじる気力が無いので誰かやってくれるとありがたいのですが。

VisualHistory

VisualHistory.mq5
拡張子を .mq5 に替えてください。

追記 : 手法解析のためには HistoryOrdersTotal() の方がいいと思ったのですが、なんかダメですね。ペンディングオーダーを使う EA だとどうも表示が変です。HistoryDealsTotal() に直せばいいのでしょうが、ホントに MQL5 見たくないんです。えづくんです。ティックの度に全部書き直すような無駄な事しちゃってるし。誰か助けて。。。
PageTop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。