该策略是一个结合了多个技术指标的交易系统,主要基于EMA均线交叉、RSI超卖和MACD金叉三重信号确认来开仓,通过动态限价单入场和多重退出机制来管理风险。策略采用9周期和21周期的指数移动平均线(EMA)作为主要趋势指标,结合相对强弱指数(RSI)和移动平均线趋同背离指标(MACD)来过滤交易信号,通过设定限价单距离和固定止盈止损点数来控制风险。
策略的核心交易逻辑包括以下几个关键部分: 1. 入场信号基于9周期EMA上穿21周期EMA时触发 2. 入场价格设置在9周期EMA下方指定点数的限价单 3. 交易确认需同时满足RSI低于设定阈值和MACD金叉 4. 出场信号包括MACD死叉、固定止盈止损点数和收盘强制平仓 5. 交易时间限制在早上9:30后到下午3:10前
策略采用限价单入场的方式,可以在更好的价格位置建仓,通过多重技术指标的配合来提高交易的准确性。
这是一个结构完整、逻辑清晰的多指标交易策略,通过均线系统识别趋势,RSI和MACD过滤信号,限价单和多重止损机制控制风险。策略的优势在于信号可靠性高、风险控制完善,但也存在信号滞后和参数优化等问题。通过引入动态参数调整和增加辅助指标,策略还有较大的优化空间。适合稳健型投资者在趋势明确的市场环境中使用。
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SMA 9 & 21 with RSI and MACD Buy Strategy", overlay=true)
// Inputs for Simple Moving Averages
sma_short = ta.ema(close, 9)
sma_long = ta.ema(close, 21)
// Plotting SMA
plot(sma_short, color=color.green, title="SMA 9")
plot(sma_long, color=color.red, title="SMA 21")
// RSI Calculation
rsi_length = input.int(14, title="RSI Length")
rsi_threshold = input.int(70, title="RSI Threshold")
rsi = ta.rsi(close, rsi_length)
// MACD Calculation
macd_fast = input.int(8, title="MACD Fast Length")
macd_slow = input.int(18, title="MACD Slow Length")
macd_signal = input.int(6, title="MACD Signal Length")
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)
// Inputs for Limit Order Offset
limit_offset = input.int(50, title="Limit Order Offset", minval=1) // 50 points below 9 EMA
// User input for specific date
simulationStartDate = input(timestamp("2024-12-01 00:00"), title="Simulation Start Date", group = "Simulation Dates")
simulationEndDate = input(timestamp("2024-12-30 00:00"), title="Simulation End Date", group = "Simulation Dates")
// Declare limit_price as float
var float limit_price = na
// Calculate Limit Order Price
if (sma_short[1] < sma_long[1] and sma_short > sma_long) // 9 EMA crosses above 21 EMA
limit_price := sma_short - limit_offset
// Buy Signal Condition (only on the specified date)
buy_condition = not na(limit_price) and rsi < rsi_threshold and ta.crossover(macd_line, signal_line)
// Sell Signal Condition (MACD crossover down)
sell_condition = ta.crossunder(macd_line, signal_line)
// Track Entry Price for Point-Based Exit
var float entry_price = na
if (buy_condition )
strategy.order("Buy", strategy.long, comment="Limit Order at 9 EMA - Offset", limit=limit_price)
label.new(bar_index, limit_price, "Limit Buy", style=label.style_label_up, color=color.green, textcolor=color.white)
entry_price := limit_price // Set entry price
// Exit Conditions
exit_by_macd = sell_condition
exit_by_points = not na(entry_price) and ((close >= entry_price + 12) or (close <= entry_price - 12)) // Adjust as per exit points
// Exit all positions at the end of the day
if hour == 15 and minute > 10 and strategy.position_size > 0
strategy.close_all() // Close all positions at the end of the day
strategy.cancel_all()
// Exit based on sell signal or point movement
if (exit_by_macd or exit_by_points and strategy.position_size > 0 )
strategy.close("Buy")
label.new(bar_index, close, "Close", style=label.style_label_down, color=color.red, textcolor=color.white)