English Русский Deutsch
preview
プライスアクション分析ツールキットの開発(第1回):チャートプロジェクター

プライスアクション分析ツールキットの開発(第1回):チャートプロジェクター

MetaTrader 5 | 21 1月 2025, 09:17
276 0
Christian Benjamin
Christian Benjamin

はじめに

この記事「チャートプロジェクター」では、特にプライスアクショントレーダー向けに市場分析を簡素化するツールの開発に焦点を当てます。チャートプロジェクターは、前日のチャートを現在のチャート上にゴーストモードで重ねて表示する機能を提供します。

最初に、チャートプロジェクターの必要性を説明し、前日のチャートを現在のチャートに投影することの重要性を論じます。その後、ツールの概要を示し、続いてコードの実装を詳しく解説します。最後に、調査結果の要約で締めくくります。最後に、調査結果を要約して締めくくります。 

サブトピックは次のとおりです。

  1. チャートプロジェクターの正当化
  2. ツールの概要
  3. コードの実装
  4. 結果
  5. 結論


チャートプロジェクターの正当化

前日のチャートを当日のチャートに再描画することは、トレーダーにとって多くの利点をもたらします。このテクニックがどのように役立つのかを以下に説明します。

利点
詳細
即時のコンテキスト 前日のデータを重ね合わせることで、トレーダーは価格変動や主要なサポート/レジスタンスレベルを即座に視覚化できます。これにより、過去のベンチマークと比較して現在の市場状況を迅速に評価することが可能になります。
キーレベルの識別強化 オーバーレイは、サポートやレジスタンスといった重要な価格レベルを、手動で引いた線よりも鮮明に強調表示します。これにより、過去の買い圧力や売り圧力を特定し、将来の価格変動を予測する手助けとなります。
トレンド認識 現在の価格が前日の価格動向とどのように相互作用しているかを観察することで、トレンドを特定できます。例えば、前日の高値を上回る取引は強気の勢いを示唆し、安値を下回る取引は弱気の感情を示す可能性があります。
合理化された分析 この方法により、過去のデータをスクロールする必要がなくなります。そのため、トレーダーはリアルタイム分析に集中でき、迅速な意思決定が求められる市場で時間を節約できます。
行動洞察 現在の価格動向が過去の動きとどのように一致しているかを明らかにすることで、トレーダーは市場心理を理解しやすくなります。例えば、抵抗レベルを突破した際の強気な動きの潜在的な強さを把握する助けとなります。
リスク管理 過去のサポートとレジスタンスを明確に視覚化することで、トレーダーは情報に基づいた水準でストップロス注文を設定でき、リスクを軽減することが可能です。
取引計画の簡素化 前日の価格動向を視覚化することで、エントリーとエグジットの計画が簡素化されます。トレーダーは確立されたレベルを基に取引を構築し、戦略の有効性を向上させることができます。
プライスアクションへの焦点 元の価格動向を正確に保つことで、一般的な指標による歪みを避け、純粋なプライスアクションの動きに集中できます。この明確さは、より正確なエントリーやエグジットの実現につながる可能性があります。

以下の図では、2024年9月19日と20日の2日間にわたるチャートを比較しています。サポートレベルとレジスタンスレベルを示す線を描画しました。この比較から、市場がこれらの以前のレベルをどのように尊重しているかが明確にわかります。ただし、いくつかの制限もあります。特定されたサポートレベルが常に最も重要なレベルであるとは限りません。主要なサポートおよびレジスタンスレベルを正確に識別できない場合、データにノイズが入り込み、トレーダーが情報に基づいた意思決定を行うことが困難になります。重要性の低いレベルを排除しないと、トレーダーは本当のトレンドや反転を見極めるのに苦労し、誤ったシグナルに遭遇するリスクが高まります。これにより、誤ったエントリーやエグジットにつながり、最終的には全体的な取引パフォーマンスに悪影響を及ぼす可能性があります。

ここでキャストツールが役立ちます。このツールは最も強力な高値と安値を特定して表示することができ、分析の精度を大幅に向上させます。また、前日のチャートを現在のチャートに直接重ね合わせることが可能なため、価格動向の分析と解釈がより簡単になります。                                                

 

