第一个量化实验

发布时间:2026/6/20 12:44:15

第一个量化实验 一、认识数据 —— OHLCV日线行情五件套每一行 一个交易日每一列 当天市场记录的一个数字。 为什么量化里最爱用收盘价因为一天交易下来经过多空双方充分博弈收盘价是市场用真金白银投票出来的最终共识。算收益率、画趋势线、做回测默认都用 Close。第二部分核心指标 —— 收益率1、先忘掉股票用生活例子理解昨天苹果 10 元/斤今天 11 元/斤。涨了 1 块钱但更关键的是1 块钱相对于昨天的 10 块钱涨了 10%。这个 10%就是收益率。也就是今天比昨天“多出来的部分”除以“昨天的价格”。2、为什么不用“涨了多少钱”非要用“收益率”茅台昨天 1000 元今天涨了 10 元 → 涨幅 1%小破股昨天 10 元今天涨了 5 元 → 涨幅 50%只看钱数你会觉得茅台更猛但算收益率小破股才是真正的“暴涨”。收益率让你能公平对比不同价位的股票。第三部分小实验 —— 谁波动更大实验逻辑同时下载 苹果AAPL、特斯拉TSLA、英伟达NVDA 近一年的日线数据。分别算出各自的日收益率。计算各自收益率序列的标准差σ。 谁的 σ 大谁波动更猛。标准差σ到底是个啥简单说收益率平均偏离“平均值”的幅度。σ 越大说明每天的收益率散得越开今天可能涨 5%明天可能跌 4%。σ 越小说明每天的收益率都紧贴着平均值涨跌都很温和。# 三只股票收益率对比图 fig, axesplt.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,labelname,alpha0.75,linewidth0.8)axes[0].axhline(0,colorblack,linestyle--,linewidth0.6)axes[0].set_title(日收益率对比,fontsize13)axes[0].set_xlabel(日期)axes[0].set_ylabel(日收益率)axes[0].legend()axes[0].grid(True,alpha0.3)axes[1].bar(vol.index, vol.values *100,colorcolors[: len(vol)],edgecolorwhite)axes[1].set_title(波动大小对比标准差 %,fontsize13)axes[1].set_ylabel(标准差 (%))axes[1].grid(True,axisy,alpha0.3)fori,vinenumerate(vol.values): axes[1].text(i,v*1000.02, f{v:.2%},hacenter,fontsize11)plt.tight_layout()plt.show()winnervol.index[0]print(f\n在本实验设定下{period} 日线波动最大的是{winner})在本实验设定下1y 日线波动最大的是特斯拉# 三只股票 Histogram 并排对比 fig, axesplt.subplots(1,3,figsize(15,4),shareyTrue)forax,(name, series), cinzip(axes, all_rets.items(), colors): ax.hist(series.values,bins35,colorc,alpha0.75,edgecolorwhite)ax.axvline(0,colorblack,linestyle--,linewidth0.6)ax.set_title(f{name}\nσ {series.std():.2%})ax.set_xlabel(日收益率)axes[0].set_ylabel(天数)fig.suptitle(三只股票日收益率 Histogram 对比,fontsize14,y1.02)plt.tight_layout()plt.show()作业importyfinance as yfimportpandas as pdimportmatplotlib.pyplot as pltimportnumpy as np# ---------- 【修改区】在这里替换 AAPL 为你的最爱 ----------# 示例换微软 MSFT或谷歌 GOOGL或 AMDtickers{MSFT:微软,# --- 这里改原来这里是 AAPL: 苹果TSLA:特斯拉,NVDA:英伟达,}# ---------------------------------------------------------period1y# 时间长度可改成 6mo、2yall_rets{}print(⏳ 正在下载数据...)forsymbol, nameintickers.items():# 下载数据progressFalse 隐藏进度条datayf.download(symbol,periodperiod,progressFalse,multi_level_indexFalse).dropna()# 计算日收益率去掉第一行 NaNall_rets[name]data[Close].pct_change().dropna()print(f✅ {name} ({symbol}): {len(all_rets[name])} 个交易日)# 计算波动标准差并降序排列volpd.Series({name: s.std()forname, sinall_rets.items()}).sort_values(ascendingFalse)print(\n 日收益率波动标准差越大越猛)forname,vinvol.items(): print(f {name}: {v:.3%})print(f\n 波动最大的是{vol.index[0]})# ---------- 画直方图对比 ----------fig, axesplt.subplots(1,3,figsize(15,4),shareyTrue)colors[tab:blue,tab:orange,tab:green]forax,(name, series), cinzip(axes, all_rets.items(), colors): ax.hist(series.values,bins35,colorc,alpha0.75,edgecolorwhite)ax.axvline(0,colorblack,linestyle--,linewidth0.6)ax.set_title(f{name}\nσ {series.std():.2%})ax.set_xlabel(日收益率)axes[0].set_ylabel(天数)fig.suptitle( 三只股票日收益率 Histogram 对比,fontsize14,y1.02)plt.tight_layout()plt.show()想拉长周期看趋势把 period‘1y’ 改成 ‘2y’两年或 ‘5y’五年

相关新闻