量化交易:财务选股RSRS择时的策略

news/2024/9/22 3:56:40

哈喽,大家好,我是木头左!

引言

本文将介绍一种结合财务指标选股和RSRS(Risk-Adjusted Return to Strength Ratio)择时的策略,旨在帮助投资者在复杂的市场环境中做出更明智的决策。 感兴趣的朋友,可以在下方公号内回复:001,即可获取源码,共同交流!

策略原理

财务指标选股

财务指标选股是一种基于公司财务报表数据来评估股票价值的方法。常见的财务指标包括市盈率(PE)、市净率(PB)、净资产收益率(ROE)等。这些指标可以帮助投资者判断公司的盈利能力、资产状况和成长潜力。在本策略中,使用市净率(PB)和净资产收益率(ROE)作为选股的主要依据。

RSRS择时

RSRS择时是一种基于历史价格数据的技术分析方法,用于评估市场的风险和收益。RSRS通过计算价格序列的回归斜率来衡量市场趋势的强度。当斜率大于买入阈值时,认为市场风险在合理范围内,可以进行买入操作;当斜率小于卖出阈值时,认为市场风险过大,应保持空仓状态。

在聚宽平台运行Python代码

初始化函数

在聚宽平台上,首先需要导入所需的函数库,并在initialize函数中设置策略的基本参数,如股票交易的手续费、基准指数等。

def initialize(context):set_option('use_real_price', True)set_parameter(context)set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')run_daily(before_market_open, time='before_open', reference_security='000300.XSHG')run_daily(market_open, time='open', reference_security='000300.XSHG')

参数设置

set_parameter函数中,设置了RSRS指标中N和M的值,以及买入和卖出的阈值。此外,还计算了2005年1月5日至回测开始日期的RSRS斜率指标。

def set_parameter(context):g.N = 18g.M = 1100g.init = Trueg.stock_num = 10g.security = '000300.XSHG'set_benchmark(g.security)g.days = 0g.buy = 0.7g.sell = -0.7# ... 省略部分代码 ...

开盘前和开盘时运行函数

before_market_openmarket_open函数中,根据RSRS指标的计算结果来决定是否进行交易。如果RSRS指标大于买入阈值,则调用trade_func函数进行交易;如果小于卖出阈值且持有股票,则卖出所有股票。

security = g.security# 填入各个日期的RSRS斜率值beta=0r2=0if g.init:g.init = Falseelse:#RSRS斜率指标定义prices = attribute_history(security, g.N, '1d', ['high', 'low'])highs = prices.highlows = prices.lowX = sm.add_constant(lows)model = sm.OLS(highs, X)beta = model.fit().params[1]g.ans.append(beta)#计算r2r2=model.fit().rsquaredg.ans_rightdev.append(r2)# 计算标准化的RSRS指标# 计算均值序列    section = g.ans[-g.M:]# 计算均值序列mu = np.mean(section)# 计算标准化RSRS指标序列sigma = np.std(section)zscore = (section[-1]-mu)/sigma  #计算右偏RSRS标准分zscore_rightdev= zscore*beta*r2# 如果上一时间点的RSRS斜率大于买入阈值, 则全仓买入if zscore_rightdev > g.buy:# 记录这次买入log.info("市场风险在合理范围")#满足条件运行交易trade_func(context)# 如果上一时间点的RSRS斜率小于卖出阈值, 则空仓卖出elif (zscore_rightdev < g.sell) and (len(list(context.portfolio.positions.keys())) > 0):# 记录这次卖出log.info("市场风险过大,保持空仓状态")# 卖出所有股票,使这只股票的最终持有量为0for s in list(context.portfolio.positions.keys()):order_target(s, 0)

策略选股买卖部分

trade_func函数中,首先获取股票池,然后根据市净率(PB)和净资产收益率(ROE)进行筛选和打分,最后根据得分选取前10只股票进行买入或卖出操作。

