English Deutsch
preview
プライスアクション分析ツールキットの開発(第10回):External Flow (II) VWAP

プライスアクション分析ツールキットの開発(第10回):External Flow (II) VWAP

MetaTrader 5トレーディングシステム |
95 4
Christian Benjamin
Christian Benjamin

はじめに

前回の記事では、市場データと外部ライブラリの統合について取り上げ、さまざまな自動化システムを通じた市場分析の可能性を紹介しました。Pythonは、高度なデータ分析、予測モデリング、可視化のための強力なフレームワークを提供し、MQL5はシームレスな取引実行とチャート操作に優れています。これらの強みを組み合わせることで、市場分析と取引において柔軟かつ効率的で洗練されたシステムを構築できます。

本記事では、出来高加重平均価格(VWAP: Volume Weighted Average Price)の概念を活用し、正確な取引シグナルを提供する強力なツールを紹介します。Pythonの高度なライブラリを用いた計算により分析の精度を高め、実用性の高いVWAPシグナルを生成します。まずは戦略の概要を説明し、次にMQL5コードのコアロジックを詳しく解説し、最後にその結果と考察をまとめます。以下の目次をご覧ください。


戦略の理解

VWAP(出来高加重平均価格)は、資産価格とその総取引量の比率を表すテクニカル分析ツールです。これにより、トレーダーや投資家は、特定の期間における株式の平均取引価格を把握することができます。VWAPは、年金基金や投資信託といった受動的運用をおこなう機関投資家にとって、取引コストの妥当性を評価するためのベンチマークとして広く活用されています。また、資産が適正な価格で購入または売却されたかを判断したいトレーダーにとっても、非常に有用です。
VWAPの計算式は次のとおりです。

VWAP = ∑(取引数量 × 取引価格) ÷ 当日の総取引量

VWAPの計算式

VWAPは通常、1取引日内に行われた注文に基づいて計算されます。ただし、より広範な市場分析をおこなうために、複数の時間枠にわたって適用することも可能です。チャート上では、VWAPは一本のラインとして表示され、動的な基準点として機能します。価格がVWAPを上回っている場合、市場は一般的に上昇トレンドにあると見なされます。逆に、価格がVWAPを下回っている場合、市場は通常下降トレンドにあると考えられます。下の画像では、VWAPを中心に価格が反応しやすい主要なレベルを強調表示することで、VWAP戦略を視覚的に示しています。これらのマークされたレベルは、市場がVWAPラインと頻繁に相互作用する様子を示しています。

VWAP戦略

図1:VWAP戦略

では、このシステムのロジックを見ていきましょう。まずは、下の図に示されたインサイトを確認し、その後で詳細な解説をおこないます。

EAロジック

図2:システムロジック

VWAPエキスパートアドバイザー(EA)は、チャートを監視し、Pythonとシームレスに連携して高度な市場分析をおこなうように設計されています。市場データをPythonに送信し、受信した取引シグナルはMetaTrader 5の[エキスパート]タブに記録されます。この戦略では、VWAPをコア指標として活用し、正確で実用的なインサイトを提供します。以下に、その戦略の詳細を示します。

1.データ収集

EAは、過去150本のローソク足に基づく価格と出来高の市場データを収集します。データに欠損やゼロ値がないかを確認し、有効性を検証します。収集したデータはトレーサビリティのためにCSVファイルとして保存され、分析のためにPythonサーバーへ送信されます。

2.Pythonによる分析

Pythonスクリプトは受信したデータを用いてVWAPを計算し、高度なライブラリを活用して精度の高い分析をおこないます。中核となる計算と分析には、以下の2つのライブラリが使用されます。

PandasNumPy。Pandasはデータの操作、ローリング平均、累積計算などを担当し、NumPyは条件分岐を含む数値計算やベクトル化処理を担当します。これらのライブラリの組み合わせにより、時系列データに対する効率的かつ高精度な処理が可能となります。