図1:プライスアクションの比較


コード開発

MetaEditorを使用したコード開発は、MetaEditorを起動することから始まります。アプリケーションが開いたら、[新規]オプションを選択して新しいファイルの作成を開始します。[新規]をクリックすると、作成するファイルまたはプロジェクトの種類を選択できるウィンドウが表示されます。この場合、開発するプログラムの種類は「スクリプト」なので、プロジェクトのカテゴリとして[スクリプト]を選択します。

図2は、スクリプトを作成するオプションを選択できるウィンドウを示しています。このウィンドウには、これから作業するプロジェクトの種類を定義するために必要な選択肢が表示されます。[スクリプト]オプションを選択することで、MetaTraderでカスタムの自動プログラムを作成することを指定します。このステップは、開発環境の基盤を構築し、MetaEditorがMQL5スクリプトを記述するために適切なテンプレートを自動生成するよう設定する重要なプロセスです。このウィンドウの明確で使いやすいレイアウトにより、コーディングプロジェクトを開始する手順が大幅に簡素化されます。

スクリプト

図2:新しいスクリプトを開始する

ここでは、MQL5を使用してゴースト効果を作成する方法と、以前のチャートを現在のチャートに投影する方法について説明します。

1. プロパティ

スクリプト開発において、特に重要な側面の1つがスクリプトのプロパティと著作権の扱いです。MQL5スクリプトに著作権表示を追加することは、あなたの作品を保護するうえで不可欠です。この表示により、あなたの所有権が明確化され、コードの不正使用や第三者によるクレームを防ぐことができます。万が一紛争が発生した場合、著作権表示は所有権の証拠として役立ちます。著作権を明示しない場合、他者があなたのスクリプトを自由に使用または配布できると誤解する可能性があります。これにより、あなたの権利と意図が明確になり、大切なスクリプトが適切に扱われることを保証します。

//+------------------------------------------------------------------+
//|                                              Chart Projector.mq5 |
//|                                               Christian Benjamin |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "Christian Benjamin"
#property link        "http://www.mql5.com"
#property description "Script to overlay yesterday's price action with ghost effect. Projected onto current day's chart and beyond"
#property indicator_chart_window
#property strict
#property script_show_inputs
#property version "1.0"

さらに、著作権を設定することで収益化の機会も広がります。スクリプトを販売したり、特定のライセンス条件に基づいて提供したり、使用条件を明確に定義したりすることが可能です。これにより、あなたの作品の価値が伝わり、専門性が強調されます。また、他者があなたの作品を利用したり、それを基に新しいプロジェクトを構築したりした際に、適切な評価や認識を得ることができます。

2. 入力セクション

ユーザーがゴーストローソク足効果を自由にカスタマイズできるよう、入力変数を作成します。この入力変数により、ゴースト効果の色、線のスタイル、幅を設定できます。ユーザーは、前日の高値と安値を表示するかどうか、ゴーストパターンを前方または後方にシフトするかどうか、さらに将来に投影するかどうかを調整することもできます。

input color GhostColor = clrGray;        // Color for ghost effect (can be transparent)
input int LineStyle = STYLE_DOT;         // Line style for ghost candlesticks
input int LineWidth = 2;                 // Line width for ghost candlesticks
input bool ShowHighLow = true;           // Show high/low lines of yesterday
input int ShiftBars = 0;                 // Number of bars to shift ghost forward/backward
input int ProjectForwardBars = 100;      // Number of bars to project ghost pattern forward

このセクションは、ユーザーに柔軟性を与え、ゴーストローソク足パターンを好みに応じてカスタマイズできるようにするため重要です。

スクリプト入力

図3:スクリプト入力

上の図は、MetaTrader 5で入力パラメータがどのように表示されるかを示しており、ユーザーはチャートを開いたときに入力パラメータを直接表示、変更、カスタマイズすることができます。これらのパラメータにより、トレーダーは線のスタイル、色、ローソク足投影設定など、ツールの主要な側面をカスタマイズして、チャートが特定の取引の好みや戦略に適合するようにすることができます。この柔軟性により、ユーザーエクスペリエンスが向上し、過去と現在のプライスアクションの視覚化方法をより細かく制御できるようになります。

