章节 01
导读 / 主楼:Fynance:面向量化金融的Python机器学习与计量经济学工具库
Fynance是一个纯Python金融分析库,提供从数据处理、特征工程、信号生成、组合配置到回测评估的完整量化投资流水线,支持Numba加速和PyTorch深度学习模型。
正文
Fynance是一个纯Python金融分析库,提供从数据处理、特征工程、信号生成、组合配置到回测评估的完整量化投资流水线,支持Numba加速和PyTorch深度学习模型。
章节 01
Fynance是一个纯Python金融分析库,提供从数据处理、特征工程、信号生成、组合配置到回测评估的完整量化投资流水线,支持Numba加速和PyTorch深度学习模型。
章节 02
章节 03
原作者与来源
@njit装饰器在首次调用时即时编译。这种设计既保证了执行效率,又避免了传统C扩展带来的跨平台兼容性问题。\n\n---\n\n核心架构与设计理念\n\nFynance采用分层架构设计,通过Python的typing.Protocol定义清晰的接口契约,实现模块间的松耦合。整个流水线可以概括为:数据 → 特征 → 信号 → 组合 → 回测 → 指标。\n\n数据层(Data):提供CSV和Parquet文件的加载适配器,支持时间序列对齐、重采样,以及无前瞻偏差的时间序列分割(train_test_split、walk_forward)。核心数据结构PriceSeries是一个轻量级的numpy包装对象,为后续计算提供统一接口。\n\n特征层(Features):内置丰富的技术指标计算能力,包括布林带、RSI、MACD、ROC、实现波动率、滚动偏度/峰度/自相关等统计量。同时支持动量指标(SMA、EMA、WMA)、缩放变换(包括滚动排名)以及市场状态检测等高级特征工程。\n\n信号层(Signal):提供从预测到持仓的映射机制,支持符号映射、阈值判断、排名选择和波动率目标等策略。可以将预测模型与持仓映射器组合成完整的信号流水线。\n\n组合层(Portfolio):实现多种现代投资组合配置算法,包括等风险贡献(ERC)、层次风险平价(HRP)、逆波动率加权(IVP)、最大分散度(MDP)和最小方差(MVP)等。同时支持分数凯利准则、波动率目标调整和交易成本建模等高级功能。\n\n---\n\n回测引擎与评估体系\n\nFynance的回测模块采用向量化计算引擎,能够高效处理大规模历史数据。回测流程接受持仓矩阵、收益/价格序列和成本模型作为输入,输出包含完整交易记录的BacktestResult对象。\n\n成本模型:支持比例成本模型,可以精确模拟交易手续费和价格冲击对策略收益的影响。\n\n评估指标:内置完整的业绩评估体系,包括夏普比率(Sharpe)、索提诺比率(Sortino)、卡尔玛比率(Calmar)、最大回撤等核心指标。通过result.summary()方法可以一键生成综合业绩报告。\n\n可视化报告:fynance.plot模块提供可组合的matplotlib图表和一键生成的tearsheet报告,帮助研究者直观理解策略表现。\n\n---\n\n深度学习与计量经济学模型\n\n尽管Fynance以传统量化方法见长,但其models子模块同样提供了丰富的机器学习能力:\n\n计量模型:包括移动平均(MA)、自回归移动平均(ARMA)、ARMA-GARCH等经典时间序列模型,适用于金融数据的波动率建模和预测。\n\n神经网络:基于PyTorch实现多种深度学习架构,包括多层感知机(MLP)、循环神经网络(RNN、GRU、LSTM)、多头注意力机制和时序卷积网络(TCN)、Transformer等。特别值得一提的是方向+幅度堆叠集成模型,可以同时预测价格变动方向和幅度。\n\n可微分损失函数:支持夏普比率、索提诺比率、卡尔玛比率、Omega比率等金融指标作为可微分损失函数,实现端到端的直接优化。这种"目标导向"的训练方式比传统的MSE损失更能反映策略的实际表现。\n\n---\n\n策略编排与研究工具\n\n对于需要快速验证想法的研究者,Fynance提供了可选的策略编排器Strategy类。该类可以将特征提取、信号生成、成本模型等组件串联成完整的策略流水线,支持单次运行和滚动窗口(walk-forward)评估。\n\n研究模块(research):提供数据无关的实验框架,包括可序列化的实验记录、带随机种子和成本感知的回测运行,以及自动生成markdown报告、PNG图表和Jupyter notebook的功能。合成数据生成器支持几何布朗运动和状态切换模型,方便在受控环境下测试策略鲁棒性。\n\n值得注意的是,Fynance本身不会存储任何实验结果,所有输出都写入调用者指定的输出目录,这种设计尊重用户的数据主权,也便于与版本控制系统集成。\n\n---\n\n快速入门示例\n\n以下是一个完整的策略构建示例,展示了Fynance简洁而强大的API设计:\n\npython\nimport numpy as np\nimport fynance as fy\n\n1. 数据准备 — 从CSV加载或直接从numpy数组构建\nprices = fy.PriceSeries(100 * np.cumprod(1 + np.random.randn(750) * 0.01))\n\n2. 策略组合 — 动量特征 → 持仓信号 → 带成本的回测\nstrat = fy.Strategy(\n features=lambda p: np.sign(np.diff(p, prepend=p[0])),\n signal=lambda x: x,\n cost=fy.ProportionalCost(fee=0.0005), 0.05%手续费\n)\nresult = strat.run(prices)\n\n3. 评估与报告\nprint(result.summary()) 输出夏普比率、索提诺比率、卡尔玛比率、最大回撤等\nfig = fy.tearsheet(result) 一键生成业绩报告图表\n\n\n这个例子展示了Fynance的核心理念:通过函数式编程和协议接口,用户可以用极少的代码构建复杂的量化策略,同时保持每个组件的可测试性和可复用性。\n\n---\n\n版本迁移与生态集成\n\nFynance 2.0是一次重大版本更新,引入了破坏性的API变更。主要变更包括算法模块重命名为portfolio、业绩指标迁移到metrics子模块等。项目提供了详细的迁移指南doc/MIGRATION-2.0.md,帮助现有用户平滑升级。\n\n在生态集成方面,Fynance与主流Python数据科学生态无缝衔接:numpy作为底层数据交换格式,PyTorch仅局限于models子模块,matplotlib用于可视化。此外,项目还提供了可选的Streamlit交互式 playground,方便新手探索功能。\n\n---\n\n总结与展望\n\nFynance代表了量化金融工具库的一种务实取向:在保持Python生态易用性的同时,通过Numba加速达到接近C语言的执行效率。其分层架构和协议接口设计使得各个模块既可独立使用,又能灵活组合,适应从快速原型到生产部署的不同场景。\n\n对于量化研究者而言,Fynance提供了一个完整而一致的实验环境,从数据获取、特征工程、模型训练到回测评估,所有环节都遵循相同的设计哲学。特别是将夏普比率等金融指标作为可微分损失函数的支持,为端到端的策略优化开辟了新的可能性。\n\n随着量化投资领域对机器学习方法的需求不断增长,Fynance这类兼顾传统计量经济学和深度学习的工具库将发挥越来越重要的作用。