分析内容は以下の通りです。

  • VWAPの計算:指定された期間にわたる出来高加重平均価格を算出します
  • シグナル生成:現在の価格とVWAPの位置関係に基づいて売買シグナル(例:買い/売り)を生成します
  • 説明:各シグナルには、発生理由を明記したテキストによる説明が付加されます

3. シグナルの確認

EAには確認メカニズムが実装されています。

同一のシグナルが複数の時間間隔(例:2つの確認期間)にわたって継続して出現した場合にのみ、最終的なシグナルとして更新がおこなわれます。

この仕組みにより、誤検出が抑えられ、シグナルの信頼性が向上します。

4. 出力とアラート

シグナルは以下の形式で表示されます。

  • アラート:トレーダーが即時対応できるようリアルタイム通知
  • ログメッセージ:EAのターミナルに記録され、後からレビュー可能

将来的なバージョンでは、チャート上にグラフィカルな注釈を追加して視覚的な補助をおこなう機能も予定されています。

Python 
MQL5 
大規模なデータセットを効率的に処理市場を監視し、リアルタイムでチャートと統合
高度な計算とモデリングのための堅牢なライブラリを活用即時のアラートと通知を提供
VWAPベースの戦略における精度と柔軟性の向上を保証します。
MQL5上でVWAPを使用すると、市場のサポートおよびレジスタンスの主要レベルを明確に把握できます。これにより、トレーダーは価格がVWAPにどのように反応するかに基づいて判断を下すことができ、VWAPはしばしば価格変動の強力なピボットポイントとして機能します。


コアロジック

1.MQL5 EA 

初期化:EAのセットアップ

EAをチャートに初めて適用すると、OnInit関数が実行されます。この関数は、EAの初期化、必要なリソースの設定、および実行準備を担います。通常は、メッセージの出力、変数の初期化、パラメータの設定などのセットアップ処理をここに記述します。本プロジェクトの場合、EAが正常に初期化されたことを確認するメッセージを出力するのみです。この関数は、INIT_SUCCEEDEDを返して初期化の成功を示し、EAが正しく動作するために不可欠なステップとなっています。

int OnInit()
{
   Print("VWAP Expert initialized.");
   return(INIT_SUCCEEDED);
}

初期化はEAの基盤を築く最初の段階です。パラメータやリソースが正しく設定されていることを確認することが重要です。簡単な確認メッセージで、EAが正常に起動したことを知らせます。

初期化解除:EA停止時のクリーンアップ

EAがチャートから削除されるか、MetaTraderが終了すると、初期化解除処理が実行されます。OnDeinit関数は、OnInit関数で確保または初期化されたリソースを解放するために呼び出されます。ここでは、EAの初期化解除処理が開始されたことを示すメッセージを出力するだけです。EAが使用していたリソースやプロセスを適切に終了させることで、メモリリークや不要なバックグラウンドプロセスの発生を防ぐことは、良い習慣です。

void OnDeinit(const int reason)
{
   Print("VWAP Expert deinitialized.");
}

適切な初期化解除処理はシステムのパフォーマンス維持に不可欠です。EAがチャートから削除される際には、リソースを必ずクリーンアップし、不要なプロセスが残らないようにします。初期化解除処理では、データの保存、接続の切断、タイマーの停止などがおこなわれることがあります。

市場データ(ローソク足)の収集

このEAの中核は、分析のために市場データ(ローソク足)を収集することです。この処理は、市場価格が更新されるたびに実行されるOnTick関数内で開始されます。EAは設定された間隔でデータを収集するように構成されており、その間隔はsignalIntervalMinutesによって定義されます。最後のシグナル発生から十分な時間が経過すると、EAは直近のnumCandles本分のローソク足データ(始値、高値、安値、終値、出来高)の収集を開始します。

収集したデータはCSV形式の文字列にフォーマットされます。これは、データをPythonサーバーに送信してさらに処理をおこなうために非常に重要です。ループは最新のローソク足から遡る形で反復処理を行い、最新の市場データを確実に取得します。データのフォーマットにはStringFormat関数を使用し、標準化された形式で整えられます。

