この戦略は,長期・短期ストップ損失線を計算するために,ATRと価格極端をベースとしたダイナミックトレーリングストップのアイデアを採用している.チェンデリア出口のアイデアと組み合わせると,ストップ損失ラインのブレイクに基づいて長/短方向を判断する.ストップ損失線が上向きに突破すると,それは上昇と長エントリーとして判断される.ストップ損失線が下向きに突破すると,それは下向きと短エントリーとして判断される.
ストップ・ロスの管理とエントリー・シグナル判断機能の両方を備えている.
戦略は以下の主要な部分で構成されています.
ATRに基づいて長/短ストップ損失線を計算する
使用者定義のATR期間長さと倍数マルチに基づいて,リアルタイムATRが計算されます.その後,長/短ストップロスのラインはATRと価格極限で計算されます:
longStop = Highest - ATR
shortStop = Lowest + ATR
ブレイクによって取引方向を判断する
前のバーと現在のバーのストップ・ロスの線を比較します.現在のバーのストップ・ロスの線が切断された場合,取引信号が起動します:
Long stop-loss line breakout upwards, long entry
Short stop-loss line breakout downwards, short entry
リスク/報酬比に基づいてストップ損失と収益を設定する
ユーザが定義したリスク・リターン比 (riskRewardRatio) をベースに,ストップ・ロスト距離とテイク・プロフィート距離はATRから計算されます. ストップ・ロスト・オーダーと 収益・オーダーが ポジションを開く時に設定されます.
この戦略の利点は以下の通りです.
ダイナミック・トラール・ストップ・ロスト
ダイナミックなストップ・ロストラインを採用することで,タイムリーストップ・ロストとダウンサイドリスクを制御できます
二重機能
ストップ・ロスはストップ・ロスの管理ツールであり,エントリー・コンディション・ジャッジとして機能し,戦略の複雑さを軽減します.
調整可能なリスク/報酬比
リスク・リターン比が決まる より高い利益を追求する
簡単に理解し 広める
シンプルな構造で 簡単に理解し 拡張のために最適化できます
この戦略にはいくつかのリスクがあります.
双方向リスク
双方向の取引戦略として 長期リスクと短期リスクの両方を承担する.
ATRパラメータ依存度
ATR パラメータは,ストップ損失線と取引頻度に直接影響する.不正な設定は,ストップ損失があまりにも広く,または取引頻度があまりにも高くなる可能性があります.
トレンド適応性
この戦略は突然のブレイクで範囲に限定されたシナリオに適しています. 強いトレンドシナリオには適していません.
上記のリスクに対処するための最適化は以下のとおりです.
傾向指標を組み込む
市場動向を決定するために,MAやその他の傾向指標を組み込むこと,傾向に反する取引を避けること.
パラメータ最適化
ATR パラメータとリスク・リターン比の組み合わせを最適化して,より合理的なストップ・ロスを確保し,利益を上げます.
追加フィルター
取引量や変動条件のフィルターを追加して取引の質を確保する.
戦略をさらに最適化するには まだ余地があります
機械学習を組み込む
マシン学習モデルを採用して 価格動向を予測し より正確な入場を図る
オプションでリスクのないポートフォリオを構築する
オプションを利用して,裏付け資産の価格変動をヘッジし,リスクのないアビラージポートフォリオを構築する.
市場間多資産仲介
安定したアルファを得るために,異なる市場と資産クラスで統計的仲介を行います.
アルゴリズム取引
アルゴリズムの取引エンジンを活用して 効率的なバックテスト戦略と取引をします
この記事では,ダイナミック・トレーリング・ストップ・ロスの基礎にある定量的な取引戦略を徹底的に分析しています.この戦略は同時にストップ・ロスの管理機能と取引信号決定を備えており,リスクを効果的に制御しています.また,戦略の利点,潜在的なリスクおよび将来の最適化についても議論しました.これはさらなる研究と適用に値する非常に実践的な取引戦略です.
/*backtest start: 2023-12-29 00:00:00 end: 2024-01-28 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Chandelier Exit with 1-to-1 Risk-Reward", shorttitle='CE', overlay=true) // Chandelier Exit Logic length = input.int(title='ATR Period', defval=22) mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0) useClose = input.bool(title='Use Close Price for Extremums', defval=true) atr = mult * ta.atr(length) longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr longStopPrev = nz(longStop[1], longStop) longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop var int dir = 1 dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir // Risk-Reward Ratio riskRewardRatio = input.int(1, title="Risk-Reward Ratio", minval=1, maxval=10, step=1) // Calculate Take Profit and Stop Loss Levels takeProfitLevel = atr * riskRewardRatio stopLossLevel = atr // Entry Conditions longCondition = dir == 1 and dir[1] == -1 shortCondition = dir == -1 and dir[1] == 1 // Entry Signals if (longCondition) strategy.entry("Long", strategy.long, stop=close - stopLossLevel, limit=close + takeProfitLevel) if (shortCondition) strategy.entry("Short", strategy.short, stop=close + stopLossLevel, limit=close - takeProfitLevel) longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.green) shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.red) midPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false) fill(midPricePlot, longStopPlot, color=color.new(color.green, 90), title='Long State Filling') fill(midPricePlot, shortStopPlot, color=color.new(color.red, 90), title='Short State Filling') // Alerts if (dir != dir[1]) strategy.entry("Direction Change", strategy.long, comment="Chandelier Exit has changed direction!") if (longCondition) strategy.entry("Buy Signal", strategy.long, comment="Chandelier Exit Buy!") if (shortCondition) strategy.entry("Sell Signal", strategy.short, comment="Chandelier Exit Sell!")