
この戦略は、指数移動平均 (EMA) クロスオーバーと平均真の範囲 (ATR) を組み合わせた、動的なリスク管理を実現する取引システムです。この戦略では、短期および長期の EMA ラインを使用して価格トレンドの勢いの変化を捉え、ATR を使用して利益確定と損失ストップのポジションを動的に設定し、取引リスクを正確に制御します。
この戦略のコアロジックは、異なる期間(9 と 21)の 2 つの指数移動平均のクロスオーバー信号に基づいています。短期 EMA が長期 EMA を上向きに交差すると、ロング シグナルが生成されます。短期 EMA が長期 EMA を下向きに交差すると、ショート シグナルが生成されます。リスクをより適切に管理するために、この戦略では、14期間のATRに基づく動的なストッププロフィットとストップロスのメカニズムを導入しています。テイクプロフィットレベルはATRの2倍に設定され、ストップロスレベルはATRの1倍に設定されています。 ATR。この設定により、十分な利益スペースが確保され、時間内にリスクを制御できます。
この戦略は、古典的な EMA クロスオーバー システムと動的 ATR リスク管理を組み合わせることで、比較的完全な取引システムを実現します。この戦略の主な利点は、動的なリスク管理機能と優れたトレンド追従特性です。提案された最適化の方向性を通じて、戦略をさらに改善する余地がまだあります。リアルタイムで適用する場合は、十分なバックテストとパラメータの最適化を実施し、特定の市場特性に基づいて適切な調整を行うことをお勧めします。
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Improved EMA Crossover Strategy", overlay=true)
// User-defined inputs for EMAs
shortTermLength = input(9, title="Short-Term EMA Length")
longTermLength = input(21, title="Long-Term EMA Length")
// Dynamic Take Profit and Stop Loss
atrLength = input(14, title="ATR Length")
atrMultiplierTP = input(2.0, title="ATR Multiplier for Take Profit")
atrMultiplierSL = input(1.0, title="ATR Multiplier for Stop Loss")
// Calculate EMAs and ATR
shortTermEMA = ta.ema(close, shortTermLength)
longTermEMA = ta.ema(close, longTermLength)
atr = ta.atr(atrLength)
// Plot the EMAs
plot(shortTermEMA, color=color.blue, title="Short-Term EMA")
plot(longTermEMA, color=color.red, title="Long-Term EMA")
// Generate Entry Conditions
longCondition = ta.crossover(shortTermEMA, longTermEMA)
shortCondition = ta.crossunder(shortTermEMA, longTermEMA)
// Optional Debugging: Print conditions (you can remove this later)
var label longLabel = na
var label shortLabel = na
if longCondition
longLabel := label.new(bar_index, high, "Buy Signal", color=color.green, style=label.style_label_down, textcolor=color.white)
if shortCondition
shortLabel := label.new(bar_index, low, "Sell Signal", color=color.red, style=label.style_label_up, textcolor=color.white)
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", "Long", limit=close + atr * atrMultiplierTP, stop=close - atr * atrMultiplierSL)
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", "Short", limit=close - atr * atrMultiplierTP, stop=close + atr * atrMultiplierSL)