int totalBars = iBars(Symbol(), Period());
if (totalBars < numCandles)
{
   Print("Error: Not enough candles on the chart to collect ", numCandles, " candles.");
   return;
}

for (int i = numCandles - 1; i >= 0; i--)
{
   datetime currentTime = iTime(Symbol(), Period(), i);
   if (currentTime == 0) continue;

   double high = iHigh(Symbol(), Period(), i);
   double low = iLow(Symbol(), Period(), i);
   double close = iClose(Symbol(), Period(), i);
   double open = iOpen(Symbol(), Period(), i);
   long volume = iVolume(Symbol(), Period(), i);

   if (high == 0 || low == 0 || close == 0 || volume == 0)
   {
      Print("Skipping invalid data at ", TimeToString(currentTime, TIME_DATE | TIME_MINUTES));
      continue;
   }

   csvData += StringFormat("%s,%.5f,%.5f,%.5f,%.5f,%ld\n",
                           TimeToString(currentTime, TIME_DATE | TIME_MINUTES),
                           high, low, open, close, volume);
}

iBars

iBars関数は、現在の銘柄と時間足におけるチャート上のバー(ローソク足)の総数を取得します。EAは、利用可能なバーの数がnumCandles以上であるかを確認します。もし足りない場合は、エラーメッセージを表示して関数から抜け出し、それ以上のデータ収集を防ぎます。

forループ

forループは、最新のバー(numCandles-1)から最も古いバー(0)まで逆順に繰り返し処理をおこない、必要な本数のローソク足データを収集します。

iTime、iHigh、iLow、iOpen、iClose、iVolume

これらの関数は、各ローソク足の関連価格データを取得します。iTimeはタイムスタンプを取得し、iHighは高値、iLowは安値を取得します。

データ検証

CSV文字列にデータを追加する前に、EAは欠損データや無効なデータ(ゼロ値)がないかをチェックします。もし無効なローソク足データがあれば、そのバーはスキップされ、次の繰り返しに進みます。

文字列フォーマット

StringFormat関数は、ローソク足データをCSVの1行にフォーマットするために使われます。各フィールドはコンマで区切られ、タイムスタンプはTimeToString関数を用いて読みやすい文字列に変換されます。

CSVファイルへのデータの書き込み

データを収集したら、次のステップはCSVファイルに書き込むことです。これは、収集したデータをPythonサーバーに送信する前の準備としてローカルに保存しておくために不可欠です。FileOpen関数で書き込みモードでファイルを開き、FileWriteString関数でフォーマット済みのCSVデータを書き込みます。書き込みが完了したら、FileClose関数でファイルを閉じて処理を確定し、データの損失を防ぎます。

CSVファイルは、MetaTraderの特別なフォルダである MQL5\Filesディレクトリに保存されます。このディレクトリはプラットフォームがアクセス可能な場所であり、必要に応じてファイルを簡単に取得できるようになっています。

string fileName = StringFormat("%s_vwap_data.csv", Symbol());
string filePath = "MQL5\\Files\\" + fileName;
int fileHandle = FileOpen(filePath, FILE_WRITE | FILE_CSV | FILE_ANSI);
if (fileHandle != INVALID_HANDLE) {
    FileWriteString(fileHandle, csvData);
    FileClose(fileHandle);
} else {
    Print("Failed to open file for writing: ", filePath);
}

データをCSVファイルに書き込むことは、後で分析するために情報をローカルに保存する方法のひとつです。FILE_CSVを使うことで、データが標準化された形式で保存され、Pythonなど他のシステムとの互換性が保たれます。ファイルが開けなかった場合にはエラーハンドリングがおこなわれ、EAは問題を適切に処理してエラーメッセージを表示します。

VWAP分析のためにPythonサーバーにデータを送信する

