港美主流期货 API 接入全指南:TradingView 看盘策略

AI摘要
本文是一篇关于港美期货API接入与量化交易系统搭建的【知识分享】文章。作者基于自身经验,系统梳理了期货API的基础概念、主流服务商分类(综合类与纯数据类),并提供了四个关键选型维度(用途、品种覆盖、成本、易用性)。文章核心部分包含详细的Python代码示例,演示了如何通过iTick API获取美原油期货数据、实现均线交叉策略,并将交易信号推送至TradingView进行可视化联动,为量化交易初学者提供了从理论到实操的完整技术指南。

最近帮朋友搭建港美期货的自动交易系统,踩了不少 API 接入的坑——比如选 API 时没注意费率结构,初期测试没问题,跑实盘才发现手续费比预期高很多;还有接入时忽略了行情延时的问题,导致策略信号滞后。
港美期货 API 接入全流程
索性整理一篇全流程指南,从基础概念到代码实操,都是实打实的经验总结。不管你是想做量化交易,还是单纯需要期货数据做分析,跟着这篇走,能少走很多弯路。

一、先搞懂基础:期货和期货 API 到底是什么?

先澄清个误区,很多人把期货和股票搞混,其实核心区别在于“约定未来”——期货是约定在未来某一特定时间,按约定价格买卖一定数量的特定商品(比如原油、黄金)或金融资产(比如恒生指数、纳斯达克指数)的标准化合约。

而期货 API,简单说就是期货经纪商或数据服务商开放的“接口”。通过这个接口,我们能不用手动登录交易软件,直接用代码实现三件核心事:

  • 获取行情数据(比如实时成交价、成交量、持仓量,还有历史 K 线数据);

  • 提交交易指令(买入、卖出、平仓,甚至设置条件单);

  • 查询账户信息(持仓情况、可用资金、盈亏明细)。

没有 API 的话,量化策略就是“纸上谈兵”——总不能靠人工盯着行情、手动下单吧?效率低还容易出错。

二、港美主流期货 API 有哪些?按用途分三类

港美期货市场的 API 服务商主要分两类:一类是正规期货经纪商(比如盈透、富途),他们的 API 既能拿数据又能交易;另一类是专门的数据服务商(比如 Quandl、IEX Cloud),主要提供行情数据,不支持直接交易。

按用途拆成三类,更方便大家对应自己的需求:

1. 综合类 API(既能交易又能拿数据)

这类是最常用的,适合想直接落地交易策略的朋友,重点说两个主流的:

① 盈透证券(Interactive Brokers)API:港美期货覆盖最全,从恒生指数期货、富时中国 A50,到美原油、黄金期货都有。支持 REST API 和 WebSocket(WebSocket 适合拿实时行情,延迟更低),文档很详细,就是初期配置有点复杂,需要申请 API 权限、设置交易权限。

② 富途证券 API:对国内用户更友好,中文文档详尽且社区支持完善,配置流程清晰。核心覆盖港股、美股及新加坡市场主流期货品种,包括恒生指数、纳斯达克 100 指数、富时中国 A50 等热门品种,实时行情和交易功能均能稳定覆盖,适合新手入门。缺点是部分小众期货品种(比如欧洲的一些期货)覆盖不全,且需搭配 FutuOpenD 网关程序使用。

2. 纯数据类 API(只拿数据,不支持交易)

适合做回测、数据分析,不需要实盘交易的朋友:

  • Quandl:历史数据超全,港美期货的历史 K 线、持仓报告都能拿到,免费额度足够个人用,超出额度按条收费。缺点是实时行情延迟有点高(大概 10-15 分钟),不适合实时交易。

  • IEX Cloud:实时行情质量不错,延迟低(毫秒级),支持按分钟、小时粒度拿数据。收费是阶梯式的,交易量越大越划算,适合对行情实时性要求高的分析场景。

  • iTick 期货 API:专门聚焦港美期货数据的 API,覆盖恒生指数、美原油、黄金等热门品种,实时行情延迟低(百毫秒级),历史数据颗粒度全(分钟/小时/日线)。中文文档清晰,支持 Python/Java 等多语言,免费版可满足个人测试,付费版性价比高,适合需要稳定期货数据的个人和中小团队。

当然还有彭博,TradingView 等数据超全 API,但收费贵,适合大型机构用户,个人就不建议了。

三、如何选期货 API?这 4 个维度别踩坑

选 API 不是看哪个名气大,而是看自己的需求,分享我总结的 4 个核心判断维度,亲测实用:

1. 先明确用途:交易还是数据分析?

