接触美股行情已经有一段时间,平时除了盯着网页行情,也想把数据拉到代码里做分析或者实时监控。市面上有不少美股api,免费和付费都有。实际开发中,除了拿到数据,如何保证实时性、稳定性和可扩展性,才是值得关注的部分。
数据获取方式对比
在接入行情时,常见方式主要有两种:
|
方式 |
优点 |
缺点 |
|
HTTP轮询 |
简单直观,接口调用灵活 |
延迟高,频繁请求容易被限制 |
|
WebSocket推送 |
延迟低,数据实时 |
对连接稳定性和异常处理有要求 |
如果只是偶尔获取价格,HTTP就够用。但对实时策略或者分时监控来说,WebSocket 的低延迟优势明显。
HTTP 快照示例
通过 REST 接口可以快速拿到最新价格和涨跌幅。Python 示例:
|
import
requests
symbol =
"AAPL"
url =
f"https://api.example.com/stock/{symbol}/quote"
# 替换成实际api
response = requests.get(url)
data = response.json()
print(
f"{symbol} 当前价格: {data['price']}, 涨跌: {data['change']}"
)
|
这种方式直观,但延迟几秒到几十秒不等,无法满足高频实时需求。
WebSocket 实时接入
实时行情的关键是推送稳定性和数据完整性。以 AllTick API 为例,可以订阅股票交易的 tick 数据:
|
import
websocket
import
json
def
on_message
(ws, message):
data = json.loads(message)
for
tick
in
data[
'ticks'
]:
print(
f"{tick['symbol']} 最新价: {tick['price']}, 时间: {tick['time']}"
)
def
on_error
(ws, error):
print(
"连接出错:"
, error)
def
on_close
(ws):
print(
"连接关闭,尝试重连"
)
# 简单重连逻辑
ws.run_forever()
def
on_open
(ws):
subscribe_msg = {
"action"
:
"subscribe"
,
"symbols"
: [
"AAPL"
,
"TSLA"
]
}
ws.send(json.dumps(subscribe_msg))
url =
"wss://api.alltick.co/stock/ws"
ws = websocket.WebSocketApp(url, >
ws.>
ws.run_forever()
|
在实际工程中,WebSocket 需要考虑:
-
连接异常时重连
-
高频数据堆积处理
-
批量订阅多只股票
这样才能保证行情数据完整、延迟低。
数据存储和处理
拿到 tick 数据后,通常需要存下来做分析或者可视化。简单方式是存 CSV:
|
import
csv
def
save_tick
(tick):
with
open(
"ticks.csv"
,
"a"
, newline=
""
)
as
f:
writer = csv.writer(f)
writer.writerow([tick[
'symbol'
], tick[
'price'
], tick[
'time'
]])
|
生产环境中,可能会加缓冲队列,批量落盘或者写入数据库,保证数据可靠性和效率。
实践中的注意点
-
高频实时数据容易产生延迟或丢失,需要对消息进行校验或补偿
-
批量订阅多支股票时,注意接口限制和内存消耗
-
数据落盘或者分析前,建议用队列/缓存防止阻塞 WebSocket 消息处理
-
对 Python 开发者来说,WebSocket + JSON 解析 + 数据存储是快速搭建实时行情管道的基础
通过这种方式,不仅能获取美股api的实时行情,还能体验到生产环境下数据流处理和异常处理的思路。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70038549/viewspace-3172678/
,如需转载,请注明出处,否则将追究法律责任。