【新一配】量化大师系列之价值投资选股策略

国外证券市场比较悠久,曾出现过本杰明·格雷厄姆、彼得·林奇、詹姆斯·奥肖内西、查尔斯·布兰德斯等多位投资大师,这些投资大师有一个共同点,他们在证券市场上保持了常年的稳定持续盈利,他们的投资法则及选股标准在一些著作中有详细的描述。值得欣慰的是,申万宏源证券研究所发布了<申万宏源-申万大师系列价值投资篇> 296系列第一季共20篇研究报告。学习这些报告主要有两个目的:

一是我们自身想去认真的学习经典,复制这些策略本身就是自我学习过程,我们深信向这些被市场证明长期优秀,被后世尊为经典的投资大师学习,必然值得,必有所得;

二是复制和验证大师策略的过程, 会自然的驱使我们更多的从投资逻辑和投资思维上思考收益之源,而不再是不停的数据挖掘和数理分析。大师系列的尝试,于我们是一个求道,而非求术的旅程。

本贴主要是帮助用户怎样开发大师系列的策略,让大家更了解我们的平台,同时帮助大家在我们的平台上开发更丰富的策略。因此我们介绍一种简单的价值投资法来选取股票,规则如下:

策略逻辑:当股票处于价值洼地时,具备投资价值

策略内容:每月月初买入市盈率小于15倍、市净率小于1.5倍的30只股票,持有至下个月月初再调仓

资金管理:等权重买入

风险控制:无单只股票仓位上限控制、无止盈止损
我们测试了15年到19年4月这长达约4年半的时间,发现策略盈利比较稳健,收益曲线如下


整体来看,该策略是正收益系统策略,长期坚持该策略收益是不错的,除了18年量化小年没有盈利,其他年份都是盈利的,即使跨越了股灾和熔断期间,最大回撤也是在17.5%以内,风险可控。

是不是发现我们平台很方便开发策略?之前朋友问我,为什么Python运行速度不是最快但会成为量化的主流语言。其实对于量化研究人员来说,虽然速度是一方面考虑,但更多的是为了验证策略思想,Python语言的优势就是在此,有一个思想就可以很快的将思想验证,然而C++虽然速度快,但要验证一个简单的思想却要编写大量的代码。好比为什么飞机速度快,但市里面上班开汽车就足够了(不考虑其他因素),因为汽车足够灵活。所以,还在犹豫选择什么语言从事量化投资的小伙伴们,Python就是你比较好的选择。本文到此就要结束了,策略的完整代码分享在文末,小伙伴们赶紧 克隆策略吧!

1

