ダイナミックトラッキングストップロス1/3Kライン定量取引戦略

TRINITY ATR
作成日: 2025-02-18 13:57:33 最終変更日: 2025-02-18 13:57:33
コピー: 0 クリック数: 345
1
フォロー
1617
フォロワー

ダイナミックトラッキングストップロス1/3Kライン定量取引戦略

概要

これは,ビル・ウィリアムズの3分の1のK線分析方法と,ダイナミック・トラッキング・ストップ・ローズ機能を組み合わせた量化取引戦略である.この戦略は,現在のK線と前のK線の構造特性を分析することで,明確な多空信号を生成し,配置可能なトラッキング・ストップ・メカニズムを使用して,ポジションを保護し,正確な入場/出場とリスク管理を実現する.

戦略原則

戦略の核心的な論理は,以下の重要な部分に基づいています.

  1. K線三等分計算:各K線の範囲 ((最高価格 - 最低価格) を三等分して,上層領域と下層領域の境界値を得る.
  2. K線形の分類:開値と閉値が三等分領域にある位置に応じて,K線を複数のタイプに分類する.例えば,開値が下層領域で,閉値が上層領域であるときは,強烈な上形と考えられる.
  3. シグナル生成規則:現在のK線と前のK線の形状を組み合わせて分析し,有効な取引信号を決定する.例えば,連続した2つのK線が強い特徴を示すとき,多信号をトリガーする.
  4. 動的追跡ストップ:指定された時間周期で,前N根K線の最低価格 (多頭) または最高価格 (空頭) を移動ストップポイントとして使用する.

戦略的優位性

  1. 論理的明確性:戦略は直観的なK線構造分析方法を使用し,取引規則は明確で分かりやすい.
  2. リスク管理の改善: ダイナミックなトラッキング・ストップ・ローズ・メカニズムにより,十分な利回り空間を保持しながら,撤回リスクを効果的に制御できます.
  3. 適応性:戦略は,異なる市場環境に応じて調整できるストップ・ロスのパラメータを追跡し,良好な適応性を有する.
  4. 高度な自動化: 信号生成からポジション管理まで,完全に自動化され,人間の介入が減少しています.

戦略リスク

  1. 横軸の振動状況では,頻繁に偽の突破信号が生じ,過度な取引が起こる可能性があります.
  2. 空飛ぶリスク:大空飛ぶ場合,追跡停止は間に合わず,予期せぬ損失を招く可能性があります.
  3. パラメータの感受性:ストップ・ロスを追跡するパラメータの選択は,戦略のパフォーマンスに大きな影響を与える.不適切なパラメータの設定は,早期出場または保護不足を引き起こす可能性があります.

戦略最適化の方向性

  1. 市場環境フィルターを追加:トレンド指数または波動率指数を導入し,異なる市場環境で動的に戦略パラメータを調整できます.
  2. 最適化ストップメカニズム:より柔軟なストップ距離を設定し,ストップの適応性を高めるためにATR指標と組み合わせて考慮することができます.
  3. ポジション管理の導入:シグナル強さや市場の変動の動向に応じてポジションサイズを調整することができ,より精密なリスク制御を実現する.
  4. 出場最適化: 出場タイミングを最適化するために,利益目標や技術指標の補助判断を追加できます.

要約する

これは,構造が整え,論理が明確で,量子的な取引戦略であり,クラシックな技術分析方法と現代的なリスク管理技術を組み合わせることで,優れた実用性があります. 戦略の設計では,信号生成,保有管理,リスク管理などの鍵となるリンクを含む,実体取引のニーズを十分に考慮しています. この戦略は,さらに最適化および改善することにより,実際の取引でより良いパフォーマンスを期待しています.

ストラテジーソースコード
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-16 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("TrinityBar with Trailing Stop", overlay=true, initial_capital=100000, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=250)

//─────────────────────────────────────────────────────────────
// 1. BAR THIRDS CALCULATIONS
//─────────────────────────────────────────────────────────────
cur_range      = high - low
cur_lowerThird = low + cur_range / 3
cur_upperThird = high - cur_range / 3

prev_range      = high[1] - low[1]
prev_lowerThird = low[1] + prev_range / 3
prev_upperThird = high[1] - prev_range / 3

//─────────────────────────────────────────────────────────────
// 2. DEFINE BULLISH & BEARISH BAR TYPES (CURRENT & PREVIOUS)
//─────────────────────────────────────────────────────────────
// Current bar types
is_1_3 = (open <= cur_lowerThird) and (close >= cur_upperThird)
is_3_3 = (open >= cur_upperThird) and (close >= cur_upperThird)
is_2_3 = (open > cur_lowerThird) and (open < cur_upperThird) and (close >= cur_upperThird)

is_3_1 = (open >= cur_upperThird) and (close <= cur_lowerThird)
is_1_1 = (open <= cur_lowerThird) and (close <= cur_lowerThird)
is_2_1 = (open > cur_lowerThird) and (open < cur_upperThird) and (close <= cur_lowerThird)

// Previous bar types
prev_is_1_3 = (open[1] <= prev_lowerThird) and (close[1] >= prev_upperThird)
prev_is_3_3 = (open[1] >= prev_upperThird) and (close[1] >= prev_upperThird)
prev_is_2_3 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] >= prev_upperThird)