これで収集したデータを分析のためにPythonサーバーに送信する準備が整いました。これはWebRequest関数を使用しておこなわれ、EAがHTTPリクエストを送信できるようになります。CSVデータは文字配列に変換され(StringToCharArray関数)、POSTリクエストとしてサーバーに送信されます。ヘッダーには送信するコンテンツがCSVであることが指定されており、サーバーからの応答は結果配列に格納されます。

タイムアウトは5000ミリ秒(5秒)に設定されており、サーバーから応答がない場合でもリクエストが長時間ハングすることを防ぎます。

char data[];
StringToCharArray(csvData, data); 

string headers = "Content-Type: text/csv\r\n";
char result[];
string resultHeaders;
int timeout = 5000;

int responseCode = WebRequest("POST", pythonUrl, headers, timeout, data, result, resultHeaders);

ここでは、データをURLを変更せずにサーバーへ送信する最適な方法としてHTTP POSTメソッドが使われています。WebRequest関数はPythonサーバーとの通信を担当し、VWAPの計算などの重い処理はサーバーサイドでおこなわれます。タイムアウト設定により、サーバーが応答しない場合でもEAがハングすることを防ぎ、スムーズな動作を維持します。

Pythonサーバーからのレスポンスの処理

データを送信した後、Pythonサーバーからの応答を処理する必要があります。ここで本当の魔法が起こります。Pythonサーバーは受け取ったデータを分析し、VWAPに基づいた取引シグナルを提供します。応答はJSON形式で返され、ヘルパー関数ExtractValueFromJSONを使って、応答から関連する値(VWAPや説明)を抽出します。

応答が成功した場合(HTTPコード200)、必要な情報を解析し、取引ロジックを進めます。応答に有効なデータが含まれていれば、新たなシグナルの生成に移ることができます。

// Check if the request was successful
if (responseCode == 200) {
    string response = CharArrayToString(result); // Convert the result array to a string
    Print("Server response: ", response);  // Print the server's response

    // Validate if the required data is present in the response
    if (StringFind(response, "\"vwap\":") == -1 || StringFind(response, "\"signal_explanation\":") == -1) {
        Print("Error: Invalid response from server. Response: ", response);
        return;
    }

    // Extract individual data points from the JSON response
    string vwap = ExtractValueFromJSON(response, "vwap");
    string explanation = ExtractValueFromJSON(response, "signal_explanation");
    string majorSupport = ExtractValueFromJSON(response, "major_support");
    string majorResistance = ExtractValueFromJSON(response, "major_resistance");
    string minorSupport = ExtractValueFromJSON(response, "minor_support");
    string minorResistance = ExtractValueFromJSON(response, "minor_resistance");

    // If valid data is received, update the signal
    if (vwap != "" && explanation != "") {
        string newSignal = "VWAP: " + vwap + "\nExplanation: " + explanation
                           + "\nMajor Support: " + majorSupport + "\nMajor Resistance: " + majorResistance
                           + "\nMinor Support: " + minorSupport + "\nMinor Resistance: " + minorResistance;

        // Confirm the signal and handle the response further
        if (newSignal != lastSignal) {
            signalConfirmationCount++; // Increment confirmation count
        }

        if (signalConfirmationCount >= confirmationInterval) {
            lastSignal = newSignal;  // Set the new signal
            signalConfirmationCount = 0;  // Reset the count
            Print("New VWAP signal: ", newSignal);
            Alert("New VWAP Signal Received:\n" + newSignal); // Alert user of the new signal
        }
    }
} else {
    Print("Error: WebRequest failed with code ", responseCode, ". Response headers: ", resultHeaders);
}

レスポンスを正しく処理することは、サーバーの分析結果を正確に解釈するために非常に重要です。ExtractValueFromJSON関数は、大量のJSONレスポンスから必要なデータ(VWAPとシグナルの説明)だけを確実に抽出します。もしレスポンスが無効であったり、期待したデータが見つからない場合は、エラー処理をおこない、不正確なシグナルに基づいて誤った判断をしないようにすることが重要です。

シグナルの確認と取引シグナルの表示

