MACD Valley Detector Strategy

Author: ChaoZhang, Date: 2024-04-12 17:01:21



The MACD Valley Detector strategy is a trading strategy based on the MACD indicator. The strategy generates buy signals by detecting valleys in the MACD indicator. When the MACD indicator forms a valley, the MACD value is less than or equal to -0.4, and the difference between the MACD and its signal line is less than 0, the strategy issues a buy signal and sets a take profit price.

Strategy Principle

The core of the MACD Valley Detector strategy is to use the MACD indicator to capture potential reversal opportunities. The MACD indicator is calculated by the difference between two exponential moving averages (EMAs), reflecting changes in price momentum. When the MACD indicator forms a valley, it suggests that the downward momentum of the price may weaken, and there is a possibility of a reversal.

The strategy uses the following conditions to determine the MACD valley:

  1. The current difference between MACD and the signal line is greater than the previous difference
  2. The previous difference is less than the difference two periods ago
  3. The MACD value is less than or equal to -0.4
  4. The difference between MACD and the signal line is less than 0

When the above conditions are met simultaneously, the strategy considers it as a MACD valley and issues a buy signal. At the same time, the strategy sets a fixed take profit price, which is the buy price plus a fixed price difference (takeProfitValue).

Advantage Analysis

  1. The MACD indicator is a widely used momentum indicator that can effectively capture trend changes in prices.
  2. By detecting MACD valleys, the strategy attempts to capture potential reversal opportunities and looks for buying opportunities after price declines.
  3. The strategy uses multiple conditions to confirm the MACD valley, improving the reliability of the signals.
  4. Setting a fixed take profit price helps control risk and lock in profits.

Risk Analysis

  1. The MACD indicator has a lag and may generate delayed signals.
  2. The strategy relies on fixed parameter settings, such as the length of the fast and slow moving averages and the length of the MACD signal line, which may perform poorly under different market conditions.
  3. The strategy lacks a clear stop-loss mechanism and may suffer significant losses when the market continues to decline.
  4. The fixed take profit price may limit the profit potential of the strategy, especially in strong trending markets.

Optimization Direction

  1. Consider adding a dynamic stop-loss mechanism, such as a stop-loss based on the ATR indicator, to better control risk.
  2. Optimize the parameters of the MACD indicator, such as using genetic algorithms or other methods to find the optimal parameter combination.
  3. Combine with other technical indicators or market state filters, such as RSI, Bollinger Bands, etc., to improve the quality and reliability of signals.
  4. Explore dynamic take profit strategies, such as adjusting take profit levels based on market volatility or price behavior, to fully exploit trending markets.


The MACD Valley Detector strategy is a trading strategy based on detecting valleys in the MACD indicator. By capturing the valleys of the MACD indicator, the strategy attempts to find potential reversal opportunities and make purchases. The strategy uses multiple conditions to confirm the signals and sets a fixed take profit price. Although this strategy has certain advantages, such as utilizing the widely used MACD indicator and multi-condition confirmation, it also has some risks and limitations, such as lag, fixed parameters, lack of clear stop-loss, etc. To improve the strategy, one can consider introducing dynamic stop-loss, parameter optimization, combining with other indicators for filtering, and dynamic take profit methods. Overall, the MACD Valley Detector strategy provides an idea for capturing reversal opportunities, but still needs to be optimized and improved based on actual market conditions and trading needs.

start: 2024-03-12 00:00:00
end: 2024-04-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]

// This source code is subject to the terms of the Mozilla Public License 2.0 at
// © freditansari

strategy("MACD Valley Detector", overlay=true)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD

rsi = ta.rsi(close, 14)
atr = ta.atr(14)


takeProfitValue =7
// stopLossValue = 1

// close[0] < close[1] and close[1] > close[2]
is_valley= delta[0] > delta[1] and delta[1]<delta[2]? 1:0

// plot(is_valley , "valley?")

if(is_valley==1 and MACD<=-0.4 and delta <0)
	takeProfit = close +takeProfitValue
	action = "buy"
    // strategy.entry("long", strategy.long, qty=qty)
    // // strategy.exit("exit", "long", stop=stopLoss, limit=takeProfit)
    // strategy.exit("exit", "long", limit=takeProfit)

if (ta.crossover(delta, 0))
	stopLoss = low -0.3
    takeProfit = high +0.3
	strategy.entry("MacdLE", strategy.long,qty=qty, comment="MacdLE")
	strategy.exit("exit long", "MacdLE", limit=takeProfit)
	// strategy.exit("exit long", "MacdLE", stop=stopLoss, limit=takeProfit)
if (ta.crossunder(delta, 0))
	stopLoss = high + 0.3
    takeProfit = low - 0.3
	strategy.entry("MacdSE", strategy.short,qty=qty, comment="MacdSE")
	strategy.exit("exit long", "MacdLE", limit=takeProfit)

	// strategy.exit("exit short", "MacdSE", stop=stopLoss, limit=takeProfit)
//plot(strategy.equity, title="equity",, linewidth=2, style=plot.style_areabr)