時間に基づくパターン分析への MetaTrader 4 利用
はじめに
「自動売買チャンピオンシップ」フォーラムの掲示やインタビューを読むと、いつsも数多くの雑音に埋もれた興味深い情報がもたらされます。
William Boatright (Wackena) のインタビュー https://championship.mql5.com の中で提供されている引数は、日次スウィングトレードテクニックでの単一トレードに取り入れる、1日の内の1時間を選択するために使用する時間を基にした方法に私の注意を喚起しました。
それで、私は時間に基づくエントリ方法についての情報を集め始め、このテクニックの実際の高価を検証できるシステムを実現しようと思いました。
本稿に添付しているコードは、みなさんに、を用いてデータマイニングと比較的長いデータシーケンスを統計的に調査するためにどのような類の時間パターンが期待できるかという例を示すためだけにエグジット戦略は実現していません。
文献検索
まず、私は文献にこの考えの裏付けを探しました。そして、Perry J. Kaufman 著のこの話題に関するひじょうに興味深い記事"New Trading Systems and Methods" を見つけました。テクニカル分析のアドベンチャーにおける実に分厚いバイブルです。第15章では、パターン認識について語られており、一番最初の引数の一つは、1日の時刻と取引の修正です。
この章で、彼は Frank Tubbs の Stock Market Correspondence Lessons について述べています。そこでは米国の取引時間を基にした、株式市場における主要な6パターンについて説明がされています。そしてルール4では、「市場が 2:00 p.m. まで強気であれば、おそらく閉場そして翌日までそれが継続するであろう」と主張しています。
そう 2:00 p.m.です。GMT-5 は正確に 20:00 GMT+1 で、Wackena がコンテストでトレードを行う時刻です。これは、このテクニックの効果に関して最初の興味深い裏付けです。その他、この話題に関する面白い引用はこの Kaufman の章にあります。
基本の EA の実装
1日の特定の時刻にトレード方向をとらえるシステムを実装することについて最初に考慮する事項は、探しているものに関連するシグナルのみがトレンド方向に関する情報を伝えるものであって、カウンタートレンド法やブレイクアウトシステムはこの場合には適していない、ということです。
基本の Expert Advisor は本稿で提供されており、動作フローを表すブロック図は以下です。
- アナライザルーチンは一連のシグナルディテクタを呼び出し、そのときのトレンドの強さについて応答します。
- TrailingStopEngine は次の利益目標と平均の真の範囲またはそのようなもので決まる新しいトレーリングストップを動的に評価します。
- CurrentOpenOrders はオープン済みオーダー数を返します。
- LoopThroughOrders は全オーダーをループ化し、必要に応じて新しいトレーリングストップや新しい利益目標を取り入れ、またはなにか特定イベントに対してトレードを終了することを判断します。
- BlockFilterTrading はトレードを行いたくない特定条件があるか判断します。
- MoneyManagement はリスク関数としてロットサイズを帰ります。
- PlaceOrder は可能であれば、アナライザによって決定される方向にオーダーを設定します。
動作と最適化結果
私は、高速で確実に動作するParallel Desktop 下で実行するバーチャル pc を利用して Apple MacBookPro で MetaTraderのエンジンを使います。そして、ドキュメンテーション用にひじょうに簡単に MS-windows バーチャルマシンの高速スナップショットを取ります。
バックテストは通貨ペア EURUSD について、2007年1月1日から2007年12月29までの有効な日付で、結果が満足のいく15分足のタイムフレームで行いました。
本稿で使っている主要な動作パラメータは最初の最適化プロセスから取りましたが、みなさんはそういうパラメータを異なる組み合わせで試すことができます。
今回の検証に使用したテイクプロフィットとストップロスのパラメータを選択する際唯一考慮したのは、ここではわれわれは残高や、MetaTrader で提供されるその他可能な最適化パラメータを最大化することではなく、実質的にエントリ戦略を強調するために利益を出すトレード数を最大化する必要があるだけなのです。
その他結果最適化はすべてのちのフェーズで行います。
以下はアナライザモジュールのコードで、ここでは検証用にその他任意のシグナルディテクタを追加することが可能です。
異なる2つのシグナルが正しい方向を一致して選択する必要があります。
//+------------------------------------------------------------------+ //| Price Direction Analyzer //+------------------------------------------------------------------+ int Analyzer() { int signalCount=0; signalCount += EntrySignal1(); signalCount += EntrySignal2(); return(signalCount); } //+------------------------------------------------------------------+ //| ENTRY SIGNALS BLOCK MODULES //+------------------------------------------------------------------+ int EntrySignal1() { // Long term SMA trend detect int i,Signal; int LongTrend=0; for(i=0;i<3;i++) { if (iMA(Symbol(),PERIOD_H4,S1_MA_FAST,0,MODE_LWMA,PRICE_TYPICAL,i) > iMA(Symbol(),PERIOD_H4,S1_MA_FAST,0, MODE_LWMA,PRICE_TYPICAL,i+1)) LongTrend++; else LongTrend--; } if( LongTrend < 0) Signal=-1; else Signal=1; return(Signal); } int EntrySignal2() { // Daily MACD int Signal; if (iMACD(NULL,PERIOD_D1,S2_OSMAFast,S2_OSMASlow,S2_OSMASignal,PRICE_WEIGHTED,MODE_MAIN,0) > iMACD(NULL,PERIOD_D1,S2_OSMAFast,S2_OSMASlow,S2_OSMASignal,PRICE_WEIGHTED,MODE_MAIN,1) ) Signal=1; else Signal=-1; return (Signal); }取引時間は、以下のように簡単に理解できるブロック取引フィルターモジュールで一致します。記述されているモジュラー構造は、処理フローの中で、新しいブロックフィルターのために簡単にスペースを残すことができます。
//+------------------------------------------------------------------+ //| FILTER BLOCK MODULES //+------------------------------------------------------------------+ bool BlockTradingFilter1() { bool BlockTrade=false; //trade by default if (UseHourTrade) { if( !(Hour() >= FromHourTrade && Hour() <= ToHourTrade && Minute()<= 3) ) { // Comment("Non-Trading Hours!"); BlockTrade=true; } } return (BlockTrade); }実際、全体のバランスをまったく考えずに小さな利益を出すトレードをすることができます。
以下は主要な最適化設定です。
最良結果を出す間隔を分析するには、1時間のステップで実行してFromHourTradesを 0~23 に設定し、動作開始前にバックテスト設定形式で Optimization フラグを確認します。
以下は最適化結果です。
ごらんのように、取引には、トレンド検出テクニックを使用することがひじょうに危険な時間があります。また別の日の時間では、トレンド方向を選択することがかなり多くの利益を出します。東部標準時ゾーンで午後である19:00~22:00 GMT+1 のこの時間間隔は市場によってすべてのニュースがまとめられる時間です。
この場合、有効な履歴データがあり最適化処理から取得されるピーク時間は 21:00 GMT+1(中央ヨーロッパ時間) に当たります。
この結果は確実に2007年の外為市場にとって有効であるとみなされますが、の取引週刊についての古い考察によると、それらはもっと大きな時間周期で有効であると願うことができます。
そして以下は、最適化処理の結果詳細です。この結果はオーダー方向を決めるために選択したトレードシグナルに依存すると考えるべきです。そして私は、この時間に基づく戦略では、多数の異なるシグナルからの選択はひじょうに小さい結果につながる、とお伝えします。ただ、みなさんは確実に別のシグナルを検証することができ、その結果をお知らせいただけることでしょう。
以下は 21:00 GMT+1 時のバックテストレポートです。
ごらんのように、全トレード160件、内利益トレード154件(96.86%)です。
この情報は Wackena のインタビューの内容を裏付けるものです。時間に基づくストップロスの導入
1年間のバックテスト動作中のトレード数は、市場にとどまって23時間後に損失がある場合、新規オーダーへの余地を残す、時間に基づくストップロスを取り入れることで取引結果を改善できることを暗示しています。
このために、UseTimeBasedStopLoss フラグを真に設定し、異なる最適化パラメータを選択を試すのです。
以下のレポートテーブルは、この戦略変更の結果を表示しています。見てのとおり、このエグジット戦略により、弱い市場での長いスウィングトレードが、悪い時期に望まない追加オーダーから守られるのです。そして我慢してふぃじょうが危険な横ばいから抜け出すのを待つのが良いでしょう。
おわりに
時間に基づく取引習慣のパターン認識を分析する戦略はさらに調査しこの Expert Advisor に、そして何よりも有効なトレーリングストップエンジンに有効な資金管理戦略を追加することを調整することをほのめかしています。ただし、それは新しい記事の議論とすべきです。
添付のコードは別のパターンに関してさらに調査をするために使用可能です。また通貨ペアは、その他の時間に基づく取引習慣や行動を分析するのに使用できます。この調査に関してみなさんの経験をお聞かせください。参照資料
New Trading Systems and Methods, by Perry J. Kaufman
https://championship.mql5.com
The Encyclopedia of Trading Strategies, by Jeffrey Owen Katz,Donna L. McCormick
Forex conquered, by J.L.Person
Trading with the odds, by Cynthia A.Kase
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/1508
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索