English Русский 中文 Español Deutsch Português
同事線の例で示されているローソク足パターン認識の改善

同事線の例で示されているローソク足パターン認識の改善

MetaTrader 5インディケータ | 21 2月 2022, 15:24
569 0
ds2
ds2

はじめに

ローソク足パターンのメリットの1つは、その単純さです。説明は数フレーズのみで構成されており、分析では数本(または1本のみ)のバーを処理するため、初心者でも利用できます。

もう1つのメリットは、分析によってリソースを大量に消費する指標が作成されないため、ターミナルとハードウェアに関する特定の要件がないことです。この事実は、コンピューターが現在ほど高度ではなかった数十年前には特に重要でした。当時、ローソク足パターンの多くが導入されました。

ただし、ローソク足パターンの単純さの背後には、深刻な欠点もあります。これは、最新の取引自動化ツールの大幅に強化された機能を使用することで解消できます。このデメリットは、市場の状況をバーの制限に合わせて大まかに丸めることに関連しております。これはもちろん取引の効率に影響を与えます。


従来のローソク足のデメリットと考えられる解決策

チャートのバーには、個別の事前定義された開始時刻と終了時刻があります。ところが、市場での出来事は継続的に発生します。いくつかの重要な価格変動は、あるバーで始まり、別のバーで終わる可能性があります。この場合、イベントは完全にバー内で発生した場合とはチャート上で完全に異なって見えます。つまり、チャートでは同じ動きがさまざまな方法で反映される可能性があるということです。

同事線ローソク足の例を使ってアイデアを確認してみましょう。同事線の最も興味深いタイプの1つは、墓石同事線(または反転した場合はトンボ同事線)です。それはよく認識できる形をしており、トレンドの終わりと潜在的な逆転シグナルと見なされます。このローソク足の始値と終値はほぼ同じで、上髭は非常に高く、下髭はほとんどありません。

図1 完璧な墓石同事線


以下の例では、チャートにそのようなローソク足はありません。

図2 通常のH4時間枠のバー


本当にそうでしょうか。より短い時間枠に切り替えることによって、これらのバー内でどのような動きが起こったかを見てみましょう。


図3 通常のH1時間枠のバー


上の図では、一部のローソク足の終値は他のバーの始値とほぼ同じです。1から5までのすべてのバーを組み合わせると、同事線ローソク足が得られます。同じことが6から9までと7から9までのバーにも当てはまります。このようなバーのグループを「メタバー」と呼びましょう。

図4 H1時間枠のメタバー


これは魔法でも手品でもありません。これらは、5、4、および3つのH1バーに等しい実際の価格変動に基づく実際の同事線ローソク足です。TFには4時間のハードコードされた期間とハードコードされたバーの開始時間があるため、標準のH4時間枠ではこれらの同事線を見ることができません。わずか1時間の長さの違い、またはバーの境界の1時間のシフトは、非常に異なる結果につながります。

何本の同事線ローソク足を見逃したのでしょうか。ローソク足を逃すと、取引シグナルを逃します。

ただし、このようなメタバーを見つけるためにチャットを手動で分析することはできません。これには時間と労力がかかるためです。完璧なオプションは、そのような分析を自動的に実行できる指標になります。


改良された同事線指標の開発

まず、指標が持つべき入力パラメータを決定する必要があります。

同事線ローソク足がどの部分で構成されているかを詳しく見てみましょう。

図5 ローソク足の構造

高さはローソク足全体の高さです。

実体はローソク足のボディの高さです。

は、短いローソク足の高さです。通常のバーには、上髭と下髭の2つの髭があります。同事線の場合、ほとんど存在しないはずの短いローソク足に関心がありますが、同事線の説明では反対の髭については何も述べていません。

同事線ローソク足は、他のバーやローソク足とは、部分の特別な比率が異なります。ローソク足には、実体がほとんどなく、短いローソク足がほとんどないはずです。ただし、「ほとんどない」というのはかなりあいまいな概念です。各トレーダーは、バーが同事線ローソク足に十分類似しているかどうかを自分で判断する必要があると想定されています。ソフトウェア指標を扱うときは、明確で正式な基準が必要です。つまり、指標入力パラメータでこれらすべての比率を指定できる必要があります。

input double  Candle_BodyPowerMax      = 0.2;    // Maximum body height relative to the candlestick height

