Home >  > PEG策略选股

PEG策略选股

0

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

二、回测结果
2006-06-01 到 2016-12-31,收益还可以,但回撤太大。

三、代码

# 导入函数库
from jqdata import *
import pandas as pd

# 设定最大显示行数、列数为10000
pd.set_option('display.max_columns', 10000)


# 初始化函数,设定基准等等
def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    # 输出内容到日志 log.info()
    log.info('初始函数开始运行......')
    
    #获取指数成份股(沪深300)
    g.security = get_index_stocks('000300.XSHG')
    g.N = 20 

    #每月运行一次,1表示每月的第1个交易日
    run_monthly(handle,1)
    
    
def handle(context):
    #取出沪深300股票代码、市盈率、净利润同比增长率
    df = get_fundamentals(query(valuation.code, valuation.pe_ratio, indicator.inc_net_profit_year_on_year).filter(valuation.code.in_(g.security)))
    #选择市盈率>0 以及净利润同比增长率>0的股票 
    df = df[(df['pe_ratio']>0) & (df['inc_net_profit_year_on_year']>0)]
    #计算PEG
    df['PEG'] = df['pe_ratio']/df['inc_net_profit_year_on_year']/100
    #排序,取前20个
    df = df.sort_values('PEG')[:g.N]
    #要持有的股票列表
    tohold = df['code'].values

    for stock in context.portfolio.positions:
        if stock not in tohold:
            order_target_value(stock,0)
            
    #要买入的股票列表
    tobuy = [stock for stock in tohold if stock not in context.portfolio.positions]
    
    if len(tobuy)>0:
        print("buying")
        cash = context.portfolio.available_cash
        cash_every_stock = cash/len(tobuy)
        
        for stock in tobuy:
            order_value(stock,cash_every_stock)
            log.info('买入股票')
    log.info('##############################################################')
本文暂无标签

发表评论

*

*