最後のステップは、取引シグナルを確認することです。Pythonサーバーからシグナルを受信しても、すぐに対応するわけではありません。代わりに、複数の間隔(confirmationIntervalで設定)にわたってシグナルの一貫性を確認します。これにより、短期的な市場ノイズによる誤反応を防ぐことができます。

シグナルが確認されたら、lastSignal変数を更新し、Alert関数を使ってユーザーにシグナルを表示します。その後、EAは次の有効なシグナルを受け取るまで待機します。

// Confirm the signal multiple times before updating
if (newSignal != lastSignal)
{
    signalConfirmationCount++;  // Increment the confirmation count
}

// Once the signal has been confirmed enough times
if (signalConfirmationCount >= confirmationInterval)
{
    // Update the last signal and reset confirmation count
    lastSignal = newSignal;
    signalConfirmationCount = 0;  // Reset the count after confirmation

    // Display the new signal in the log and via an alert
    Print("New VWAP signal: ", newSignal);  // Print to the log
    Alert("New VWAP Signal Received:\n" + newSignal);  // Display alert to the user
}

シグナルの確認は、一時的で信頼性の低いシグナルに基づいて行動することを避けるのに役立ちます。複数回にわたってシグナルを確認することで、取引判断の精度と信頼性を高めます。アラートはトレーダーに即時のフィードバックを提供し、重要な変化に気付けるようにします。

2. Python

スクリプトの流れは、データの前処理、VWAPおよび関連指標の計算、シグナルの生成、そしてEAが意思決定に利用できる有益な情報の返却を目的としています。これには、主要および副次的なサポート・レジスタンスレベルの特定、VWAPの算出、シグナルの説明が含まれます。以下の手順に沿います。

データの準備と前処理

スクリプトの最初の部分では、受け取ったデータが分析に適した状態であることを確認するために、いくつかの前処理をおこないます。これらの処理により、必要なすべての列に有効なデータが含まれていることが保証され、不足値や無効な値などの特殊ケースにも対応します。

# Ensure critical columns have no missing values
df = df.dropna(subset=['volume', 'high', 'low', 'open', 'close'])

# Convert 'date' column to datetime
df.loc[:, 'date'] = pd.to_datetime(df['date'])

# Handle zero volume by replacing with NaN and dropping invalid rows
df.loc[:, 'volume'] = df['volume'].replace(0, np.nan)
df = df.dropna(subset=['volume'])

# Check if data exists after filtering
if df.empty:
    print("No data to calculate VWAP.")
    return pd.DataFrame()

スクリプトは、dropnaを用いて必須の列(出来高、高値、安値、始値、終値)に欠損値が含まれていないことを確認します。また、出来高がゼロの場合はNaNNaNに置き換え、無効な出来高を含む行を削除して処理します。日付列は時系列分析のために日時形式に変換されます。

VWAPの計算と追加指標

スクリプトはVWAPを計算し、典型価格、平均価格、平均出来高、サポートおよびレジスタンスレベルといった追加の指標も算出します。

# Calculate VWAP and additional metrics
df.loc[:, 'typical_price'] = (df['high'] + df['low'] + df['close']) / 3
df.loc[:, 'vwap'] = (df['typical_price'] * df['volume']).cumsum() / df['volume'].cumsum()
df.loc[:, 'avg_price'] = df[['high', 'low', 'open', 'close']].mean(axis=1)
df.loc[:, 'avg_volume'] = df['volume'].rolling(window=2, min_periods=1).mean()
df.loc[:, 'major_support'] = df['low'].min()
df.loc[:, 'major_resistance'] = df['high'].max()
df.loc[:, 'minor_support'] = df['low'].rolling(window=3, min_periods=1).mean()
df.loc[:, 'minor_resistance'] = df['high'].rolling(window=3, min_periods=1).mean()

  • VWAPの計算:VWAPは、出来高で加重された典型価格の累積和を累積出来高で割って計算されます。
  • 典型価格:典型価格は、各期間の高値、安値、終値の平均として計算されます。

