定量的なロングとショートのトレンド追跡ダイナミックストップロス戦略

ATR EMA CROSSOVER DYNAMIC STOP-LOSS
作成日: 2025-04-03 11:34:48 最終変更日: 2025-04-03 11:34:48
コピー: 0 クリック数: 447
2
フォロー
319
フォロワー

定量的なロングとショートのトレンド追跡ダイナミックストップロス戦略 定量的なロングとショートのトレンド追跡ダイナミックストップロス戦略

概要

これは,平均的な実際の波動範囲 ((ATR) と指数移動平均 ((EMA) に基づく多空のトレンド追跡戦略である.戦略は,ダイナミックなストップとトレンド判断によって,市場動向の精密なキャプチャとリスク管理を実現する.

戦略原則

戦略の核心には以下の重要なステップが含まれています.

  1. ATR指標を用いた動的ストップポイントの計算
  2. EMAと価格トレンドの方向を判断
  3. 価格とストップポイントの相対的な位置によって取引シグナルを決定する
  4. ヘイキン・アシ (Heikin Ashi) 図を用いた選択的最適化信号識別

計算の論理は以下の通りです.

  • ダイナミックストップポイント = 現在の価格 ± (ATR * センシティブ系数)
  • EMAとストップポイントの交差点によるトレンド判断
  • 価格がストップポイントを突破し,EMAが交差すると取引シグナルが生成されます.

戦略的優位性

  1. ダイナミックなリスク管理:ATRは,市場の波動に応じてリアルタイムで調整される,自律的なストップポイントの計算
  2. トレンド追跡の精度:EMAは価格変化に迅速に対応し,トレンドの転換点を捉える
  3. 柔軟性:ATR周期と感度係数をカスタマイズできます
  4. 選択可能なハイケンアヒマップで,信号認識をさらに最適化できます.
  5. 低頻度で取引し,取引コストを削減する
  6. 多市場 多品種に適応

戦略リスク

  1. 市場が揺れ動いていると 頻繁に誤った信号が出る可能性があります
  2. パラメータの不適切な設定は,過剰取引につながる可能性があります.
  3. 根本的な要因と突発的な出来事の影響は考慮されていない
  4. 測量と実体との違いはある

リスク管理の提案:

  • パーメータを最適化して,感受性を低下させる.
  • 他の指標と組み合わせる
  • ストップとポジション管理の設定
  • 継続的な監視と動的調整

戦略最適化の方向性

  1. 機械学習アルゴリズムの動的最適化パラメータを導入する
  2. 複数のタイムサイクルを 追加する
  3. 他の技術指標の組み合わせ
  4. 適応パラメータ選択メカニズムの開発
  5. リスク調整モジュールを追加

最適化目標:戦略の安定性向上,撤退の減少,収益性の向上

要約する

これはATRとEMAに基づいた動的なトレンド追跡戦略で,柔軟なストップ・スローメカニズムとトレンド判断により,比較的安定した市場参加を実現します.戦略は良好な適応性とリスク管理特性を有していますが,継続的な最適化と検証が必要です.

ストラテジーソースコード
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-02 00:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

//@version=6
strategy("ducanhmaster v1", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
a = input.int(1, title="Key Value. 'This changes the sensitivity'")
c = input.int(10, title="ATR Period")
h = input.bool(false, title="Signals from Heikin Ashi Candles")

xATR  = ta.atr(c)
nLoss = a * xATR

// Compute Heikin Ashi values
heikinAshiOpen = (open + close) / 2
heikinAshiClose = (open + high + low + close) / 4
heikinAshiHigh = math.max(high, math.max(heikinAshiOpen, heikinAshiClose))
heikinAshiLow = math.min(low, math.min(heikinAshiOpen, heikinAshiClose))

src = h ? heikinAshiClose : close

// Declare xATRTrailingStop as a float variable and initialize it with 'na'
var float xATRTrailingStop = na
if (src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0))
    xATRTrailingStop := math.max(nz(xATRTrailingStop[1]), src - nLoss)
else if (src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0))
    xATRTrailingStop := math.min(nz(xATRTrailingStop[1]), src + nLoss)
else
    xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss

// Declare 'pos' as an integer variable instead of leaving it undefined
var int pos = na
if (src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0))
    pos := 1
else if (src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0))
    pos := -1
else
    pos := nz(pos[1], 0)

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop
barsell = src < xATRTrailingStop

// Plot buy/sell signals on the chart
plotshape(buy, title="Buy", text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.white, size=size.tiny)
plotshape(sell, title="Sell", text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.white, size=size.tiny)

// Change bar color when buy/sell conditions are met
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)

// Enter a Long trade when a buy signal appears and exit when a sell signal appears
if (buy)
    strategy.entry("long", strategy.long)

if (sell)
    strategy.close("long")