記事「PatchTST機械学習アルゴリズムによる24時間の値動きの予測」についてのディスカッション - ページ 2

 
このモデルの予測結果が実際の状況とまったく一致しないことがよくあるんだ。このモデルのコードに変更は加えていません。ご指導いただけないでしょうか?ありがとうございました。
 
Thomas Sawyer #:
このモデルの予測結果が実際の状況とまったく一致しないことがよくあるんだ。このモデルのコードに変更は加えていません。ご指導いただけないでしょうか?ありがとうございます。

このモデルの経験を共有していただきありがとうございます。予測の一貫性についてのご指摘はもっともです。PatchTSTモデルは、複数の市場要因を考慮する包括的なトレーディング・アプローチに統合されたときに、最も効果的に機能します。以下は、モデルの予測をより効果的に使用する方法です:

  1. 時間窓の最適化:
  • ピーク時間帯(米国中部時間午前6時から午前10時)の取引に集中する。
  • 市場の動きが予測しやすいこの時間帯を中心に、モデルの予測を利用する。
  • 過去の日足と週足の高値・安値付近の乖離に特に注意する。これらは主要な需給ゾーンです。
  1. モデル統合戦略:
  • 独立したシグナルとしてではなく、より広範な分析の一部として予測を使用する。
  • 予測された価格帯でフェア・バリュー・ギャップ(FVG)を探す。MQL5でFVGに使用するインジケータのコードを以下に示します。
  • フラッグ、ウェッジ、水平コンソリデーションなどのテクニカルパターンと予測を組み合 わせる。
  • 予測を日足、週足、月足の価格位置と照らし合わせて検討する。
  1. リスク管理:
  • 広めのストップロスを導入する(例:金の10ポイントまたは100ピプスのストップロス、EURUSDの50ピプス、USDJPYの65ピプス、GBPUSDの60ピプス、AUDUSD/NZDUSDの30ピプス、USDCADの40ピプス、原油の0.80ポイント、US500の25ポイント、NQの75ポイント、US30の200ポイント)。
  • 控えめなテイクプロフィットを部分的に使用する(すなわち、最初の部分(最初のポジションの70%)のリスクリワードを1:1、ランナー(最初のポジションの30%)を残す)。
  • 相場の状況に応じてポジションの規模を調整する - 合流の多い良い取引では、基本ポジション・サイズを2~3倍にする。
  • インパクトの大きいニュースの時は取引を避ける
  1. コンテキストを構築する:
  • 複数のタイムフレームで市場構造を分析する:5分足と15分足を活用する - モデルが取引方向へのエントリーを予測する1時間以内に、エントリーするのに最適なローソク足/バー/終値がある可能性が高い。
  • 現在の市場の状態(トレンド/レンジ/堅調/チョッピー/反転)を考慮する - 最適な取引時間を事前に計画するためにこの情報を活用する。予想が外れた場合は、モデルが与えてくれる次の機会を探す。
  • 予測された価格帯のパターン確認を探す。
  • 方向性のバイアスと主要な支持線/抵抗線に注目する。
  1. エントリーの洗練:
  • トレードに入る前に、構造的な確証を待つ。最もよく知るべき構造:ダブルトップ/ボトム、ウェッジ、ブル/ベアフラッグ、MTRトップ/ボトム、クライマックス、特に主要なサポート/レジスタンス・エリア/FVGの周辺。
  • トレンドチャネルが予想される場合は、エントリーしないでください。トレンドチャネルは最大の敵です。たとえ4時間足や1日足などの高い時間枠でトレンドチャネルを見つけたとしても、カウンタートレンドは禁物です!
  • 予測されたレンジ内でのコンソリデーション・パターンを探し、すべての反転を演じましょう。このモデルは反転相場で真価を発揮します。
  • フルサイズでエントリーするのではなく、ポジションにスケーリングすることを考慮する。25%のイニシャルサイズ-価格が有利になるにつれ、ポジションのフルサイズまでスケールインする。自分のポジションに不利になるようなスケールインはしない。

