第1章:工欲善其事,必先利其器
做量化交易,说白了就是跟数据打交道。你想想看,没有趁手的工具,再好的策略也跑不起来。这一章,我就带你搭好环境——这是所有交易代码的起点。
1.1 为什么选Python?
我入行那会儿,大家还在用Excel和VBA做回测。后来转到Python,才发现以前的日子简直是在刀耕火种。Python做TWAP交易,有几个天然优势:
- 生态成熟:pandas处理时间序列,numpy做矩阵运算,matplotlib画K线图,一条龙搞定
- 回测快:同样的逻辑,Python比Excel快几十倍
- 对接方便:各大券商、交易所的API,基本都有Python版
嗯,这里要注意:别贪多嚼不烂。Python库成千上万,做TWAP交易,核心就三个——pandas、numpy、matplotlib。先把这三个玩透,比什么都强。
1.2 Anaconda安装:一步到位
我个人习惯用Anaconda来管理Python环境。为什么?因为它自带150多个常用库,省得你一个一个pip install。我在项目中遇到过好几次,新手自己装Python,结果版本冲突搞到崩溃——Anaconda就是来救你的。
安装步骤
- 去Anaconda官网下载对应系统的安装包(Windows/Mac/Linux都支持)
- 双击安装,一路默认就行。但有一个坑:安装路径不要有中文。我曾经帮一个学员排查问题,搞了半天,发现他装在“D:\程序\Python”下面,空格和中文字符导致路径解析出错
- 安装完成后,打开终端(Windows用Anaconda Prompt),输入
conda --version,看到版本号就说明装好了
1.3 Jupyter Notebook配置:交互式交易的利器
做TWAP策略开发,Jupyter Notebook是我的首选。它最大的好处是——写一段代码,立刻看到结果。不像传统IDE,要跑整个脚本才能知道对错。
启动Jupyter
打开终端,输入:
jupyter notebook
浏览器会自动打开一个页面。如果没打开,手动复制终端里那个带token的URL就行。
常用快捷键
| 快捷键 | 功能 |
|---|---|
| Shift + Enter | 运行当前单元格,并跳到下一个 |
| Ctrl + Enter | 运行当前单元格,不移动 |
| Esc + A | 在当前单元格上方插入新单元格 |
| Esc + B | 在当前单元格下方插入新单元格 |
| Esc + M | 将当前单元格切换为Markdown模式(写注释用) |
1.4 必备库安装:pandas, numpy, matplotlib
这三个库,是TWAP交易的铁三角。pandas管数据,numpy管计算,matplotlib管可视化。缺一个,你的策略就像少了一条腿。
安装命令
在终端里依次执行:
conda install pandas numpy matplotlib
或者用pip:
pip install pandas numpy matplotlib
我个人推荐用conda安装,因为它会自动处理依赖关系。用pip的话,有时候会遇到版本冲突——比如pandas 2.0需要numpy 1.24以上,但你装的是1.22,那就报错了。
验证安装
打开Jupyter Notebook,新建一个Python文件,输入:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
print("pandas版本:", pd.__version__)
print("numpy版本:", np.__version__)
print("matplotlib版本:", plt.matplotlib.__version__)
如果能看到版本号,恭喜你,环境搭好了。
1.5 知识体系总览
这一章的内容,说白了就是三件事:装Anaconda、配Jupyter、装三个库。下面这张图,帮你理清它们之间的关系:
1.6 实战小练习
环境搭好了,咱们来跑个简单的TWAP模拟。别怕,就几行代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 模拟10笔交易,每笔100股,均匀分布在1小时内
total_shares = 1000
num_trades = 10
shares_per_trade = total_shares / num_trades
# 生成时间点(每6分钟一笔)
times = pd.date_range('09:30:00', '10:30:00', periods=num_trades)
# 模拟成交价格(随机波动)
np.random.seed(42)
prices = 100 + np.cumsum(np.random.randn(num_trades) * 0.5)
# 计算累计成交量
cum_shares = np.arange(1, num_trades+1) * shares_per_trade
# 画图
plt.figure(figsize=(10, 5))
plt.plot(times, cum_shares, 'b-o', label='累计成交量')
plt.xlabel('时间')
plt.ylabel('累计成交量(股)')
plt.title('TWAP交易模拟:均匀拆分订单')
plt.grid(True)
plt.legend()
plt.show()
运行这段代码,你会看到一条近乎直线的上升曲线——这就是TWAP的核心思想:把大单拆成小单,均匀分布在时间轴上。