0bps

Strategy vault / Momentum

Bidirectional MACD Momentum and EMA Trend Trading Strategy

This strategy is a bidirectional trading system that combines MACD momentum indicator with EMA trend analysis. It primarily bases entry decisions on MACD crossover signals and price position relative to EMA(200). The…

Author
ianzeng123
Complexity
Starter · 61 lines
Parameters
0
Backtest bar
1m · intraday
Tested on
ETH/USDT · spot

IMG IMG

Overview

This strategy is a bidirectional trading system that combines MACD momentum indicator with EMA trend analysis. It primarily bases entry decisions on MACD crossover signals and price position relative to EMA(200). The strategy employs a 2:1 risk-reward ratio, can operate on a 5-minute timeframe, and supports flexible parameter adjustment.

Strategy Principles

The core logic is based on the following key conditions:

  1. Long Entry Conditions:
    • Price above EMA(200)
    • MACD line crosses signal line from below
    • MACD value below zero line
  2. Short Entry Conditions:
    • Price below EMA(200)
    • MACD line crosses signal line from above
    • MACD value above zero line
  3. Risk management uses preset stop-loss and take-profit ratios, defaulting to 1:2

Strategy Advantages

  1. Clear and simple logic, easy to understand and implement
  2. Combines trend and momentum indicators for more reliable trading signals
  3. Features flexible parameter settings for optimization across different market conditions
  4. Supports bidirectional trading to capture market opportunities
  5. Built-in risk management mechanism helps protect capital

Strategy Risks

  1. May generate frequent false signals in ranging markets
  2. Fixed stop-loss and take-profit ratios might not suit all market conditions
  3. Sensitive to changes in market volatility
  4. Frequent trading may result in high commission costs
  5. Might miss some opportunities in fast-moving markets

Strategy Optimization Directions

  1. Introduce volatility indicators for dynamic adjustment of stop-loss and take-profit levels
  2. Add volume confirmation signals to improve entry quality
  3. Implement market environment filters to avoid trading under unfavorable conditions
  4. Develop dynamic parameter optimization system
  5. Add time filters to avoid trading during low liquidity periods

Summary

This is a well-designed strategy system that provides relatively reliable trading signals through the combination of technical indicators. While there are some potential risks, the strategy shows good practical application potential through proper optimization and risk management. It is recommended to conduct thorough backtesting before live trading and adjust parameters according to specific market conditions.

Source Pine Script

/*backtest
start: 2025-02-12 00:00:00
end: 2025-02-19 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © @DieBartDie

//@version=5
strategy("Strategy with MACD and EMA", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Editable parameters
ema_length = input.int(200, title="EMA Length")
tp_ratio = input.float(2.0, title="Take Profit Ratio (%)") // Take Profit ratio
sl_ratio = input.float(1.0, title="Stop Loss Ratio (%)")   // Stop Loss ratio

// MACD configuration
fast_length = input.int(12, title="MACD Fast Length")
slow_length = input.int(26, title="MACD Slow Length")
signal_length = input.int(9, title="MACD Signal Length")

// Operation type configuration
operation_type = input.string("Long & Short", title="Operation Type", options=["Long", "Short", "Long & Short"])

// Indicators
ema_200 = ta.ema(close, ema_length)
[macd, signal, _] = ta.macd(close, fast_length, slow_length, signal_length)

// Conditions for LONG entries
price_above_ema = close > ema_200
macd_above_signal = ta.crossover(macd, signal) // MACD crosses above the signal line
macd_below_zero = macd < 0
long_condition = price_above_ema and macd_above_signal and macd_below_zero

// Conditions for SHORT entries
price_below_ema = close < ema_200
macd_below_signal = ta.crossunder(macd, signal) // MACD crosses below the signal line
macd_above_zero = macd > 0
short_condition = price_below_ema and macd_below_signal and macd_above_zero

// Calculate Stop Loss and Take Profit
stop_loss_long = close * (1 - sl_ratio / 100)
take_profit_long = close * (1 + tp_ratio / 100)
stop_loss_short = close * (1 + sl_ratio / 100)
take_profit_short = close * (1 - tp_ratio / 100)

// Execute LONG position if conditions are met
if (operation_type == "Long" or operation_type == "Long & Short") and long_condition
    strategy.entry("Long", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Long", stop=stop_loss_long, limit=take_profit_long)

// Execute SHORT position if conditions are met
if (operation_type == "Short" or operation_type == "Long & Short") and short_condition
    strategy.entry("Short", strategy.short)
    strategy.exit("Take Profit/Stop Loss", "Short", stop=stop_loss_short, limit=take_profit_short)

// Plot the EMA
plot(ema_200, color=color.orange, linewidth=2, title="EMA 200")

Published by ianzeng123 on the FMZ strategy square · last modified 2025-02-20. 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/Bidirectional-MACD-Momentum-and-EMA-Trend-Trading-Strategy.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