サポートとレジスタンス

  • 主要サポート:期間全体の安値の中で最も低い値
  • 主要レジスタンス:期間全体の高値の中で最も高い値
  • 小規模サポート/レジスタンス:3期間のローリング平均による安値および高値

シグナル生成と分析

この部分では、市場の傾向を算出し、終値とVWAPの位置関係に基づいて取引シグナルを生成します。また、これらのシグナルに対する説明も提供します。

# Calculate strength and generate signals
df.loc[:, 'strength'] = np.where(
    (df['high'] - df['low']) != 0,
    np.abs(df['close'] - df['open']) / (df['high'] - df['low']) * 100,
    0
)

# Generate Buy/Sell signals based on VWAP
df.loc[:, 'signal'] = np.where(
    df['close'] > df['vwap'], 'BUY',
    np.where(df['close'] < df['vwap'], 'SELL', 'NEUTRAL')
)

# Signal explanation
df.loc[:, 'signal_explanation'] = np.where(
    df['signal'] == 'BUY',
    'The price is trading above the VWAP, indicating bullish market tendencies.',
    np.where(
        df['signal'] == 'SELL',
        'The price is trading below the VWAP, indicating bearish market tendencies.',
        'The price is trading at the VWAP, indicating equilibrium in the market.'
    )
)

強さの計算:終値と始値の差を高値と安値のレンジで割ることで、市場の強さを算出します。値が高いほど、強い値動きを示します。

シグナル生成

  • 買い:終値がVWAPより高い場合
  • 売り:終値がVWAPより低い場合
  • 中立:終値がVWAPと等しい場合
  • シグナルの説明:シグナルに基づいて、市場の傾向(強気、弱気、中立)を示すテキストによる説明が生成されます。

最終的な結果の生成と出力

すべての計算が完了した後、スクリプトは最終的な出力を準備します。出力には、VWAP、取引シグナル、説明文、および主要なサポート/レジスタンスレベルが含まれます。

# Return data with major and minor support/resistance levels included
return df[['date', 'vwap', 'signal', 'signal_explanation', 'entry_point', 'major_support', 'major_resistance', 'minor_support', 'minor_resistance']].iloc[-1]

  • 最終出力:スクリプトは最新の(最終行の)データを返します。内容にはVWAP、取引シグナル、その説明、エントリーポイント(VWAPに設定)、および主要・小規模なサポート/レジスタンスレベルが含まれます。サポート/レジスタンスレベルは、市場の動向をさらに把握するために計算されています。これらの値はEAに返され、EAはそれを基にチャート上に表示したり、取引の判断を下したりします。


結果

今回はMQL5側とPython側の両方のレスポンスを紹介します。その前に、まずPythonスクリプトが先に起動していることを必ず確認する重要性を強調しておきます。Pythonスクリプトの作成および実行方法については、前回の記事もぜひご覧ください。 MetaTrader 5とサーバー間のスムーズな通信を確保するために、MetaTrader 5の設定でHTTPアドレスを追加する必要があります。[ツール]>[オプション]に移動し、[WebRequestを許可するURLリスト]にチェックを入れて、指定されたフィールドにサーバーアドレスを入力します。設定方法は以下のGIFを参考にしてください。

Webrequest

図3:WebRequest設定

PythonとMQL5の両方からの応答を見てみましょう。

  • コマンドプロンプトでのPythonのログ

Received data: date,high,low,open,close,volume
2025.01.22 15:00,8372.10000,8365.60000,8368.90000,8367.80000,3600
2025.01.22 16:00,8369.00000,8356.60000,8367.90000,8356.80000,3600
2025.01.22 17:00,8359.00000,8347.800...
Calculating VWAP...
127.0.0.1 - - [28/Jan/2025 22:07:59] "POST /vwap HTTP/1.1" 200 -