3. OnStart関数

OnStart()関数はスクリプトのエントリポイントとして機能します。スクリプトが実行されると、この関数はメイン関数DrawGhostCandles()を呼び出します。

void OnStart()
{
    DrawGhostCandles(); // Call the function to draw ghost candles
}

このアプローチにより、構造がクリーンな状態に保たれ、スクリプトが開始するとすぐにコア関数に進むようになります。専用関数を呼び出すことで、ゴーストローソク足の描画タスクが個別に、より効率的に処理されるようになります。

4. DrawGhostCandles関数

この関数には、昨日のゴーストローソク足パターンを今日のチャートに重ね合わせるロジックが含まれています。まず現在の時間枠を取得し、次に昨日と今日の開始と終了を計算します。また、iBarShift()関数を使用して、昨日と今日のバーの数を決定します。

void DrawGhostCandles()
{
    ENUM_TIMEFRAMES timeFrame = Period(); // Get the current timeframe
    
    datetime yesterdayStart = iTime(_Symbol, PERIOD_D1, 1); // Start of yesterday
    datetime todayStart = iTime(_Symbol, PERIOD_D1, 0); // Start of today
    datetime todayEnd = todayStart + PeriodSeconds(PERIOD_D1); // Expected end of today (24 hours)

    int startBarYesterday = iBarShift(_Symbol, timeFrame, yesterdayStart); // Yesterday's first bar
    int endBarYesterday = iBarShift(_Symbol, timeFrame, todayStart) - 1; // Yesterday's last bar

    if (startBarYesterday == -1 || endBarYesterday == -1)
    {
        Print("No data for yesterday.");
        return;
    }

    int barsToday = Bars(_Symbol, timeFrame, todayStart, todayEnd); // Total number of bars today

    for (int i = 0; i < barsToday; i++) // Loop through yesterday's bars
    {
        int yesterdayIndex = startBarYesterday - i % (endBarYesterday - startBarYesterday + 1);

        datetime timeYesterday = iTime(_Symbol, timeFrame, yesterdayIndex); 
        double openYesterday = iOpen(_Symbol, timeFrame, yesterdayIndex);
        double highYesterday = iHigh(_Symbol, timeFrame, yesterdayIndex);
        double lowYesterday = iLow(_Symbol, timeFrame, yesterdayIndex);
        double closeYesterday = iClose(_Symbol, timeFrame, yesterdayIndex);

        datetime projectedTime = todayStart + i * PeriodSeconds() + ShiftBars * PeriodSeconds(); 

        if (projectedTime >= todayEnd) break; // Stop projection if today's end is reached

        DrawGhostBar(projectedTime, openYesterday, highYesterday, lowYesterday, closeYesterday); // Draw ghost bar
    }

    if (ShowHighLow)
    {
        double yesterdayHigh = iHigh(_Symbol, PERIOD_D1, 1); // Yesterday's high
        double yesterdayLow = iLow(_Symbol, PERIOD_D1, 1);   // Yesterday's low

        DrawHorizontalLine("YesterdayHigh", yesterdayHigh);  // Draw high
        DrawHorizontalLine("YesterdayLow", yesterdayLow);    // Draw low
    }
}

この関数は、昨日の各バーをループし、始値、高値、安値、終値を取得し、それを今日のチャートに投影します。ループにより、昨日の各ローソク足が今日のチャートに「ゴースト」として反映されます。これにより、前日のプライスアクションと今日のプライスアクションを視覚的に比較できます。

5. DrawGhostBar関数:

この関数は、チャート上の個々のゴーストローソク足の描画を処理します。高値と安値の範囲を表す線が作成され、各ローソク足の始値と終値の範囲を表す四角形が描画されます。