def trade_func(context):#获取股票池df = get_fundamentals(query(valuation.code,valuation.pb_ratio,indicator.roe))#进行pb,roe大于0筛选df = df[(df['roe']>0) & (df['pb_ratio']>0)].sort('pb_ratio')#以股票名词作为indexdf.index = df['code'].values#取roe倒数df['1/roe'] = 1/df['roe']#获取综合得分df['point'] = df[['pb_ratio','1/roe']].rank().T.apply(f_sum)#按得分进行排序,取指定数量的股票df = df.sort('point')[:g.stock_num]pool = df.indexlog.info('总共选出%s只股票'%len(pool))#得到每只股票应该分配的资金cash = context.portfolio.total_value/len(pool)#获取已经持仓列表hold_stock = list(context.portfolio.positions.keys()) #卖出不在持仓中的股票for s in hold_stock:if s not in pool:order_target(s,0)#买入股票for s in pool:order_target_value(s,cash)

回测效果

通过在聚宽平台上运行上述策略,得到了以下回测效果:

从回测结果可以看出,该策略收益实在不怎么样,后续反向优化。

策略的缺点

  • 适用性 :在高波动性或快速变化的市场中,RSRS策略可能难以适应,导致投资组合表现不佳。
  • 交易成本 :为了降低交易成本,应合理控制交易频率,或者通过设置较长的交易周期或采用定期再平衡的方式来减少交易次数。
    市场有风险,交易需谨慎。感兴趣的朋友,可以在下方公号内回复:001,即可获取源码,共同交流!

我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/31532.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

流畅的python--第三章

字典 示例3-1-1字典推导式示例3-1-2映射拆包 在调用函数时,不止一个参数可以使用**。但是所有键都要是字符串,而且在所有参数中,是唯一的(因为关键字参数不可重复)。示例3-1-3使用|合并映射 合并映射遵循重复键情况下后键覆盖前键的规律。可哈希 如果一个对象的哈希码在整…

CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!

CodeGeeX是支持适配Visual Studio 2019的唯一一款国产智能辅助编程工具,已经在Visual Studio趋势上霸榜2周! CodeGeeX v1.0.4版本上线Visual Studio插件市场,带来了多项新功能和性能优化,提升编程体验。 新功能亮点速览: 一、侧边栏工具箱功能 v1.0.4版本中,CodeGeeX新增…

俄罗斯方块

原题链接 题解从小正方形到大正方形,有四个变化方向,分别是左上、右上、右下、左上。 分类讨论模拟即可 code #include<bits/stdc++.h> using namespace std; int main() {int n,x,y;cin>>n>>x>>y;puts("Yes");int flag=1;if(x==1){if(y==…

shell循环

echoecho -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符\r 光标移至行首,并且不换行\s 当前shell的名称,如bash\t 插入Tab键,制表符\n 输出换行\f 换行,但光标仍停留在原处\ 表示插入"\"本身转义\b 表示退格 不显示前一个字符\c 抑制更多的输出或不…

BiTCN:基于卷积网络的多元时间序列预测

前言 本文将详细介绍了BiTCN,这是2023年3月在《Parameter-efficient deep probabilistic forecasting》一文中提出的模型。通过利用两个时间卷积网络(TCN),该模型可以编码过去和未来的协变量,同时保持计算效率。 作者:Marco Peixeiro 本文转载自Deephub Imba 仅用于学术分享…

LSTM卷土重来!xLSTM:一举超越Mamba、Transformer!

前言 LSTM:这次重生,我要夺回 Transformer 拿走的一切。 本文转载自新智元 仅用于学术分享,若侵权请联系删除 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。 CV方向的准研究生们,未来三年如何度过? 招聘高光谱图像、语…

有奖调研 | OpenSCA开源社区用户调研问卷

为了更好地满足用户的需求,提升OpenSCA的实用性和易用性并促进社区的发展,我们决定发起一项用户调研活动,诚挚邀请您的参与。调研背景: 亲爱的OpenSCA开源社区用户,感谢您一路以来的支持与相伴。随着OpenSCA开源社区的不断发展,我们持续专注安全开发与开源治理实践,为全…