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
2022 “开弓”ETF轮动模型——改.py » 轻知量化 QMT、PTrade、聚宽策略分享交流平台

2022 “开弓”ETF轮动模型——改.py

# 风险及免责提示:该策略由聚宽用户分享,仅供学习交流使用。
# 原文一般包含策略说明,如有疑问建议到原文和作者交流讨论。
# 克隆自聚宽文章:https://www.joinquant.com/post/24591
# 标题:“开弓”ETF轮动模型——改
# 作者:jqz1226

# 克隆自聚宽文章:https://www.joinquant.com/post/24563
# 标题:借鉴鼎级版主明镜台“开弓”ETF轮动模型
# 作者:purplefire

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


# 初始化函数,设定基准等等
def initialize(context):
    # 基准:中证500
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 设定成交量比例
    # set_option('order_volume_ratio', 1)
    # 过滤掉order系列API产生的比error级别低的log
    log.set_level('order', 'error')
    # 交易手续费
    # set_order_cost(OrderCost(close_tax=0.0, open_commission=0.000025, close_commission=0.000025, min_commission=1),
    #                type='etf')

    g.stocks = ['510050.XSHG', '510500.XSHG', '159901.XSHE', '159902.XSHE', '159915.XSHE']  # , '512880.XSHG']
    # g.num_to_buy = 1  # 持仓的只数
    g.codes = ''  # 要买入的etf

    # 运行函数, 按周运行,在每周第一个交易日运行
    run_daily(tkdk, time='9:35')  # 跳空低开未上拉就止损
    run_daily(tkdk, time='10:30')  #
    run_daily(tkdk, time='13:00')  #
    run_daily(tkdk, time='14:00')  #
    run_daily(chenk_stocks, time='14:25')  # 选股
    run_daily(trade, time='14:30')  # 交易


def chenk_stocks(context):
    jz_pj = {}
    for sec in g.stocks:
        close_sec1w = get_bars(sec, count=9, unit='1w', include_now=True, fields=['close'])['close']
        if len(close_sec1w) >= 9:
            # 周涨幅:1周,2周,3周,4周,8周
            wzf1 = close_sec1w[-1] / close_sec1w[-2] - 1
            wzf2 = close_sec1w[-1] / close_sec1w[-3] - 1
            wzf3 = close_sec1w[-1] / close_sec1w[-4] - 1
            wzf4 = close_sec1w[-1] / close_sec1w[-5] - 1
            wzf5 = close_sec1w[-1] / close_sec1w[-9] - 1
            # 计算评分
            cp = wzf1 * 0.4 + wzf2 * 0.2 + wzf3 * 0.15 + wzf4 * 0.2 + wzf5 * 0.05
            jz_pj[sec] = cp
    # 按评分从高到低排序,选择前g.num_to_buy名
    # g.codes 要买入的etf
    g.codes = pd.Series(jz_pj).sort_values(ascending=False).index[0]


# 跳空低开止损
def tkdk(context):
    for stock in context.portfolio.positions:
        bars = get_bars(stock, count=6, unit='1d', include_now=True, fields=['close', 'low', 'high'])
        #
        ma5 = bars['close'][-5:].mean()  # 今天的ma5
        ma5_r1 = bars['close'][-6:-1].mean()  # 昨天的ma5
        llv5_r1 = bars['low'][-6:-1].min()  # 过去5天的最低价
        last_low = bars['low'][-2]  # 昨日最低
        now_high = bars['high'][-1]  # 今天最高
        now_close = bars['close'][-1]  # 当前价位
        #
        if now_close < ma5 < ma5_r1 and (now_close / now_high < 0.975 or now_close < llv5_r1) and now_high <= last_low:
            log.info('跳空低开止损:%s, 当前价:%.3f, 今日最高: %.3f, 今日ma5: %.3f, 昨最低价: %.3f, 昨日ma5: %.3f, 昨日LLV5: %.3f' %
                     (stock, now_close, now_high, ma5, last_low, ma5_r1, llv5_r1))
            order_target(stock, 0)

 

 

后续代码

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