1. 量化投资入门:从数据到策略的全流程解析

第一次接触量化投资时,我被各种专业术语和复杂流程搞得晕头转向。直到真正开始实践才发现,量化投资其实就像做菜一样,需要准备好食材(数据),掌握烹饪技巧(建模方法),最后还得亲自尝味道(回测验证)。下面我就用最接地气的方式,带你走完这个完整流程。

量化投资的核心在于用数据说话。我常用的数据源包括Tushare(免费)、Wind(付费但全面),最近还发现AKShare这个开源库也不错。记得去年做白酒板块分析时,光是茅台就收集了10年的日线数据+200多项财务指标,数据量超过5GB。但原始数据就像刚买回来的菜,需要仔细清洗处理才能下锅。

数据预处理中最容易踩坑的就是时间对齐问题。比如财报数据是季度频率,而股价是日频数据,直接合并会导致大量NA值。我的经验是先用前向填充(ffill)处理,再用线性插值平滑过渡。技术指标计算时更要小心未来函数问题——绝对不能把明天的收盘价用来计算今天的MACD值!

2. 特征工程:把原始数据变成"黄金信号"

做过几个项目后发现,特征工程才是真正决定策略好坏的关键。就像同样的食材,米其林大厨和路边摊做出来的味道天差地别。我习惯把特征分成三类:

  • 技术面特征:除了常见的MA、RSI,最近发现ATR(真实波动幅度)在震荡市中特别好用。计算20日ATR的Python代码很简单:
import talib
data['ATR'] = talib.ATR(data['High'], data['Low'], data['Close'], timeperiod=20)
  • 基本面特征:PE、PB这些太基础了,我更喜欢用杜邦分析法拆解ROE。最近帮朋友筛选医药股时,发现研发费用占营收比这个指标特别有效。

  • 另类数据:用SnowNLP分析财报电话会议记录的情绪得分,配合龙虎榜机构买卖数据,往往能提前捕捉主力动向。不过要注意,这类数据噪音很大,需要反复验证。

特征筛选时我常用"三步法":先用相关系数初筛,再用XGBoost看特征重要性,最后人工复核。有次发现某个技术指标和收益率相关系数高达0.3,兴奋地准备用它建模,结果仔细检查发现计算时误用了未来数据——这个教训让我现在每次都要多检查三遍时间戳。

3. 模型训练:从简单到复杂的进化之路

新手最容易犯的错误就是直接上LSTM这种复杂模型。我的血泪史证明,应该先从线性回归开始建立baseline。去年测试消费板块选股时,简单线性模型的夏普比率居然比后来折腾的LSTM还高0.2!

传统机器学习模型中,LightGBM是我的最爱。它处理金融数据有几个优势:自动处理缺失值、支持类别特征、训练速度快。分享一个我优化过的参数模板:

params = {
    'boosting_type': 'gbdt',
    'objective': 'regression',
    'metric': 'mse',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': 0
}

深度学习模型确实能捕捉更复杂的模式,但需要更多技巧。比如用LSTM预测股价时,一定要加Dropout层(我一般设0.2-0.5),还要配合早停机制。有次忘记设置早停,模型在训练集上MSE降到0.0001,结果测试集表现一塌糊涂——典型的过拟合案例。

4. 回测验证:策略的终极试金石

回测环节最考验量化人员的严谨程度。我见过太多"纸上谈兵"的策略,一上实盘就现原形。现在我的回测清单必查这几点:

  1. 成本计算:A股买卖佣金按0.025%算,印花税0.1%(卖出收取)。别小看这些费用,高频策略可能因此从盈利变亏损。

  2. 滑点控制:我通常设置0.1%的滑点,比如下单价格10元,实际成交按10.01元计算。去年有个网格策略没考虑滑点,回测年化收益15%,实盘却亏了8%。

  3. 样本外测试:一定要保留最后20%数据完全不参与任何优化。我的习惯是2015-2019年数据训练,2020-2022年测试,这样可以包含牛熊市不同市场状态。

用Backtrader做回测时,这个仓位管理模板很实用:

class PositionControl(bt.Sizer):
    def _getsizing(self, comminfo, cash, data, isbuy):
        position = self.broker.getposition(data)
        if not position:
            return cash * 0.1 // data.close[0]  # 单票不超过总资金10%
        else:
            return 0

实盘前还要做压力测试。我会故意输入2008年、2015年的极端行情数据,观察策略最大回撤。有个号称年化30%的趋势策略,在2015年股灾测试中两周回撤45%,这种策略我直接放弃。

5. 持续迭代:量化是一场无限游戏

市场永远在变化,去年有效的因子今年可能就失效了。我现在每周都会检查三个关键指标:

  • 策略胜率:如果连续3周低于45%,就要警惕了
  • 最大回撤:超过预设阈值(我设15%)立即暂停策略
  • 特征稳定性:用PSI(Population Stability Index)监测特征分布变化

最近在尝试在线学习(Online Learning)模式,用新数据增量训练模型。不过要注意控制学习率,否则容易受近期噪声影响。上个月有个动量因子突然失效,排查发现是某个行业政策变化导致市场风格切换,这种时候就需要人工干预调整特征组合。

量化投资最迷人的地方就在于它既是科学也是艺术。数据模型给出冷冰冰的信号,但何时严格执行、何时灵活调整,还需要结合对市场的理解。记得保留一份"观察清单",把模型筛选出的标的再人工复核一遍,这个方法帮我避开了不少财务造假的陷阱。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