つまり、Candle_BodyPowerMax = Body / Heightです(上の図を参照)。より正確には、これは最大比率であり、それを超えるとローソク足は同事線として分類できなくなります。比率がこの値以下(ゼロまで)のすべてのバーは、同事線と見なされます。

同じことが髭にも当てはまります。

input double  Candle_ShadowPowerMax    = 0.2;    // Maximum shadow height relative to the candlestick height

Candle_ShadowPowerMax = Shadow / Height (上の図を参照)。より正確には、これは最大比率であり、それを超えるとローソク足は同事線として分類できなくなります。比率がこの値以下(ゼロまで)のすべてのバーは、同事線と見なされます。

このパラメータのセットは、単一のバーに基づいて同事線をプロットする指標には十分な場合があります。しかし、個々での指標はメタバーで動作します。したがって、メタバーのバーの数を指定するための入力も必要です。これはメタバーの幅です。


図6 メタバーベースのローソク足の特別なパラメータ


幅は必ずしも固定する必要はありませんが(これは通常の時間枠に対するメタバーのメリットです)、範囲として指定できます。

input int     Candle_WidthMin          = 1;      // Minimum candlestick width in bars
input int     Candle_WidthMax          = 2;      // Maximum candlestick width in bars

Candle_WidthMin = 1およびCandle_WidthMax = 1を設定すると、すべてのメタバーが通常のバーと等しくなるため、これは従来の同事線の構築方法になります。それ以外の場合、指標は指定された幅の範囲のバーのすべてのシーケンスを繰り返し処理し、それらが一緒に同事線ローソク足を形成するかどうかを確認します。

各バーで、ターミナルはバー自体だけでなく、いくつかの古いバーも操作します。OnInit (指標の初期化)でこれについて指標に通知して、チャートに指標を描画するときに、履歴の先頭に小さなインデントが作成されるようにします。

SkipBars = Candle_WidthMax;
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, SkipBars);

SkipBars変数は、グローバルとして宣言する必要があります(時間int)。また、指標の計算(OnCalculate)で使用して、履歴内の最も古いバーでの指標の描画と計算を回避する必要があります(これにより、メタバーが履歴の外に形成され、エラーが発生します)。

以下では、指標の主要部分のアルゴリズムを一般的に説明します。

指標のメインループはOnCalculate()で構成されていて、計算されていないすべての指標バーをループします。これは、指標のすべての値を計算するために必要です。
この一般的なループの中には、現在のバーから過去に広がってすべての可能なメタバーを構築するための別のループがあります。これは、1からCandle_WidthMax(指標入力)へのループです。つまり、メタバーは最初は1つの価格バーに等しくなります。反復ごとに、価格履歴の別のバーがメタバーに追加され、以下同様に続きます。

メタバーへのバーの追加は、バーのOHLCとメタバーのOHLCを比較することで実装されます。この操作の結果として、メタバーは極値を累積し、段階的に成長するサイズを計算します。

メタバーごとに、指標は対応するローソク足のパラメータ(実体の高さ、影の高さと幅)を計算します。また、値が入力パラメータで指定された値の制限に準拠しているかどうかも確認します。

ローソク足が目的の同事線ローソク足である場合、次のようになります。

指標はローソク足の方向(上または下)に垂直線を引く線の高さはローソク足の幅と同じで、

メタバー拡張ループが壊れる

完全な指標コードは以下に添付されています。

ターミナルでの指標の動作を見てみましょう。

ここで、指標は1バーの同事線ローソク足を検出しました。

図7 指標は1本の同事線ローソク足について通知する


指標は完了したバーのみを分析するため、チャートの同事線ローソク足は指標シグナルの1本後ろにあります。指標の目的は、ローソク足を表示することではなく、同事線ローソク足の形成が完了したこと(および変更されないままであること)を通知するリアルタイムシグナルを生成することです。このローソク足は複数のバーで構成できます。指標は見つかったローソク足の幅を線の高さの値として表示します。この場合、上向きのローソク足の場合は「1」、下向きのローソク足の場合は「-1」です。

それでは、5本のバーで構成される同事線ローソク足を見てみましょう。一般的に、指標の主な目的は、そのような複合ローソク足を検索することです。

図8 指標は5本のバーで構成される同事線ローソク足について通知する


