The resource loading... loading...

Dual EMA Indicator Smart Crossing Trading System with Dynamic Stop-Loss and Take-Profit Strategy

Author: ChaoZhang, Date: 2024-11-29 16:33:21
Tags: EMAMACDSMARSICCIATR

img

Overview

This strategy is an intelligent trading system based on dual moving average crossovers, utilizing 9-period and 21-period Exponential Moving Averages (EMA) as core indicators. The strategy incorporates a dynamic stop-loss and take-profit mechanism, automatically executing trading orders by monitoring EMA crossover signals in real-time. The system employs percentage-based trailing stops and fixed-ratio take-profit levels, ensuring both trading safety and profit potential.

Strategy Principles

The core logic operates on the crossover relationship between the fast EMA (9-period) and slow EMA (21-period). When the fast line crosses above the slow line, the system recognizes a bullish signal, automatically closes any short positions and opens long positions. When the fast line crosses below the slow line, the system identifies a bearish signal, closes any long positions and opens short positions. Additionally, the system implements dynamic stop-loss and take-profit mechanisms: for long positions, the stop-loss is set 5% below the entry price and take-profit 10% above; for short positions, the stop-loss is set 5% above the entry price and take-profit 10% below.

Strategy Advantages

  1. Scientific indicator selection: EMA responds more sensitively to market changes, effectively capturing market trends
  2. Comprehensive stop-loss and take-profit mechanism: Percentage-based settings allow flexible adjustment to different market conditions
  3. High degree of automation: Fully automated from signal detection to trade execution, minimizing human intervention
  4. Effective risk control: Clear stop-loss and take-profit levels for each trade
  5. Clear code structure: Standardized variable naming and logical hierarchy, facilitating maintenance and optimization

Strategy Risks

  1. Sideways market risk: Frequent crossover signals may occur in ranging markets, leading to excessive trading
  2. Slippage risk: Potential discrepancies between theoretical and actual execution prices during high volatility
  3. Money management risk: Fixed-ratio position sizing may lack flexibility in certain market conditions
  4. Systemic risk: Stop-loss or take-profit orders may not execute timely in extreme market conditions

Optimization Directions

  1. Implement trend filters: Add ADX or ATR indicators to assess trend strength and avoid frequent trading in ranging markets
  2. Optimize stop-loss and take-profit mechanisms: Consider using ATR for dynamic adjustment of stop-loss and take-profit distances
  3. Add time filters: Implement specific trading time restrictions to avoid highly volatile periods
  4. Improve position sizing: Dynamically adjust position sizes based on market volatility
  5. Add market sentiment indicators: Incorporate RSI or MACD for trade confirmation

Summary

This strategy represents a complete and logically sound automated trading system. Through EMA crossover signals combined with dynamic stop-loss and take-profit mechanisms, it can perform well in trending markets. However, users need to monitor market conditions, adjust parameters accordingly, and maintain proper risk control. Through continuous optimization and refinement, this strategy has the potential to become a stable and reliable trading tool.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Cross Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// 添加策略参数设置
var showLabels = input.bool(true, "显示标签")
var stopLossPercent = input.float(5.0, "止损百分比", minval=0.1, maxval=20.0, step=0.1)
var takeProfitPercent = input.float(10.0, "止盈百分比", minval=0.1, maxval=50.0, step=0.1)

// 计算EMA
ema9 = ta.ema(close, 9)
ema21 = ta.ema(close, 21)

// 绘制EMA线
plot(ema9, "EMA9", color=color.blue, linewidth=2)
plot(ema21, "EMA21", color=color.red, linewidth=2)

// 检测交叉
crossOver = ta.crossover(ema9, ema21)  
crossUnder = ta.crossunder(ema9, ema21)

// 格式化时间显示 (UTC+8)
utc8Time = time + 8 * 60 * 60 * 1000
timeStr = str.format("{0,date,MM-dd HH:mm}", utc8Time)

// 计算止损止盈价格
longStopLoss = strategy.position_avg_price * (1 - stopLossPercent / 100)
longTakeProfit = strategy.position_avg_price * (1 + takeProfitPercent / 100)
shortStopLoss = strategy.position_avg_price * (1 + stopLossPercent / 100)
shortTakeProfit = strategy.position_avg_price * (1 - takeProfitPercent / 100)

// 交易逻辑
if crossOver
    if strategy.position_size < 0  // 如果持有空仓
        strategy.close("做空")     // 先平掉空仓
    strategy.entry("做多", strategy.long)  // 开多仓
    if showLabels
        label.new(bar_index, high, text="做多入场\n" + timeStr, color=color.green, textcolor=color.white, style=label.style_label_down, yloc=yloc.abovebar)

if crossUnder
    if strategy.position_size > 0  // 如果持有多仓
        strategy.close("做多")     // 先平掉多仓
    strategy.entry("做空", strategy.short)  // 开空仓
    if showLabels
        label.new(bar_index, low, text="做空入场\n" + timeStr, color=color.red, textcolor=color.white, style=label.style_label_up, yloc=yloc.belowbar)

// 设置止损止盈
if strategy.position_size > 0  // 多仓止损止盈
    strategy.exit("多仓止损止盈", "做多", stop=longStopLoss, limit=longTakeProfit)
    
if strategy.position_size < 0  // 空仓止损止盈
    strategy.exit("空仓止损止盈", "做空", stop=shortStopLoss, limit=shortTakeProfit) 

Related

More