Strategy vault / Trend following
Multi Zone SMC Theory Based Intelligent Trend Following Strategy
This strategy, based on Smart Money Concepts (SMC) theory, constructs a comprehensive trend following trading system by dividing the market into three key price zones: Equilibrium, Premium, and Discount. It combines…

Overview
This strategy, based on Smart Money Concepts (SMC) theory, constructs a comprehensive trend following trading system by dividing the market into three key price zones: Equilibrium, Premium, and Discount. It combines a 50-period Simple Moving Average (SMA) with Order Block analysis to identify trading opportunities through price movements between different zones.
Strategy Principles
The core logic includes several key elements:
- Calculates swing highs and lows from the last 8 candles to determine market range.
- Defines the equilibrium zone as the midpoint between swing high and low, with premium zone above and discount zone below.
- Uses 50-period SMA to determine overall trend direction - bullish above SMA, bearish below.
- Generates buy signals in discount zone when price is above SMA, and sell signals in premium zone when price is below SMA.
- Identifies order blocks by analyzing highest and lowest prices within 20 candles to confirm trading signals.
- Marks swing highs and lows as liquidity zones to predict potential price reversal points.
Strategy Advantages
- Structured zone division method providing clear market phase identification.
- Multiple signal confirmation mechanism through triple verification of zones, trends, and order blocks.
- Dynamic adaptation to market changes with real-time key price level updates.
- Comprehensive risk management system including stop-loss and position management.
- Clean and efficient code implementation, easy to maintain and optimize.
Strategy Risks
- Potential false breakout signals in volatile markets.
- Indicator lag in rapid market reversals due to historical data dependence.
- Fixed-period moving average may not suit all market environments.
- Requires proper stop-loss settings for risk control. Recommended risk management measures:
- Dynamic parameter adjustment for different market conditions
- Addition of volatility filters
- Implementation of strict money management rules
- Regular backtesting and parameter optimization
Optimization Directions
- Introduce adaptive parameters:
- Dynamically adjust zone ranges based on market volatility
- Implement adaptive-period moving averages
- Enhanced signal filtering:
- Add volume confirmation mechanism
- Incorporate momentum indicators
- Improve risk management:
- Implement dynamic stop-loss mechanism
- Optimize position sizing algorithm
- Increase execution efficiency:
- Optimize calculation logic to reduce resource consumption
- Improve signal generation mechanism for faster response
Summary
This strategy builds a robust trend following system through intelligent zone division and multiple signal confirmation mechanisms. Its core strengths lie in clear market structure analysis and comprehensive risk management. Through continuous optimization and improvement, the strategy shows promise for stable performance across different market conditions. Traders are advised to adjust parameters based on specific market characteristics and maintain strict risk control when implementing the strategy in live trading.
Source Pine Script
/*backtest
start: 2024-11-21 00:00:00
end: 2024-11-28 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
//@version=5
strategy("SMC Strategy with Premium, Equilibrium, and Discount Zones", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === Instellingen voor Swing High en Swing Low ===
swingHighLength = input.int(8, title="Swing High Length")
swingLowLength = input.int(8, title="Swing Low Length")
// Vind de recente swing highs en lows
var float swingHigh = na
var float swingLow = na
if (ta.highestbars(high, swingHighLength) == 0)
swingHigh := high
if (ta.lowestbars(low, swingLowLength) == 0)
swingLow := low
// Bereken Equilibrium, Premium en Discount Zones
equilibrium = (swingHigh + swingLow) / 2
premiumZone = swingHigh
discountZone = swingLow
// Plot de zones op de grafiek
plot(equilibrium, title="Equilibrium", color=color.blue, linewidth=2)
plot(premiumZone, title="Premium Zone (Resistance)", color=color.red, linewidth=1)
plot(discountZone, title="Discount Zone (Support)", color=color.green, linewidth=1)
// === Simple Moving Average om trendrichting te bepalen ===
smaLength = input.int(50, title="SMA Length")
sma = ta.sma(close, smaLength)
plot(sma, title="SMA", color=color.orange)
// === Entry- en Exitregels op basis van zones en trendrichting ===
// Koop- en verkoopsignalen
buySignal = close < equilibrium and close > discountZone and close > sma // Prijs in discount zone en boven SMA
sellSignal = close > equilibrium and close < premiumZone and close < sma // Prijs in premium zone en onder SMA
// Order Blocks (Eenvoudig: hoogste en laagste kaars binnen de laatste 20 kaarsen)
orderBlockLength = input.int(20, title="Order Block Length")
orderBlockHigh = ta.highest(high, orderBlockLength)
orderBlockLow = ta.lowest(low, orderBlockLength)
// Koop- en verkoopsignalen met order block bevestiging
buySignalOB = buySignal and close >= orderBlockLow // Koop in discount zone met ondersteuning van order block
sellSignalOB = sellSignal and close <= orderBlockHigh // Verkoop in premium zone met weerstand van order block
// === Uitvoeren van Trades ===
if (buySignalOB)
strategy.entry("Buy", strategy.long)
if (sellSignalOB)
strategy.entry("Sell", strategy.short)
// === Plots voor visuele feedback ===
plotshape(buySignalOB, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(sellSignalOB, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// === Liquiditeitsjachten aangeven ===
// Simpel: markeer recente swing highs en lows als liquiditeitszones
liquidityZoneHigh = ta.valuewhen(high == swingHigh, high, 0)
liquidityZoneLow = ta.valuewhen(low == swingLow, low, 0)
// Markeer liquiditeitszones
plot(liquidityZoneHigh, title="Liquidity Zone High", color=color.red, linewidth=1, style=plot.style_cross)
plot(liquidityZoneLow, title="Liquidity Zone Low", color=color.green, linewidth=1, style=plot.style_cross)
Published by ChaoZhang on the FMZ strategy square · last modified 2024-11-29. Collected in the Quant Trading Vault. Unvalidated research: re-test with your own data and costs before trusting it.
Build this with AgenKit
A spec is not a trading system. Paste this into your coding agent and AgenKit runs a specialist team — architecture, test-first build, risk gates, review — with paper trading on by default.
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/Multi-Zone-SMC-Theory-Based-Intelligent-Trend-Following-Strategy.md- npx agenkit install engineering-kit in your project
- Paste the command into your agent and approve each phase
- Get tests, backtest, risk controls and a paper-trading switch
Understand it first
Before you run this, read the lesson behind the idea and how to backtest it honestly. Specs like this one are the survivors of an unknown number of trials; deflate their results accordingly.
Related specs
- Adaptive Trading Strategy Based on Stochastic RSI Dual Line CrossoverPine Script · Trend following · 4h
- Dual Moving Average Convergence Trend Tracking StrategyPine Script · Trend following · 1d
- Dual SMA Crossover StrategyPine Script · Trend following · 5m
- Dynamic Moving Average and Bollinger Bands Cross Strategy with Fixed Stop Loss Optimization ModelPine Script · Trend following · 3h
- Dynamic Signal Line Trend Following Strategy Combining ATR and VolumePine Script · Trend following · 1h
- EMA SMA Trend Following with Swing Trading Strategy Combined Volume Filter and Percentage Take Profit Stop Loss SystemPine Script · Trend following · 1d