如果是实盘交易,优先选经纪商自带的 API(比如盈透、富途),避免用“数据 API+第三方交易 API”的组合,中间衔接容易出问题,还可能有安全风险;如果只是做回测或策略联动(比如连 TradingView),选 Quandl、iTick 这类纯数据 API 就行,性价比高。

2. 看品种覆盖:有没有你要交易的期货?

比如你想做恒生指数期货,就要确认 API 是否覆盖港交所的品种;想做美原油期货,就要覆盖纽约商品交易所的品种。很多 API 会明确标注支持的交易所,选之前一定要查清楚,别等接入了才发现没自己要的品种。

3. 关注成本:手续费和 API 费用都要算

有些 API 看似免费,实则藏在手续费里——比如部分经纪商的 API,每笔交易的手续费会比手动交易高一点;还有些数据 API,免费额度用完后收费很贵。建议先算清楚“每月预计用量”,再对比不同 API 的收费模式,避免后期超预算。

4. 易用性和稳定性:新手优先选中文文档

新手别上来就挑战盈透的 API(配置复杂),可以先从富途的 API 入手,中文文档看得懂,还有完善的社区支持,遇到问题容易解决。另外,稳定性很重要——实盘交易时 API 卡顿或断开,可能会导致巨大损失,选之前可以查下服务商的口碑,有没有频繁宕机的情况。

四、Python 代码接入示例:策略与 TradingView 图表联动(新手友好)

最后是实操部分,用 Python 实现“获取期货数据+策略信号生成+联动 TradingView 图表”,步骤超详细,新手也能跟着做。核心逻辑是:用 API 拿行情数据,本地跑策略生成信号,再把信号推到 TradingView 可视化展示。

1. 前期准备:API 权限与 TradingView 配置

  • 数据 API 准备:注册 iTick 账号(官网直接注册),进入控制台就可以查看 API Key(免费版足够测试);

  • TradingView 配置:登录 TradingView,创建自定义图表(比如选美原油期货合约),开启 Webhook 功能(用于接收 Python 推送的策略信号),记录 Webhook URL;

  • 环境准备:确保本地安装 Python3.7+,后续需安装相关依赖库。

2. 安装依赖库

需要安装requests(推信号到 TradingView)、pandas(数据处理),直接用 pip 安装就行:


pip install requests==2.31.0

pip install pandas==2.1.4

pip install python-dotenv  # 用于管理API Key和Webhook URL

3. 代码实现:获取数据+生成策略信号+联动图表

下面的代码包含三个核心功能:

    1. 通过 iTick 期货 API 获取美原油期货历史+实时行情数据;
    1. 用简单的均线交叉策略生成买卖信号;
    1. 将信号推送到 TradingView,实现策略与图表联动。

注意把代码里的 API Key 和 Webhook URL 换成自己的。


from datetime import datetime, timedelta

import pandas as pd

import requests

import os

from dotenv import load_dotenv

# 加载密钥和URL(避免硬编码,更安全)

load_dotenv()

ITICK_TOKEN = os.getenv('ITICK_TOKEN')  # iTick API的token

TRADINGVIEW_WEBHOOK_URL = os.getenv('TRADINGVIEW_WEBHOOK_URL')

# 定义API headers

headers = {

 "accept": "application/json",

 "token": ITICK_TOKEN

}

# 1. 获取美原油期货数据(合约代码:CL,地区:US)

# ① 获取历史日线数据(近1年数据,limit=365覆盖约1年)

url_history = "https://api.itick.org/future/kline?region=US&code=CL&kType=8&limit=365"

response_history = requests.get(url_history, headers=headers)

history_data = response_history.json().get('data', [])

# 转换为DataFrame,只保留核心字段(假设数据从新到旧,需要反转排序为旧到新)

history_data.reverse()  # 确保从旧到新排序,便于rolling计算

df_history = pd.DataFrame(history_data)

df_history = df_history[['t', 'o', 'h', 'l', 'c', 'v']]

df_history.rename(columns={'t': 'date', 'o': 'open', 'h': 'high', 'l': 'low', 'c': 'close', 'v': 'volume'}, inplace=True)

df_history['date'] = pd.to_datetime(df_history['date'], unit='ms')  # 时间戳转换为datetime

df_history.set_index('date', inplace=True)

print("美原油期货历史日线数据(最后5行):")

print(df_history.tail())

# ② 获取实时行情(使用实时报价API)

url_realtime = "https://api.itick.org/future/quote?region=US&code=CL"

response_realtime = requests.get(url_realtime, headers=headers)

realtime_data = response_realtime.json().get('data', {})

latest_close = realtime_data.get('ld')  # ld 为最新价,作为close

