This article introduces a trend following trading system that combines Darvas Box and 25-period Moving Average (MA25). The strategy identifies price consolidation zones through box formation and confirms trends with moving averages to capture strong market movements during breakouts. The system design thoroughly considers trend continuation and false breakout filtering, providing traders with a complete framework for market entry and exit.
The strategy consists of three core components:
The strategy builds a robust trading system by combining classic Darvas Box theory with moving average trend following. Its main advantage lies in effectively capturing trending markets while controlling risk through multiple filtering mechanisms. Although there is some inherent lag, the strategy can achieve stable performance in trending markets through proper parameter optimization and risk management. Traders are advised to focus on market environment selection and dynamically adjust parameters based on actual conditions when implementing the strategy.
/*backtest start: 2024-10-01 00:00:00 end: 2024-10-31 23:59:59 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("DARVAS BOX with MA25 Buy Condition", overlay=true, shorttitle="AEG DARVAS") // Input for box length boxp = input.int(5, "BOX LENGTH") // Calculate 25-period moving average ma25 = ta.sma(close, 25) // Lowest low and highest high within the box period LL = ta.lowest(low, boxp) k1 = ta.highest(high, boxp) k2 = ta.highest(high, boxp - 1) k3 = ta.highest(high, boxp - 2) // New high detection NH = ta.valuewhen(high > k1[1], high, 0) // Logic to detect top and bottom of Darvas Box box1 = k3 < k2 TopBox = ta.valuewhen(ta.barssince(high > k1[1]) == boxp - 2 and box1, NH, 0) BottomBox = ta.valuewhen(ta.barssince(high > k1[1]) == boxp - 2 and box1, LL, 0) // Plot the top and bottom Darvas Box lines plot(TopBox, linewidth=3, color=color.green, title="Top Box") plot(BottomBox, linewidth=3, color=color.red, title="Bottom Box") plot(ma25, color=#2195f31e, linewidth=2, title="ma25") // --- Buy and Sell conditions --- // Buy when price breaks above the Darvas Box AND MA15 buyCondition = ta.crossover(close, TopBox) and close > ma25 // Sell when price drops below the Darvas Box sellCondition = ta.crossunder(close, BottomBox) // --- Buy and Sell Signals --- // Plot BUY+ and SELL labels plotshape(series=buyCondition, title="Buy+ Signal", location=location.abovebar, color=#72d174d3, style=shape.labeldown, text="BUY") plotshape(series=sellCondition, title="Sell Signal", location=location.belowbar, color=color.rgb(234, 62, 62, 28), style=shape.labelup, text="SELL") // --- Strategy execution --- if (buyCondition) strategy.entry("Buy", strategy.long) if (sellCondition) strategy.close("Buy")