- DataWhale 量化学习第一期 第1章
- https://github.com/datawhalechina/quant-for-beginners/tree/main/notebooks/phase1_intro
本章核心:量化金融到底是什么?
一句话定义
用数学、统计、计算机 + 金融理论,把交易想法写成规则,用数据验证,让机器批量执行。
- 不是:预测明天涨跌的"黑科技"
- 是:从历史数据中寻找统计规律,长期依靠正期望赚钱。
量化的本质四步闭环
| 步骤 | 做什么 | 例子 |
|---|---|---|
| 1. 提出假设 | 提出可验证的问题 | "连续涨5天,第6天继续涨的概率更高吗?" |
| 2. 量化定义 | 把模糊感觉变成代码规则 | "连续涨5天" → 前5天收益率全部 > 0 |
| 3. 历史验证 | 用历史数据批量统计 | 遍历过去10年,计算出现形态后第6天的涨跌概率 |
| 4. 沉淀迭代 | 有效则成策略,无效则舍弃 | 结合风控、仓位,写成可执行规则 |
关键认知:量化不预测未来,它只统计过去、验证规律、寻找概率优势。
量化的完整流程
| 环节 | 做什么 | Python 常用工具 |
|---|---|---|
| 获取数据 | 股票价格、成交量、财务数据 | yfinance, akshare, tushare |
| 分析数据 | 观察趋势、波动、规律 | pandas, numpy |
| 设计策略 | 把规律变成规则 | 自定义逻辑 |
| 回测验证 | 用历史数据测试策略 | backtrader, zipline, vnpy |
| 模拟交易 | 不下真钱,先验证稳定性 | 模拟交易接口 |
| 实盘 | 真金白银执行 | 券商API |
为什么 Python 是量化首选?
语言对比
| 对比维度 | Python | C/C++ | R | MATLAB |
|---|---|---|---|---|
| 学习曲线 | ⭐ 极低 | 陡峭 | 中等 | 低,但场景受限 |
| 运行速度 | 中等 | 极快 | 慢 | 中等 |
| 金融库生态 | 极丰富 | 几乎没有 | 统计强、交易弱 | 收费且生态小 |
| AI/ML 支持 | 最强 | 效率低 | 有限 | 有但社区小 |
| 社区资源 | 全球最大 | 偏底层 | 偏学术 | 偏高校 |
| 费用 | 免费 | 免费 | 免费 | 商业授权极贵 |
结论:Python 在"易学、生态丰富、AI支持、免费"四个维度同时最优。
Python 量化工具链全景
获取数据(yfinance/akshare/tushare) → 数据处理(pandas/numpy) →
分析建模(numpy/scipy/sklearn) → 策略回测(backtrader/zipline/vnpy) →
可视化(matplotlib/plotly/seaborn)
核心库一句话总结:
- pandas:表格数据处理的瑞士军刀(读取CSV、计算均线)
- numpy:高性能数值计算(批量收益率、矩阵运算)
- matplotlib:基础绑图(K线图、收益曲线)
- backtrader:策略回测框架(模拟历史交易)
关键概念速查
量化金融(Quantitative Finance)
用数学模型、统计方法和计算机程序来分析金融市场、制定交易策略的学科。
*
回测(Backtesting)
用历史数据模拟执行策略,检验策略在过去的收益和风险表现。是量化策略上线前的必经环节。
*
策略(Strategy)
一套明确的、可复制的交易规则。包含:什么时候买入、什么时候卖出、仓位怎么管理。
*
正期望收益(Positive Expected Value)
长期来看,策略的平均收益 > 0。量化追求的不是每次都赚,而是"赢的概率和赢的幅度 > 输的概率和输的幅度"。
*
概率优势(Edge)
策略在统计上存在的微小优势。量化交易的核心目标就是找到并放大这个优势。
*
随机策略(Random Strategy)
作为对照组的"瞎买瞎卖"策略。用来验证:如果我的策略连随机都不如,那它就是无效的。
思维转变(重点)
| 普通人炒股 | 量化交易 |
|---|---|
| 凭感觉、听消息 | 凭数据、靠规则 |
| 情绪化决策 | 系统化执行 |
| 单次交易成败定英雄 | 长期统计概率优势 |
| 手工盯盘 | 程序自动执行 |
量化交易和普通人炒股最大的区别:情绪退出市场,数据掌控一切。
一些AI问答:
- 基于过去5年上证指数数据,预测未来3个月上证指数走势及关键影响因素。
https://chatgpt.com/share/6a302e7c-b2a0-83ee-8852-244cae9af86b - 我是工薪族,年收入30万元,现有闲置资金100万元,无专业投资经验,请提供适配的投资理财配置方案。
https://chatgpt.com/share/6a302f1c-0bd4-83e8-ab3a-5c2864a358e4
课后作业
换一只股票,亲手跑出同样的「爽感」:
把上面代码里的 'AAPL' 改成 'TSLA'(特斯拉)或 'NVDA'(英伟达)
重新运行,画出 价格 + 成交量 图
在纸上或评论区回答:最新收盘价是多少?近 6 个月整体是涨还是跌?
python
# ========== 作业1:英伟达 NVDA 真实股票数据 ==========
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
import pandas as pd
import akshare as ak
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 一行下载英伟达 NVDA 最近 6 个月的日线(前复权)
df = ak.stock_us_daily(symbol='NVDA', adjust='qfq')
df = df.tail(120) # 取最近约6个月(120个交易日)
df['date'] = pd.to_datetime(df['date'])
print('🎉 恭喜!你已经拿到真实股票数据')
print(' 共 {} 个交易日'.format(len(df)))
print(' 最新收盘价: ${:.2f}'.format(df['close'].iloc[-1]))
print(df.tail(5).to_string())
# ========== 上图收盘价、下图成交量 ==========
fig, axes = plt.subplots(2, 1, figsize=(12, 6), sharex=True,
gridspec_kw={'height_ratios': [3, 1]})
axes[0].plot(df['date'], df['close'], color='tab:blue', linewidth=1.5)
axes[0].set_title('真实数据 · 英伟达 NVDA 收盘价(近6个月)', fontsize=14)
axes[0].set_ylabel('美元')
axes[0].grid(True, alpha=0.3)
axes[1].bar(df['date'], df['volume'], width=0.8, color='gray', alpha=0.5)
axes[1].set_ylabel('成交量')
axes[1].set_xlabel('日期')
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

| 指标 | 数值 |
|---|---|
| 最新收盘价 | $205.19 USD |
| 6个月前收盘价 | $180.73 USD |
| 近6个月收益 | +13.53% |
| 整体趋势 | 涨 (UP) |