该策略是一个结合了MACD动量指标和EMA均线的双向交易系统。它主要基于MACD指标的交叉信号和价格相对于EMA(200)的位置来判断入场时机。策略采用了2:1的风险收益比,可以在5分钟时间周期上运行,并且支持灵活的参数调整。
策略的核心逻辑基于以下几个关键条件: 1. 多头入场条件: - 价格位于EMA(200)之上 - MACD线从下方穿越信号线 - MACD值位于零线下方 2. 空头入场条件: - 价格位于EMA(200)之下 - MACD线从上方穿越信号线 - MACD值位于零线上方 3. 风险管理采用预设的止损和止盈比率,默认为1:2
这是一个设计合理的策略系统,通过结合技术指标提供了相对可靠的交易信号。虽然存在一些潜在风险,但通过合理的优化和风险管理,该策略具有良好的实战应用潜力。建议在实盘使用前进行充分的回测,并根据具体市场情况调整参数。
/*backtest
start: 2025-02-12 00:00:00
end: 2025-02-19 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © @DieBartDie
//@version=5
strategy("Strategy with MACD and EMA", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Editable parameters
ema_length = input.int(200, title="EMA Length")
tp_ratio = input.float(2.0, title="Take Profit Ratio (%)") // Take Profit ratio
sl_ratio = input.float(1.0, title="Stop Loss Ratio (%)") // Stop Loss ratio
// MACD configuration
fast_length = input.int(12, title="MACD Fast Length")
slow_length = input.int(26, title="MACD Slow Length")
signal_length = input.int(9, title="MACD Signal Length")
// Operation type configuration
operation_type = input.string("Long & Short", title="Operation Type", options=["Long", "Short", "Long & Short"])
// Indicators
ema_200 = ta.ema(close, ema_length)
[macd, signal, _] = ta.macd(close, fast_length, slow_length, signal_length)
// Conditions for LONG entries
price_above_ema = close > ema_200
macd_above_signal = ta.crossover(macd, signal) // MACD crosses above the signal line
macd_below_zero = macd < 0
long_condition = price_above_ema and macd_above_signal and macd_below_zero
// Conditions for SHORT entries
price_below_ema = close < ema_200
macd_below_signal = ta.crossunder(macd, signal) // MACD crosses below the signal line
macd_above_zero = macd > 0
short_condition = price_below_ema and macd_below_signal and macd_above_zero
// Calculate Stop Loss and Take Profit
stop_loss_long = close * (1 - sl_ratio / 100)
take_profit_long = close * (1 + tp_ratio / 100)
stop_loss_short = close * (1 + sl_ratio / 100)
take_profit_short = close * (1 - tp_ratio / 100)
// Execute LONG position if conditions are met
if (operation_type == "Long" or operation_type == "Long & Short") and long_condition
strategy.entry("Long", strategy.long)
strategy.exit("Take Profit/Stop Loss", "Long", stop=stop_loss_long, limit=take_profit_long)
// Execute SHORT position if conditions are met
if (operation_type == "Short" or operation_type == "Long & Short") and short_condition
strategy.entry("Short", strategy.short)
strategy.exit("Take Profit/Stop Loss", "Short", stop=stop_loss_short, limit=take_profit_short)
// Plot the EMA
plot(ema_200, color=color.orange, linewidth=2, title="EMA 200")