在做量化的前几年,我曾一度陷入一种“数据迷信”。那时候,我每天都在追求更细粒度的时间戳,试图用神经网络从千分之一秒的波动里挖出 Alpha。
结果呢?模型在回测里美如画,一实盘就频繁被打脸。
后来我才明白,如果你不理解市场的大背景,那些所谓的信号,不过是海洋里毫无意义的涟漪。回过头去读 Murphy《金融市场技术分析》的第二章,读到查尔斯·道对潮汐、海浪与涟漪的类比时,我突然出了一身冷汗。
别把涟漪当成趋势
作为量化交易员,我们习惯把价格看作一个随机过程。但道氏理论告诉我,价格其实是有“层次”的。
他把趋势分成了三种:主要趋势(Tide)、次级趋势(Waves)和小型趋势(Ripples)。
我曾踩过一个大坑:在一个强势的多头市场里,因为捕捉到了一个日线级别的快速回调(涟漪),模型判断“趋势反转”,于是满仓做空。结果不出两天,主趋势像潮汐一样拍了过来,直接把我扇到了沙滩上。
查尔斯·道提醒我们,主要趋势通常能持续一年以上,而我们要做的,就是顺着潮汐的方向划船。在代码里,这意味着你的趋势过滤器必须具备足够长的窗口期,去过滤掉那些不足三周的、充满随机性的干扰信号。
所谓的“确认”,是逻辑的闭环
这一章最让我着迷的,是相互确认(Confirmation)的逻辑。
道氏认为,如果工业指数创了新高,但运输指数(物流)没跟上,那这个新高就是空中楼阁。用现在的白话讲,就是:如果大家都在买入股票,但把货运出去的卡车公司却没赚到钱,那说明经济复苏是假的。
这种“跨品种校验”的思维,其实就是最朴素的多因子关联逻辑。我们不能只盯着一个指标看。如果价格涨了,但成交量(Volume)却在萎缩,这说明大资金(Accumulation Phase)可能已经在撤退了,剩下的只是散户在狂欢。
后来我在写策略逻辑时,总会强制加上一句:除非量价齐升,否则不加仓。
代码中的“道氏思维”
在量化实现中,最难的部分是判断“失败波动”(Failure Swing)。即当价格无法突破前一个高峰,并跌破了前一个波谷时,那才是真正的离场信号。
下面我用一段简单的代码片段演示如何获取数据,并进行最基础的趋势逻辑校验。
import requests
import pandas as pd
# 这是一个模拟调用 alltick api 获取指数数据的例子
def check_dow_confirmation(symbol_ind, symbol_trans):
# API 路径和授权(此处为示例)
api_url = "https://api.alltick.com/v1/quote"
params = {
"symbols": f"{symbol_ind},{symbol_trans}",
"token": "your_alltick_token"
}
# 获取收盘价,道氏理论只看收盘价
response = requests.get(api_url, params=params).json()
# 假设我们已经处理成了两个序列
# industrial_index, transport_index
# 核心逻辑:确认两个指数是否都在创出近期收盘新高
if industrial_new_high and transport_new_high:
print("道氏多头确认:两大指数同步创新高,可以划入公参阶段")
return "BULL_CONFIRMED"
elif not industrial_new_high and not transport_new_high:
# 如果出现失败波动(Failure Swing)
print("趋势警报:价格未能创新高并跌破前低")
return "TREND_REVERSAL"
return "NEUTRAL"
# 我们在实盘中会更关注次级折返(Secondary Correction)
查尔斯·道从没指望用这套理论来预测每一个转折点。他说,道氏理论的目标是识别牛市或熊市的出现,并捕获中间那一段最肥美的利润。
这对我这种强迫症交易员来说,是一个巨大的心理建设:你不需要买在最低点,也不需要卖在最高点。
只要能在潮汐转身之前,感知到水流的阻力,并在海浪拍岸前全身而退,我们就已经赢过了 90% 的人。这套理论虽然写在 100 多年前,但在今天这个充满高频算法的电子市场里,它依然是我策略底层最硬的那块地基。