その他の個人的見解

  • このモデルでは、特定の事柄に注目し、予測する必要がある:重要なエリア周辺での反転が最も利益を生む。
    • つまり、モデルが特定のバーまたは時間枠の色の変化を予測するとします。その時こそ、注意を払い始める時です。エントリーする前に、コンフルエンス(合流)が1回あるかどうかを探します。そのコンフルエンスが得られなければ、それが得られるまで待ちます。たとえ色が変わったとしても、そのトレードはうまくいくかもしれません。私が言いたいのは、これは「いつ」気にかけ、注意を払う必要があるかという観点から見ると、良い「タイミング」モデルだということです。
  • このモデルは多くの偽陽性を与えますが、数回の大勝利がすべての損失を一掃します。
  • 1ペアから始めて、毎週もう1ペア追加する。合計10ペアまでモデルをスケールアップする。
  • 毎週2~3回の大きな取引ができるようになる。
  • 毎週約0.5%~1.5%の利益を見込む。すべての異なるペアで毎週約1.0%~2.5%のリスクを負うことになる。言い換えれば、少額で取引し、相関性のない複数の商品に分散し、特定の時間帯に集中する。そうすれば、3~6種類の商品を一貫して的中させることができ、ほとんどの利益を得ることができます。ですから、1つの取引にこだわったり、1つのデータ・ポイントを分析しすぎたりしないでください。
  • 予測された変化がニュースの前後であれば、それをスキップして別のペアに集中するか、次の色の変化のシグナルを待ちます。
  • トレンド・チャネルは最大の敵であり、それを疑ったら、その日のペアのことは忘れよう。あるいは、モデルの言っていることと反対のことをする。そうしないと、カウンタートレンドに巻き込まれて負けるからだ。
  • このモデルのトレードは「居心地が悪い」ものである。それは、あなたがやりたくないこと、つまり正しいこと(やりたくないが、その状況では正しいことだからやるべきこと)をやらせるのだ。
  • 逆転の概念:モデルが1つの色(赤または緑)を示しているにもかかわらず、市場は常に反対の動きをしているように見える場合です。これは反転のシナリオであり、モデルに問題があるわけでも、あなたのトレードに問題があるわけでもありません。反転が起きたことを認識し、予想が再調整されるまで、反対のことを始めるか、そのペアを完全にスキップするだけです。反転が修正されるまでには、通常6~10セッション(約2~4日)かかります。このモデルで反転を特定する最も簡単な方法は、モデル予測のためにお渡ししたパイ ソンスクリプトを使うことです。予測値が実際と一致しているかどうかを確認してください。もし一致していなければ、逆転が起きている。

モデルの予測は、唯一の判断材料ではなく、分析の一要素として使うべきです。これらの要素を取り入れることで、PatchTSTモデルを使用する際の取引結果の一貫性を改善できる可能性があります。



フェア・バリュー・ギャップ(FVG)スクリプト(これらのギャップは、私の経験上、需給ゾーンのような働きをします:)

#property copyright "© ShashankRai1"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

input bool ShowMidpoint = false; // 中間点を表示
input color UpFVGColor = clrGreen;  // FVGカラー
input color DownFVGColor = clrRed;  // ダウンFVGカラー

int OnInit()
{
    IndicatorSetString(INDICATOR_SHORTNAME, "Show FVG");
    return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
    ObjectsDeleteAll(0, "FVG_");
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
    int start;
    if(prev_calculated == 0)
    {
        start = rates_total - 1;  // 利用可能なすべてのデータを処理する
    }
    else
    {
        start = prev_calculated - 1;  // 新しいバーだけを処理する
    }

    for (int i = start; i >= 2; i--)  // 少なくとも3本のバーがあることを確認する。
    {
        drawFVG(i, rates_total, time, open, high, low, close);
    }

    return(rates_total);
}

