
This strategy is an adaptive trading system that combines the ZigZag indicator with the Aroon indicator. The ZigZag indicator filters market noise and identifies significant price movements, while the Aroon indicator confirms trend strength and potential reversal points. Through the synergistic combination of these two indicators, the strategy maintains sensitivity to trends while also capturing market turning points in a timely manner.
The core logic of the strategy is based on the following key elements: 1. The ZigZag indicator filters short-term fluctuations by setting a depth parameter (zigzagDepth), retaining only statistically significant price movements. 2. The Aroon indicator generates Aroon Up and Aroon Down lines by calculating the time interval between highest and lowest prices (aroonLength). 3. Entry signals are triggered by two concurrent conditions: - Long positions are opened when Aroon Up crosses above Aroon Down and ZigZag shows an upward trend - Short positions are opened when Aroon Down crosses above Aroon Up and ZigZag shows a downward trend 4. Exit signals are triggered by Aroon indicator crossovers: - Long positions are closed when Aroon Down crosses above Aroon Up - Short positions are closed when Aroon Up crosses above Aroon Down
The strategy builds a comprehensive trend-following system through the combination of ZigZag and Aroon indicators. Its strengths lie in its adaptability and dual confirmation mechanism, while attention must be paid to parameter selection and market environment impacts. Through continuous optimization and improvement, the strategy shows promise for stable performance in actual trading.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Zig Zag + Aroon Strategy", overlay=true)
// Zig Zag parameters
zigzagDepth = input(5, title="Zig Zag Depth")
// Aroon parameters
aroonLength = input(14, title="Aroon Length")
// Zig Zag logic
var float lastZigZag = na
var float lastZigZagHigh = na
var float lastZigZagLow = na
var int direction = 0 // 1 for up, -1 for down
// Calculate Zig Zag
if (not na(high) and high >= ta.highest(high, zigzagDepth) and direction != 1)
lastZigZag := high
lastZigZagHigh := high
direction := 1
if (not na(low) and low <= ta.lowest(low, zigzagDepth) and direction != -1)
lastZigZag := low
lastZigZagLow := low
direction := -1
// Aroon calculation
highestHigh = ta.highest(high, aroonLength)
lowestLow = ta.lowest(low, aroonLength)
aroonUp = (aroonLength - (bar_index - ta.highestbars(high, aroonLength))) / aroonLength * 100
aroonDown = (aroonLength - (bar_index - ta.lowestbars(low, aroonLength))) / aroonLength * 100
// Long entry condition
longCondition = (ta.crossover(aroonUp, aroonDown)) and (lastZigZag == lastZigZagHigh)
if (longCondition)
strategy.entry("Long", strategy.long)
// Short entry condition
shortCondition = (ta.crossover(aroonDown, aroonUp)) and (lastZigZag == lastZigZagLow)
if (shortCondition)
strategy.entry("Short", strategy.short)
// Exit conditions
if (ta.crossover(aroonDown, aroonUp) and strategy.position_size > 0)
strategy.close("Long")
if (ta.crossover(aroonUp, aroonDown) and strategy.position_size < 0)
strategy.close("Short")
// Plot Zig Zag
plot(lastZigZag, color=color.blue, title="Zig Zag", linewidth=2, style=plot.style_stepline)
// Plot Aroon
hline(70, "Aroon Up Overbought", color=color.red)
hline(30, "Aroon Down Oversold", color=color.green)
plot(aroonUp, color=color.green, title="Aroon Up")
plot(aroonDown, color=color.red, title="Aroon Down")