ロンドンとニューヨークのデュアルセッションのブレークスルートレーリングストップロス定量取引戦略

ORB EMA SL TP RRR 交易会话 追踪止损 价格突破 风险管理
作成日: 2025-04-27 11:32:24 最終変更日: 2025-04-27 11:32:24
コピー: 2 クリック数: 334
2
フォロー
319
フォロワー

ロンドンとニューヨークのデュアルセッションのブレークスルートレーリングストップロス定量取引戦略 ロンドンとニューヨークのデュアルセッションのブレークスルートレーリングストップロス定量取引戦略

概要

双時間開盤区間突破追跡ストップ・損失量化取引戦略は,ロンドンとニューヨークの取引時間開盤15分前の価格区間に基づく突破取引システムである.この戦略は,この2つの主要金融センターの開盤初期における価格動力を捕捉し,価格が最初の15分間に形成された高点または低点を破るときに,対応する方向への取引を行う.この戦略の核心的な特徴は,利益を保護しながら,利益の持続的な増加を可能にするストップ・損失を追跡するメカニズムを採用することです.この戦略は,同時に,取引品質を向上させるために選択可能な均一線フィルタリング条件を提供します.

戦略原則

この戦略の動作は,ロンドン市場が開いている (ニューヨーク時間3時00分から3時15分) とニューヨーク市場が開いている (ニューヨーク時間9時30分から9時45分) の2つの重要な時間帯を中心に展開されています. 戦略の作業プロセスは次のとおりです.

  1. ロンドンとニューヨークの15分間の高値と低値がそれぞれ記録され”,価格区間”が形成された.
  2. 価格区間が形成された後,戦略は,区間サイズが最小要件を満たしているかどうかをチェックします (デフォルト 2 ポイント)
  3. 価格が下方から区間高を突破し,EMAフィルター条件 ((もし有効なら) を満たした場合は,多額のポジションを開きます.
  4. 価格が上方から下方から区間の低値を突破し,EMAフィルター条件 ((もし有効なら) を満たした場合は,空白する
  5. ストップは,ブレイク方向の反対の価格区間の境界の外にある区間の高さの位置に設定されます.
  6. ストップ目標のリスクリターン比 ([デフォルト2.0)) を区間高さで掛けます.
  7. ストップトラッキングを設定し,最小の8単位で,価格が有利な方向に動くと調整します.

策略の重要な論理は,取引の初期の価格方向の突破を捕捉することであり,これは通常,その後発生する可能性がある傾向的な行動を予告する.追跡停止の仕組みを使用することにより,戦略は,すでに有利な取引を保護しながら,有利な取引を継続できるようにする.

戦略的優位性

この戦略の利点は以下の通りです.

  1. バイタイム取引の機会戦略は,ロンドンとニューヨークの開場を同時に観察することで,二つの主要取引時間の変動を捉え,取引機会を増やすことができます.
  2. ストップ・ロスの追跡固定ストップと比べると,ストップトラッキングは,利益を守る一方で,利益の取引を継続させ,平均利益のレベルを効果的に高めます.
  3. 完璧なリスク管理: 戦略は波動率 ((区間サイズ) に基づくダイナミックな止損設定を採用し,リスク管理を市場状況に適したものにします.
  4. オーダーメイド: ユーザーは,異なる取引品種と個人リスクの好みに合わせて,リスク報酬率,最小区画のサイズ,ストップ・ロズポイントの追跡,およびEMAフィルターの使用かどうかを調整できます.
  5. 技術指標のフィルター: 選択可能な5分EMAフィルター条件は逆転取引を回避し,取引の質を向上させるのに役立ちます.
  6. 1時間あたり1回の取引を制限します.戦略の内蔵の取引標識は,毎時最大1回の取引のみを実行することを保証し,頻繁に取引がもたらすコストとリスクを回避します.

戦略リスク

この戦略は合理的に設計されていますが,以下の潜在的なリスクがあります.

  1. 偽の突破の危険性: 価格が区間の境界を一時的に突破した後にすぐに下がり,止損出場を引き起こす可能性がある. このリスクに対して,価格が突破した後に一定の期間維持されるか,一定の幅に達する前にポジションを開くように要求するなどの確認メカニズムを追加することを考えることができる.
  2. 資金管理の問題戦略: 決まった契約数取引をデフォルトで使用し,すべての資金規模には適さない場合があります. 口座規模とリスク承受能力に応じてポジションサイズを調整することをお勧めします.
  3. パラメータ最適化のリスク: 過度な最適化パラメータは,曲線適合につながり,将来の市場環境で不良なパフォーマンスを発揮する可能性がある.パラメータの安定性テストに注意すべきである.
  4. 市場環境への依存: この戦略は,波動的な市場や明らかなトレンドのない市場で頻繁にストップを触発する可能性がある. 市場環境のフィルタリング条件を追加することを考慮する.
  5. タイムゾーン設定の問題: コードにニューヨークタイムゾーンが使用されているので,取引プラットフォームのタイムゾーン設定と一致することを確認してください.そうでなければ,取引信号の誤位置を引き起こす可能性があります.
  6. 休日の影響: 特別な取引日や祝日は,戦略のパフォーマンスに影響を及ぼし,戦略には祝日フィルターロジックが含まれていません.

戦略最適化の方向性

戦略的分析から,以下のような最適化方向が考えられます.

  1. 確認メカニズムを追加: 価格突破の後,取引量突破,価格の連続的な複数K線が突破方向に保持されるなど,偽突破による損失を減らすために,追加の確認条件を追加することを検討することができます.
  2. ダイナミックな資金管理: 市場変動と口座規模の動向に応じてポジションの大きさを調整し,リスク・リターン比率を最適化する.
  3. 市場環境のフィルター: 波動率指標またはトレンド強度指標を導入し,突破戦略に適さない市場環境で取引を一時停止する.
  4. 複数のタイムサイクルを確認: 長期周期のトレンド方向を組み合わせて,大トレンドと一致する方向のみで取引する.
  5. 試合開始のタイミングを最適化: 価格の逆転を重要なサポート/レジスタンスポイントに利用して,直接突破点に直接入場せず,より良いコスト価格を得ることを検討してください.
  6. フィルタリング時間を追加: 異なる取引日と時間帯の過去のパフォーマンスを分析し,不良なパフォーマンスを避ける.
  7. 多種関連性分析関連性を考慮し,同時に,高度に関連した複数のポジションを保持することを避ける.

要約する

双期開場区間突破追跡ストップ損失量化取引戦略は,ロンドンとニューヨークの2つの金融センターの開場時間を対象に設計された突破取引システムである.開場初期の価格の動きと方向を捕捉し,追跡ストップメカニズムと組み合わせることで,この戦略は,リスクを制御しながら,利益の可能性を最大化することができる.偽突破や市場環境依存などのリスクがあるものの,合理的なパラメータ設定と追加のフィルタリング条件によって,戦略の安定性と収益性をさらに向上させることができる.この戦略は,波動性があり,大きな流動性のある市場に特に適しており,トレーダーは自身のリスク承受能力と取引目標に応じて適切に調整する必要があります.

ストラテジーソースコード
/*backtest
start: 2024-04-27 00:00:00
end: 2025-04-25 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("ORB-LD-NY-Trail Strategy", overlay=true,
     default_qty_type=strategy.fixed, default_qty_value=1,
     calc_on_order_fills=true, calc_on_every_tick=true)

// =========================
// USER INPUTS
// =========================
riskReward      = input.float(2.0, "Risk-Reward Ratio", minval=1.0)
minBoxSize      = input.float(2.0, "Minimum Box Size (points)")
trailStopTicks  = input.int(8, "Trailing Stop (ticks)", minval=1)
useEmaFilter    = input.bool(false, "Use 5-min EMA Filter?")

tickSize        = syminfo.mintick         // auto-detect min tick for symbol
trailStopOffset = trailStopTicks * tickSize
emaSource       = request.security(syminfo.tickerid, "5", ta.ema(close, 200))  // 5-min chart EMA

// =========================
// SESSION TIMES
// =========================
londonStart = timestamp("America/New_York", year, month, dayofmonth, 3, 0)
londonEnd   = timestamp("America/New_York", year, month, dayofmonth, 3, 15)
nyStart     = timestamp("America/New_York", year, month, dayofmonth, 9, 30)
nyEnd       = timestamp("America/New_York", year, month, dayofmonth, 9, 45)

inLondon = time >= londonStart and time <= londonEnd
inNY     = time >= nyStart and time <= nyEnd

// =========================
// ONE TRADE PER SESSION FLAGS
// =========================
var bool londonTraded = false
var bool nyTraded     = false

// =========================
// LONDON BOX
// =========================
var float londonHigh    = na
var float londonLow     = na
var float londonBoxHigh = na
var float londonBoxLow  = na

if inLondon
    if na(londonHigh)
        londonBoxHigh := na
        londonBoxLow  := na
        londonTraded  := false
    londonHigh := na(londonHigh) ? high : math.max(londonHigh, high)
    londonLow  := na(londonLow)  ? low  : math.min(londonLow,  low)

if not inLondon and na(londonBoxHigh) and not na(londonHigh) and not na(londonLow)
    londonBoxHigh := londonHigh
    londonBoxLow  := londonLow
    londonHigh    := na
    londonLow     := na

if time > londonEnd and not na(londonBoxHigh) and not londonTraded
    boxRange = londonBoxHigh - londonBoxLow
    if boxRange >= minBoxSize
        // Standard SL/TP logic
        longSL  = londonBoxHigh - boxRange
        longTP  = londonBoxHigh + boxRange * riskReward
        shortSL = londonBoxLow  + boxRange
        shortTP = londonBoxLow  - boxRange * riskReward

        // === LONDON LONG ===
        condLong1 = close[1] <= londonBoxHigh
        condLong2 = close > londonBoxHigh
        condLong3 = (not useEmaFilter) or (close > emaSource)

        if condLong1 and condLong2 and condLong3
            strategy.entry("London Long", strategy.long)
            strategy.exit("Exit London Long", from_entry="London Long",
                          stop=longSL, limit=longTP,
                          trail_points=trailStopOffset)
            londonTraded := true

        // === LONDON SHORT ===
        condShort1 = close[1] >= londonBoxLow
        condShort2 = close < londonBoxLow
        condShort3 = (not useEmaFilter) or (close < emaSource)

        if not londonTraded and condShort1 and condShort2 and condShort3
            strategy.entry("London Short", strategy.short)
            strategy.exit("Exit London Short", from_entry="London Short",
                          stop=shortSL, limit=shortTP,
                          trail_points=trailStopOffset)
            londonTraded := true

// =========================
// NY BOX
// =========================
var float nyHigh    = na
var float nyLow     = na
var float nyBoxHigh = na
var float nyBoxLow  = na

if inNY
    if na(nyHigh)
        nyBoxHigh := na
        nyBoxLow  := na
        nyTraded  := false
    nyHigh := na(nyHigh) ? high : math.max(nyHigh, high)
    nyLow  := na(nyLow)  ? low  : math.min(nyLow,  low)

if not inNY and na(nyBoxHigh) and not na(nyHigh) and not na(nyLow)
    nyBoxHigh := nyHigh
    nyBoxLow  := nyLow
    nyHigh    := na
    nyLow     := na

if time > nyEnd and not na(nyBoxHigh) and not nyTraded
    boxRange = nyBoxHigh - nyBoxLow
    if boxRange >= minBoxSize
        longSL  = nyBoxHigh - boxRange
        longTP  = nyBoxHigh + boxRange * riskReward
        shortSL = nyBoxLow  + boxRange
        shortTP = nyBoxLow  - boxRange * riskReward

        // === NY LONG ===
        condNYLong1 = close[1] <= nyBoxHigh
        condNYLong2 = close > nyBoxHigh
        condNYLong3 = (not useEmaFilter) or (close > emaSource)

        if condNYLong1 and condNYLong2 and condNYLong3
            strategy.entry("NY Long", strategy.long)
            strategy.exit("Exit NY Long", from_entry="NY Long",
                          stop=longSL, limit=longTP,
                          trail_points=trailStopOffset)
            nyTraded := true

        // === NY SHORT ===
        condNYShort1 = close[1] >= nyBoxLow
        condNYShort2 = close < nyBoxLow
        condNYShort3 = (not useEmaFilter) or (close < emaSource)

        if not nyTraded and condNYShort1 and condNYShort2 and condNYShort3
            strategy.entry("NY Short", strategy.short)
            strategy.exit("Exit NY Short", from_entry="NY Short",
                          stop=shortSL, limit=shortTP,
                          trail_points=trailStopOffset)
            nyTraded := true

// Visual session background
bgcolor(inLondon ? color.new(color.fuchsia, 85) : na)
bgcolor(inNY     ? color.new(color.green,   85) : na)