
本策略基于William Blau在其1995年出版的《动量,方向和背离》一书中描述的技术指标“动量均差指标”设计。该指标聚焦于价格动量、价格方向和价格背离三个关键要素,深入剖析价格与动量之间的关系。
该策略使用动量均差指标判断价格趋势和破裂点。首先计算价格的EMA均线,然后计算价格距该EMA线的偏差。对这个偏差再进行双重EMA平滑处理,得到最终的动量均差指标曲线。当该曲线上穿或下穿其自身的信号线时产生交易信号。具体来说,计算流程如下:
根据possig信号进行买入和卖出操作。
该策略具有以下优势:
该策略也存在一些潜在风险:
可通过优化参数,设定过滤条件,引入趋势判断等方式来减少这些风险。
该策略的优化方向如下:
本策略基于价格与动量关系的动量均差指标,捕捉价格反转时点。它参数化且可优化设计,可以适应不同周期和品种。但也存在一定假信号和逆势交易风险。通过进一步优化参数与模型,结合趋势判断等,可望获得更好绩效。
/*backtest
start: 2023-12-17 00:00:00
end: 2024-01-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version = 2
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 12/12/2016
// This is one of the techniques described by William Blau in his book "Momentum,
// Direction and Divergence" (1995). If you like to learn more, we advise you to
// read this book. His book focuses on three key aspects of trading: momentum,
// direction and divergence. Blau, who was an electrical engineer before becoming
// a trader, thoroughly examines the relationship between price and momentum in
// step-by-step examples. From this grounding, he then looks at the deficiencies
// in other oscillators and introduces some innovative techniques, including a
// fresh twist on Stochastics. On directional issues, he analyzes the intricacies
// of ADX and offers a unique approach to help define trending and non-trending periods.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Ergotic MDI (Mean Deviation Indicator) Bactest")
r = input(32, minval=1)
s = input(5, minval=1)
u = input(5, minval=1)
SmthLen = input(3, minval=1)
reverse = input(false, title="Trade reverse")
hline(0, color=blue, linestyle=line)
xEMA = ema(close, r)
xEMA_S = close - xEMA
xEMA_U = ema(ema(xEMA_S, s), u)
xSignal = ema(xEMA_U, u)
pos = iff(xEMA_U > xSignal, 1,
iff(xEMA_U < xSignal, -1, nz(pos[1], 0)))
possig = iff(reverse and pos == 1, -1,
iff(reverse and pos == -1, 1, pos))
if (possig == 1)
strategy.entry("Long", strategy.long)
if (possig == -1)
strategy.entry("Short", strategy.short)
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(xEMA_U, color=green, title="Ergotic MDI")
plot(xSignal, color=red, title="SigLin")