# 本代码由可视化策略环境自动生成 2019年4月24日 10:55
# 本代码单元只能在可视化模式下编辑。您也可以拷贝代码,粘贴到新建的代码单元或者策略,然后修改。# 回测引擎:每日数据处理函数,每天执行一次
def m2_handle_data_bigquant_run(context, data):# 按每个K线递增context.extension['index']  += 1# 每隔22个交易日进行换仓if context.extension['index'] % context.rebalance_days != 0:return # 日期date = data.current_dt.strftime('%Y-%m-%d')print('debug:', date)# 买入股票列表stock_to_buy = context.indicator_data.ix[date]['instrument'][:context.stock_num]# 目前持仓列表    stock_hold_now = [equity.symbol for equity in context.portfolio.positions]# 继续持有股票列表no_need_to_sell = [i for i in stock_hold_now  if i in stock_to_buy]# 卖出股票列表 stock_to_sell = [i for i in stock_hold_now if i not in no_need_to_sell]# 执行卖出for stock in stock_to_sell:if data.can_trade(context.symbol(stock)):context.order_target_percent(context.symbol(stock), 0)# 如果当天没有买入就返回if len(stock_to_buy) == 0:return# 等权重weight = 1 / len(stock_to_buy)# 执行买入for  cp in stock_to_buy:if data.can_trade(context.symbol(cp)):context.order_target_percent(context.symbol(cp), weight)
# 回测引擎:准备数据,只执行一次
def m2_prepare_bigquant_run(context):pass# 回测引擎:初始化函数,只执行一次
def m2_initialize_bigquant_run(context):# 加载股票指标数据,数据继承自m4模块context.indicator_data = context.options['data'].read_df().set_index('date')print('indicator_data:', context.indicator_data.head()) # 设置交易费用,买入是万三,卖出是千分之1.3,如果不足5元按5元算context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))# 设置股票数量context.stock_num = 30# 调仓天数,22个交易日大概就是一个月。可以理解为一个月换仓一次context.rebalance_days = 22# 如果策略运行中,需要将数据进行保存,可以借用extension这个对象,类型为dict# 比如当前运行的k线的索引,比如个股持仓天数、买入均价if 'index' not in context.extension:context.extension['index'] = 0# 回测引擎:每个单位时间开始前调用一次,即每日开盘前调用一次。
def m2_before_trading_start_bigquant_run(context, data):passm3 = M.instruments.v2(start_date='2015-01-01',end_date='2019-04-23',market='CN_STOCK_A',instrument_list=''
)m5 = M.input_features.v1(features="""pb_lf_0
pe_ttm_0
amount_0"""
)m1 = M.general_feature_extractor.v7(instruments=m3.data,features=m5.data,start_date='',end_date='',before_start_days=90
)m6 = M.sort.v4(input_ds=m1.data,sort_by='pe_ttm_0,pb_lf_0',group_by='date',keep_columns='--',ascending=True
)m4 = M.filter.v3(input_data=m6.data_1,expr='pb_lf_0 < 1.5 & pe_ttm_0 < 15 & amount_0 > 0 & pb_lf_0 > 0 & pe_ttm_0 > 0',output_left_data=False
)m2 = M.trade.v4(instruments=m3.data,options_data=m4.data,start_date='',end_date='',handle_data=m2_handle_data_bigquant_run,prepare=m2_prepare_bigquant_run,initialize=m2_initialize_bigquant_run,before_trading_start=m2_before_trading_start_bigquant_run,volume_limit=0.025,order_price_field_buy='open',order_price_field_sell='open',capital_base=1000000,auto_cancel_non_tradable_orders=True,data_frequency='daily',price_type='后复权',product_type='股票',plot_charts=True,backtest_only=False,benchmark=''
)
2019-04-24 10:48:39.980907 INFO: bigquant: instruments.v2 开始运行.
2019-04-24 10:48:40.032075 INFO: bigquant: 命中缓
2019-04-24 10:48:40.034596 INFO: bigquant: instruments.v2 运行完成[0.053681s]
2019-04-24 10:48:40.038380 INFO: bigquant: input_features.v1 开始运行.
2019-04-24 10:48:40.114036 INFO: bigquant: 命中缓
2019-04-24 10:48:40.116472 INFO: bigquant: input_features.v1 运行完成[0.078071s]
2019-04-24 10:48:40.195208 INFO: bigquant: general_feature_extractor.v7 开始运行.
2019-04-24 10:48:40.270501 INFO: bigquant: 命中缓
2019-04-24 10:48:40.272913 INFO: bigquant: general_feature_extractor.v7 运行完成[0.077735s]
2019-04-24 10:48:40.277276 INFO: bigquant: sort.v4 开始运行.
2019-04-24 10:48:40.422079 INFO: bigquant: 命中缓
2019-04-24 10:48:40.424661 INFO: bigquant: sort.v4 运行完成[0.147373s]
2019-04-24 10:48:40.428316 INFO: bigquant: filter.v3 开始运行.
2019-04-24 10:48:40.464827 INFO: bigquant: 命中缓
2019-04-24 10:48:40.466871 INFO: bigquant: filter.v3 运行完成[0.038552s]
2019-04-24 10:48:40.533492 INFO: bigquant: backtest.v8 开始运行.
2019-04-24 10:48:40.537144 INFO: bigquant: biglearning backtest:V8.1.1
2019-04-24 10:48:40.539476 INFO: bigquant: product_type:stock by specifie
2019-04-24 10:49:03.114530 INFO: bigquant: 读取股票行情完成:391167
2019-04-24 10:49:52.601845 INFO: algo: TradingAlgorithm V1.4.1
2019-04-24 10:50:10.507090 INFO: algo: trading transform..
2019-04-24 10:50:43.460786 INFO: Performance: Simulated 1049 trading days out of 1049
2019-04-24 10:50:43.462706 INFO: Performance: first open: 2015-01-05 09:30:00+00:0
2019-04-24 10:50:43.464406 INFO: Performance: last close: 2019-04-23 15:00:00+00:0
2019-04-24 10:50:49.709015 INFO: bigquant: backtest.v8 运行完成[129.17551s]
indicator_data:                 amount_0  instrument   pb_lf_0  pe_ttm_0
date
2014-10-08  1.398725e+09  600000.SHA  0.840770  4.153471
2014-10-08  1.115449e+09  601166.SHA  0.893689  4.368097
2014-10-08  5.460992e+08  601668.SHA  0.822129  4.405653
2014-10-08  3.438451e+08  600015.SHA  0.831473  4.506142
2014-10-08  1.714654e+08  601988.SHA  0.778156  4.529399
debug: 2015-02-03
debug: 2015-03-12
debug: 2015-04-14
debug: 2015-05-15
debug: 2015-06-16
debug: 2015-07-17
debug: 2015-08-18
debug: 2015-09-21
debug: 2015-10-28
debug: 2015-11-27
debug: 2015-12-29
debug: 2016-01-29
debug: 2016-03-08
debug: 2016-04-08
debug: 2016-05-11
debug: 2016-06-14
debug: 2016-07-14
debug: 2016-08-15
debug: 2016-09-14
debug: 2016-10-25
debug: 2016-11-24
debug: 2016-12-26
debug: 2017-01-26
debug: 2017-03-06
debug: 2017-04-07
debug: 2017-05-10
debug: 2017-06-13
debug: 2017-07-13
debug: 2017-08-14
debug: 2017-09-13
debug: 2017-10-20
debug: 2017-11-21
debug: 2017-12-21
debug: 2018-01-23
debug: 2018-03-01
debug: 2018-04-02
debug: 2018-05-08
debug: 2018-06-07
debug: 2018-07-10
debug: 2018-08-09
debug: 2018-09-10
debug: 2018-10-18
debug: 2018-11-19
debug: 2018-12-19
debug: 2019-01-22
debug: 2019-02-28
debug: 2019-04-01


