量化金融到底在做什么
量化是一套数据驱动的标准化流程:先提假设、再标准化条件、历史回测验证、验证规律、有效就做成策略,全程摒弃情绪与主观猜测。
1、提出可验证假设
不凭空猜涨跌,提出清晰可统计的问题,例:个股连涨 5 天后,次日上涨概率是否更高?所有量化策略都从假设出发。
2、量化标准化定义
把模糊口语转化为机器可计算的硬性条件。
例:"连涨 5 天" = 连续 5 个交易日日收益率>0,消除模糊理解。
3、历史数据回测验证
遍历多年全市场行情,筛选符合条件的全部历史样本,客观统计次日涨跌概率,用数据给出结论,不靠感觉。
沉淀规则 + 迭代优化
数据证明规律有统计优势、风险可控:叠加手续费、仓位风控,做成可执行交易策略;
数据证明规律无效:直接放弃该思路,不强行主观操作。
bash
# ========== 导入库 ==========
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 图表中文
plt.rcParams['axes.unicode_minus'] = False
np.random.seed(42) # 固定随机数,结果可复现
days = 120 # 一共模拟 120 个交易日
daily_returns = np.random.normal(loc=0.0008, scale=0.02, size=days) # 每天随机收益率
price = 100 * np.cumprod(1 + daily_returns) # 从100元出发连乘成价格序列
df = pd.DataFrame({
'收盘价': price, # 原始模拟收盘价
'5日均线': pd.Series(price).rolling(5).mean(), # 最近5天均价
'20日均线': pd.Series(price).rolling(20).mean() # 最近20天均价
})
plt.figure(figsize=(12, 5)) # 创建画布,宽12高5英寸
plt.plot(df['收盘价'], label='收盘价', alpha=0.6, linewidth=1)
plt.plot(df['5日均线'], label='5日均线 (MA5)', linewidth=1.5)
plt.plot(df['20日均线'], label='20日均线 (MA20)', linewidth=1.5)
plt.fill_between(range(days), df['5日均线'], df['20日均线'], alpha=0.1, color='orange') # 两线之间浅色填充
plt.title('Python 模拟股价走势 + 移动平均线', fontsize=14)
plt.xlabel('交易日') # 横轴说明
plt.ylabel('价格')
plt.legend() # 图例
plt.grid(True, alpha=0.3) # 浅色网格,方便读数
plt.tight_layout()
plt.show()
print(f"起始价格: ¥{price[0]:.2f}") # 第一天价格
print(f"最终价格: ¥{price[-1]:.2f}") # 最后一天价格
print(f"区间收益率: {(price[-1]/price[0] - 1)*100:.2f}%") # 整段涨跌幅
print(f"最大回撤价格: ¥{price.min():.2f}") # 期间最低价
print(f"最高价格: ¥{price.max():.2f}") # 期间最高价

巴舍利耶在1900年揭示的核心洞察:
单只股票的走势无法预测------每条路径都像醉汉走路,随机且不重复
但大量股票的统计规律是确定的------终点价格服从正态分布,波动与√t成正比
量化金融的核心逻辑就藏在这里:不预测单一结果,而是利用统计规律
量化金融的底层逻辑:
1、找到概率优势(策略研究的目标)------没有优势,一切仓位管理都无效
2、科学管理仓位(风险控制的目标)------有优势但不控制风险,照样亏钱
3、长期重复执行(纪律与系统的目标)------让大数定律为你工作
概率优势 × 仓位管理 × 长期纪律 = 量化盈利的完整公式
这是索普在赌场验证的真理,也是所有量化策略的底层逻辑。
量化 = 用 规则 + 数据 做决策,不是凭感觉猜涨跌
核心流程:提假设 → 找数据 → 回测验证 → 形成策略
bash
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
import yfinance as yf
from datetime import datetime, timedelta
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 计算6个月前日期
end_date = datetime.today()
start_date = end_date - timedelta(days=180)
# 替换下载逻辑,指定起止时间
aapl = yf.download(
tickers='TSLA',
start=start_date.strftime("%Y-%m-%d"),
end=end_date.strftime("%Y-%m-%d"),
progress=False,
multi_level_index=False
)
# 增加空数据判断,防止下标报错
if len(aapl) == 0:
print("❌ 未获取到行情数据,网络无法访问雅虎财经!")
else:
print('🎉 恭喜!你已经拿到真实股票数据')
print(f' 共 {len(aapl)} 个交易日')
print(f' 最新收盘价: ${aapl["Close"].iloc[-1]:.2f}')
display(aapl.tail(5))
# 绘图代码只在有数据时执行
fig, axes = plt.subplots(2, 1, figsize=(12, 6), sharex=True,
gridspec_kw={'height_ratios': [3, 1]})
axes[0].plot(aapl.index, aapl['Close'], color='tab:blue', linewidth=1.5)
axes[0].set_title('真实数据 · TSLA 收盘价', fontsize=14)
axes[0].set_ylabel('美元')
axes[0].grid(True, alpha=0.3)
axes[1].bar(aapl.index, aapl['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()
