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
2318 微盘股轮动策略 多角度深入研究.py 量化交易策略分享 » 轻知量化 QMT、PTrade、聚宽策略分享交流平台

2318 微盘股轮动策略 多角度深入研究.py 量化交易策略分享

策略名称:微盘股轮动策略

策略说明:

本策略专注于微盘股的投资机会,通过筛选市值最小的股票,并结合动态仓位管理进行交易。策略的核心思想是捕捉微盘股的短期波动,利用其高波动性获取超额收益。

策略核心逻辑:

  1. 股票池筛选

    • 筛选上市时间较长的股票,排除ST股。

    • 筛选市值最小的120只股票,作为候选股票池。

  2. 交易决策

    • 每日开盘前更新股票池,选择市值最小的120只股票。

    • 每日开盘后,根据股票池调整持仓,买入不在持仓中的股票,卖出不再符合条件的股票。

    • 动态调整持仓,确保每只股票的仓位在预设范围内。

  3. 风险控制

    • 排除停牌、涨停或跌停的股票,避免无法交易的情况。

    • 设置每只股票的仓位上限,避免过度集中风险。

策略特点:

  • 微盘股捕捉:通过筛选市值最小的股票,捕捉微盘股的短期波动机会。

  • 动态仓位管理:根据股票市值动态调整仓位,优化资金使用效率。

  • 风险控制:排除高风险股票,设置仓位上限,控制风险。

适用场景:

  • 适用于A股市场,能够有效捕捉微盘股的短期波动机会。

  • 适合短线交易者,通过快速交易获取收益。

风险提示:

  • 微盘股波动性较大,可能导致较高的回撤。

  • 策略依赖于历史数据的有效性,需定期优化参数以适应市场变化。


策略代码结构:

  1. 初始化函数(initialize

    • 设定日志级别,使用真实价格交易,打开防未来函数。

    • 初始化全局变量,用于跟踪策略运行的天数。

  2. 代码更新后运行函数(after_code_changed

    • 取消所有已设置的定时任务,重新设置每日开盘前、开盘时和收盘后的运行任务。

  3. 开盘前运行函数(iUpdate

    • 筛选市值最小的120只股票,作为候选股票池。

    • 计算每只股票的仓位大小,确保总仓位不超过预设上限。

  4. 开盘时运行函数(iTrader

    • 根据股票池调整持仓,买入不在持仓中的股票,卖出不再符合条件的股票。

    • 动态调整持仓,确保每只股票的仓位在预设范围内。

  5. 收盘后运行函数(iReport

    • 记录当前持仓数量、累计收益率、可用现金余额、投资组合总价值和策略运行天数。


策略优化建议:

  1. 参数优化

    • 可对股票池的数量(如120只)进行优化,以适应不同的市场周期。

    • 调整每只股票的仓位上限,以平衡风险与收益。

  2. 风险控制

    • 增加最大回撤限制,当回撤超过一定比例时暂停交易。

    • 设置单笔交易的最大亏损比例,避免单笔交易亏损过大。

  3. 多因子结合

    • 可结合其他技术指标(如成交量、MACD等)进行综合筛选,提高策略的稳定性。


总结:

本策略通过捕捉微盘股的短期波动机会,结合动态仓位管理,适合短线交易者在A股市场中获取收益。策略逻辑清晰,适合有一定编程基础的投资者进行进一步优化和实盘测试。

策略源码

# 风险及免责提示:该策略由聚宽用户在聚宽社区分享,仅供学习交流使用。
# 标题:微盘股研究
# 回测资金选择 1234567

import pandas as pd   # 导入pandas库并设置别名pd

def initialize(context):
    log.set_level('order', 'error')     # 设置日志级别,只记录order模块中error级别及以上的日志
    set_option('use_real_price', True)      # 使用真实价格进行交易,即考虑股票的复权信息
    set_option('avoid_future_data', True)       # 打开防未来函数
    g.days = 0                  # 初始化一个全局变量g.days,可能用于跟踪策略运行的天数

# 更换代码后运行的单元,每次策略代码更新并启动时都会执行这个函数
def after_code_changed(context):   
    unschedule_all()   # 取消所有已经设置的定时运行任务
    run_daily(iUpdate, time='before_open')  # 重新设置定时运行任务,每天开盘前运行iUpdate函数
    run_daily(iTrader, time='9:35')    # 每天9:35运行iTrader函数
    run_daily(iReport, time='after_close')   # 收盘后运行iReport函数,可能用于生成报告或进行日终处理

# iUpdate 函数,用于更新策略的股票选择和仓位大小
def iUpdate(context):
    nchoice = 120     # 定义选择股票的数量上限
    nposition = 100   # 定义持有股票的数量上限
    # 全部A股
    dt_last = context.previous_date      # 获取策略运行前一天的日期
    all_stock = get_all_securities('stock', dt_last)      # 获取全部A股的股票列表
    cdata = get_current_data()    # 获取当前所有股票的数据
    stocks = [s for s in all_stock.index if not cdata[s].is_st]      # 过滤掉ST股票,只保留非ST股票
    # 获取小盘股的股票列表,查询股票代码和市值
    df = get_fundamentals(query(
            valuation.code,
            valuation.market_cap,
        ).filter(
            valuation.code.in_(stocks),    # 只查询非ST股票的市值
            valuation.pb_ratio > 0,        # 过滤掉市净率小于等于0的股票
        ).order_by(valuation.market_cap.asc()    # 按市值升序排序
        ).limit(nchoice)                     # 限制查询结果数量为nchoice
        ).dropna().set_index('code')       # 去除缺失值,并将股票代码设置为索引
    # 结果
    g.choice = df.index.tolist()           # 将查询结果的股票列表保存到全局变量g.choice中
    # 计算每只股票的仓位大小,这里使用了倒数法来分配仓位,即总资金除以持有股票的数量
    g.position_size = 1.0/nposition * context.portfolio.total_value     

# iReport 函数,用于在策略运行结束后生成报告
def iReport(context):
    g.days = g.days + 1  # 增加全局变量 g.days 的值,用于跟踪策略运行的天数
    log.info('  positions', len(context.portfolio.positions))    # 记录当前持仓的股票数量
    log.info('  return %.2f', 100*context.portfolio.returns)     # 记录策略的累计收益率
    log.info('  cash %.2f',   context.portfolio.available_cash/10000)    # 记录当前可用的现金余额
    log.info('  value %.2f',  context.portfolio.total_value/10000)       # 记录当前投资组合的总价值
    log.info('running days', g.days)    # 记录策略运行的天数

关键iTrader 函数,用于执行策略的买卖逻辑,解锁后查看:

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