同事線探索アルゴリズムが正しく機能していることがわかります。上の図では、見つかったメタバーのサイズとそのOHLC価格レベルを強調しています。

ただし、この指標を効果的に実用化するには、もう1つの側面を考慮する必要があります。ローソク足のサイズはまちまちで、大きいものもあれば、非常に小さいものもあります。それらのいくつかは非常に小さく、隣接するバーよりもはるかに小さいため、ノイズと見なされ、大幅な価格変動として扱うことはほとんどできません。このような小さな同事線ローソク足の実用化はゼロです。それらは、トレンドの始まりまたは終わりの兆候、あるいは他の何かの兆候として機能することはできません。

したがって、大きな同事線ローソク足のみが表示されるように指標を改善する必要があります。この問題の解決策は単純なようです。次の入力パラメータを指標に追加できます。

input double  Candle_HeightMin          = 0.01;   // Minimum candlestick height (in absolute prices)

次に、OnCalculateは、この基準に従って、見つかったすべてのローソク足をフィルタリングします。

このソリューションは、ローソク足が通常の単一のバーに基づいて構築されている場合に完全に機能します。メタバーを使用しているため、このソリューションの効率を低下させる明らかな問題があります。通常の単一のバーには、統計的に平均的な高さがあります。それを値hと呼びましょう。大きな同事線ローソク足を見つける必要がある場合は、指標設定で、Candle_HeightMinをたとえば2*hに等しく設定できます。しかし、たとえば1〜4本のバーの幅を持つことができるメタバーに基づいて、大きな同事ローソク足を見つける必要がある場合はどうでしょうか。4本の中程度の高さのバーで構成されるメタバーの合計の高さは2*hになります(最初に2つのバーが次々に上がり、次に2つのバーが下がる場合)。

指標は、中程度の高さの条件を満たすため、そのようなメタバーに同事線を表示します。しかし、それは正しいでしょうか。実際、このローソク足は平凡なバーで構成されており、強い価格変動の兆候とは考えにくいものです。

この場合、Candle_HeightMinを4*hに設定することも間違っています。メタバーの幅が1バーであり、しきい値が強すぎるためです。この場合、指標は2*hと3*hの良好なローソク足を見逃します。

したがって、価格変動の強さを特徴付けるメタバー高さフィルターを作成する必要があります。これは、1本のバーと4本のバーで構成されるメタバーを含むすべてのメタバーで同等に強力で達成可能です。

この問題の解決策は非常に簡単です。Candle_HeightMinを絶対値ではなく相対値で指定するのです。つまり、メタバーの絶対的な高さではなく、単位時間あたりの高さです。ローソク足高さ/幅

さらに、このパラメータを価格ポイントで表すことができます。この場合、指標の設定は選択した通貨ペアに依存しません。同事線の実体や髭のサイズなど、他のすべての設定も絶対価格に関連付けられていません。

したがって、Candle_HeightMin入力パラメータの代わりに、以下を使用します。

input double  Candle_HeightPowerMin          = 0.5;   // Candlestick power = Height/Width, points per minute

指標コードのこの基準によるフィルターは、次のようになります。

if ((CandleHeight/CandleWidth/_Point) < (Candle_HeightPowerMin*PeriodSeconds()/60)) DojiExists = false;

これで、指標を実際に使用できるようになりました。完全な指標コードは以下に添付されています。

指標テスト

開発したものを確認する時が来ました。テスト中に、同事線ローソク足を見つける際に得られたメタバーベースの指標の効率を測定します。バーごとに1本のローソク足を使用する従来のバリアントよりも何回効率的かを確認します。

EURUSD H4チャートで、以下の設定で指標を実行します。

Candle_WidthMin  
1
Candle_WidthMax    1

そのため、指標は単一バーの同事線ローソク足のみを検索するように設定されています。

制限値は、同事線のローソク足本体と髭の合計サイズがローソク足の高さの半分未満になるように設定されます。

Candle_BodyPowerMax      
0.2
Candle_ShadowPowerMax   
0.2

これらは、ローソク足の実体の部分のサイズに関して非常に寛大なな設定です。実際の取引では、同事線のローソク足をほぼ完璧にするために、0.1またはゼロに近い値に設定することをお勧めします。現在のテストの主な目的は、2つの異なる方法(単一バーとメタバー)で認識されるローソク足の数を比較することです。サンプルは、統計誤差を減らすために十分な大きさである必要があります。