1
1

【新一配】量化大师系列之价值投资选股策略相关推荐

  1. 大师系列之价值投资选股策略

    国外证券市场比较悠久,曾出现过本杰明·格雷厄姆.彼得·林奇.詹姆斯·奥肖内西.查尔斯·布兰德斯等多位投资大师,这些投资大师有一个共同点,他们在证券市场上保持了常年的稳定持续盈利,他们的投资法则及选股标 ...

  2. 区块链量化投资系列课程(4) - 动态平衡策略

    阅读原文:区块链量化投资系列课程(4) - 动态平衡策略 前言 沃伦 · 巴菲特的导师本杰明 · 格雷厄姆曾经在<聪明的投资者>一书中,曾经提到过一种股票债券动态平衡的交易模式. 这种交易 ...

  3. Python量化投资初探:自动化选股策略

    最近股市可谓是冰火两重天,赛道股一路高歌,激流勇进,传统大白马却跌跌不休,淹没了不少韭菜. 热门赛道不断切换,小匠也是看得眼花缭乱,大A四千多家上市公司,很多之前听都没听过的股票,乘着赛道这股东风连续 ...

  4. 【量化金融】多因子选股策略

    金融是我最头疼的科目,监督自己坚持学下去! 多因子选股策略 理论 多因子模型是应用最广泛的一种选股模型,基本原理是采用一系列的因子作为选股标准,满足这些因子的股票被买入,不满足的股票被卖出. 例如,当 ...

  5. 爬虫系列-雪球网选股策略爬取程序1.0

    个人网站地址:http://www.enjoyown.com/spider-xueqiu/ 昨天领导安排我整理知名网站上的选股策略,整理了半天,全部手敲的,因为APP没办法复制文本,很蛋疼,今天闲下来 ...

  6. 大师系列之彼得•林基调选股法

    原 大师系列之彼得•林奇基层调查选股法 前几期文章粗略讲了一套多因子选股策略的构建流程.这期,我们来研究下投资大师--彼得•林奇的选股策略. 彼得•林奇被称为全世界最成功的股票投资家和证券投资基金经理 ...

  7. 【基金量化研究系列】大类资产配置研究(二)——股债二八轮动策略

    文章目录 1. 引言 2. 股债二八轮动策略 3. 动态再平衡股债二八轮动策略 4. 基于python的策略实现 4.1 策略代码 4.2. 运行结果实证分析 5. 总结 写在最后 1. 引言 在上一 ...

  8. 量化大师克里夫·阿斯内斯和他背后的AQR资本

    华尔街公认的量化大师克里夫·阿斯内斯(Cliff Asness)曾是诺贝尔经济学奖得主--尤金法玛最得意的门生,此后年纪轻轻便在华尔街叱咤风云多年,他所创立的AQR资本管理公司亦被认为是全球最赚钱的量 ...

  9. 股票量化分析工具QTYX使用攻略系列——双底形态选股

    前言 自从股票量化分析工具QTYX新增双底形态选股功能以来,大家的反响一直很热烈.很多星球会员利用这个功能帮助自己抓到了大牛股. 确实,双底形态是由市场力量形成的,我们只需顺势而为即可,特别是大周期. ...