void drawFVG(int index, int total, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[])
{
    if (index < 2 || index >= total) return; // 十分なバーがあることを確認する

    if (close[index - 1] > open[index - 1] && high[index - 2] < low[index])
    {
        // ローソク足が上昇し、ギャップが存在する
        string boxName = StringFormat("FVG_Box_Up_%d", index);
        if(ObjectCreate(0, boxName, OBJ_RECTANGLE, 0, time[index - 2], high[index - 2], time[index], low[index]))
        {
            ObjectSetInteger(0, boxName, OBJPROP_COLOR, UpFVGColor);
            ObjectSetInteger(0, boxName, OBJPROP_BGCOLOR, UpFVGColor);
            ObjectSetInteger(0, boxName, OBJPROP_BACK, true);
            ObjectSetInteger(0, boxName, OBJPROP_WIDTH, 1);
            ObjectSetInteger(0, boxName, OBJPROP_FILL, true);
            Print("Created Up FVG box at index ", index);
        }
        else
        {
            Print("Failed to create Up FVG box at index ", index, ". Error: ", GetLastError());
        }

        if (ShowMidpoint)
        {
            string lineName = StringFormat("FVG_Line_Up_%d", index);
            double midpoint = (high[index - 2] + low[index]) / 2;
            if(ObjectCreate(0, lineName, OBJ_TREND, 0, time[index - 2], midpoint, time[index], midpoint))
            {
                ObjectSetInteger(0, lineName, OBJPROP_COLOR, UpFVGColor);
                ObjectSetInteger(0, lineName, OBJPROP_STYLE, STYLE_DASH);
                ObjectSetInteger(0, lineName, OBJPROP_WIDTH, 1);
                Print("Created Up FVG midline at index ", index);
            }
            else
            {
                Print("Failed to create Up FVG midline at index ", index, ". Error: ", GetLastError());
            }
        }
    }
    else if (close[index - 1] < open[index - 1] && low[index - 2] > high[index])
    {
        // ローソク足が下降し、ギャップが存在する
        string boxName = StringFormat("FVG_Box_Down_%d", index);
        if(ObjectCreate(0, boxName, OBJ_RECTANGLE, 0, time[index - 2], low[index - 2], time[index], high[index]))
        {
            ObjectSetInteger(0, boxName, OBJPROP_COLOR, DownFVGColor);
            ObjectSetInteger(0, boxName, OBJPROP_BGCOLOR, DownFVGColor);
            ObjectSetInteger(0, boxName, OBJPROP_BACK, true);
            ObjectSetInteger(0, boxName, OBJPROP_WIDTH, 1);
            ObjectSetInteger(0, boxName, OBJPROP_FILL, true);
            Print("Created Down FVG box at index ", index);
        }
        else
        {
            Print("Failed to create Down FVG box at index ", index, ". Error: ", GetLastError());
        }

        if (ShowMidpoint)
        {
            string lineName = StringFormat("FVG_Line_Down_%d", index);
            double midpoint = (high[index] + low[index - 2]) / 2;
            if(ObjectCreate(0, lineName, OBJ_TREND, 0, time[index - 2], midpoint, time[index], midpoint))
            {
                ObjectSetInteger(0, lineName, OBJPROP_COLOR, DownFVGColor);
                ObjectSetInteger(0, lineName, OBJPROP_STYLE, STYLE_DASH);
                ObjectSetInteger(0, lineName, OBJPROP_WIDTH, 1);
                Print("Created Down FVG midline at index ", index);
            }
            else
            {
                Print("Failed to create Down FVG midline at index ", index, ". Error: ", GetLastError());
            }
        }
    }
}
 
Shashank Rai #:

ご関心をお寄せいただきありがとうございます!しかし、M1データに切り替える際には、いくつか重要な考慮事項があります:

1.データ量:データ量:10080分(1週間)のM1データでトレーニングすることは、H1データよりもはるかに多くのデータポイントを扱うことを意味します。これは次のようなことを意味する:

  • トレーニング時間が大幅に増加
  • より多くのメモリを必要とする
  • 効率的なトレーニングのためにGPUアクセラレーションが必要になる可能性がある。

