17、订单流与趋势跟踪:订单流趋势确认,Delta趋势与价格趋势的共振,Python实现趋势跟踪策略
趋势跟踪,说白了就是「顺势而为」。但怎么判断这个「势」是真的?
很多人看价格涨了就去追,结果一追就套。为什么?因为价格趋势可能是假的,是主力故意拉给你看的。我做了这么多年交易,吃过太多这种亏了。
后来我发现,订单流数据能帮我们看清真相。尤其是Delta趋势和价格趋势的共振,这才是真正的趋势信号。
订单流趋势确认:别被价格骗了
价格涨了,不代表买方真的强。你想想看,如果价格涨了,但Delta是负的(卖方主动成交更多),那这波上涨就是虚的。说白了,就是有人在上面挂大卖单,价格被被动推上去的。
我个人习惯,先看Delta趋势,再看价格趋势。两者方向一致,我才敢进场。
核心逻辑:
- Delta趋势向上 + 价格趋势向上 = 多头共振,做多
- Delta趋势向下 + 价格趋势向下 = 空头共振,做空
- Delta趋势与价格趋势背离 = 趋势可能反转,观望
我在项目中遇到过好几次,价格创了新高,但Delta却一波比一波低。这种背离,往往就是趋势衰竭的信号。嗯,这时候千万别追,等反转信号出来再动手。
Delta趋势与价格趋势的共振:实战案例
举个例子。假设某品种在15分钟图上,价格连续三根K线创新高,同时Delta也同步创新高。这就是典型的共振。我一般会在第三根K线收盘前,确认Delta没有回落,然后进场做多。
反过来,如果价格创新高,但Delta明显萎缩,甚至转负,那就要小心了。我曾经有一次,看到价格突破前高,兴奋得直接追了进去,结果被套在最高点。后来复盘才发现,Delta早就跟不上了,这就是典型的「量价背离」。
我的经验:
共振信号出现后,不要急着全仓。先小仓位试单,等价格回踩确认后再加仓。趋势跟踪的核心是「拿住」,不是「一把梭」。
Python实现趋势跟踪策略
好了,理论说完了,咱们上代码。下面这个策略,就是基于Delta趋势和价格趋势的共振来做的。
import pandas as pd
import numpy as np
def calculate_delta_trend(delta_series, window=10):
"""
计算Delta趋势:用简单移动平均判断方向
"""
delta_ma = delta_series.rolling(window=window).mean()
delta_trend = np.where(delta_ma > delta_ma.shift(1), 1, -1)
return delta_trend
def calculate_price_trend(close_series, window=10):
"""
计算价格趋势:同样用移动平均
"""
price_ma = close_series.rolling(window=window).mean()
price_trend = np.where(price_ma > price_ma.shift(1), 1, -1)
return price_trend
def trend_following_strategy(df, delta_col='delta', close_col='close', window=10):
"""
趋势跟踪策略主函数
"""
df['delta_trend'] = calculate_delta_trend(df[delta_col], window)
df['price_trend'] = calculate_price_trend(df[close_col], window)
# 共振信号:两者方向一致
df['signal'] = 0
df.loc[(df['delta_trend'] == 1) & (df['price_trend'] == 1), 'signal'] = 1 # 做多
df.loc[(df['delta_trend'] == -1) & (df['price_trend'] == -1), 'signal'] = -1 # 做空
return df
# 示例用法
# df = pd.read_csv('orderflow_data.csv')
# df = trend_following_strategy(df)
# print(df[['close', 'delta', 'delta_trend', 'price_trend', 'signal']].tail(20))
注意:
这里的window参数需要根据品种和周期调整。我个人习惯,15分钟图用10-15周期,1小时图用20-30周期。太小了容易假信号,太大了反应太慢。
策略优化:加入过滤条件
光靠共振信号还不够,有时候震荡行情也会出共振,但很快就被打脸。我一般会加两个过滤条件:
- Delta绝对值阈值:只有Delta的绝对值超过某个值(比如历史均值的1.5倍),才认为信号有效。
- 价格突破确认:价格必须突破近期的高点或低点,才进场。
def enhanced_trend_following(df, delta_col='delta', close_col='close',
window=10, delta_threshold=1.5):
"""
增强版趋势跟踪:加入过滤条件
"""
df = trend_following_strategy(df, delta_col, close_col, window)
# 计算Delta的历史均值
delta_mean = df[delta_col].rolling(window=50).mean()
delta_std = df[delta_col].rolling(window=50).std()
# 过滤条件1:Delta绝对值超过阈值
df['delta_strong'] = np.abs(df[delta_col]) > (delta_mean + delta_threshold * delta_std)
# 过滤条件2:价格突破近期高点/低点
df['high_20'] = df[close_col].rolling(window=20).max().shift(1)
df['low_20'] = df[close_col].rolling(window=20).min().shift(1)
df['price_breakout'] = 0
df.loc[df[close_col] > df['high_20'], 'price_breakout'] = 1
df.loc[df[close_col] < df['low_20'], 'price_breakout'] = -1
# 最终信号:共振 + 过滤条件
df['final_signal'] = 0
df.loc[(df['signal'] == 1) & (df['delta_strong']) & (df['price_breakout'] == 1), 'final_signal'] = 1
df.loc[(df['signal'] == -1) & (df['delta_strong']) & (df['price_breakout'] == -1), 'final_signal'] = -1
return df
知识体系结构图
下面这张图,把整个逻辑串起来了。你可以把它当成一个检查清单,每次交易前对照着看一遍。
避坑指南
最后,分享几个我踩过的坑:
- 不要只看单根K线的Delta:单根K线的Delta波动很大,容易出假信号。我习惯看累积Delta或者移动平均。
- 共振不是万能的:在横盘震荡市里,共振信号也会频繁出现,但基本都是假的。这时候最好别做,或者缩小周期。
- 止损一定要设:趋势跟踪策略最大的风险是趋势反转。我曾经有一次没设止损,结果一波回调把利润全吐回去了。嗯,从那以后,我每笔单子都带止损。
一句话总结:
价格趋势是表象,Delta趋势是本质。两者共振,才是真正的趋势。别被价格骗了,多看Delta。
无相订单流研究社 微信Lucian808555