第三章:工具准备——必备软件与数据源

做跨市场套利,说白了就是跟数据打交道。你想想看,没有趁手的工具,再好的策略也跑不起来。这一章我带你把吃饭的家伙事儿备齐。

3.1 行情终端:你的第一双眼睛

我个人习惯同时开着三个终端。不是炫技,是真实需求。

终端 适用市场 我的使用场景
Wind A股、期货、债券 做股指期货与ETF套利时,看实时基差
Bloomberg 外汇、商品、美股 跨市场价差监控,数据最全
TradingView 加密货币、外汇 画图分析,社区策略参考

嗯,这里要注意:免费终端和付费终端的延迟差距很大。我在项目中遇到过,用免费行情做高频套利,结果滑点吃掉所有利润。如果你做的是日频或小时频策略,免费终端够用。但做分钟级套利,别省这个钱。

核心建议:至少准备一个付费行情源。Wind或Bloomberg二选一,别用同花顺免费版做套利决策。

3.2 API接口:让机器替你干活

手动下单?那是十年前的事了。现在做套利,必须用API。

我常用的API分三类:

  • 交易所官方API——比如CTP(期货)、FIX协议(外汇)。延迟最低,但文档写得像天书。
  • 数据服务商API——比如WindPy、Tushare。上手快,适合回测和策略开发。
  • 量化平台API——比如QuantConnect、掘金。自带回测环境,省去搭系统的麻烦。

为什么会这样推荐?因为不同场景需求不同。做回测用数据服务商API,做实盘用交易所API。我见过有人用Tushare做实盘,结果行情延迟3秒,套利机会早没了。

我的经验:刚开始别贪多。先搞定一个交易所的API,跑通一个最简单的价差策略。等熟悉了再扩展。

3.3 数据库:你的记忆仓库

做套利离不开历史数据。没有数据库,你拿什么回测?

我个人习惯用这套组合:

  • 时序数据库——InfluxDB或TimescaleDB。存Tick级行情,查询快。
  • 关系型数据库——PostgreSQL。存交易记录、账户信息。
  • 缓存层——Redis。存实时价差,减少数据库压力。

我曾经踩过一个坑:用MySQL存分钟级K线,结果数据量一上来,查询慢得像蜗牛。后来换成TimescaleDB,同样的查询快了10倍。

避坑指南:别把所有数据塞进一个数据库。行情数据用时序库,交易数据用关系库。混着用,后期维护会让你崩溃。

3.4 整体架构图

下面这张图是我自己搭建套利系统的标准架构。你照着搭,基本不会出大问题。

跨市场套利系统数据架构 数据源层 交易所行情API 数据服务商API 历史数据文件 其他源 数据处理层 数据清洗与对齐 价差计算引擎 信号生成模块 存储层 时序数据库(Tick级) 关系数据库(交易) Redis缓存(实时) 应用层 回测系统 实盘交易 风险监控 报表分析

3.5 代码示例:快速搭建数据管道

下面这段代码,是我用来从交易所API拉取行情并存入数据库的模板。你改改API Key就能用。

import requests
import psycopg2
import json
from datetime import datetime

# 连接数据库
conn = psycopg2.connect(
    host="localhost",
    database="tick_data",
    user="trader",
    password="your_password"
)
cur = conn.cursor()

# 从交易所API拉取行情
def fetch_ticker(symbol):
    url = f"https://api.exchange.com/v1/ticker?symbol={symbol}"
    headers = {"X-API-Key": "your_api_key"}
    response = requests.get(url, headers=headers)
    return response.json()

# 存入数据库
def save_ticker(data):
    query = """
    INSERT INTO tick_data (symbol, price, volume, timestamp)
    VALUES (%s, %s, %s, %s)
    """
    cur.execute(query, (
        data['symbol'],
        data['last_price'],
        data['volume'],
        datetime.now()
    ))
    conn.commit()

# 主循环
if __name__ == "__main__":
    symbols = ["BTCUSDT", "ETHUSDT"]
    for sym in symbols:
        ticker = fetch_ticker(sym)
        save_ticker(ticker)
        print(f"{sym} 数据已保存")

小提示:生产环境记得加异常处理和重试机制。我刚开始写的时候没加,半夜API挂了,第二天发现数据库空了一整晚。

3.6 我的工具清单总结

最后给你一张清单,照着准备就行:

  • 行情终端:Wind(A股/期货)+ TradingView(加密货币)
  • API接口:CTP(期货实盘)+ Tushare(回测数据)
  • 数据库:TimescaleDB(行情)+ PostgreSQL(交易)+ Redis(缓存)
  • 编程环境:Python 3.9+,Anaconda发行版
  • 回测框架:Backtrader或自研(后面章节会讲)

嗯,工具就这些。别贪多,先把这套跑通。下一章我们开始讲真正的套利策略——价差分析。

专注资料整理