MQL5のEAは、過去150本のローソク足データ(日付、高値、安値、始値、終値、出来高)を正常に送信しました。Python側でもデータを問題なく受信していることが、上記のコマンドプロンプトのログから確認できます。データ量が多いためすべての情報は表示されていませんが、いくつかのローソク足の値は確認可能です。

  • MetaTrader 5 EAログ
2025.01.28 22:07:59.452 VWAP (Step Index,H1)    VWAP Expert initialized.
2025.01.28 22:07:59.513 VWAP (Step Index,H1)    CSV file created: MQL5\Files\Step Index_vwap_data.csv
2025.01.28 22:07:59.777 VWAP (Step Index,H1)    Server response: {
2025.01.28 22:07:59.777 VWAP (Step Index,H1)      "entry_point": 8356.202504986322,
2025.01.28 22:07:59.777 VWAP (Step Index,H1)      "major_resistance": 8404.5,
2025.01.28 22:07:59.777 VWAP (Step Index,H1)      "major_support": 8305.0,
2025.01.28 22:07:59.777 VWAP (Step Index,H1)      "minor_resistance": 8348.0,
2025.01.28 22:07:59.777 VWAP (Step Index,H1)      "minor_support": 8341.699999999999,
2025.01.28 22:07:59.777 VWAP (Step Index,H1)      "signal": "SELL",
2025.01.28 22:07:59.777 VWAP (Step Index,H1)      "signal_explanation": "The price is trading below the VWAP, indicating bearish market tendencies.",
2025.01.28 22:07:59.777 VWAP (Step Index,H1)      "vwap": 8356.202504986322
2025.01.28 22:07:59.777 VWAP (Step Index,H1)    }

MQL5 EAはPythonからの応答を正常に受信し、MetaTrader 5のエキスパートログに記録しました。解析結果を確認し、MetaTrader 5のチャートとどのように一致しているかを見てみましょう。

システム結果

図4:シグナル表示

以下の図に示すように、シグナル発生後の市場の反応を見てみましょう。

市場の反応

図5:市場の反応


結論

VWAPシステムを正しく構築した後は、市場の方向性を注視し、確認のためにVWAPレベルを活用することが重要です。VWAPレベルは市場から非常に重視されており、多くの場合、重要なサポートまたはレジスタンスゾーンとして機能します。また、自分の取引戦略に合った適切な時間軸を選ぶことも欠かせません。M1〜M15のような短い時間枠は日中の値動きを捉え、M30は精度と広い視点のバランスを提供します。H1〜H4は数日間のトレンドを把握し、日足や週足チャートは長期的な市場動向を理解するのに役立ちます。取引目標に合わせて適切な時間軸を選び、戦略を調整することで、より良い結果が得られるでしょう。

日付ツール名 詳細バージョン アップデート 備考
01/10/24ChartProjector前日のプライスアクションをゴースト効果でオーバーレイするスクリプト1.0初回リリースLynnchris Tool Chestの最初のツール
18/11/24Analytical Comment前日の情報を表形式で提供し、市場の将来の方向性を予測する1.0初回リリースLynnchris Tool Chestの2番目のツール
27/11/24Analytics Master2時間ごとに市場指標を定期的に更新 1.01v.2Lynnchris Tool Chestの3番目のツール
02/12/24Analytics Forecaster Telegram統合により、2時間ごとに市場指標を定期的に更新1.1v.3ツール番号4
09/12/24Volatility Navigatorボリンジャーバンド、RSI、ATR指標を使用して市場の状況を分析するEA1.0初回リリースツール番号5
19/12/24Mean Reversion Signal Reaper 平均回帰戦略を用いて市場を分析し、シグナルを提供する 1.0 初回リリース ツール番号6 
9/01/2025 Signal Pulse 多時間枠分析ツール1.0 初回リリース ツール番号7 
17/01/2025 Metrics Board 分析用のボタン付きパネル 1.0 初回リリースツール番号8 
21/01/2025External Flow外部ライブラリによる分析1.0 初回リリースツール番号9 
27/01/2025VWAP出来高加重平均価格  1.3 初回リリース ツール番号10 

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

