記事の目次

根拠と適用範囲

本資料は、チャネル計算式、データシフト、およびシミュレーションによる注文タイミングを裏付けています。過去のトレンドフォローに関する主張は、ここで提案されている特定のエントリー、ボリューム閾値、およびエグジットが利益を生むという証拠として扱われるものではありません。

データと市場明確に定義された金融商品と取引セッションを使用してください。先物取引には明確な契約とロールオーバーのルールが必要です。株式取引には、高値、安値、執行価格にわたる一貫した分割調整が必要です。
研究対象の時間足N=20 を H=1 上で使用する場合、または日次データを使用する場合は、実験的な構成であり、普遍的な推奨事項ではありません。セッションの長さと実行コストによって、その意味合いは変わります。
合成例では、価格は99と105の間で推移し、その後、出来高が増加して105を上回って終値となり、さらに上昇を続けています。図解を原寸で開く
オリジナルの合成価格と出来高。2つのレベルは、プロットされた各ポイントで再計算されるローリングチャネルではなく、トリガー発生前のスナップショットです。

実践の流れ

実践手順: ローリング・ドンチャン極値:ブレイクアウトとリクレームの因果的参照レベル
詳しい手順を以下に示します。各段階でデータ不足や条件不成立があれば、除外理由を記録します。
  1. N個のバーを集める現在のバーより前に確定した観測値を使います。
  2. UとDを凍結する各極値の価格と、発生からの経過時間を記録します。
  3. イベントを分類する終値でのブレイクアウトと、境界外への逸脱後のリクレームを区別します。
  4. ボリュームを適用する発注時に利用できる特徴量だけを使います。
  5. 実行をシミュレートする登録済みのエントリー、ストップ、および有効期限に関するポリシーを適用してください。

ローリングバウンダリーは確定したスイングではない

ドンチャンはN個の観測値の極値を取ります。TradingViewは、上下のバンドとその中間点[1]を示します。両側ピボットとは異なり、後続の反転は必要ありません。次のバーが始まる時点で、完了した前のウィンドウはすでにわかっています。トレンド中、その上限は抵抗として機能せずに上昇し続ける可能性があります。

提案されている因果関係の定義は、U[t]=max(H[t−N:t])、D[t]=min(L[t−N:t])、M[t]=(U[t]+D[t])/2 であり、スライスの上端は除外されます。したがって、ウィンドウは t−1 で終了します。H[t] が U[t] に含まれる場合、条件 H[t]>U[t] は構成上不可能になります。

この単純な区別は実験全体に影響します。チャート指標は視覚化のために形成中のバーを含むバンドを表示する場合がありますが、戦略は使用する過去のスナップショットを指定する必要があります。極値の価格と発生時刻を保存し、新しく形成された境界と、まもなく計算窓から外れる古い極値を後の分析で区別できるようにします。

イベントを分類する前に参照を作成する

pandas では、値をシフトすると、参照ウィンドウと評価対象の行が分離されます [2]。実装例の 1 つは high.shift(1).rolling(N).max() です。freq でインデックスをシフトしても、観測値を決定行に対して移動することの代わりにはなりません。観測値の数が変更されても黙って許可するのではなく、完全な有効ウィンドウを要求します。

ベースラインでは、バッファ b=max(2 ticks,0.1×ATR[t−1]) を加えたバンド境界を超える確定終値を分類します。N=20 と 0.1 は研究用の提案値です。単一バーを即時に分類する場合は、各バーで直前の計算窓から基準を更新します。複数バーにわたるスイープとリクレームの候補では、候補の開始時に元のレベルを固定します。

そうでない場合、変動バーは次のローリングウィンドウに入り、回復中の境界を移動します。更新された境界を下回ることは、実際に突破したレベルを下回ることとは異なるイベントとなる可能性があります。設定全体を通して意図した質問が安定するように、candidate_id、frozen_level、参照タイムスタンプ、および有効期限を保持してください。

U = max(H[t-N:t]); D = min(L[t-N:t])
b = max(2*tick, 0.1*ATR[t-1])
if no_active_setup and C[t] > U+b:
    emit('up_breakout', signal_at=t, frozen_level=U)
