ATRダイナミックトレーリングストップロスを備えたトレンドフォロー型取引システム

ATR EMA ROI TSL
作成日: 2025-02-20 13:22:24 最終変更日: 2025-02-20 14:53:21
コピー: 2 クリック数: 445
2
フォロー
319
フォロワー

ATRダイナミックトレーリングストップロスを備えたトレンドフォロー型取引システム ATRダイナミックトレーリングストップロスを備えたトレンドフォロー型取引システム

概要

この戦略はATR (平均リアル波幅) ベースの動的にストロスを追跡するトレンド追跡システムである.これは,トレンドフィルターとしてEMA均線を組み合わせ,感度パラメータとATR周期を調整することで信号の生成を制御する.システムは,多額の取引だけでなく,空白取引もサポートし,完善した利益管理機構を有している.

戦略原則

  1. ATR指標を使用して価格の変動幅を計算し,設定された感度係数 (Key Value) による追跡ストップ距離を決定します.
  2. EMA平均線から市場の傾向の方向を判断し,価格が平均線上にある場合にのみ多項を開く,平均線の下にある空白を開く
  3. 価格がストップラインを突破し,トレンドの方向に合致すると,取引シグナルをトリガーします.
  4. システムによる分期利益管理:
    • 20%~50%の利益の場合は,コスト・プライム・セーバーにストップ・ロスを引き上げます.
    • 利益の50%から80%で,部分的に利益が結束し,ストップ・ローズを緊縮する
    • 利益の80%から100%の利益の際には,さらにストップ・ローズ・プロテクトを厳格にする.
    • 利益が100%を超えると,全額を平仓にします.

戦略的優位性

  1. ダイナミック・トラッキング・ストップは,トレンドを効果的に追跡し,利潤を保護しながら,早すぎる脱出をしない.
  2. EMAのトレンドフィルターは,偽のブレイクのリスクを低減します.
  3. 区切り利回りの仕組みは,収益の実現を保証し,トレンドの充分な発展の余地を与えています.
  4. 市場機会を最大限に活用するための多額の空調取引を支援する
  5. パラメータは,異なる市場環境に適応し,調整可能

戦略リスク

  1. 波動的な市場では,頻繁に取引することで損失を招く可能性があります.
  2. トレンド転換の初期には大きな後退が起こる可能性がある
  3. 不適切なパラメータ設定は戦略のパフォーマンスに影響を与える可能性があります リスク管理の提案:
  • 市場が明らかにトレンドしている場合に使用することをお勧めします.
  • 慎重に選択したパラメータは,反省で最適化できます.
  • 設定する最大撤回制限
  • 市場環境のフィルタリング条件の追加を検討

戦略最適化の方向性

  1. 市場環境の識別メカニズムを追加し,異なる市場条件で異なるパラメータを使用する
  2. 交差量などの補助指標を導入し,信号信頼性を強化
  3. 利潤管理機構の最適化,利潤目標の変動に合わせて調整
  4. タイムフィルターを追加し,不利なタイミングで取引を避ける
  5. 波動率のフィルターを追加し,波動が過度な場合の取引頻度を減らすことを検討する.

要約する

これは,構造が整った,論理が明確なトレンド追跡システムである.ATRダイナミック・トラッキングとEMAトレンド・フィルタリングの組み合わせにより,トレンドを把握しながら,リスクがより良く管理されている.分段利益メカニズムの設計も成熟した取引思考を反映している.戦略は,強力な実用性と拡張性を持ち,継続的な最適化と改善により,より良い取引効果が得られる見込みがある.

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

