手把手教你,用Alltick API接入美股实时行情

40 views
Skip to first unread message

Tempo Lam

unread,
Feb 18, 2025, 3:23:16 AMFeb 18
to market-data-api
首先,访问 Alltick 官网(https://alltick.co),点击注册按钮,填写有效的邮箱地址和安全密码完成注册。注册成功后,登录账号,在个人中心或 API 管理页面找到获取 Token 的选项。Token 是你接入 Alltick API 的通行证,务必妥善保管,它就像你的家门钥匙,没有它,你就无法进入数据宝库。

了解美股代码体系
美股代码通常由 1 - 5 个字母组成 ,不同的字母组合代表不同的公司。例如,苹果公司的股票代码是 AAPL,微软公司的代码是 MSFT。在纽约证券交易所(NYSE)上市的股票代码通常由 1 - 3 个字母组成,而在纳斯达克(NASDAQ)上市的股票代码多为 4 个字母 。此外,还有一些特殊类型的代码,如 ETF 代码通常以 “ETF” 结尾,ADR 代码以 “ADR” 结尾 。了解这些规则,能让你准确地定位和订阅所需股票的数据。

准备开发环境
我们以 Python 语言为例进行接入开发,首先需要安装 Python 环境,可以从 Python 官网(https://www.python.org/downloads/)下载最新版本并安装。开发工具推荐使用 VS Code,它功能强大且易于使用,在 VS Code 官网(https://code.visualstudio.com/)下载安装后,还需安装 Python 插件,以便进行 Python 代码的编写和调试。同时,为了使用 WebSocket 与 Alltick API 进行通信,需要安装 websocket - client 库,可以通过命令pip install websocket - client进行安装。

确定接入方式(HTTP 或 WebSocket)
在接入 Alltick API 获取美股实时行情数据时,我们面临 HTTP 和 WebSocket 两种接入方式的选择,它们就像两条通往宝藏的不同道路,各有特点。

HTTP 是一种经典的请求 - 响应协议,就像是你每次去商店买东西,都要亲自跑到商店(发送请求),然后商店把东西给你(返回响应) 。它适用于那些对实时性要求不那么高,数据请求量相对较小的场景。比如,你只是偶尔想查看一下某只美股的收盘价,使用 HTTP 请求就足够了,简单直接。但如果频繁地使用 HTTP 请求获取实时行情数据,就好比你不停地往返商店买同一种东西,会造成大量的网络开销,效率较低。

而 WebSocket 则是一种全双工通信协议,建立连接后,客户端和服务器就像两个好朋友,可以随时互相聊天(双向通信) 。它非常适合实时行情数据的获取,尤其是在交易高峰期,市场行情瞬息万变,WebSocket 能够及时将最新的股价、成交量等数据推送给你,让你始终紧跟市场节奏。像高频交易这种争分夺秒的场景,WebSocket 的低延迟和实时性优势就体现得淋漓尽致。

HTTP 接入示例
下面我们来看一个使用 Python 通过 HTTP 接入 Alltick API 获取美股 K 线数据的示例代码:
import time
import requests
import json
# 替换为你的实际Token
test_token = "your_token_here"
# 替换为你要查询的股票代码,这里以苹果公司股票为例
stock_code = "AAPL.US"
# K线类型,1代表分钟K线
kline_type = 1
# 查询的K线数量
query_kline_num = 2
# 调整类型
adjust_type = 0
# 构造查询参数
query_param = {
"trace": "python_http_test",
"data": {
"code": stock_code,
"kline_type": kline_type,
"kline_timestamp_end": 0,
"query_kline_num": query_kline_num,
"adjust_type": adjust_type
}
}
# 将查询参数进行URL编码
import urllib.parse
encoded_query = urllib.parse.quote(json.dumps(query_param))
# 构造请求URL
# 设置请求头
test_headers = {'Content-Type': 'application/json'}
# 发送GET请求
resp = requests.get(url=test_url, headers=test_headers)
# 解析响应数据
if resp.status_code == 200:
text = resp.text
print(text)
else:
print(f"请求失败,状态码: {resp.status_code}")
在这段代码中,我们首先定义了 Token、股票代码、K 线类型等关键参数,然后构造了查询参数并进行 URL 编码,接着将其拼接到请求 URL 中。最后,设置好请求头,使用requests库发送 GET 请求。如果请求成功(状态码为 200),就打印返回的 K 线数据;否则,打印错误状态码。整个过程就像是你按照地址(URL),带着通行证(Token)和问题清单(查询参数)去知识宝库(服务器)获取答案(数据)。
WebSocket 接入示例

接下来是使用 Python 通过 WebSocket 接入 Alltick API 的完整代码示例:
import json
import websocket # pip install websocket-client
class Feed(object):
def __init__(self):
# 替换为你的实际Token
self.ws = None
def on_open(self, ws):
print('A new WebSocketApp is opened!')
# 订阅参数
sub_param = {
"cmd_id": 22002,
"seq_id": 123,
"trace": "3baaa938-f92c-4a74-a228-fd49d5e2f8bc-1678419657806",
"data": {
"symbol_list": [
{
"code": "AAPL.US",
"depth_level": 5
}
]
}
}
# 将订阅参数转换为JSON字符串
sub_str = json.dumps(sub_param)
# 发送订阅请求
ws.send(sub_str)
print("Depth quote for AAPL.US is subscribed!")
def on_data(self, ws, string, type, continue_flag):
pass
def on_message(self, ws, message):
# 解析接收到的消息
result = eval(message)
print(result)
def on_error(self, ws, error):
print(error)
def on_close(self, ws, close_status_code, close_msg):
print('The connection is closed!')
def start(self):
self.ws = websocket.WebSocketApp(
self.url,
on_open=self.on_open,
on_message=self.on_message,
on_data=self.on_data,
on_error=self.on_error,
on_close=self.on_close,
)
self.ws.run_forever()
if __name__ == "__main__":
feed = Feed()
feed.start()
解析实时行情数据结构

当我们成功接入 Alltick API 获取到美股实时行情数据后,就像是收到了一个装满宝藏的神秘盒子,接下来需要做的就是打开这个盒子,解析其中的数据结构,让这些数据为我们所用。

以通过 WebSocket 接收到的美股实时行情数据为例,它通常是一个 JSON 格式的字符串 。假设我们接收到这样一条数据:

{
"ret": 200,
"msg": "ok",
"trace": "3baaa938-f92c-4a74-a228-fd49d5e2f8bc-1678419657806",
"data": {
"symbol_list": [
{
"code": "AAPL.US",
"depth": [
{
"bid_price": 175.50,
"bid_volume": 100,
"ask_price": 175.55,
"ask_volume": 200
}
],
"trade": {
"price": 175.50,
"volume": 50,
"timestamp": 1619345430
}
}
]
}
}
在这段数据中,ret字段表示返回状态码,200 通常表示请求成功;msg字段是对返回状态的描述,这里是 “ok”;trace字段是一个唯一标识,方便我们在调试和追踪时使用。而data字段才是我们关注的核心,它包含了股票的具体行情信息。在symbol_list列表中,我们可以找到对应股票代码(如 “AAPL.US”)的数据。depth数组里记录了买卖盘的深度数据,bid_price是买价,bid_volume是买量,ask_price是卖价,ask_volume是卖量。trade对象则记录了最新的成交价格(price)、成交量(volume)以及成交时间戳(timestamp),通过时间戳我们可以精确知道这笔交易发生的时刻,从而更好地把握市场动态。

处理数据异常情况
在数据的海洋中航行,难免会遇到一些 “暗礁”,即数据异常情况。我们需要提前做好应对准备,确保数据的可用性。

数据缺失是较为常见的问题,比如在某一时刻,我们没有接收到某只股票的最新价格数据。这时,我们可以采用缓存策略,即使用上一次接收到的有效数据来暂时替代缺失的数据,并记录下缺失的时间点,以便后续分析是否存在系统性问题。同时,设置一个合理的阈值,当数据缺失时间超过该阈值时,及时发出警报,提醒开发人员或相关人员进行排查。

数据格式错误也不容忽视,比如接收到的价格数据本应该是浮点数类型,却出现了字符串类型或者其他错误格式。我们可以在数据接收端编写数据校验函数,对每一条接收到的数据进行格式校验。以 Python 为例,可以使用isinstance函数来检查数据类型是否正确,如果发现格式错误,直接丢弃这条数据,并记录错误日志,方便后续追溯问题根源。另外,建立数据回滚机制,当发现某一时间段内的数据存在大量格式错误时,能够回滚到上一个正确的数据版本,保证交易平台数据的准确性和稳定性。
常见问题
在接入 Alltick API 获取美股实时行情数据的过程中,可能会遇到一些问题,以下为你一一列举并提供解决方案。

连接失败
当出现连接失败的情况时,首先检查网络连接是否正常,你可以尝试访问其他网站,看是否能正常加载页面。若网络连接正常,接着检查 Token 是否正确,Token 是连接 API 的关键凭证,一旦错误,将无法建立连接。比如,你可以重新登录 Alltick 官网,在个人中心复制最新的 Token,确保其准确性。此外,确认 API 地址是否正确,HTTP 和 WebSocket 的 API 地址不同,需根据你的接入方式进行准确填写。如使用 WebSocket 接入,地址应为wss://quote.tradeswitcher.com/quote-stock-b-ws-api ,不要遗漏或写错任何部分。
数据延迟
数据延迟是一个较为常见的问题,它可能会影响投资者对市场的判断和决策。如果发现数据延迟,先检查网络带宽是否足够,在网络带宽不足的情况下,数据传输速度会变慢,导致行情数据延迟。你可以联系网络服务提供商,升级网络套餐,增加带宽。另外,检查代码中是否存在性能瓶颈,比如数据处理逻辑过于复杂,导致数据接收和解析的速度变慢。你可以优化代码,简化数据处理流程,提高数据处理效率。还有一种可能是服务器负载过高,在这种情况下,你可以联系 Alltick 客服,反映问题,请求他们对服务器进行优化或调整。

数据解析错误
在解析数据时,如果出现错误,先检查数据格式是否符合预期。可以参考 Alltick API 文档中提供的数据结构说明,仔细核对接收到的数据。比如,预期的价格数据应该是浮点数类型,如果解析时发现是字符串类型,就需要检查数据来源和解析逻辑。此外,确保使用的解析工具或函数正确,如在 Python 中使用json.loads解析 JSON 格式的数据时,要保证数据是合法的 JSON 字符串。如果数据中包含特殊字符或格式错误,json.loads会抛出异常,这时你需要对数据进行预处理,使其符合 JSON 格式要求。
更多教程

Reply all
Reply to author
Forward
0 new messages