3. 工具准备:常用数据源与交易终端
做跨市场套利,说白了就是跟数据打交道。你想想看,没有数据,策略就是空中楼阁。我这些年折腾下来,最大的体会就是:工具选对了,事半功倍;工具选错了,天天踩坑。
这一章,我就把常用的数据源和交易终端给你捋一遍。都是我自己真金白银试出来的经验。
3.1 数据源:你的策略之眼
数据源这东西,没有绝对的好坏,只有合不合适。我个人的习惯是:多源备份,交叉验证。为什么?因为数据出错的概率,比你想象的高得多。
3.1.1 Wind(万得)
Wind 在国内金融圈的地位,不用我多说。几乎每家券商、基金公司都在用。它的优势在于:
- 数据全面:A股、港股、美股、债券、期货、期权,应有尽有
- 历史数据长:港股数据能追溯到 90 年代
- 财务数据清洗过:不用自己处理各种会计调整
但 Wind 也有缺点。嗯,这里要注意:贵。个人用户一年几万块,不是小数目。而且它的 API 接口(WindPy)说实话,用起来有点别扭。
我的经验:如果你在机构工作,Wind 是首选。个人做量化,可以考虑先用其他免费源,等策略跑通了再上 Wind。
Wind 的 Python 接口示例:
from WindPy import w
w.start()
# 获取腾讯控股的历史数据
data = w.wsd("0700.HK", "open,high,low,close,volume",
"2024-01-01", "2024-12-31", "")
print(data.Data)
3.1.2 Bloomberg
Bloomberg 是国际市场的标配。做港股跨市场套利,如果你涉及美股、欧股,Bloomberg 几乎是绕不开的。
它的强项在于:
- 实时数据极快:毫秒级延迟
- 全球覆盖:100 多个市场的行情
- 新闻整合:重大消息第一时间推送
但 Bloomberg 的 API(blpapi)学习曲线比较陡。我记得第一次用的时候,光配置环境就折腾了大半天。
避坑指南:我曾经因为 Bloomberg 数据源的一个字段定义理解错误,导致回测结果完全偏离。后来养成了习惯:拿到数据后,先手动抽几条验证一下。
3.1.3 Tushare(开源方案)
如果你是自己做研究,或者预算有限,Tushare 是个不错的选择。它是国内做得比较好的开源金融数据平台。
优点很明显:
- 免费:基础功能完全免费
- Python 原生支持:接口设计得很 Pythonic
- 社区活跃:遇到问题基本能找到答案
缺点也有:数据质量参差不齐,尤其是港股数据,偶尔会有缺失。我建议用它做初步研究和策略验证,实盘时还是要用商业数据源。
import tushare as ts
# 设置 token
ts.set_token('your_token_here')
pro = ts.pro_api()
# 获取港股通每日数据
df = pro.hk_daily(ts_code='00700.HK',
start_date='20240101',
end_date='20241231')
print(df.head())
3.2 交易终端:你的执行之手
数据搞定了,接下来就是交易。交易终端的选择,直接影响到你的执行效率和成本。
3.2.1 Interactive Brokers(盈透证券)
IB 是我个人最推荐的交易终端,尤其是做跨市场套利。为什么?
- 全球市场一账通:一个账户交易 30 多个国家的股票、期货、期权
- API 功能强大:支持 Python、Java、C++ 等多种语言
- 佣金低:港股交易佣金最低 0.08%,比很多券商都便宜
IB 的 API(ibapi)虽然功能强大,但用起来有点繁琐。它是事件驱动的,跟普通的同步编程不太一样。
小技巧:我建议用 ib_insync 这个第三方库,它把 IB API 封装得更 Pythonic,用起来顺手很多。
from ib_insync import *
# 连接 IB
ib = IB()
ib.connect('127.0.0.1', 7497, clientId=1)
# 获取腾讯控股的实时行情
contract = Stock('0700', 'HKSE')
ib.qualifyContracts(contract)
ticker = ib.reqMktData(contract, '', False, False)
print(ticker.last)
3.2.2 富途牛牛(Futu)
富途在港股市场做得很好,尤其是面向个人投资者。它的优势在于:
- 界面友好:比 IB 的 TWS 好看太多了
- 港股数据免费:实时行情对用户免费
- 暗盘交易:支持港股暗盘,这是套利的好机会
富途的 OpenAPI 是 RESTful 风格的,用起来比 IB 简单。但要注意,它的 API 权限需要申请,而且有调用频率限制。
import futu as ft
# 创建行情连接
quote_ctx = ft.OpenQuoteContext(host='127.0.0.1', port=11111)
# 获取港股实时行情
ret, data = quote_ctx.get_stock_basicinfo(
ft.Market.HK, ft.SecurityType.STOCK, ['HK.00700'])
if ret == ft.RET_OK:
print(data)
quote_ctx.close()
3.3 知识体系总览
说了这么多,我画了张图帮你理清思路。这张图展示了数据源、交易终端和 API 之间的关系:
3.4 我的选择建议
说了这么多,到底怎么选?我根据不同的场景,给你一个参考:
| 场景 | 数据源 | 交易终端 | 理由 |
|---|---|---|---|
| 个人研究 | Tushare + Wind(试用) | 富途牛牛 | 成本低,上手快 |
| 机构实盘 | Wind + Bloomberg | IB | 数据可靠,执行效率高 |
| 高频套利 | Bloomberg | IB(直接API) | 延迟最低,速度优先 |
| 跨市场套利 | Wind + Bloomberg | IB | 多市场支持最好 |
我的建议:刚开始别贪多。先选一个数据源、一个交易终端,把流程跑通。等策略稳定了,再考虑多源备份。我见过太多人一开始就搞得很复杂,结果连基础数据都拿不对。
嗯,工具就聊到这儿。记住一句话:工具是死的,人是活的。再好的工具,也得看你怎么用。下一章我们聊聊具体的数据处理,那才是真正考验功夫的地方。