最新文章

  1. SAP RETAIL 对WG22执行LSMW批量导入物料组描述信息时需要前台执行
  2. 一张图解释几个监督学习的定义
  3. Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can
  4. 直播实录 | 基于生成模型的事件流研究 + NIPS 2017 论文解读
  5. 需求条目化:一个让用户故事有效落地的套路
  6. php读取剪贴板内容,js如何处理剪贴板的内容?js处理剪贴板的内容的方法
  7. oracle查询所有表字段属性_MybatisPlus基础篇学习笔记(四)------查询方法
  8. 蓝桥杯 后缀字符串 map
  9. 手把手教你二维数组打印
  10. 数据分析之basemap模块
  11. Word的样式库在 选项卡中_Word自动生成目录的四种方法步骤
  12. 联系人管理-添加/修改/删除联系人/条件查询/解决与客户之间的问题| CRM客户关系管理系统项目实战五(Struts2+Spring+Hibernate)解析+源代码
  13. 数据库复习-3.常用的概念模型
  14. javax.crypto.BadPaddingException: Given final block not properly padded
  15. python通信自动化测试_基于Python的无线通信设备自动化测试软件的研制
  16. 码流格式: Annex-B, AVCC(H.264)与HVCC(H.265), extradata详解
  17. 苹果手机用什么软件测试续航,苹果哪个系统最耗电 iOS10/11/12/13电池续航测试
  18. 计算机英语boot,电脑开不了机显示英文boottmgr
  19. 综合项目 旅游网 【4.旅游线路名称查询-参数传递】
  20. 郭炜-C语言程序设计-程序设计与算法(一)-第一周

热门文章

  1. 考研算法辅导课【合集】
  2. 路由器重温——路由策略和策略路由-2
  3. 五个金念什么_两个“金”字合在一起读什么(图)
  4. python英文词云代码_手把手教你制作 中英文 词云 | python demo
  5. 【PHP】PHP 8.1 的新特性一览 | 交叉类型、枚举、never 返回类型、Fibers 纤程、readonly 只读属性
  6. Python 图像风格化迁移助力画家梦想
  7. c++游戏MC(1.0版本)
  8. gmtime php 时间戳,gmtime_s_日期与时间 | Date and time_C_参考手册_非常教程
  9. how to fix some resource like video not show on iphone 6 but show on simulator
  10. DataGrid活用