700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【新一配】量化大师系列之价值投资选股策略

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

时间:2020-02-23 02:08:52

相关推荐

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

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

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

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

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

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

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

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

资金管理:等权重买入

风险控制:无单只股票仓位上限控制、无止盈止损

我们测试了到4月这长达约4年半的时间,发现策略盈利比较稳健,收益曲线如下

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

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

1

# 本代码由可视化策略环境自动生成 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='-01-01',end_date='-04-23',market='CN_STOCK_A',instrument_list='')m5 = M.input_features.v1(features="""pb_lf_0pe_ttm_0amount_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='')

-04-24 10:48:39.980907 INFO: bigquant: instruments.v2 开始运行.-04-24 10:48:40.032075 INFO: bigquant: 命中缓-04-24 10:48:40.034596 INFO: bigquant: instruments.v2 运行完成[0.053681s]-04-24 10:48:40.038380 INFO: bigquant: input_features.v1 开始运行.-04-24 10:48:40.114036 INFO: bigquant: 命中缓-04-24 10:48:40.116472 INFO: bigquant: input_features.v1 运行完成[0.078071s]-04-24 10:48:40.195208 INFO: bigquant: general_feature_extractor.v7 开始运行.-04-24 10:48:40.270501 INFO: bigquant: 命中缓-04-24 10:48:40.272913 INFO: bigquant: general_feature_extractor.v7 运行完成[0.077735s]-04-24 10:48:40.277276 INFO: bigquant: sort.v4 开始运行.-04-24 10:48:40.422079 INFO: bigquant: 命中缓-04-24 10:48:40.424661 INFO: bigquant: sort.v4 运行完成[0.147373s]-04-24 10:48:40.428316 INFO: bigquant: filter.v3 开始运行.-04-24 10:48:40.464827 INFO: bigquant: 命中缓-04-24 10:48:40.466871 INFO: bigquant: filter.v3 运行完成[0.038552s]-04-24 10:48:40.533492 INFO: bigquant: backtest.v8 开始运行.-04-24 10:48:40.537144 INFO: bigquant: biglearning backtest:V8.1.1-04-24 10:48:40.539476 INFO: bigquant: product_type:stock by specifie-04-24 10:49:03.114530 INFO: bigquant: 读取股票行情完成:391167-04-24 10:49:52.601845 INFO: algo: TradingAlgorithm V1.4.1-04-24 10:50:10.507090 INFO: algo: trading transform..-04-24 10:50:43.460786 INFO: Performance: Simulated 1049 trading days out of 1049-04-24 10:50:43.462706 INFO: Performance: first open: -01-05 09:30:00+00:0-04-24 10:50:43.464406 INFO: Performance: last close: -04-23 15:00:00+00:0-04-24 10:50:49.709015 INFO: bigquant: backtest.v8 运行完成[129.17551s]

indicator_data: amount_0 instrument pb_lf_0 pe_ttm_0date -10-08 1.398725e+09 600000.SHA 0.840770 4.153471-10-08 1.115449e+09 601166.SHA 0.893689 4.368097-10-08 5.460992e+08 601668.SHA 0.822129 4.405653-10-08 3.438451e+08 600015.SHA 0.831473 4.506142-10-08 1.714654e+08 601988.SHA 0.778156 4.529399debug: -02-03debug: -03-12debug: -04-14debug: -05-15debug: -06-16debug: -07-17debug: -08-18debug: -09-21debug: -10-28debug: -11-27debug: -12-29debug: -01-29debug: -03-08debug: -04-08debug: -05-11debug: -06-14debug: -07-14debug: -08-15debug: -09-14debug: -10-25debug: -11-24debug: -12-26debug: -01-26debug: -03-06debug: -04-07debug: -05-10debug: -06-13debug: -07-13debug: -08-14debug: -09-13debug: -10-20debug: -11-21debug: -12-21debug: -01-23debug: -03-01debug: -04-02debug: -05-08debug: -06-07debug: -07-10debug: -08-09debug: -09-10debug: -10-18debug: -11-19debug: -12-19debug: -01-22debug: -02-28debug: -04-01

1

1

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。