2.モデル・アーキテクチャの調整:モデル・トレーニングのステップ8と予測コードのステップ4で、より大きな入力シーケンスに対応するために他のパラメーターを調整したくなるかもしれません:

3.予測の質:3.予測品質:より詳細な予測が得られる一方で、M1データには通常より多くのノイズが含まれていることに注意してください。最適なバランスを見つけるために、異なる配列長や予測ウィンドウを試してみるとよいでしょう。

洞察に感謝する。私のコンピューターは、256GBで64物理コアと、それなりに高性能だ。もっといいGPUが必要だけどね。

GPUをアップデートしたら、アップデートしたコンフィグ設定を試してみるつもりだ。

 
Shashank Rai #:

このモデルの経験を共有してくれてありがとう。予測の一貫性についてのご指摘はもっともです。PatchTSTモデルは、複数の市場要因を考慮する包括的な取引手法に統合されたときに最も効果を発揮します。以下は、モデルの予測をより効果的に使用する方法です:

  1. 時間窓の最適化:
  • ピーク時間帯(米国中部時間午前6時から午前10時)の取引に集中する。
  • 市場の動きが予測しやすいこの時間帯を中心に、モデルの予測を利用する。
  • 過去の日足と週足の高値・安値付近の乖離に特に注意する。これらは主要な需給ゾーンです。
  1. モデル統合戦略:
  • 予測を単独のシグナルとしてではなく、より広範な分析の一部として使用する。
  • 予測された価格帯でフェア・バリュー・ギャップ(FVG)を探す。MQL5でFVGに使用するインジケータのコードを以下に示します。
  • フラッグ、ウェッジ、水平コンソリデーションなどのテクニカルパターンと予測を組み合 わせる。
  • 予測を日足、週足、月足の価格位置と照らし合わせて検討する。
  1. リスク管理:
  • 広めのストップロスを導入する(例:金の10ポイントまたは100ピップスのストップロス、EURUSDの50ピップス、USDJPYの65ピップス、GBPUSDの60ピップス、AUDUSD/NZDUSDの30ピップス、USDCADの40ピップス、原油の0.80ポイント、US500の25ポイント、NQの75ポイント、US30の200ポイント)。
  • 控えめなテイクプロフィットを部分的に使用する(すなわち、最初の部分(初期ポジションの70%)のリスクリワードを1:1、ランナー(初期ポジションの30%)を残す)。
  • 相場の状況に応じてポジションの規模を調整する - 合流の多い良い取引では、基本ポジション・サイズを2~3倍にする。
  • インパクトの大きいニュースの時は取引を避ける
  1. コンテクスト構築:
  • 複数のタイムフレームで市場構造を分析する:5分足と15分足を活用する-1時間足の中で、モデルが取引方向へのエントリーを予測する最適なローソク足/バー/終値がある可能性が高い。
  • 現在の市場の状態(トレンド/レンジ/堅調/チョッピー/反転)を考慮する - 最適な取引時間を事前に計画するためにこの情報を活用する。予想が外れた場合は、モデルが与えてくれる次の機会を探す。
  • 予測された価格帯のパターン確認を探す。
  • 方向性の偏りと主要な支持線/抵抗線に注目する。
  1. エントリーの洗練:
  • トレードに入る前に、構造的な確証を待つ。最もよく知るべき構造:ダブル・トップ/ボトム、ウェッジ、ブル/ベア・フラッグ、MTRトップ/ボトム、クライマックス、特に主要なサポート・レジスタンス・エリア/FVGの周辺。
  • トレンドチャネルが予想される場合は、エントリーしないでください。トレンドチャネルは最大の敵です。たとえ4時間足や1日足などの高い時間枠でトレンドチャネルを見つけたとしても、カウンタートレンドは禁物です!
  • 予測されたレンジ内でのコンソリデーション・パターンを探し、すべての反転を演じましょう。このモデルは反転相場で真価を発揮します。
  • フルサイズでエントリーするのではなく、ポジションにスケーリングすることを考慮する。25%のイニシャルサイズ-価格が有利になるにつれ、ポジションのフルサイズまでスケールインする。ポジションに逆らうようなスケールインはしないでください。