同じ理由で、ローソク足の高さの要件を高く設定しすぎないようにします。今のところ、このフィルターはゼロになり、強いものと弱いものを含むすべての同事線ローソク足を表示します。

Candle_HeightPowerMin   
0

すべてのパラメータは設定されています。これは、ターミナルの指標チャートです。


図9 通常の(単一の)H4バー上に構築された同事線ローソク足指標


チャートをスクロールすると、たとえば、2か月でそのような同事線ローソク足が9本しかなかったことがわかります。これは、単一バーを使用した従来のローソク足の構築でした。

メタバーのメリットを評価するために、チャートの時間枠をH1に変更し、指標の入力パラメータを変更してみましょう。

Candle_WidthMin  
4
Candle_WidthMax   
4

これで、指標はそれぞれ幅4本のH1バーのローソク足を探します。このメタバーは、前の例の従来のH4バーと同じ幅です。唯一の違いは、クラシックバーの開始時刻(0:00、4:00、8:00)が厳密であるということです。メタバーの開始時間は、0:00、1:00、2:00、3:00、4:00など4倍になります。幅は同じですが、時間の経過とともに柔軟性が大幅に向上します。結果を見てみましょう。


図10 4本のH1バーで構成されるメタバー上に構築された同事線ローソク足指標


図10は、図9と同じ価格セグメントを示しています。今回は追加の同事線ローソク足がたくさんあります。2か月で、メタバー指標は合計54本の同事線ローソク足を識別しました。

これは従来の方法の6倍です。新しい方法のメリットは明らかです。

次に、柔軟な開始時間と柔軟なH1ベースのメタバー幅の両方を使用してバリアントを確認しましょう。幅は従来のH4バーに対してわずかに変動します。

Candle_WidthMin  
3
Candle_WidthMax   
5


図11 それぞれ2〜5本のH1バーで構成されるメタバー上に構築された同事線ローソク足指標


同事線ローソク足の数はさらに増えています。ターミナルにはH5の時間枠が存在しないため、このような同事線ローソク足は従来の構築方法では構築できないことに注意してください。

考えられるすべての非標準の時間枠をカバーすることにより、従来の方法と比較して、検出された同事線ローソク足の最大の増加を得ることができます。この目的のために、次の設定を使用して、使用可能な最小M1時間枠で指標を実行してみましょう。

Candle_WidthMin  
180
Candle_WidthMax   
300

これは、上記の3〜5H1の範囲と同じようです。唯一の違いは、ここではバーの開始時間がさらに柔軟になっていて、時間ではなく分であることです。ただし、実際の違いははるかに大きくなり、非常に柔軟な幅のメタバーが得られます。これは、1時間ごとの整数値H1(3、4、5)だけでなく、199 M1(3.32 H1)または6.63 M30、39.8 M5などなどの実際の値でもあります。これらは、古典的な取引の観点からは非常に非標準的な時間枠です。トレーダーは、そのような時間枠でローソク足を構築することはありません。そしてここでは、そのような何百もの時間枠が1つのチャートの1つの指標にまとめられています。


図12 それぞれ180〜300本のM1バーで構成されるメタバー上に構築された同事線ローソク足指標


ここには何千もの指標シグナルがあります。このモードでは、同事線のローソク足はほとんどどこにでもあります。この例のメタバーは非常に幅が広いため(1バーより2桁広い)、互いに重なり合っています。指標は見つかったすべての同事線ローソク足の幅を報告するので、価格チャートでそれらの境界を見つけることができます。これらのメタバーのいくつかを色付きの長方形でマークしました。

上の図で本当に印象的なのは、同じ長い一連の価格が、上向きの同事線ローソク足と下向きのローソク足の両方の一部になる可能性があることです。これは、あらゆる種類の取引と互換性のない狂気と混乱のように見えるかもしれませんが、実際には、ここにエラーや問題はありません。識別されたローソク足には高さフィルターを使用しなかったため、それらの多くは非常に短いです。価格変動ノイズのレベルでは、小さな時間シフトまたはローソク足幅の小さな変化で簡単に方向を変えることができます。指標設定でフィルタを設定して、このノイズを克服してみましょう。

