一、策略介绍
PEG指标是彼得.林奇发明的一个股票估值指标,是在PE估值的基础上发展起来的,它弥补了PE对企业动态成长性估计的不足。
当时彼得.林奇在选股的时候就是选那些市盈率较低,同时它们的增长速度又是比较高的公司,这些公司有一个典型特点就是PEG会非常低。
就是用市盈率/公司的年盈利增长速度。
每月调一次仓。
二、回测结果
2006-06-01 到 2016-12-31,收益还可以,但回撤太大。

三、代码
6 | pd.set_option( 'display.max_columns' , 10000) |
10 | def initialize(context): |
12 | set_benchmark( '000300.XSHG' ) |
14 | set_option( 'use_real_price' , True) |
15 | # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱 |
16 | set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type= 'stock' ) |
18 | log.info( '初始函数开始运行......' ) |
21 | g.security = get_index_stocks( '000300.XSHG' ) |
29 | #取出沪深300股票代码、市盈率、净利润同比增长率 |
30 | df = get_fundamentals(query(valuation.code, valuation.pe_ratio, indicator.inc_net_profit_year_on_year).filter(valuation.code.in_(g.security))) |
31 | #选择市盈率>0 以及净利润同比增长率>0的股票 |
32 | df = df[(df[ 'pe_ratio' ]>0) & (df[ 'inc_net_profit_year_on_year' ]>0)] |
34 | df[ 'PEG' ] = df[ 'pe_ratio' ]/df[ 'inc_net_profit_year_on_year' ]/100 |
36 | df = df.sort_values( 'PEG' )[:g.N] |
38 | tohold = df[ 'code' ].values |
40 | for stock in context.portfolio.positions: |
41 | if stock not in tohold: |
42 | order_target_value(stock,0) |
45 | tobuy = [stock for stock in tohold if stock not in context.portfolio.positions] |
49 | cash = context.portfolio.available_cash |
50 | cash_every_stock = cash/len(tobuy) |
53 | order_value(stock,cash_every_stock) |
55 | log.info( '##############################################################' ) |