564 字
3 分钟
bt_06信号模式之RSI
参考文章:常用技术指标之一文读懂RSI指标:https://blog.csdn.net/richardzhutalk/article/details/125348446
公式代码(略)
信号策略研发
趋势(区间突破)
实例

交易思路:
RSI指标大于70,认为牛市信号,买入
RSI指标小于60,认为牛市结束,平多
RSI指标小于30,认为熊市,做空
RSI指标大于40,认为熊市结束,平空
抽象化和信号表达式
信号表达式:
open_signal= if(rsi> 70,1,if(ris<30,-1,0))exit_signal_long=rsi-60exit_signal_short=rsi-40bt代码
class RSI_101(bt.Indicator): lines = ('signal',)#k-d params = dict(period=10) plotinfo = dict(subplot=True)
def __init__(self): rsi = bt.talib.RSI(self.datas[0].close, timeperiod=self.p.period) self.lines.signal = bt.If(rsi>70,1,bt.If(rsi<30,-1,0))
class RSI_60(bt.Indicator): lines = ('signal',) params = dict(period=10) # plotinfo = dict(subplot=False)
def __init__(self): rsi = bt.talib.RSI(self.datas[0].close, timeperiod=self.p.period) self.lines.signal = rsi-60class RSI_40(bt.Indicator): lines = ('signal',) params = dict(period=10) # plotinfo = dict(subplot=False)
def __init__(self): rsi = bt.talib.RSI(self.datas[0].close, timeperiod=self.p.period) self.lines.signal = rsi - 40可视化和正确性验证
python ./signal_template.py --plot --market_type longshort --open_signal RSI_101 --exit_signal_long RSI_60 --exit_signal_short RSI_40 --fromdate 2022-01-10 --todate 2023-01-01
验证:
开仓点:开多时rsi>70,开空时rsi<30
平多:rsi死叉60
平空:rsi金叉40
成立,可见思路无问题
波动(区间震荡)
实例
交易思路:
RSI指标小于70(死叉70水平线),认为即将回调,开空
RSI指标小于60,认为回调结束,平空
RSI指标大于30(金叉30水平线),认为即将反转上涨,做多
RSI指标大于40,认为反转结束,平多
抽象化和信号表达式
信号表达式:
open_signal_tmp01= bt.min(crossover(rsi,70),0)# 将-1,0,1转为-1,0.也就是只保留死叉那部分信号(丢弃金叉信号)open_signal_tmp02= bt.max(crossover(rsi,30),0)# 将-1,0,1转为1,0.也就是只保留金叉那部分信号(丢弃死叉信号)open_signal=open_signal_tmp01+open_signal_tmp02exit_signal_long=rsi-60exit_signal_short=rsi-40bt代码
class RSI_inner101(bt.Indicator): lines = ('signal',) params = dict(period=10) plotinfo = dict(subplot=True)
def __init__(self): rsi = bt.talib.RSI(self.datas[0].close, timeperiod=self.p.period) open_signal_tmp01 = bt.Min(bt.ind.CrossOver(rsi, 70), 0) # 将-1,0,1转为-1,0.也就是只保留死叉那部分信号(丢弃金叉信号) open_signal_tmp02 = bt.Max(bt.ind.CrossOver(rsi, 30), 0) # 将-1,0,1转为1,0.也就是只保留金叉那部分信号(丢弃死叉信号) open_signal = open_signal_tmp01 + open_signal_tmp02 self.lines.signal = open_signal可视化和正确性验证
python ./signal_template.py --plot --market_type longshort --open_signal RSI_inner101 --exit_signal_long RSI_60 --exit_signal_short RSI_40 --fromdate 2022-01-10 --todate 2023-01-01 --stock_id 300760.XSHE
略
回测
趋势(区间突破)
多头模式
多空模式
波动(区间震荡)
多头模式
多空模式
总结
整体效果并不好,主要是rsi指标变化较快,容易急速突破导致假信号。
部分信息可能已经过时