void DrawGhostBar(datetime time, double open, double high, double low, double close)
{
    string lineName = "GhostLine" + IntegerToString(time);  // Line name for high-low
    ObjectCreate(0, lineName, OBJ_TREND, 0, time, low, time, high); // Create the line
    ObjectSetInteger(0, lineName, OBJPROP_COLOR, GhostColor); // Set color
    ObjectSetInteger(0, lineName, OBJPROP_STYLE, LineStyle);  // Set style
    ObjectSetInteger(0, lineName, OBJPROP_WIDTH, LineWidth);  // Set width

    string ocName = "GhostOC" + IntegerToString(time);  // Rectangle name for open-close
    ObjectCreate(0, ocName, OBJ_RECTANGLE, 0, time, open, time + PeriodSeconds(), close); // Create rectangle
    ObjectSetInteger(0, ocName, OBJPROP_COLOR, GhostColor); // Set color
    ObjectSetInteger(0, ocName, OBJPROP_STYLE, LineStyle);  // Set style
    ObjectSetInteger(0, ocName, OBJPROP_WIDTH, LineWidth);  // Set width
}

この関数を独自の関数に分離することで、各ゴーストローソク足の描画プロセスを簡素化します。このモジュール式のアプローチにより、ローソク足の表示方法の管理、更新、カスタマイズが容易になります。

6. DrawHorizontalLine関数

この関数はチャート上に水平線を描画し、前日の高値と安値を示します。これらの線は、トレーダーが頻繁に注目する主要な価格レベルの視覚的な指標として機能します。

void DrawHorizontalLine(string name, double price)
{
    if (!ObjectCreate(0, name, OBJ_HLINE, 0, TimeCurrent(), price))
    {
        Print("Failed to create horizontal line."); // Error handling
    }
    ObjectSetInteger(0, name, OBJPROP_COLOR, GhostColor); // Set color
    ObjectSetInteger(0, name, OBJPROP_STYLE, LineStyle);  // Set style
    ObjectSetInteger(0, name, OBJPROP_WIDTH, LineWidth);  // Set width
}

この関数を含めると、重要な参照ポイントが追加されてスクリプトが強化され、トレーダーが前日のサポートレベルとレジスタンスレベルを簡単に見つけられるようになります。列この関数により、これらの線はゴーストローソク足と同じカスタマイズオプションで描画されるようになります。


結果

チャートプロジェクターコードの結果は、前日のプライスアクションを当日のチャートに重ねて視覚的に表現したもので、トレーダーに市場動向に関する貴重な洞察を提供します。この機能により、前日のゴーストローソク足が生成され、現在のチャートに投影されます。これを利用して、トレーダーは前日のパフォーマンスと比較しながら、市場がどのように動いたかを観察できます。特に、前日の高値、安値、始値、終値を視覚化することで、市場のセンチメントや価格トレンドをより深く理解できるようになります。

さらに、このスクリプトはオプションとして、前日の高値および安値を示す水平線を描画します。これらの線は、当日の潜在的なサポートおよびレジスタンスレベルとして機能します。トレーダーはこれらのレベルを活用し、過去のベンチマークと比較した市場の動きに基づいて、エントリーおよびエグジットポイントについての情報に基づいた判断を下すことができます。このスクリプトは、色、線のスタイル、線の幅、ゴーストオーバーレイを前後にシフトする機能など、さまざまなカスタマイズ可能な入力も提供しており、これにより、トレーダーは自分の取引戦略や好みに応じて、視覚化を柔軟に調整できます。これにより、ユーザー エクスペリエンスが向上し、パーソナライズされた分析ツールが可能になります。

ゴーストローソク足オーバーレイを使用することで、トレーダーは現在のプライスアクションが以前の動きを反映しているか、乖離しているか、あるいはその動きに対してどのように反応しているかを迅速に評価できます。ゴースト効果は、過剰な指標による混乱を排除し、前日の動きのみに焦点を当てることで、価格動向に関する明確な洞察を提供し、市場分析を簡素化します。この明確さは、潜在的なトレンドや反転を特定する際に役立ち、より戦略的で精度の高い取引判断につながります。下の図4をご覧ください。

チャートプロジェクターの結果

図4:チャート投影結果