//@version=5
strategy("Enhanced UT Bot with Long & Short Trades", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input Parameters
keyvalue = input.float(1.1, title="Key Value (Sensitivity)", step=0.1)
atrperiod = input.int(200, title="ATR Period")
emaPeriod = input.int(50, title="EMA Period")
roi_close = input.float(100, title="Close Trade at ROI (%)", step=1)

// ATR Calculation
src = close
xATR = ta.atr(atrperiod)
nLoss = keyvalue * xATR

// EMA for Trend Filtering
ema = ta.ema(src, emaPeriod)

// Trailing Stop Logic
var float xATRTrailingStop = na
if na(xATRTrailingStop)
    xATRTrailingStop := src - nLoss

if src > nz(xATRTrailingStop[1]) and src[1] > nz(xATRTrailingStop[1])
    xATRTrailingStop := math.max(nz(xATRTrailingStop[1]), src - nLoss)
else if src < nz(xATRTrailingStop[1]) and src[1] < nz(xATRTrailingStop[1])
    xATRTrailingStop := math.min(nz(xATRTrailingStop[1]), src + nLoss)
else
    xATRTrailingStop := src > nz(xATRTrailingStop[1]) ? src - nLoss : src + nLoss

// Buy/Sell Signal with Trend Filter
buySignal = ta.crossover(src, xATRTrailingStop) and src > ema
sellSignal = ta.crossunder(src, xATRTrailingStop) and src < ema

// Strategy Logic: Long Trades
if buySignal and strategy.position_size <= 0
    strategy.entry("Buy", strategy.long)

if sellSignal and strategy.position_size > 0
    strategy.close("Buy")

// Strategy Logic: Short Trades
if sellSignal and strategy.position_size >= 0
    strategy.entry("Sell", strategy.short)

if buySignal and strategy.position_size < 0
    strategy.close("Sell")

// ROI Calculation for Both Long and Short Trades
var float entryPrice = na
var bool isLong = na
if strategy.position_size > 0
    entryPrice := strategy.opentrades.entry_price(0)
    isLong := true
if strategy.position_size < 0
    entryPrice := strategy.opentrades.entry_price(0)
    isLong := false

// Calculate current profit
currentProfit = isLong ? (close - entryPrice) / entryPrice * 100 : (entryPrice - close) / entryPrice * 100

// Enhanced ROI Management
if strategy.position_size > 0 // Long Position
    if currentProfit >= 20 and currentProfit < 50
        stopLevel = entryPrice // Breakeven
        strategy.exit("TSL Breakeven", from_entry="Buy", stop=stopLevel)
    if currentProfit >= 50 and currentProfit < 80
        stopLevel = entryPrice * 1.30 // 30% ROI
        strategy.exit("TSL 30%", from_entry="Buy", stop=stopLevel)
        strategy.close("Partial Profit", qty_percent=50) // Take 50% profit
    if currentProfit >= 80 and currentProfit < roi_close
        stopLevel = entryPrice * 1.60 // 60% ROI
        strategy.exit("TSL 60%", from_entry="Buy", stop=stopLevel)
    if currentProfit >= roi_close
        strategy.close("Full Exit at 100% ROI")

if strategy.position_size < 0 // Short Position
    if currentProfit >= 20 and currentProfit < 50
        stopLevel = entryPrice // Breakeven
        strategy.exit("TSL Breakeven", from_entry="Sell", stop=stopLevel)
    if currentProfit >= 50 and currentProfit < 80
        stopLevel = entryPrice * 0.70 // 30% ROI (Short stop)
        strategy.exit("TSL 30%", from_entry="Sell", stop=stopLevel)
        strategy.close("Partial Profit", qty_percent=50) // Take 50% profit
    if currentProfit >= 80 and currentProfit < roi_close
        stopLevel = entryPrice * 0.40 // 60% ROI (Short stop)
        strategy.exit("TSL 60%", from_entry="Sell", stop=stopLevel)
    if currentProfit >= roi_close
        strategy.close("Full Exit at 100% ROI")

// Plotting
plot(xATRTrailingStop, color=buySignal ? color.green : sellSignal ? color.red : color.gray, title="Trailing Stop")
plot(ema, color=color.blue, title="EMA Trend Filter")
plotshape(buySignal, title="Buy Signal", style=shape.labelup, location=location.belowbar, color=color.green, text="Buy")
plotshape(sellSignal, title="Sell Signal", style=shape.labeldown, location=location.abovebar, color=color.red, text="Sell")