添付されたファイル |
VWAP.py (3.89 KB)
VWAP.mq5 (6.99 KB)
最後のコメント | ディスカッションに移動 (4)
Isuru Weerasinghe
Isuru Weerasinghe | 31 1月 2025 において 10:45
あなたはこのコードがバック テストで動作することを示したが、私はこのHTTPコードを取得します:-1|エラー:4014 .ドキュメントによると、"関数は呼び出しが許可されていません"

Christian Benjamin
Christian Benjamin | 31 1月 2025 において 10:51
Isuru Weerasinghe バック テストで動作することを示したが、私はこのHTTPコードを取得します:-1|エラー:4014 .ドキュメントによると、"関数は呼び出しが許可されていません"

申し訳ありません。PythonスクリプトでBacktrader、BT、VectorBTなどのバックテストライブラリをインポートする必要があります。これらがないと、バックテストができません。
Too Chee Ng
Too Chee Ng | 30 5月 2025 において 15:19
「WebRequest 対応EA」をクラウドエージェントを使ってMetaTraderでバックテスト(最適化)できますか?
Too Chee Ng
Too Chee Ng | 30 5月 2025 において 15:45
Too Chee Ng バックテスト(最適化)できますか?

私の調査結果によると

- クラウドエージェント(リモートMQL5.comネットワーク)でWebRequest()を使用することは許可されていません

- MetaTraderのクラウドエージェント(外部通信をブロック)とは異なり、LANエージェントは 許可されています。

MQL5で自己最適化エキスパートアドバイザーを構築する(第5回):自己適応型取引ルール MQL5で自己最適化エキスパートアドバイザーを構築する(第5回):自己適応型取引ルール
インジケーターを安全に使用する方法を定義したベストプラクティスに従うのは、必ずしも容易ではありません。市場の動きが穏やかな状況では、インジケーターが意図した通りのシグナルを発しないことがあり、その結果、アルゴリズム取引における貴重なチャンスを逃してしまう可能性があります。本稿では、この問題に対する潜在的な解決策として、利用可能な市場データに応じて取引ルールを適応させることが可能な取引アプリケーションの構築方法を提案します。
金融モデリングにおける合成データのための敵対的生成ネットワーク(GAN)(第2回):テスト用の合成シンボルの作成 金融モデリングにおける合成データのための敵対的生成ネットワーク(GAN)(第2回):テスト用の合成シンボルの作成
この記事では、敵対的生成ネットワーク(GAN)を使用して合成シンボルを作成し、EURUSDなどの実際の市場商品の挙動を模倣した現実的な金融データを生成します。GANモデルは、過去の市場データからパターンやボラティリティを学習し、同様の特性を持つ合成価格データを生成します。
データサイエンスとML(第33回):MQL5におけるPandas DataFrame、ML使用のためのデータ収集が簡単に データサイエンスとML(第33回):MQL5におけるPandas DataFrame、ML使用のためのデータ収集が簡単に
機械学習モデルを使用する際は、学習・検証・テストに使用するデータの一貫性を確保することが重要です。この記事では、MQL5の外部(多くの学習がおこなわれる環境)とMQL5内部の両方で同じデータを利用できるようにするため、MQL5で独自のPandasライブラリを作成します。
MQL5での取引戦略の自動化(第4回):Multi-Level Zone Recoveryシステムの構築 MQL5での取引戦略の自動化(第4回):Multi-Level Zone Recoveryシステムの構築
この記事では、RSI(相対力指数)を活用して取引シグナルを生成する、MQL5によるMulti-Level Zone Recoveryシステムの開発について解説します。本システムでは、各シグナルインスタンスを動的に配列構造に追加し、Zone Recoveryロジックの中で複数のシグナルを同時に管理することが可能になります。このアプローチにより、スケーラブルかつ堅牢なコード設計を維持しながら、複雑な取引管理シナリオに柔軟かつ効果的に対応できる方法を紹介します。