第一个量化实验
2026/6/20 12:44:05 网站建设 项目流程

一、认识数据 —— OHLCV(日线行情五件套)
每一行 = 一个交易日,每一列 = 当天市场记录的一个数字。

💡 为什么量化里最爱用收盘价?
因为一天交易下来,经过多空双方充分博弈,收盘价是市场用真金白银投票出来的"最终共识"。算收益率、画趋势线、做回测,默认都用 Close。

第二部分:核心指标 —— 收益率

1、先忘掉股票,用生活例子理解
昨天苹果 10 元/斤,今天 11 元/斤。
涨了 1 块钱,但更关键的是:1 块钱相对于昨天的 10 块钱,涨了 10%。
这个 10%,就是收益率。
也就是:今天比昨天“多出来的部分”,除以“昨天的价格”。

2、为什么不用“涨了多少钱”,非要用“收益率”?

  • 茅台:昨天 1000 元,今天涨了 10 元 → 涨幅 1%
  • 小破股:昨天 10 元,今天涨了 5 元 → 涨幅 50%
  • 只看钱数,你会觉得茅台更猛;但算收益率,小破股才是真正的“暴涨”。
  • 收益率让你能公平对比不同价位的股票。

第三部分:小实验 —— 谁波动更大?

实验逻辑

  1. 同时下载 苹果(AAPL)、特斯拉(TSLA)、英伟达(NVDA) 近一年的日线数据。
  2. 分别算出各自的日收益率。
  3. 计算各自收益率序列的
  4. 标准差(σ)。 谁的 σ 大,谁波动更猛。

标准差(σ)到底是个啥?
简单说:收益率平均偏离“平均值”的幅度。
σ 越大,说明每天的收益率散得越开,今天可能涨 5%,明天可能跌 4%。
σ 越小,说明每天的收益率都紧贴着平均值,涨跌都很温和。

# ========== 三只股票收益率对比图 ==========fig, axes=plt.subplots(1,2,figsize=(14,5))colors=['tab:blue','tab:orange','tab:green']for(name, series), cinzip(all_rets.items(), colors): axes[0].plot(series.index, series.values,label=name,alpha=0.75,linewidth=0.8)axes[0].axhline(0,color='black',linestyle='--',linewidth=0.6)axes[0].set_title('日收益率对比',fontsize=13)axes[0].set_xlabel('日期')axes[0].set_ylabel('日收益率')axes[0].legend()axes[0].grid(True,alpha=0.3)axes[1].bar(vol.index, vol.values *100,color=colors[: len(vol)],edgecolor='white')axes[1].set_title('波动大小对比(标准差 %)',fontsize=13)axes[1].set_ylabel('标准差 (%)')axes[1].grid(True,axis='y',alpha=0.3)fori,vinenumerate(vol.values): axes[1].text(i,v*100+0.02, f'{v:.2%}',ha='center',fontsize=11)plt.tight_layout()plt.show()winner=vol.index[0]print(f'\n在本实验设定下({period} 日线),波动最大的是:{winner}')


在本实验设定下(1y 日线),波动最大的是:特斯拉

# ========== 三只股票 Histogram 并排对比 ==========fig, axes=plt.subplots(1,3,figsize=(15,4),sharey=True)forax,(name, series), cinzip(axes, all_rets.items(), colors): ax.hist(series.values,bins=35,color=c,alpha=0.75,edgecolor='white')ax.axvline(0,color='black',linestyle='--',linewidth=0.6)ax.set_title(f'{name}\nσ = {series.std():.2%}')ax.set_xlabel('日收益率')axes[0].set_ylabel('天数')fig.suptitle('三只股票:日收益率 Histogram 对比',fontsize=14,y=1.02)plt.tight_layout()plt.show()

作业:

importyfinance as yfimportpandas as pdimportmatplotlib.pyplot as pltimportnumpy as np# ---------- 【修改区】在这里替换 'AAPL' 为你的最爱 ----------# 示例:换微软 MSFT,或谷歌 GOOGL,或 AMDtickers={'MSFT':'微软',# <--- 这里改!原来这里是 'AAPL': '苹果''TSLA':'特斯拉','NVDA':'英伟达',}# ---------------------------------------------------------period='1y'# 时间长度,可改成 '6mo'、'2y'all_rets={}print("⏳ 正在下载数据...")forsymbol, nameintickers.items():# 下载数据(progress=False 隐藏进度条)data=yf.download(symbol,period=period,progress=False,multi_level_index=False).dropna()# 计算日收益率,去掉第一行 NaNall_rets[name]=data['Close'].pct_change().dropna()print(f'✅ {name} ({symbol}): {len(all_rets[name])} 个交易日')# 计算波动(标准差)并降序排列vol=pd.Series({name: s.std()forname, sinall_rets.items()}).sort_values(ascending=False)print('\n=== 📊 日收益率波动(标准差,越大越猛)===')forname,vinvol.items(): print(f' 🚀 {name}: {v:.3%}')print(f'\n🏆 波动最大的是:{vol.index[0]}')# ---------- 画直方图对比 ----------fig, axes=plt.subplots(1,3,figsize=(15,4),sharey=True)colors=['tab:blue','tab:orange','tab:green']forax,(name, series), cinzip(axes, all_rets.items(), colors): ax.hist(series.values,bins=35,color=c,alpha=0.75,edgecolor='white')ax.axvline(0,color='black',linestyle='--',linewidth=0.6)ax.set_title(f'{name}\nσ = {series.std():.2%}')ax.set_xlabel('日收益率')axes[0].set_ylabel('天数')fig.suptitle('📈 三只股票:日收益率 Histogram 对比',fontsize=14,y=1.02)plt.tight_layout()plt.show()

想拉长周期看趋势,把 period=‘1y’ 改成 ‘2y’(两年)或 ‘5y’(五年)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询