資源の読み込みに... 荷物...

2つのタイムフレームトレンド逆転キャンドルスタイクパターン 定量的な取引戦略

作者: リン・ハーンチャオチャン, 日付: 2025-01-10 15:47:53
タグ:マルチ

 Dual Timeframe Trend Reversal Candlestick Pattern Quantitative Trading Strategy

概要

この戦略は,ハンマーとハンギングマンという2つの古典的なキャンドルスタイクパターンをベースとした定量的な取引システムである.この逆転パターンを特定することによって,潜在的な市場のターニングポイントを予測する.このシステムは,キャンドルスタイクボディと影,トレンド方向,その他の要素の関係を含む信号の有効性を確認するために複数の技術指標を組み合わせ,市場の逆転点を正確に把握することを達成する.

戦略原則

戦略の基本的な論理は プログラム的に2つの鍵となるキャンドルスタイクパターンを特定することです 1. ハンマー: 下向きの傾向で現れ,上向きの逆転の可能性を示唆する.小さな体,長い下影 (体長の少なくとも2倍),上影がほとんどない. 2. ハンギングマン: 上向きのトレンドで現れ,下向きの逆転の可能性を示唆する.ハンマーに似た特徴が,反対の意味を持つ異なる場所に現れる.

戦略は,以下を含む厳格なパラメータを通じて,これらのパターンを定量化します. - 最低キャンドル体長倍数 - 下の影とキャンドルの高さの比率 - 保持期間

戦略 の 利点

  1. 体系的な識別: 市場逆転信号をプログラム的に正確に識別し,主観的な人間の判断を避けます.
  2. 制御されたリスク: 過剰なポジション保有によるリスクを回避する明確な保持期間を設定する.
  3. シグナルビジュアライゼーション:分析と最適化のためにチャート上で直感的に取引シグナルを表示します.
  4. 柔軟なパラメータ: 異なる市場状況に基づいてパラメータを調整することができ,戦略の適応性を向上させます.

戦略リスク

  1. 誤った突破リスク:逆転パターンは誤った信号を生む可能性があり,他の技術指標による確認が必要です.
  2. タイミングリスク:固定保持期間が価格変動の可能性を完全に把握できない可能性があります.
  3. 市場環境依存性: 異なる市場で過剰な誤った信号を生む可能性があります.

戦略の最適化方向

  1. トレンドフィルターを導入します 動平均値のような指標を追加して 傾向をフィルターし 信号品質を改善します
  2. ダイナミックホールディング期間: 市場の波動性に基づいてホールディング時間を調整します.
  3. 複数の時間枠の確認:より長い時間枠の傾向の確認メカニズムを実装する.
  4. ストップ損失最適化: リスク管理を改善するために動的ストップ損失メカニズムを追加する.

概要

この戦略は,定量化を通じてクラシックな技術分析理論を体系的に実装し,強力な実用的な価値を示している.パラメータ最適化とリスク制御メカニズム精製を通じて,戦略は異なる市場環境で安定したパフォーマンスを維持することができる.モジュール式設計はまた,後の最適化のための堅牢な基盤を提供します.


/*backtest
start: 2024-12-10 00:00:00
end: 2025-01-08 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Hammer and Hanging Man Strategy", overlay=true)

// Input parameters
length = input.int(5, title="Minimum Candle Body Length (Multiplier)", minval=1)
shadowRatio = input.float(1, title="Lower Shadow to Candle Height Ratio", minval=1.0)
holdPeriods = input.int(26, title="Hold Periods (Bars)", minval=1)  // Holding period in bars

// Function to calculate the absolute value
absValue(x) =>
    x >= 0 ? x : -x

// Function to check if it is a Hammer
isHammer() =>
    bodyLength = absValue(close - open)
    candleHeight = high - low
    lowerShadow = math.min(open, close) - low
    upperShadow = high - math.max(open, close)
    smallBody = bodyLength <= candleHeight / length
    longLowerShadow = lowerShadow >= bodyLength * shadowRatio
    shortUpperShadow = upperShadow <= bodyLength
    smallBody and longLowerShadow and shortUpperShadow and close > open

// Function to check if it is a Hanging Man
isHangingMan() =>
    bodyLength = absValue(close - open)
    candleHeight = high - low
    lowerShadow = math.min(open, close) - low
    upperShadow = high - math.max(open, close)
    smallBody = bodyLength <= candleHeight / length
    longLowerShadow = lowerShadow >= bodyLength * shadowRatio
    shortUpperShadow = upperShadow <= bodyLength
    smallBody and longLowerShadow and shortUpperShadow and close < open

// Detect the candles
hammer = isHammer()
hangingMan = isHangingMan()

// Trading logic: Long on Hammer, Short on Hanging Man
if hammer
    strategy.entry("Long", strategy.long)  // Long entry on Hammer

if hangingMan
    strategy.entry("Short", strategy.short)  // Short entry on Hanging Man

// Exit after X bars
if strategy.position_size > 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods
    strategy.close("Long")

if strategy.position_size < 0 and bar_index - strategy.opentrades.entry_bar_index(0) >= holdPeriods
    strategy.close("Short")

// Visualization of signals
plotshape(hammer, title="Hammer", location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer")
plotshape(hangingMan, title="Hanging Man", location=location.abovebar, color=color.red, style=shape.labeldown, text="Hanging Man")

関連性

もっと