その他の個人的見解

  • このモデルでは、特定の事柄に注目し、予測する必要がある:重要なエリア周辺での反転が最も利益を生む。
    • つまり、モデルが特定のバーまたは時間枠の色の変化を予測するとします。その時こそ、注意を払い始める時です。エントリーする前に、コンフルエンス(合流)が1回あるかどうかを探します。そのコンフルエンスが得られなければ、それが得られるまで待ちます。たとえ色が変わったとしても、そのトレードはうまくいくかもしれません。私が言いたいのは、これは「いつ」気にかけ、注意を払う必要があるかという観点から見ると、良い「タイミング」モデルだということです。
  • このモデルは多くの偽陽性を与えますが、数回の大勝利がすべての損失を一掃します。
  • 1ペアから始めて、毎週もう1ペア追加する。合計10ペアまでモデルをスケールアップする。
  • 毎週2~3回の大きな取引ができるようになる。
  • 毎週約0.5%~1.5%の利益を見込む。すべての異なるペアで毎週約1.0%~2.5%のリスクを負うことになる。言い換えれば、少額で取引し、相関性のない複数の商品に分散し、特定の時間帯に集中する。そうすれば、3~6種類の商品を一貫して的中させることができ、ほとんどの利益を得ることができます。ですから、1つの取引にこだわったり、1つのデータ・ポイントを分析しすぎたりしないでください。
  • 予測された変化がニュースの前後であれば、それをスキップして別のペアに集中するか、次の色の変化のシグナルを待ちます。
  • トレンド・チャネルは最大の敵であり、それを疑ったら、その日のペアのことは忘れよう。あるいは、モデルの言っていることと反対のことをする。そうしないと、カウンタートレンドに巻き込まれて負けるからだ。
  • このモデルのトレードは「居心地が悪い」ものである。それは、あなたがやりたくないこと、つまり正しいこと(やりたくないが、その状況では正しいことだからやるべきこと)をやらせるのだ。
  • 逆転の概念:モデルが1つの色(赤または緑)を示しているにもかかわらず、市場は常に反対の動きをしているように見える場合です。これは反転のシナリオであり、モデルに問題があるわけでも、あなたのトレードに問題があるわけでもありません。反転が起きたことを認識し、予想が再調整されるまで、反対のことを始めるか、そのペアを完全にスキップするだけです。反転が修正されるまでには、通常6~10セッション(約2~4日)かかります。このモデルで反転を特定する最も簡単な方法は、モデルの予測に私があげたパイ ソンスクリプトを使うことです。予測値が実際と一致しているかどうかを確認してください。もし一致していなければ、逆転が起きています。

モデルの予測は、唯一の判断材料ではなく、分析の一要素として使うべきです。これらの要素を取り入れることで、PatchTSTモデルを使用する際の取引結果の一貫性を改善できる可能性があります。



フェア・バリュー・ギャップ(FVG)スクリプト(これらのギャップは、私の経験上、需給ゾーンのような働きをします:)

辛抱強いご回答と無私のご共有に感謝いたします。これほど詳細でプロフェッショナルな回答は初めてです。あなたの記事を繰り返し読ませていただきます。これらの知識は私にとって特に貴重です。よろしくお願いします。
 
Thomas Sawyer #:
辛抱強く答えてくださり、無私無欲の分かち合いをありがとうございました。これほど詳細でプロフェッショナルな回答は初めてです。あなたの記事を繰り返し読みます。これらの知識は私にとって特に貴重です。よろしくお願いします。

ありがとうございます。ありがとうございます!また何かありましたらご連絡ください!