Candle_HeightPowerMin   
2

現在、状況はまったく異なります。チャートには強いローソク足のみが表示され、検出されたローソク足のシーケンスは同じ方向になります。


図13 それぞれが180〜300のM1バーで構成されるメタバー上に構築された同事ローソク足指標(高さフィルター付き)


幅の広いメタバーを備えたM1の時間枠により、以前はアクセスできなかった新しい次元を調べることができました。そのような指標に表示されるローソク足の各密なシーケンスは、実際には時間とともに変化する1つのローソク足を表します。このダイナミクスの分析により、ローソク足が単一のバーにバインドされた静的エンティティと見なされる従来のアプローチでは出ない、ローソク足について追加の結論を出すことができる場合があります静的なローソク足では、時間パラメータがわずかに変更された場合にローソク足に何が起こるかについての情報はありません。この新しい分野を研究することができるようになりました。


終わりに

この記事では、実験によって、メタバーを使用するとローソク足パターンのより詳細な分析が可能になることが説得力を持って示されています。

  • 従来の方法よりも多くのパターンを見つける

  • 従来の方法が基本的に利用できない追加のローソク足でパターンを見つける

  • (単一のチャートを使用しながら)柔軟性と利便性が向上し、特定のトレーダータスクに合わせてカスタマイズできる可能性がある

  • ローソク足の形成の開始と終了を正確に追跡し、ローソク足の変化のダイナミクスをその存在機関全体にわたって監視する

この記事で説明する手法によって、同事線だけでなく、他のすべての古典的なローソク足の解釈の可能性を広げることができます。

ただし、この記事ではすべてのニュアンスを考慮しているわけではありません。指標はまだ取引をおこないません。メタバー指標の実際の効果は、取引ストラテジーによって異なります。同事線ローソク足は取引シグナルではないため、指標シグナルの増加に伴うメタバーでの取引数の増加は期待するべきではありません。同事線ローソク足取引には、追加の市況分析と検証が必要です。メタバーは他のタイプの分析(従来のバー)と組み合わせることができるでしょうか。取引数にはどのように影響するでしょうか。M1の時間枠では連続する多数の指標シグナルを確認しました。これは本質的に単一のローソク足です。間違いなく、このローソク足は変動しやすく拡張的であるため、その存在期間の間に発生するさまざまな市場の状況に適合できます。これにより、従来のローソク足ではシグナルが表示されない場合に、(取引を開始または終了するための)有用なシグナルが生成される可能性が高くなります。

取引数に関する信頼できる統計は、さらなる実験からのみ取得できます。これはかなり大きなトピックですで別の研究になります。この記事での指標の説明が興味深いようでしたら、次の記事の1つで実験を続けて、取引ストラテジーの動作を確認しようと思います。

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/9801

添付されたファイル |
MetaDoji.mq5 (10.49 KB)
DoEasyライブラリのグラフィックス(第91部): 標準グラフィカルオブジェクトのイベントオブジェクト名変更履歴 DoEasyライブラリのグラフィックス(第91部): 標準グラフィカルオブジェクトのイベントオブジェクト名変更履歴
本稿では、ライブラリベースのプログラムからグラフィカルオブジェクトイベントを制御するための基本的な機能を洗練します。例として、「オブジェクト名」プロパティを使用してグラフィカルオブジェクトの変更履歴を保存する機能の実装から始めます。
MQL5の行列とベクトル MQL5の行列とベクトル
特別な「matrix」と「vector」データ型を使用すると、数学表記に非常に近いコードを作成することができます。行列とベクトルのメソッドを使用すると、計算でネストされたループを作成したり配列で正しいインデックスを作成したりする必要がなくなるため、複雑なプログラムの開発における信頼性と速度が向上します。
一からの取引エキスパートアドバイザーの開発 一からの取引エキスパートアドバイザーの開発
この記事では、最小限のプログラミングで自動売買ロボットを開発する方法について説明します。
MQL5でのAutoItの使用 MQL5でのAutoItの使用
簡単に説明すると、この記事では、MQL5をAutoItと統合することによってMetraTrader5ターミナルのスクリプトを作成します。その中で、ターミナルのユーザーインターフェイスを操作することによってさまざまなタスクを自動化する方法を説明し、AutoItXライブラリを使用するクラスも紹介します。