if no_active_setup and H[t] > U+b and C[t] < U:
    emit('upper_reclaim', signal_at=t, frozen_level=U)
# These labels represent different hypotheses.
# A close-confirmed order can be processed only after close t.

一つの境界線が、異なる有効な結果を生み出す可能性がある

合成例: 前の 20 バーは U=105、D=99、ATR=1 です。tick=0.01、b=0.10 があります。現在のバーは H=106 と C=105.4 で、上方終値ブレイクアウトを形成します。次の始値 105.5 での買い、ストップロス 103.9、ターゲット 108.7 は、初期価格リスクが 1.6 ポイント、コスト控除前のターゲットが 2R です。

失敗経路:105.5で始値を付けた後、価格は103.8まで下落します。トリガーとなる終値がすべての検出条件を満たしていても、ストップロスに到達する可能性があります。もし元のトリガーとなるバーがH=106とC=104.7だった場合、それは終値ブレイクアウトではありません。これは、別途指定されたショート戦略の上限回復である可能性があります。損失を確認した後で、損失ブレイクアウトをスイープと再分類しないでください。

より微妙なケースとしては、105の以前の高値がNバーウィンドウから外れ、Uが104まで下落する場合が挙げられます。この場合、104.5の価格は、直近の取引高値を更新することなくチャネルを超える可能性があります。これは正当なローリングウィンドウイベントです。これを除外するには、基準レベルの起点または移動に関する追加の登録条件が必要です。

等価性を意図的にテストしてください。この基準では、U+b で正確に終値となる場合は、厳密な大なり条件により拒否されます。注文発注前に、固定された規則に従ってティック丸め処理を行う必要があります。そうしないと、浮動小数点ノイズによって、観測値が境界のすぐ上か、境界上に正確に位置しているかが決定されてしまう可能性があります。

注文のタイミング、無効化、有効期限

TradingViewは、エミュレータ[3]において、終値後の注文作成と次のティックでの約定を区別します。そのため、提案された終値確認ベースラインには、後続の実行価格、スプレッド、スリッページが必要です。Uより上にある買いストップは別のモデルであり、バー内で約定し、終値前に反転する可能性があります。不利な終値によって、その約定を遡及的に消去することはできません。

決済方法には、固定した構造上のストップ、より短い計算期間の下側チャネルに追随するストップ、時間決済があります。評価前に単純な設定を選びます。リテストで入る場合は、許容する戻りの深さ、適格な反応、注文の有効バー数を定義します。リテストが起きないブレイクアウトは、機会を逃した記録として残し、自動的に価格を追いかける取引に切り替えません。

ストップとターゲットの両方に接触するバーは、より詳細なデータまたは明示的に宣言された保守的な順序付け規則を必要とします。ギャップテストは、元のシグナルタイムスタンプまたは固定参照を変更することなく、実現約定とリスクを変更するはずです。発注前の約定拒否と損失約定注文は、異なる結果です。

ローリングトレーリングストップにもタイミングルールが必要です。昨日の下限バンドが今日の終値後に更新された場合、新しいストップはそれ以前のバー内変動を保護できません。最終的なトレーリングをバー全体に遡って適用するのではなく、すべてのストップの改訂とその有効化時間を保存してください。

出来高フィルターは強い値動きとコストの高い約定を選ぶ可能性がある

提案するブレイクアウトフィルターは、比較可能なセッション内時間帯の過去データを基準に RVOL≥1.5 を要求します。バーの終値確定後の判断では、トリガーバー全体の出来高を利用できます。それより前に待機中のストップ注文を出す場合、注文を出すかどうかは発注時までに観測済みの出来高だけで判断します。約定後に得られるバー全体の出来高を、過去のエントリー許可に使うことはできません。

価格のみ、最低流動性条件付き、異常出来高条件付きの各分岐を分けます。基本的な取引可能性と追加情報の有効性は異なる問いです。高RVOLの部分集合では値動きが大きくなる一方、ギャップやスプレッドも大きくなる可能性があるため、コスト控除前の価格反応だけでは不十分です。