latest_date = datetime.fromtimestamp(realtime_data.get('t', 0) / 1000).strftime('%Y-%m-%d')  # 从时间戳获取日期

print(f"\n美原油期货实时价格:{latest_close}{latest_date})")

# 合并历史数据和实时数据(用于策略计算)

df_strategy = df_history.copy()

# 若当天数据未更新,补充实时数据(使用实时数据的OHLCV,注意实时API的ld为close,o/h/l/v可用)

if latest_date not  in df_strategy.index.strftime('%Y-%m-%d'):

    new_row = pd.DataFrame({

 'open': [realtime_data.get('o')],

 'high': [realtime_data.get('h')],

 'low': [realtime_data.get('l')],

 'close': [latest_close],

 'volume': [realtime_data.get('v')]

}, index=[pd.to_datetime(latest_date)])

    df_strategy = pd.concat([df_strategy, new_row])

# 2. 简单均线交叉策略:生成买卖信号

# 计算5日均线和20日均线

df_strategy['MA5'] = df_strategy['close'].rolling(window=5).mean()

df_strategy['MA20'] = df_strategy['close'].rolling(window=20).mean()

# 生成信号:5日均线上穿20日均线为买入(1),下穿为卖出(-1),无信号为0

df_strategy['Signal'] = 0

df_strategy.loc[df_strategy['MA5'] > df_strategy['MA20'], 'Signal'] = 1

df_strategy.loc[df_strategy['MA5'] < df_strategy['MA20'], 'Signal'] = -1

# 去除均线计算初期的NaN值

df_strategy = df_strategy.dropna()

print("\n带均线和策略信号的数据(最后5行):")

print(df_strategy[['close', 'MA5', 'MA20', 'Signal']].tail())

# 3. 提取最新策略信号,推送到TradingView

latest_signal = df_strategy['Signal'].iloc[-1]

signal_date = df_strategy.index[-1].strftime('%Y-%m-%d')

# 构造信号数据(符合TradingView Webhook接收格式)

signal_data = {

 "symbol": "CME/CL",  # TradingView可识别的美原油期货标识

 "date": signal_date,

 "signal": "BUY"  if latest_signal == 1  else  "SELL"  if latest_signal == -1  else  "HOLD",

 "close_price": round(df_strategy['close'].iloc[-1], 2),

 "MA5": round(df_strategy['MA5'].iloc[-1], 2),

 "MA20": round(df_strategy['MA20'].iloc[-1], 2),

 "realtime_flag": "是"  if signal_date == latest_date else  "否"

}

# 发送POST请求到TradingView Webhook

try:

    response = requests.post(

 url=TRADINGVIEW_WEBHOOK_URL,

 json=signal_data,

 headers={"Content-Type": "application/json"}

    )

 if response.status_code == 200:

 print(f"\n信号推送成功!最新信号:{signal_data['signal']}{signal_data['date']},实时数据:{signal_data['realtime_flag']})")

 else:

 print(f"\n信号推送失败,状态码:{response.status_code},响应内容:{response.text}")

except  Exception  as e:

 print(f"\n信号推送异常:{str(e)}")

# 4. 可选:本地保存数据,方便后续复盘

df_strategy.to_csv('crude_oil_strategy_data_itick.csv')

print("\n策略数据已保存到 crude_oil_strategy_data_itick.csv 文件")

4. 关键说明

  • 数据标识:iTick 对期货品种有统一简化标识,比如美原油用“CL”、恒生指数用“HSI”,具体品种代码可在 iTick 官网查询;

  • 策略逻辑:这里用的是简单的 5 日/20 日均线交叉策略,你可以替换成自己的策略(比如 MACD、RSI 策略),只需修改“生成信号”部分的代码;

  • TradingView 联动:推送的信号会显示在 TradingView 图表上,可在图表中添加“警报”,当收到 BUY/SELL 信号时自动提醒;

  • 免费额度:iTick 免费版每日实时数据请求数量足够个人测试,超出后可升级付费版。

五、最后总结

港美期货API接入真没那么复杂,核心就是“选对工具+找对方法”。想交易就选盈透、富途这类经纪商API,想做策略联动TradingView,直接用iTick拿数据就行,跟着文中的代码改改参数就能跑通。

希望我的经验能帮你少走点弯路。有啥问题评论区聊,我尽量回答。祝大家都能快速搞定API,躺着看TradingView自动出策略信号!

温馨提示:本文仅供代码参考,不构成任何投资建议。市场有风险,投资需谨慎

参考文档:docs.itick.org/rest-api/future/fut...

GitHub:https://github.com/itick-org/

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!