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
2009 持续跑赢大盘-真蓝筹v2(资金容量千万以上) 量化策略 » 轻知量化 QMT、PTrade、聚宽策略分享交流平台

2009 持续跑赢大盘-真蓝筹v2(资金容量千万以上) 量化策略

# 风险及免责提示:该策略由聚宽用户分享,仅供学习交流使用。
# 原文一般包含策略说明,如有疑问建议到原文和作者交流讨论。
# 克隆自聚宽文章:https://www.joinquant.com/post/26117
# 标题:持续跑赢大盘-真蓝筹v2(资金容量千万以上)
# 作者:柱子嗨翻天

# 导入函数库
import statsmodels.api as sm
import pandas as pd
import numpy as np
import datetime as dt 
from jqdata import *

# 初始化函数,设定基准等等
def initialize(context):
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 过滤掉order系列API产生的比error级别低的log
    log.set_level('order', 'error')
    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')

    # 设置RSRS指标
    set_parameter_RSRS(context)
    # 设置一般参数
    g.trend='None'
    g.day_count=0
    g.period=22

     # 开盘前运行
    run_daily(before_market_open, time='9:20', reference_security='000300.XSHG')
     # 开盘时运行
    run_daily(market_open, time='open', reference_security='000300.XSHG')
 

#################################参数设置部分#################################
def set_parameter_RSRS(context):
    # 设置RSRS指标
    #统计周期
    g.N = 18
    #统计样本长度
    g.M = 1100
    # g.M = 600
    #首次运行判断
    g.init = True
    #风险参考基准
    g.security = '000300.XSHG' #沪深300
    # 设定策略运行基准
    set_benchmark(g.security)
    # 买入阈值
    g.buy = 0.7
    g.sell = -0.7
    #用于记录回归后的beta值,即斜率
    g.ans = []
    #用于计算被决定系数加权修正后的贝塔值
    g.ans_rightdev= []

    # 计算2005年1月5日至回测开始日期的RSRS斜率指标
    # 获得回测前一天日期,千万避免未来数据
    previous_date = context.current_dt - datetime.timedelta(days=2)
    prices = get_price(g.security, '2005-01-05', previous_date, '1d', ['high', 'low'])
    prices[np.isnan(prices)] = 0
    prices[np.isinf(prices)] = 0    
    highs = prices.high
    lows = prices.low
    g.ans = []
    for i in range(len(highs))[g.N:]:
        data_high = highs.iloc[i-g.N+1:i+1]
        data_low = lows.iloc[i-g.N+1:i+1]
        X = sm.add_constant(data_low)
        model = sm.OLS(data_high,X)
        results = model.fit()
        g.ans.append(results.params[1])
        #计算r2
        g.ans_rightdev.append(results.rsquared)
    
## 开盘前运行函数     
def before_market_open(context):
    # 计算RSRS斜率数据,判断多空时机
    # 填入各个日期的RSRS斜率值
    beta=0
    r2=0
    if g.init:
        g.init = False
    else:
        #RSRS斜率指标定义
        prices = attribute_history(g.security, g.N, '1d', ['high', 'low'])
        prices[np.isnan(prices)] = 0
        prices[np.isinf(prices)] = 0
        highs = prices.high
        lows = prices.low
        X = sm.add_constant(lows)
        model = sm.OLS(highs, X)
        beta = model.fit().params[1]
        g.ans.append(beta)
        #计算r2
        r2=model.fit().rsquared
        g.ans_rightdev.append(r2)
    # 计算标准化的RSRS指标
    section = g.ans[-g.M:]
    # 计算均值序列
    mu = np.mean(section)
    # 计算标准化RSRS指标序列
    sigma = np.std(section)
    zscore = (section[-1]-mu)/sigma  
    #计算右偏RSRS标准分
    g.zscore_rightdev= zscore*beta*r2
    
    # 如果上一时间点的RSRS斜率大于买入阈值, 则全仓买入
    if g.zscore_rightdev > g.buy:
        log.info("市场风险在合理范围。做多。")
        g.trend='up'   
        
    # 如果上一时间点的RSRS斜率小于卖出阈值, 则空仓卖出
    if g.zscore_rightdev < g.sell:
        log.info("市场风险过大。不做多")
        g.trend='down'
    log.info('趋势',g.trend)
    log.info('今日右偏RSRS标准分:',g.zscore_rightdev)


    

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