0bps

Strategy vault / Trend following

Optimized MACD Trend Following Strategy with ATR based Risk Management

This strategy is an automated Bitcoin trading strategy based on MACD signal line crossovers. It utilizes the MACD indicator to identify changes in trend and sets stop loss and take profit levels based on the Average…

Author
ChaoZhang
Complexity
Starter · 48 lines
Parameters
6
Backtest bar
1d · swing
Tested on
BTC/USDT · futures

IMG

Overview

This strategy is an automated Bitcoin trading strategy based on MACD signal line crossovers. It utilizes the MACD indicator to identify changes in trend and sets stop loss and take profit levels based on the Average True Range (ATR) to manage risk on each trade. The strategy aims to capture strong uptrends while controlling risk through dynamic stop loss and take profit levels.

Strategy Principle

The core of the strategy is the MACD indicator, which is calculated as the difference between two moving averages (a fast line and a slow line). A buy signal is generated when the MACD line crosses above the signal line and the MACD line is below zero. This indicates that the price may be shifting towards an uptrend. Once a buy signal is confirmed, the strategy enters a long trade at the current closing price.

The stop loss and take profit levels are calculated based on the ATR. The ATR measures the average range of price movement over a period of time. By multiplying the ATR by specific multipliers, dynamic stop loss and take profit levels are obtained. This helps adjust these levels based on recent market volatility.

Strategy Advantages

  1. Trend Following: The strategy utilizes the MACD indicator to identify potential trend changes, allowing it to capture strong uptrends.

  2. Risk Management: By using dynamic stop loss and take profit levels based on ATR, the strategy manages risk on each trade. This helps limit potential losses while allowing profits to grow in favorable trends.

  3. Parameter Optimization: The input parameters of the strategy, such as the lengths of the MACD and the multipliers for ATR, can be optimized to adapt to different market conditions and trading styles.

Strategy Risks

  1. False Signals: The MACD indicator may sometimes generate false trading signals, leading to unprofitable trades.

  2. Trend Reversals: The strategy may be vulnerable when trends reverse. If the price suddenly reverses, the stop loss level may not provide sufficient protection.

  3. Lack of Diversification: The strategy relies solely on the MACD indicator and ATR. In certain market conditions, this may not be enough to make well-informed trading decisions.

Strategy Optimization Directions

  1. Incorporate Additional Indicators: Consider incorporating other technical indicators, such as RSI or moving averages, to enhance the reliability of signals.

  2. Optimize Parameters: Use historical data to optimize the input parameters, such as the lengths of the MACD, the multipliers for ATR, and the risk percentage, to find the optimal combination of parameters.

  3. Introduce Position Sizing: Implement more advanced position sizing methods to adjust the size of each trade based on market conditions and account balance.

Summary

This optimized MACD trend-following strategy demonstrates how to combine a momentum indicator with risk management techniques for trading in the cryptocurrency market. By leveraging MACD signal line crossovers to identify potential trend changes and using dynamic stop loss and take profit levels based on ATR to manage risk, the strategy aims to capture favorable price movements while minimizing losses. However, further backtesting, optimization, and risk assessment are necessary before implementing the strategy.

Parameters

NameDefaultWhat it controls
v_input_112fastLength
v_input_226slowLength
v_input_39signalSmoothing
v_input_float_12Risk Percentage (%)
v_input_float_22ATR Multiplier for Stop Loss
v_input_float_35ATR Multiplier for Take Profit

Source Pine Script

/*backtest
start: 2023-04-12 00:00:00
end: 2024-04-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Optimized MACD Trend-Following Strategy with Risk Management", shorttitle="Opt. MACD RM", overlay=true)

// Input parameters
fastLength = input(12)
slowLength = input(26)
signalSmoothing = input(9)
riskPercent = input.float(2, title="Risk Percentage (%)") / 100 // 2% risk per trade
atrMultiplierSL = input.float(2, title="ATR Multiplier for Stop Loss")
atrMultiplierTP = input.float(5, title="ATR Multiplier for Take Profit")

// Calculate ATR for 5-minute timeframe
atr5 = ta.atr(5)

// Calculate stop loss and take profit levels based on ATR
stopLoss = atr5 * atrMultiplierSL
takeProfit = atr5 * atrMultiplierTP

// Initialize trade variables
var float entryPrice = na
var float stopLossPrice = na
var float takeProfitPrice = na

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalSmoothing)

// Buy signal
buySignal = ta.crossover(macdLine, signalLine) and macdLine < 0 and not na(close[1]) and close > open

// Long entry
if buySignal and strategy.opentrades == 0
    entryPrice := close
    stopLossPrice := close - stopLoss
    takeProfitPrice := close + takeProfit
    strategy.entry("Buy", strategy.long)
    strategy.exit("Stop Loss/TP", "Buy", stop=stopLossPrice, limit=takeProfitPrice)

// Plot stop loss and take profit levels
plot(entryPrice > 0 ? stopLossPrice : na, color=color.red, style=plot.style_stepline, title="Stop Loss")
plot(entryPrice > 0 ? takeProfitPrice : na, color=color.green, style=plot.style_stepline, title="Take Profit")

Published by ChaoZhang on the FMZ strategy square · last modified 2024-04-18. 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.

in Claude Code, Cursor, Codex & 4 more
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/Optimized-MACD-Trend-Following-Strategy-with-ATR-based-Risk-Management.md
  1. npx agenkit install engineering-kit in your project
  2. Paste the command into your agent and approve each phase
  3. 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

esc

Try , , or .

↑↓ move↵ open