资源加载中... loading...

季节范围均线RSI策略

Author: ChaoZhang, Date: 2023-10-27 16:04:21
Tags:

季节范围均线RSI策略

概述

本策略结合了移动平均线和相对强弱指数(RSI)这两种技术指标,实现了对季节性周期性特征的捕捉,由此产生交易信号。该策略优点在于可以非常清晰地识别出季节性行情,但同时也存在被错误信号误导的风险。通过调整参数设置可以进一步优化,提高策略效果。

策略原理

本策略首先计算一定周期n的移动平均线,以捕捉价格的中长期趋势方向。然后计算该移动平均线的RSI指标,以判断目前是否处于超买或超卖状态。RSI通过计算一定周期内涨幅与跌幅的比值,来判断目前的市场情绪。

当RSI上穿过下轨时产生买入信号,表示目前处于超卖状态,可以买入。当RSI下穿上轨时产生卖出信号,表示目前处于超买状态,可以卖出。此外,策略还设置了月份与日期的范围,只在指定月份和日期之间进行交易,以捕捉季节性特征。

策略优势

  • 利用移动平均线判断大趋势,RSI判断超买超卖现象,结合双重指标提高判断准确性
  • 设置月份日期范围,可有效识别季节行情特征,捕捉这样的交易机会
  • RSI参数设置灵活,可调整判断超买超卖的灵敏度
  • 可自定义移动平均线参数,调整对大趋势判定的敏感度

策略风险与解决方法

  • 存在被错误信号误导的风险。例如非季节性突发事件引发的趋势反转,可能导致不适当的交易信号。解决方法是调整月份日期范围,避开可能的事件风险。

  • 当趋势发生转折时,移动平均线和RSI指标之间可能出现背离,导致交易信号不一致。解决方法是适当调整移动平均线参数,缩短周期以更快捕捉趋势转折。

  • 预设的月份日期范围可能与实际季节行情出现的时间有偏差。解决方法是根据历史数据测试确定更准确的季节范围参数。

  • 交易信号可能出现假突破的情况。解决方法是设置更宽的区间范围,避免被小幅波动误导。

策略优化方向

  • 可以引入其他辅助指标,例如震荡股票指数(STOCH)等,设置更严格的过滤条件,减少错误信号。

  • 可以测试更多不同参数组合,寻找最优参数以提高策略效果。例如调整移动平均线周期,RSI的上下轨参数等。

  • 可以利用步进优化方法自动搜索参数空间,寻找最优参数组合。

  • 可以收集更多历史数据,利用机器学习方法训练和优化策略规则。

  • 可以考虑加入止损止盈策略,优化资金管理。

总结

本策略综合运用移动平均线和RSI指标,并加入季节因素判断,形成较为完整的趋势和超买超卖识别体系。策略优势在于可以清晰识别季节行情,把握这样的交易机会。存在一定被误导的风险,但可以通过参数调整、引入辅助指标、机器学习等方法进行优化,将策略效果提升到更高水平。总体来说,本策略提供了一个可靠、有效的季节交易框架,值得实盘测试和应用。


/*backtest
start: 2023-09-26 00:00:00
end: 2023-10-26 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = " RSI of MA Strategy ",shorttitle="MARSI Strategy",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,commission_type=strategy.commission.percent,commission_value=0.1,initial_capital=1)



lengthofma = input(15,minval=1,title="Length of MA")
len = input(14, minval=1, title="Length")
upperband = input(70,minval=1,title='Upper Band for RSI')
lowerband = input(30,minval=1,title="Lower Band for RSI")

src=sma(close,lengthofma)
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, color=purple)

band1 = hline(upperband)
band0 = hline(lowerband)
fill(band1, band0, color=purple, transp=90)



longCond =  crossover(rsi,lowerband)

shortCond =  crossunder(rsi,upperband)




monthfrom =input(1)
monthuntil =input(12)
dayfrom=input(1)
dayuntil=input(31)

if (  longCond ) 
    strategy.entry("LONG", strategy.long, stop=close, oca_name="TREND",  comment="LONG")
    
else
    strategy.cancel(id="LONG")
    



if ( shortCond ) 

    strategy.entry("SHORT", strategy.short,stop=close, oca_name="TREND",  comment="SHORT")
else
    strategy.cancel(id="SHORT")





更多内容