prev_is_3_1 = (open[1] >= prev_upperThird) and (close[1] <= prev_lowerThird)
prev_is_1_1 = (open[1] <= prev_lowerThird) and (close[1] <= prev_lowerThird)
prev_is_2_1 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] <= prev_lowerThird)

//─────────────────────────────────────────────────────────────
// 3. VALID SIGNAL CONDITIONS
//─────────────────────────────────────────────────────────────
validBuy  = (prev_is_2_3 or prev_is_3_3 or prev_is_1_3) and (is_1_3 or is_3_3)
validSell = (prev_is_2_1 or prev_is_1_1 or prev_is_3_1) and (is_1_1 or is_3_1)

//─────────────────────────────────────────────────────────────
// 4. PLOT SIGNAL TRIANGLES
//─────────────────────────────────────────────────────────────
plotshape(validBuy, title="Valid Buy", style=shape.triangleup, location=location.belowbar, 
     color=color.green, size=size.small, text="B")
plotshape(validSell, title="Valid Sell", style=shape.triangledown, location=location.abovebar, 
     color=color.red, size=size.small, text="S")

//─────────────────────────────────────────────────────────────
// 5. MARKET ORDER EXECUTION BASED ON SIGNALS
//─────────────────────────────────────────────────────────────
if validBuy
    // Close any short positions.
    strategy.close("Short", comment="")
    // If not already long, enter a market long.
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long, comment="")
        
if validSell
    // Close any long positions.
    strategy.close("Long", comment="")
    // If not already short, enter a market short.
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short, comment="")

//─────────────────────────────────────────────────────────────
// 6. TRAILING STOP LOSS FUNCTION
//─────────────────────────────────────────────────────────────
// Inputs for trailing stop settings:
trailBars = input.int(title="Trailing Stop Bars Back", defval=1, minval=1)
trailTF   = input.timeframe(title="Trailing Stop Timeframe", defval="")  // "" = current timeframe

// For long positions, use the low from 'trailBars' bars back on the specified timeframe.
// For short positions, use the high from 'trailBars' bars back.
trailStopLong  = request.security(syminfo.tickerid, trailTF, low[trailBars])
trailStopShort = request.security(syminfo.tickerid, trailTF, high[trailBars])

// Apply trailing stops if a position is open.
if strategy.position_size > 0
    strategy.exit("Trailing Stop Long", from_entry="Long", stop=trailStopLong)
if strategy.position_size < 0
    strategy.exit("Trailing Stop Short", from_entry="Short", stop=trailStopShort)