核心思想与Python源码实现指南
在量化交易领域,威廉·欧奈儿(William J. O'Neil)的CAN SLIM投资体系因其“基本面+技术面”双轮驱动的独特逻辑,成为无数投资者追寻的“圣杯”,而将这套体系转化为可量化的交易指标,则是将其从理论落地的关键一步,本文将深入解析欧奈儿核心量化指标的设计思想,并基于Python提供源码实现,帮助交易者理解、复现并应用于实际策略。
欧奈儿量化指标的核心逻辑:从CAN SLIM到数字信号
欧奈儿的CAN SLIM体系包含7个核心维度:当季每股收益增长(C)、年度每股收益增长(A)、新产品、新管理层、新 highs(N)、供给与需求(S)、市场整体走向(I),最容易被量化且直接关联交易时机的,是“新高突破”与“相对强度”两大技术指标,这也是欧奈儿“在正确的时机买入强势股”思想的集中体现。
新高突破(New High, NH)
欧奈儿认为,股价创近期新高(如52周新高)是股票进入强势阶段的信号,意味着市场对其价值的认可,量化时需结合“成交量确认”——突破新高当日成交量需显著放大(如超过过去50日均量的1.5倍),避免“无量假突破”。
相对强度(Relative Strength, RS)
相对强度衡量个股相对于大盘(如沪深300、标普500)的走势强弱,欧奈儿常用“RS评级”(1-100分,越高越强),核心是计算一段时间内个股涨幅与指数涨幅的比值,通常要求RS评级≥80,即股票表现强于80%以上的其他股票。
Python源码实现:构建欧奈儿量化指标
基于上述逻辑,我们用Python实现“新高突破”和“相对强度”两大核心指标,并给出综合信号示例。
环境准备
import pandas as pd import numpy as np import akshare as ak # 用于获取股票数据(也可用tushare、yfinance等)
数据获取
以A股为例,获取某股票过去一年的日线数据及对应指数数据:
def get_stock_data(stock_code, index_code="000300.SH", period="daily"):
"""获取股票及指数数据"""
# 获取股票数据(示例:贵州茅台,股票代码600519)
stock_df = ak.stock_zh_a_hist(symbol=stock_code, period="daily", start_date="20230101", end_date="20231231", adjust="qfq")
stock_df = stock_df[['日期', '开盘', '收盘', '最高', '最低', '成交量']]
stock_df.columns = ['date', 'open', 'close', 'high', 'low', 'volume']
stock_df['date'] = pd.to_datetime(stock_df['date'])
stock_df = stock_df.sort_values('date').reset_index(drop=True)
# 获取指数数据(沪深300)
index_df = ak.stock_zh_index_hist(symbol=index_code, period="daily", start_date="20230101", end_date="20231231")
index_df = index_df[['日期', '收盘']]
index_df.columns = ['date', 'index_close']
index_df['date'] = pd.to_datetime(index_df['date'])
# 合并数据
df = pd.merge(stock_df, index_df, on='date', how='left')
return df
stock_code = "600519" # 贵州茅台
df = get_stock_data(stock_code)








