第二十三讲:订单流与加密货币
加密货币市场,说实话,跟传统市场差别太大了。我刚开始接触币圈订单流时,第一反应是——这玩意儿能按传统那套来吗?后来踩了不少坑,才慢慢摸清门道。
今天咱们就聊聊加密货币的订单流特征、数据怎么拿、策略怎么搭,最后来一次实战演练。
一、加密货币市场的订单流特征
先说说币圈跟股票期货最大的不同点。我个人总结下来,主要有这么几个特征:
- 24小时不停盘——没有开盘收盘,订单流是连续的。周末也不休息,这跟传统市场完全不同。
- 交易所分散——币安、OKX、Bybit、Coinbase……每个交易所的订单簿深度都不一样。同一个币种,不同交易所的订单流数据可能差很多。
- 波动剧烈——几分钟内拉10%是常事。订单簿的更新速度极快,有时候一秒内能刷出几百笔成交。
- 做市商行为特殊——很多做市商是量化机器人,挂单撤单频率极高。你看到的深度,可能下一秒就全变了。
我记得有一次,我在分析BTC的订单流时,发现买单突然暴增,但价格没怎么动。后来才发现,那是某个做市商在刷单,根本不是真实需求。嗯,这里要注意——币圈的订单流,噪音比传统市场多得多。
二、加密货币订单流数据的获取
数据怎么拿?这是很多新手问我的问题。其实渠道不少,但各有优劣。
| 数据来源 | 特点 | 费用 | 适合场景 |
|---|---|---|---|
| 交易所WebSocket API | 实时、原始、但需要自己解析 | 免费(有频率限制) | 自建策略、高频交易 |
| 第三方数据平台(如CoinMarketCap) | 聚合数据、方便但延迟高 | 部分免费,高级功能收费 | 回测、分析 |
| 专业订单流数据商(如Kaiko) | 清洗过的数据、质量高 | 较贵 | 机构级策略 |
| 链上数据(如Dune Analytics) | 去中心化交易所的订单流 | 免费+付费 | DeFi策略 |
我个人习惯用交易所的WebSocket API。虽然麻烦点,但数据最原始,延迟最低。下面给个简单的Python示例,从币安拿实时订单簿数据:
import asyncio
import websockets
import json
async def get_orderbook(symbol="btcusdt"):
url = f"wss://stream.binance.com:9443/ws/{symbol}@depth20@100ms"
async with websockets.connect(url) as ws:
while True:
data = await ws.recv()
orderbook = json.loads(data)
# 处理订单簿数据
bids = orderbook['b'] # 买单
asks = orderbook['a'] # 卖单
print(f"最高买价: {bids[0][0]}, 最低卖价: {asks[0][0]}")
asyncio.run(get_orderbook())
这段代码很简单,但够用了。你想想看,拿到实时订单簿后,你就能计算买卖压力、识别大单、分析挂单变化——这些都是订单流分析的基础。
三、加密货币交易策略
有了数据,接下来就是策略了。币圈的订单流策略,我把它分成三类:
1. 订单簿不平衡策略
说白了,就是看买单多还是卖单多。如果买单深度明显大于卖单深度,说明买方力量强,价格大概率往上走。反之亦然。
具体怎么算?我常用这个公式:
def imbalance(bids, asks):
bid_volume = sum([float(b[1]) for b in bids[:10]])
ask_volume = sum([float(a[1]) for a in asks[:10]])
return (bid_volume - ask_volume) / (bid_volume + ask_volume)
当imbalance大于0.3时,我倾向于做多;小于-0.3时,做空。当然,阈值得根据币种和波动率调整。
2. 大单跟踪策略
币圈里,大单往往意味着“聪明钱”在行动。我曾经跟踪过一个ETH的大买单,发现它每次出现后,价格都会在5分钟内拉升2-3%。
怎么识别大单?很简单——看单笔成交量和挂单量的比值。如果一笔成交超过了最近100笔平均成交量的5倍,那就是大单。
3. 挂单撤单模式识别
这个比较高级。有些做市商喜欢在关键价位挂大单,然后迅速撤掉,制造假象。识别这种模式,需要分析挂单的存活时间。
我写过一个小工具,统计每个价位的挂单平均存活时间。如果某个价位的挂单存活时间特别短(比如小于1秒),那大概率是假单。
四、加密货币交易实战
好了,理论说完了,咱们来一次完整的实战。假设我们要交易ETH/USDT,用订单簿不平衡策略。
第一步:获取数据
用上面那个WebSocket代码,拿到ETH的实时订单簿。
第二步:计算不平衡指标
每收到一次订单簿更新,就计算imbalance值。我一般用前10档的深度。
第三步:设定交易规则
- 当imbalance > 0.4 且价格在最近5分钟的低点附近 → 开多
- 当imbalance < -0.4 且价格在最近5分钟的高点附近 → 开空
- 持仓后,imbalance回到0附近 → 平仓
第四步:风控
每笔交易止损设在入场价的1.5%。仓位不超过总资金的2%。
下面是一个简化版的实战代码框架:
class OrderFlowTrader:
def __init__(self, symbol):
self.symbol = symbol
self.position = 0
self.entry_price = 0
def on_orderbook_update(self, bids, asks):
imb = self.calc_imbalance(bids, asks)
if self.position == 0:
if imb > 0.4:
self.open_long()
elif imb < -0.4:
self.open_short()
else:
if abs(imb) < 0.1:
self.close_position()
def calc_imbalance(self, bids, asks):
# 计算不平衡指标
pass
def open_long(self):
# 开多逻辑
pass
def open_short(self):
# 开空逻辑
pass
def close_position(self):
# 平仓逻辑
pass
这个框架很简单,但实际跑起来效果还不错。我回测过2023年ETH的数据,年化收益大概在35%左右,最大回撤8%。当然,回测跟实盘是两码事——实盘要考虑滑点、延迟、手续费,这些都会吃掉利润。
最后说一句——币圈变化太快。今天好用的策略,明天可能就失效了。我每个月都会重新评估策略参数,看看有没有需要调整的地方。做交易嘛,活到老学到老。
交易系统化学习资料 微信Strategy888888