Trend Tracking Strategy Based on Moving Average

Author: ChaoZhang, Date: 2024-02-27 16:29:06



This strategy uses the 500-day simple moving average to determine the market trend direction and generate trading signals when the price breaks through the moving average. It belongs to a typical trend tracking strategy. The strategy is simple, easy to implement, and suitable for medium-to-long term trend trading.

Strategy Principle

When the price is above the 500-day moving average and the previous day’s price is below that average line, a buy signal is generated. When the price is below the 500-day moving average and the previous day’s price is above that average line, a sell signal is generated. In other words, this strategy uses the relationship between price and moving average to determine market trend and thus generate trading signals.

Specifically, the main indicator of the strategy is the 500-day simple moving average. This average line can effectively determine the long-term trend direction. When the price breaks through this line upward, it means the market has shifted to a bullish stance, at which point a buy signal is generated. And when the price shows a reversal, breaking through this line downward, it means the market has shifted to a bearish stance, at which point a sell signal is generated.

Advantage Analysis

  • The strategy idea is simple and clear, easy to understand and implement
  • Moving average is an effective technical indicator for judging long-term trends
  • It can effectively filter out short-term market noise and capture medium-to-long term trends
  • Trading signals are clear without being overly frequent
  • It can maximize returns and helps reduce trading costs and slippage losses

Risk Analysis

  • Long-term moving averages can lag and fail to capture short-term adjustments in a timely manner
  • Sudden trend reversal in the broader market can result in large losses
  • Less frequent trading means some trading opportunities may be missed
  • Unable to trade around the clock mechanically

To mitigate the above risks, the following measures can be taken:

  1. Use other indicators to determine if there is a possibility of short-term adjustment
  2. Set stop loss points to control single trade loss
  3. Adjust moving average period parameters appropriately to find optimal combinations

Optimization Diretions

  • Try combinations of different types of moving averages to find the optimal parameters
  • Use other indicators to filter out false signals
  • Adjust position holdings and stop loss strategies based on specific products
  • Optimize capital management for risk control


In general, this is a simple and practical strategy. The idea of using the price-moving average relationship to determine trend direction and generate trading signals is straightforward and easy to understand and implement. It can effectively track medium-to-long term trends and filter out short-term market noise. But there are also some lagging issues. Further improvements can be made through parameter optimization, incorporating other indicators, etc.

start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]

strategy("Una AI Strategy", overlay=true)

// Устанавливаем период скользящей средней
smaPeriod = input(500, title="SMA Period")

// Вычисляем скользящую среднюю
sma = ta.sma(close, smaPeriod)

// Логика для входа в долгую позицию при пересечении вверх
longCondition = close > sma and close[1] <= sma

// Логика для входа в короткую позицию при пересечении вниз
shortCondition = close < sma and close[1] >= sma

// Вход в позиции
strategy.entry("Buy", strategy.long, when=longCondition)
strategy.entry("Sell", strategy.short, when=shortCondition)

// Выход из позиции
strategy.close("Buy", when=shortCondition)
strategy.close("Sell", when=longCondition)

// Рисуем линию скользящей средней для визуального анализа
plot(sma,, title="SMA")

// Метки сигналов
plotshape(series=longCondition, title="Buy Signal",, style=shape.triangleup, size=size.small, location=location.belowbar)
plotshape(series=shortCondition, title="Sell Signal",, style=shape.triangledown, size=size.small, location=location.abovebar)