ハーモニックパターンとウィリアムズ指標を組み合わせたマルチタイムフレーム取引戦略

WPR SL TP RR Pivot
作成日: 2025-01-17 16:19:15 最終変更日: 2025-01-17 16:19:15
コピー: 0 クリック数: 463
1
フォロー
1617
フォロワー

ハーモニックパターンとウィリアムズ指標を組み合わせたマルチタイムフレーム取引戦略

概要

この戦略は、ハーモニック パターンとウィリアムズ パーセンテージ ポイント レーティング (WPR) を組み合わせた高度な取引システムです。これは、市場におけるハーモニックパターン(ガートレー、バット、クラブ、バタフライパターンなど)を識別し、それらをウィリアムズオシレーターの買われすぎと売られすぎのレベルと組み合わせて、取引のエントリーとエグジットを決定することによって機能します。この戦略では、テクニカル指標の相乗効果を通じて取引の精度と信頼性を向上させるために、複数の確認メカニズムを採用しています。

戦略原則

戦略の中核となるロジックには、次の主要な部分が含まれます。

  1. ハーモニックパターン認識: 価格の転換点を使用して、高値と安値の関係を分析して市場構造を決定する潜在的なハーモニックパターンを識別します。
  2. ウィリアムズ指標の計算: カスタムサイクルを使用してウィリアムズ指標を計算し、最高価格、最低価格、終値の関係を分析して市場の状態を判断します。
  3. 応募条件:
    • ロングエントリー: 強気のハーモニックパターンが現れ、ウィリアムズオシレーターが売られ過ぎゾーンにあるとき
    • ショートエントリー: 弱気なハーモニックパターンが現れ、ウィリアムズオシレーターが買われすぎゾーンにあるとき
  4. リスク管理: 最近の安値/高値に基づいて動的なストップロスを使用し、リスク報酬比に基づいて利益確定ポジションを設定します。

戦略的優位性

  1. 多次元分析: パターン分析とモメンタム指標を組み合わせて、より信頼性の高い取引シグナルを提供します。
  2. 完璧なリスク管理: リスクリターン比率に基づく動的なストップロスとテイクプロフィット設定を採用し、各取引のリスクを効果的に管理します。
  3. 強力な適応性: パラメータの最適化を通じて、さまざまな市場環境や取引商品に適応できます。
  4. シグナル確認メカニズム: ハーモニック パターンとウィリアムズ インジケーターの二重確認により、誤ったシグナルの影響が軽減されます。

戦略リスク

  1. パターン認識のリスク: 単純化されたハーモニックパターン認識により、特定のパターンが誤って解釈される可能性があります。
  2. パラメータの感度: 複数のパラメータの設定には慎重な最適化が必要であり、不適切なパラメータは戦略のパフォーマンスに影響を与える可能性があります。
  3. 市場環境への依存性: 不安定な市場や横ばい市場ではパフォーマンスが低下する可能性があります。
  4. シグナルの遅れ: テクニカル指標に基づくシグナルには、一定の遅れが生じる場合があります。

戦略最適化の方向性

  1. パターン認識の強化:
    • より厳格な高調波比検証を追加
    • パターン認識の精度を向上させる価格構造分析の導入
  2. 信号フィルタリング:
    • トレンドフィルターを追加
    • さまざまな市場環境に適応するためにボラティリティ指標の追加を検討する
  3. リスク管理の最適化:
    • 動的なリスク・リターン比率の調整を実現
    • 市場変動に基づくポジション管理の強化

要約する

この戦略は、ハーモニックパターンとウィリアムズ指標を組み合わせることで、比較的完全な取引システムを構築します。その利点は多次元分析方法と完璧なリスク管理メカニズムにありますが、パラメータの最適化や市場環境への適応性などの問題にも注意を払う必要があります。提案された最適化の方向性を通じて、戦略の安定性と信頼性がさらに向上することが期待されます。

ストラテジーソースコード
/*backtest
start: 2025-01-09 00:00:00
end: 2025-01-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy("Harmonic Pattern with WPR Backtest", overlay=true)

// === Inputs ===
patternLength = input.int(5, title="Pattern Length")
wprLength = input.int(14, title="WPR Length")
wprOverbought = input.float(-20, title="WPR Overbought Level")
wprOversold = input.float(-80, title="WPR Oversold Level")
riskRewardMultiplier = input.float(0.618, title="Take-Profit Risk/Reward Multiplier")
stopLossBuffer = input.float(0.005, title="Stop-Loss Buffer (%)")

// === Manual Calculation of William Percent Range (WPR) ===
highestHigh = ta.highest(high, wprLength)
lowestLow = ta.lowest(low, wprLength)
wpr = ((highestHigh - close) / (highestHigh - lowestLow)) * -100

// === Harmonic Pattern Detection (Simplified Approximation) ===
// Calculate price pivots
pivotHigh = ta.pivothigh(high, patternLength, patternLength)
pivotLow = ta.pivotlow(low, patternLength, patternLength)

// Detect Bullish and Bearish Harmonic Patterns
bullishPattern = pivotLow and close > ta.lowest(close, patternLength)  // Simplified detection for bullish patterns
bearishPattern = pivotHigh and close < ta.highest(close, patternLength)  // Simplified detection for bearish patterns

// === Entry Conditions ===
longCondition = bullishPattern and wpr < wprOversold
shortCondition = bearishPattern and wpr > wprOverbought

// === Stop-Loss and Take-Profit Levels ===
longEntryPrice = close
longSL = ta.valuewhen(longCondition, low, 0) * (1 - stopLossBuffer)  // Stop-loss for long trades
longTP = longEntryPrice * (1 + riskRewardMultiplier)  // Take-profit for long trades

shortEntryPrice = close
shortSL = ta.valuewhen(shortCondition, high, 0) * (1 + stopLossBuffer)  // Stop-loss for short trades
shortTP = shortEntryPrice * (1 - riskRewardMultiplier)  // Take-profit for short trades

// === Backtesting Logic ===
// Long Trade
if longCondition
    strategy.entry("Long", strategy.long)
    strategy.exit("Long Exit", "Long", stop=longSL, limit=longTP)

// Short Trade
if shortCondition
    strategy.entry("Short", strategy.short)
    strategy.exit("Short Exit", "Short", stop=shortSL, limit=shortTP)

// === Visualization ===
bgcolor(longCondition ? color.new(color.green, 90) : na, title="Long Entry Signal")
bgcolor(shortCondition ? color.new(color.red, 90) : na, title="Short Entry Signal")