ATR ストップ・ロスのEMA戦略

作者: リン・ハーンチャオチャン開催日:2023年12月11日16時09分
タグ:

img

概要

この戦略は,EMAの黄金十字を使用し,取引信号を生成する.つまり,高速EMA線がスローEMA線の上を横切ったときに購入信号が生成され,高速EMA線がスローEMA線下を横切ったときに販売信号が生成される.これは典型的なトレンドフォロー戦略に属している.同時に,戦略はATR指標を使用して,利益を保証しながらリスクを制御するためにダイナミックストップロスを設定する.

戦略原則

  1. 急速EMA期間を13で,ゆっくりEMA期間を48で定義する.
  2. 速いEMA線がスローEMA線を横切ると買い信号が生成され,速いEMA線がスローEMA線を下回ると売り信号が生成されます.
  3. 移動平均値の黄金十字と死十字を決定するために,ta.crossoverとta.crossunder関数を使用します.
  4. ATR インディケーターを使用して,ダイナミックストップ・ロスを計算します.ストップ・ロスは ATR の1.5倍の距離です.
  5. 色の変化,買い/売るマーク,ストップ・ロスの線を通して,取引信号とストップ・ロスのレベルを直感的に表示します.

利点分析

  1. 信号はEMAの黄金十字と死十字に基づいて生成され,主要な市場動向を見逃すことは避けられ,収益は相当である.
  2. ATRのストップロスは,引き下げを制御しながら,適切なトレンドに沿った利益を確保し,バランスのとれたリスク・リターン比を達成します.
  3. 直感的な信号表示とストップ損失表示,操作が簡単で,ほとんどの人に適しています.
  4. 調整可能なパラメータは少ない 把握し最適化が簡単です

リスク分析

  1. フラッシュ・クラッシュがストップ・ロストを誘発する
  2. 変動市場では頻繁に無効な信号が発生する可能性があります.
  3. パラメータの設定が正しくない場合,過剰に攻撃的なエントリーまたは緩やかなストップ損失が発生する可能性があります.
  4. EMA パラメータとATR パラメータは適切に最適化する必要があります

解決策:

  1. ATR マルチプリキュアを適度に緩め 最近の高値から バッファーを残します
  2. シグナルが発生した後に確認メカニズム,例えば価格が前回の高値を突破するなどを検討します.
  3. パラメータの最適化には,様々な市場条件を考慮する必要があります.

オプティマイゼーションの方向性

  1. 最適なパラメータを見つけるために 異なるパラメータの組み合わせをテストします
  2. 信号の質を向上させるために,音量,波動性等などの信号フィルタリングのための他の指標を追加することを検討する.
  3. EMA パラメータを主要な動向に合わせて調整し,主要な動向をより正確に把握する.
  4. トレンド市場中にストップ範囲を拡大するために,ATRストップ損失倍数を動的に調整することを検討します.
  5. 適応性パラメータ最適化のための機械学習アルゴリズムを組み込む.

結論

この戦略は比較的シンプルで使いやすい. EMAクロスオーバーに基づいてシグナルを生成し,トレンドをフォローし,リスクを効果的に制御するためにATRトレーリングストップロスを使用する.いくつかの誤ったシグナルがあるかもしれないが,主要なトレンドを把握する強力な能力があり,リターンは比較的安定している.基本的な定量的な取引戦略として適している.パラメータ最適化と機能拡張を通じて改善の可能性も大きい.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © byee322

/// This strategy uses the EMA to generate buy and sell signals with a 1.5x ATR stop loss
//@version=5
strategy("EMA Strategy with ATR Stop Loss", overlay=true)

// Define the EMA lengths as input parameters
emaLength1 = input(13, "EMA Length 1")
emaLength2 = input(48, "EMA Length 2")

// Define the moving averages
ema1 = ta.ema(close, emaLength1)
ema2 = ta.ema(close, emaLength2)

// Buy signal: EMA 1 crosses above EMA 2
buy = ta.crossover(ema1, ema2)

// Sell signal: EMA 1 crosses below EMA 2
sell = ta.crossunder(ema1, ema2)

// Define the state variable
state = 0
state := buy ? 1 : sell ? -1 : nz(state[1])

// Change the color of the candles
color = state == 1 ? color.green : state == -1 ? color.red : na

// Plot the colored candles
plotcandle(open, high, low, close, color=color)

// Plot the signals on the chart with text labels
plotshape(buy, style=shape.triangleup, color=color.new(color.green, 50), location=location.belowbar, text="Buy")
plotshape(sell, style=shape.triangledown, color=color.new(color.red, 50), location=location.abovebar, text="Sell")

// Calculate the ATR
atrVal = ta.atr(14)

// Calculate the stop loss level for buy
stopLossBuy = buy ? close[1] - 1.5 * atrVal : na

// Calculate the stop loss level for sell
stopLossSell = sell ? close[1] + 1.5 * atrVal : na

// Plot the stop loss level for buy
plot(stopLossBuy,  color=color.new(color.green, 50), linewidth=3)

// Plot the stop loss level for sell
plot(stopLossSell, color=color.new(color.red, 50), linewidth=3)

if buy
    strategy.entry("Enter Long", strategy.long)
else if sell
    strategy.entry("Enter Short", strategy.short)

もっと