上の図4を見ると、MetaTrader 5でのコードテスト結果が明確に示されています。現在のチャートがサポートレベルおよびレジスタンスレベルを忠実に反映している様子から、このシステムが非常に優れていることがうかがえます。水平線で示されている通り、価格は前日の安値を下回った後、一旦反転して再び弱気トレンドを継続したことが明らかです。

チャート投影結果

図5:チャート投影結果

図5はチャートプロジェクターの結果を示しており、現在の市場動向が前日の高値と安値をどのように反映しているかを強調しています。


結論

結論として、プライスアクション分析のためのチャートプロジェクターの開発および実装は、市場解釈スキルの向上を目指すトレーダーにとって画期的な進歩です。前日のプライスアクションを現在のチャートに重ねることで、従来の指標による煩雑さを排除し、市場の動向を理解しやすくする強力な視覚ツールを提供します。このアプローチにより、トレーダーは主要なサポートレベルとレジスタンスレベルを迅速かつ正確に特定することが可能となり、意思決定プロセスを大いにサポートします。この手法から得られる洞察は、価格変動のパターンに留まらず、市場参加者の集合的な感情を反映するため、将来的なトレンドの可能性についてより深い理解を提供します。

このツールは教育目的にのみ使用することを強くお勧めします。実際のお金を使用した実験は避けてください。

また、私たちのツールキットを「Lynnchris Tools Chest」と命名し、開発する各ツールを記録することを提案します。そして、新しいバージョンを公開するたびにログを更新していきましょう。以下の表をご覧ください。
日付 ツール名 詳細 バージョン アップデート 備考
01/10/24 チャートプロジェクター 前日のプライスアクションをゴースト効果でオーバーレイするスクリプト
1.0 初回リリース リンクリスツールチェストの最初のツール

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/16014

添付されたファイル |
Connexusヘルパー(第5回):HTTPメソッドとステータスコード Connexusヘルパー(第5回):HTTPメソッドとステータスコード
この記事では、Web上でクライアントとサーバー間の重要な通信手段であるHTTPメソッドとステータスコードについて理解します。各メソッドの役割を理解することで、リクエストをより正確に制御できるようになり、サーバーに対して実行したいアクションを明確に伝えることができます。これにより、通信の効率が向上します。
MQL5とPythonで自己最適化エキスパートアドバイザーを構築する(第6回): Deep Double Descentの活用 MQL5とPythonで自己最適化エキスパートアドバイザーを構築する(第6回): Deep Double Descentの活用
伝統的な機械学習では、モデルの過剰適合を防ぐことが実践者にとって重要であると教えられます。しかし、この考え方は、ハーバード大学の勤勉な研究者たちによって発表された新たな洞察によって見直されつつあります。彼らの研究によれば、一見すると過剰適合に見える現象が、場合によっては訓練プロセスを早期に終了した結果である可能性があることが示唆されています。本記事では、この研究論文で提案されたアイデアを活用し、市場リターン予測におけるAIの利用をどのように向上させられるかを解説します。
Candlestick Trend Constraintモデルの構築(第9回):マルチ戦略エキスパートアドバイザー(II) Candlestick Trend Constraintモデルの構築(第9回):マルチ戦略エキスパートアドバイザー(II)
エキスパートアドバイザー(EA)に統合できる戦略の数は、事実上無限と言えます。しかし、戦略を追加するたびにアルゴリズムの複雑さが増していきます。複数の戦略を組み込むことで、EAは多様な市場環境により柔軟に適応し、収益性を向上させる可能性が高まります。本日は、Trend Constraint EAの機能をさらに強化するための取り組みとして、リチャード・ドンチャンが開発した著名な戦略のひとつを対象に、MQL5を活用する方法をご紹介します。
日足レンジブレイクアウト戦略に基づくMQL5 EAの作成 日足レンジブレイクアウト戦略に基づくMQL5 EAの作成
この記事では、日足レンジブレイクアウト(Daily Range Breakout)戦略に基づいてMQL5エキスパートアドバイザー(EA)を作成します。戦略の重要な概念を説明し、EAの設計図を設計し、MQL5でブレイクアウトロジックを実装します。最後に、EAの効果を最大限に引き出すためのバックテストと最適化の手法について探ります。