- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
主动量化选股策略(Python版)
该策略基于交易活跃度、长短期回报比、排名变化以及波动性变化,训练StockRanker模型,并选择排名前十的股票进行日频调仓。
策略介绍
交易活跃度:通常是指个股的成交量、成交金额等指标,可以反映市场投资者对该股票的关注度和交易意愿。
长短期回报比:衡量股票一段时间内的收益表现,可作为股票未来走势的预期指标。
排名变化:基于各类指标对股票进行排名,并观察排名的变化情况,这可以帮助我们捕捉到市场情绪的转变和个股的表现差异。
波动性变化:波动性常用于衡量股票价格变动的剧烈程度,可以在一定程度上反映市场的风险情况。
策略背景
股票市场中不同行情、不同时间段股票的表现不尽相同。基于不同因子的量化策略可以帮助投资者在不同的市场环境中寻找表现较好的股票,并通过定期调仓来优化持仓组合,从而提高投资收益并控制风险。运用MachineLearning技术如StockRanker,可以更加精准地评估和筛选股票。
该策略应属于主动量化选股策略,通过多因子模型结合机器学习技术,根据股票的短期表现进行频繁调仓。
持仓
市值大小:倾向选取活跃度高的股票(市值可能偏大,但也有小市值股票活跃度高)。
净利润增速:可能会选取盈利情况较好的股票,但重点在于短期表现,净利润增速不是决定性因素。
市盈率、市净率水平:不作为主要因子。
ROA或ROE表现:这些财务指标可能会作为模型的次要考量指标,但主要依赖短期波动性和交易情况。
策略风险
由于本策略频繁调仓,高度依赖市场短期表现,一旦市场整体波动较大或发生黑天鹅事件,策略表现可能会受到显著影响。
由于持仓集中在排名前十的股票,个别股票的负面事件(如业绩爆雷、重大诉讼等)可能会对策略的表现产生较大影响。
频繁调仓可能导致较高的交易成本(手续费及滑点),对收益有一定的侵蚀作用。
机器学习模型的有效性依赖于训练数据,如果历史数据不能很好地反映未来市场变化,模型的表现可能会不如预期。
策略优势
选股精度高:通过多因子分析并结合机器学习模型,可以更精准地评估和筛选表现较好的股票。
灵活应对市场变化:由于策略采用日频调仓,可以更及时地应对市场的波动与变化,优化持仓组合。
数据驱动决策:通过交易活跃度、回报比、排名变化及波动性变化,依据实时数据驱动决策,减少主观判断的偏差。
策略代码示例:
importpandasaspd
frombigmoduleimportM
#aistudiograph
#@param(id=m4,name=initialize)
#交易引擎:初始化函数,只执行一次
defm4_initialize_bigquant_run(context):
importmath
frommissionimportPerOrder
importnumpyasnp
#系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数
context.set_commission(PerOrder(buy_cost=0.0003,sell_cost=0.0013,min_cost=5))
#设置买入的股票数量,这里买入预测股票列表排名靠前的5只
stock_count=5
#每只的股票的权重,如下的权重分配会使得靠前的股票分配多一点的资金,[0.339160,0.213986,0.169580,..]
context.stock_weights=np.array([1/np.log(i+2)foriinrange(stock_count)])
context.stock_weights=context.stock_weights/np.sum(context.stock_weights)
#设置每只股票占用的最大资金比例
context.max_cash_per_instrument=0.2
context.options[hold_days]=5
#@param(id=m4,name=before_trading_start)
#交易引擎:每个单位时间开盘前调用一次。
defm4_before_trading_start_bigquant_run(context,data):
#盘前处理,订阅行情等
pass
#@param(id=m4,name=handle_tick)
#交易引擎:tick数据处理函数,每个tick执行一次
defm4_handle_tick_bigquant_run(context,tick):
pass
#@param(i
文档评论(0)