純期待値、エクスポージャー、除外した機会数を比較します。各分岐のリスク予算を揃え、過去データだけで定義したグループを使い、流動性や時間帯ごとの結果を報告します。小さな部分集合で勝率が上がっても、ポートフォリオのリターンやドローダウンが自動的に改善するわけではありません。

複数バーのリクレームでは、境界外への逸脱中の出来高と、境界内へ戻るリクレーム中の出来高を別々に保存します。その比率は検討できますが、区間の長さが異なる場合は正規化が必要です。集計OHLCVからは、取引がドンチャンのレベルそのもので起きたのか、値幅の広いバーの別の価格で起きたのかは判断できません。

戦略を実行する前に参照計算をテストする

N=10,20,40のような小規模な開発グリッドを登録します。各シグナルにおけるバンド価格、極値のタイムスタンプ、レベルの経過時間を記録し、古い極値が期限切れになったためにレベルが移動したかどうかも記録します。これにより、経済的な行動と機械的なウィンドウ効果を分離し、感度の解釈を容易にします。

直接因果関係テストでは、プレフィックスを固定したまま H[t] を変更します。U[t] は変更されません。H[t−1] を変更すると、U[t] が変更される可能性があります。欠落バー、休日、開始ギャップ、および古いデータのフィクスチャを追加します。バッチ計算をストリーミング実装と比較し、オフバイワンエラーが視覚的に妥当なチャート内に隠れないようにします。

その後に、設定を固定したサンプル外期間を、売買回転率、手数料、エクスポージャー、ドローダウン、約定条件への感度とともに評価します。特定ニュースや寄り付き・引けの部分集合を選ぶ場合、それらも研究上の試行に数えます。有利な境界から完了した取引だけでなく、失敗した候補や発生しなかったリテストも報告します。

よくある落とし穴

基準レベルが境界外への逸脱を追いかけてしまう

更新後のバンド内への復帰は、最初に突破した元の境界内への復帰とは異なる場合があります。

タッチとクロスを混同する

Uと同値になっても、自動的にブレイクアウトとはなりません。ティック丸めと比較の規則を事前に固定します。

短い計算窓に伴う売買回転コストを見落とす

Nが小さいほど、実行コストが総優位性を上回るような頻繁なシグナルを生成できる。

この手法を使う前のチェックリスト

ご自身のデータで確認した項目にチェックを入れてください。進捗はこのブラウザに保存されますが、戦略の収益性を認定するものではありません。

0/8 項目

よくある質問

上側バンドへの接触で売るべきですか?

一般的な結論はありません。境界線で逆張りする戦略と、ブレイクアウトで買いを入れる戦略は相反する仮説であり、それぞれに定義と検証が必要です。

ドンチャンはピボットの代わりを務めることができるのか?

ブレイクアウトの基準値は提供できるが、ピボット検出器のような右側反転の確認やスイング順序付けは提供しない。

研究資料

各資料は、その横に記載された定義や根拠を支えています。擬似コード、架空の例、提案パラメータは別途検証が必要です。

  1. Donchian ChannelsTradingView. チャネルの計算式と説明上の用途を読んだ範囲。 確認日: .
  2. pandas.Series.shiftpandas. 値のシフトを確認するためにAPIを読んだ範囲。 確認日: .
  3. Pine Script: StrategiesTradingView. 注文作成、次に利用可能なティックでの約定、ストップ注文の動作を読んだ範囲。 確認日: .

関連する手法

リスクについて

この内容は学習と研究設計を目的とし、金融上の助言ではありません。Backtestは過去データのシミュレーションであり、将来の成果を保証せず、実際の売買注文も行いません。このライブラリの手法が、そのままアプリで利用できる機能とは限りません。関連情報: 検証方法 および 学習センター.

実際の資金を使う前にルールを検証する

アプリの対応範囲、データ、個々の模擬取引を確認してください。高度な検出手法は別途実装が必要な場合があります。

App StoreでBacktestをダウンロード