本策略结合Relative Strength Index(RSI)指标的极值以及Simple Moving Average(SMA)均线的过滤,实现了对趋势的跟踪。当RSI达到超买或超卖的极值时,结合SMA均线的方向判断做多做空方向。该策略适用于美股指数、欧洲指数、亚洲指数以及黄金白银等品种,通过简单的RSI与SMA判断规则,实现了对趋势的捕捉。
该策略通过RSI的超买超卖范围判断入场时机,再结合SMA的趋势过滤,实现了对趋势的有效捕捉。RSI的极值表明价格可能反转,而SMA的方向判断确保了交易方向与趋势一致。两者结合使用,既保证了交易合理,也提高了胜率。
相比单一使用RSI指标,该策略增加了SMA的趋势判断,避免盲目做多做空。相比单一使用SMA系统,该策略在SMA方向的基础上,利用RSI极值进场,提高了选时的效率。整体来说,该策略集两者优点于一体,是一种非常实用的趋势跟踪策略。
SMA均线产生死叉时,存在趋势反转的风险。解决方法是适当缩短SMA周期,增加对趋势变化的敏感性。
RSI出现背离时,存在错过交易机会的风险。解决方法是结合其他指标如MACD判断异动,防止背离。
震荡行情中,RSI和SMA均可能产生错误信号。解决方法是在震荡市检测到后,暂停策略交易。
参数设置不当可能导致过度交易或漏买漏卖。解决方法是优化参数,寻找最佳参数组合。
单一品种测试不足以评估策略效果,需要多品种回测验证。
回测不等于实盘,实盘中需控制好资金管理和风险管理。
优化RSI参数,寻找不同品种的最佳RSI周期参数。
优化SMA周期参数,集成多组SMA均线。
增加止损机制,提高风险控制能力。
增加其他指标判断,实现多因子验证。
结合波动率指标,改进入场节奏。
开发参数自适应系统,实现动态参数优化。
测试不同资金管理方式,找出最优资金管理。
根据不同市场条件创建交易策略集,实现策略集成。
该RSI极值与SMA过滤策略,集两者之长,通过简单的指标判断实现了趋势跟踪。策略思路清晰易懂,参数设置合理,可广泛适用于多种品种。相比单一RSI和SMA策略,该策略显著提高了选时效率和胜率。但策略也存在一定改进空间,可通过参数优化、止损机制等方法进一步增强策略的稳健性和适应性。总体来说,该策略为趋势交易者提供了一个非常实用和有效的交易工具。
/*backtest
start: 2022-10-23 00:00:00
end: 2023-10-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef
//@version=5
strategy('Relative Strength Index Extremes with 200-Day Moving Average Filte', overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.cash, default_qty_value=36000, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.01)
// Rsi
rsi_lenght = input.int(14, title='RSI lenght', minval=0)
rsi_up = ta.rma(math.max(ta.change(close), 0), rsi_lenght)
rsi_down = ta.rma(-math.min(ta.change(close), 0), rsi_lenght)
rsi_value = rsi_down == 0 ? 100 : rsi_up == 0 ? 0 : 100 - 100 / (1 + rsi_up / rsi_down)
//Sma
Length1 = input.int(200, title=' SMA Lenght', minval=1)
SMA1 = ta.sma(close, Length1)
//Strategy Logic
Long = rsi_value < 45 and close > SMA1
Long_exit = rsi_value > 75 and close > SMA1
Short = rsi_value > 65 and close < SMA1
Short_exit = rsi_value < 25 and close < SMA1
if Long
strategy.entry('Long', strategy.long)
if Short
strategy.entry('Short', strategy.short)
strategy.close_all(Long_exit or Short_exit)
pera(pcnt) =>
strategy.position_size != 0 ? math.round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
stoploss = input.float(title=' stop loss', defval=5, minval=0.5)
los = pera(stoploss)
strategy.exit('SL', loss=los)
//by wielkieef