The MACD crossover trading strategy is a trend-following strategy. It uses the crossover of fast and slow moving average lines as buy and sell signals. When the fast moving average line crosses above the slow moving average line, a buy signal is generated. When the fast moving average line crosses below the slow moving average line, a sell signal is generated.
This strategy is based on the MACD indicator. The MACD indicator is the difference between two moving average lines with different parameters, reflecting the changes in the momentum of prices. Specifically, it is the difference between the fast moving average line (default parameter is 12-day line) and the slow moving average line (default parameter is 26-day line), called the MACD bar. To eliminate oscillations, the MACD indicator also introduces a DEA line or signal line, usually the 9-day weighted moving average of the MACD.
When the MACD bar breaks through the DEA line from bottom up and enters the positive area, it indicates that the short-term average line crosses above the long-term average line, indicating that the price trend turns to upward and a buy signal is generated. When the MACD falls from top to bottom through the DEA line and enters the negative area, it indicates that the short-term average line crosses below the long-term average line and the price trend turns to downward, generating a sell signal.
The strategy uses the crossover of the MACD bar and the DEA line to determine the timing of buying and selling. It buys when the MACD bar crosses above the DEA line and sells when the MACD bar crosses below the DEA line.
The advantages of this strategy include:
This strategy also has some risks:
To reduce risks, parameters can be adjusted, or combined with other indicators like volume and volatility indicators. In addition, proper stop loss and take profit strategies are also important.
This strategy can be optimized in the following aspects:
Parameter optimization to find the optimal parameters while avoiding overoptimization.
Combining with other indicators to form more powerful combination strategies.
Setting proper stop loss and take profit points to effectively control risks.
Adaptive optimization to apply this strategy to different markets and timeframes based on actual conditions.
The MACD crossover trading strategy captures trend changes at a low cost by following price trends. It is simple, practical and easy to implement, making it a suitable starter strategy for beginners. But this strategy also has some flaws. By constantly optimizing and improving, the actual effect of this strategy can be better. It is worth recommending.
/*backtest start: 2022-12-29 00:00:00 end: 2024-01-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("MACD Strategy by Forbes",default_qty_type=strategy.percent_of_equity, default_qty_value=100, overlay=false) fastLength = input(20) slowlength = input(40) MACDLength = input(4) // === INPUT BACKTEST RANGE === FromYear = input(defval = 2011, title = "From Year", minval = 2009) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2009) ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" MACD = ema(close, fastLength) - ema(close, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD // Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 f1 = plot(MACD,color=red) s1 = plot(aMACD,color=blue) plotColor = if delta > 0 delta > delta[1] ? lime : green else delta < delta[1] ? maroon : red plot(delta, color=plotColor, style=columns) if (crossover(delta, 0)) strategy.entry("Buy", true, when=window(), comment="Buy") if (crossunder(delta, 0)) strategy.close_all(when=window()) //plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)