Warning: file_exists(): open_basedir restriction in effect. File(/www/wwwroot/com.xiximiao.oa/com.cmstop/public/www/wp-content/db.php) is not within the allowed path(s): (/www/wwwroot/com.xiximiao.oa/com.cmstop/public/www/:/tmp/:/proc/:/var/log/nginx/:/www/wwwroot/com.xiximiao.oa/com.cmstop/public/:/www/wwwroot/com.xiximiao.oa/com.cmstop/vendor/:/www/wwwroot/com.xiximiao.oa/com.cmstop/ppk/) in /www/wwwroot/com.xiximiao.oa/com.cmstop/public/www/wp-includes/load.php on line 707
2005 价值低波(下)--十年十倍 » 轻知量化 QMT、PTrade、聚宽策略分享交流平台

2005 价值低波(下)--十年十倍

# 风险及免责提示:该策略由聚宽用户分享,仅供学习交流使用。
# 原文一般包含策略说明,如有疑问建议到原文和作者交流讨论。
# 克隆自聚宽文章:https://www.joinquant.com/post/25183
# 标题:价值低波(下)--十年十倍(2020拜年)
# 作者:Gyro

import pandas as pd
# 系统设置&系统变量,不因代码更替而改变
def initialize(context):
    log.set_level('order', 'error')
    set_option('use_real_price', True)
    g.weight = pd.Series() #投资组合
    g.inv_value_max = context.portfolio.total_value #市值峰值

# 系统参数&系统变量,因代码更新而重新赋值
def after_code_changed(context):
    g.index = '000300.XSHG' #投资指数
    g.treasury = '000012.XSHG'
    g.stocks_num = 10 #最大持股数

# 开盘运行,准备数据
def before_trading_start(context):
    # 高价值
    stocks = high_value(context, g.index, g.stocks_num)
    # 波动率加权
    g.weight = volatility_weight(stocks, 241)
    # 风险控制
    risk_controller(context)
    # 输出信息
    cur_data = get_current_data()
    for stock in g.weight.index:
        log.info(stock, cur_data[stock].name, 100*g.weight[stock])

# 收盘后运行,记录数据
def after_trading_end(context):
    g.inv_value_max = max(g.inv_value_max, context.portfolio.total_value)
    log.info('...Trading end')

# 逐日运行
def handle_data(context, data):
    cur_data = get_current_data()
    # sell
    for stock in context.portfolio.positions:
        if stock not in g.weight.index and\
            not cur_data[stock].paused:
            log.info('sell out', stock, cur_data[stock].name)
            order_target(stock, 0);
    # buy & rebalance
    for stock in g.weight.index:
        position = g.weight[stock] * context.portfolio.total_value
        if stock not in context.portfolio.positions:
            delta = position
        else:
            delta = position - context.portfolio.positions[stock].value
        if context.portfolio.available_cash > delta and\
            not cur_data[stock].paused:
            log.info('rebalance', stock, cur_data[stock].name, int(position))
            order_value(stock, delta)

# 功能函数,选取品质价值股
def high_value(context, index, stocks_num):
    # 股票池
    stocks = get_index_stocks(index)
    # 取基本面数据,选择品质价值股
    df = get_fundamentals(query(
            valuation.code,
            valuation.pb_ratio,
            valuation.pe_ratio,
        ).filter(
            valuation.code.in_(stocks),
            valuation.pb_ratio > 0,
            valuation.pe_ratio > 0,
            valuation.pe_ratio < 20, # PE < 20 valuation.pb_ratio / valuation.pe_ratio > 0.1, # ROE >10%
        ).order_by(valuation.pe_ratio.asc()
        ).limit(stocks_num)
        ).dropna()
    return list(df.code)

⚠️
本站资源大多来自网络,仅供网友学习交流,未经作者或上传书面授权,请勿作他用。
站长 vx: xiangyin615 或者 留言反馈 ,我们将尽快处理。
Notice: When you of the legal rights be violate, please stir to vx: xiangyin615
个人中心
购物车
优惠劵
搜索