找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1166

积分

1

好友

156

主题
发表于 5 天前 | 查看: 9| 回复: 0

技术背景

许多投资者将量化交易视为门槛极高的领域。然而,经验表明,部分量化策略逻辑清晰,易于掌握。本文介绍的策略仅基于三个核心因子进行分层筛选,策略回测显示其年化收益可达41.59%(2019年1月至2025年12月模拟期总收益940%)。

策略收益曲线

需要说明的是,本文的目的并非宣扬一个“完美”的策略。该策略本身存在回撤较大的瑕疵,但通过引入大盘择时系统,能够将整体回撤有效控制在20%左右。此前关于择时系统在多因子策略中的应用的文章介绍过相关思路。

本文的核心价值在于,通过一个简洁明了的多因子策略示例,向无编程基础的交易者证明,量化交易并非遥不可及。

量化交易的核心优势在于两点:1. 基于大量历史数据的验证;2. 严格的策略执行。 其中,执行力往往比策略构思更为关键。大多数投资者难以克服人性弱点,而量化交易的自动化特性恰好规避了这一问题。

策略、因子分析

量化选股的核心理念可概括为:选择优质公司、关注小市值、买入低估值标的、规避问题股、在市场关注度低时介入。

如何将理念转化为可执行的策略?答案是借助量化因子。后期我们将构建并开放因子库,对因子进行标签化与评分,方便用户直接调用与学习。对于希望深入研究的用户,可以关注数据处理、因子分析与合成等方法。而对于初学者,完全可以直接使用成熟的因子结论,通过简单的组合与筛选,快速构建自己的策略。

详细步骤

本策略的构建遵循以下清晰步骤:

  1. 股票池初筛:剔除ST股、上市未满一年的新股、北交所及科创板股票、停牌股票。
  2. PEG因子筛选:选取PEG值最小的前10%的股票。
  3. EBIT因子筛选:从上述股票中,再选取EBIT最小的前25%。
  4. 流通市值筛选:最后,选取流通市值最小的前N只股票作为最终持仓标的(本例中N=5)。
  5. 调仓规则:每周一进行调仓,采用等市值分配方式,盘中不进行干预。

优化与改进方向

该基础策略有明确的优化空间:

  1. 增加择时系统:这是控制整体回撤最有效的手段。
  2. 优化仓位管理:将等仓调整为基于风险的动态仓位配比。
  3. 细化交易规则:优化盘中卖出条件,例如结合技术指标。

Python代码实现

以下是用Python实现上述策略核心筛选逻辑的代码示例。数据分析与回测是量化策略的基石,强大的数据处理能力能显著提升策略开发效率。

def get_stock_list(context):
    # 获取所有股票
    initial_list = get_all_securities().index.tolist()
    # 过滤掉新股(上市未满一年)
    initial_list = filter_new_stock(context,initial_list)
    # 过滤掉科创板股票
    initial_list = filter_kcb_stock(context, initial_list)
    # 过滤掉ST股票。
    initial_list = filter_st_stock(initial_list)

    peg_list = get_factor_filter_list(context, initial_list, 'PEG', True, 0.1)  # 值越小越好
    ebit_list = get_factor_filter_list(context, peg_list, 'EBIT', True, 0.25)  # 同样值越小越好
    test_list = get_factor_filter_list(context, ebit_list, 'turnover_volatility', True, 0.5)

    q = query(valuation.code,valuation.circulating_market_cap).filter(valuation.code.in_(test_list)).order_by(valuation.circulating_market_cap.asc())
    df = get_fundamentals(q)
    final_list = list(df.code)
    return final_list

#过滤停牌股票
def filter_paused_stock(stock_list):
    current_data = get_current_data()
    return [stock for stock in stock_list if not current_data[stock].paused]

#过滤ST及其他具有退市标签的股票
def filter_st_stock(stock_list):
    current_data = get_current_data()
    return [stock for stock in stock_list
            if not current_data[stock].is_st
            and 'ST' not in current_data[stock].name
            and '*' not in current_data[stock].name
            and '退' not in current_data[stock].name]

#过滤涨停的股票
def filter_limitup_stock(context, stock_list):
    last_prices = history(1, unit='1m', field='close', security_list=stock_list)
    current_data = get_current_data()
    # 已存在于持仓的股票即使涨停也不过滤,避免此股票再次可买,但因被过滤而导致选择别的股票
    return [stock for stock in stock_list if stock in context.portfolio.positions.keys()
            or last_prices[stock][-1] < current_data[stock].high_limit]

#过滤跌停的股票
def filter_limitdown_stock(context, stock_list):
    last_prices = history(1, unit='1m', field='close', security_list=stock_list)
    current_data = get_current_data()
    return [stock for stock in stock_list if stock in context.portfolio.positions.keys()
            or last_prices[stock][-1] > current_data[stock].low_limit]

#过滤科创板
def filter_kcb_stock(context, stock_list):
    return [stock for stock in stock_list  if stock[0:3] != '688']

#过滤次新股
def filter_new_stock(context,stock_list):
    yesterday = context.previous_date
    return [stock for stock in stock_list if not yesterday - get_security_info(stock).start_date < datetime.timedelta(days=365)]

总结

本文展示了一个结构简单、逻辑清晰的Python多因子选股策略,旨在说明量化策略的开发可以始于简洁的构思。普通投资者通过学习基本的因子知识,便能通过组合与分层筛选搭建自己的策略框架。若在此过程中能获得专业的大数据分析与策略优化辅助,则有望构建出更加稳健高效的交易体系。




上一篇:细粒度激活卸载:Megatron-LM内存优化方案,实现大模型训练显存与吞吐最优
下一篇:2026年AI服务器价格飙升解析:GPU、液冷与电源架构升级推高成本
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-17 19:40 , Processed in 0.216487 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表