0bps

Strategy vault / Mean reversion

EMA and Parabolic SAR Combination Strategy

This strategy combines the 8-period and 21-period Exponential Moving Averages (EMAs) with the Parabolic SAR indicator to capture trends and manage risk. The strategy aims to open and close positions based on specific…

Author
ChaoZhang
Complexity
Starter · 62 lines
Parameters
0
Backtest bar
1h · intraday
Tested on
BTC/USDT · futures

IMG

Overview

This strategy combines the 8-period and 21-period Exponential Moving Averages (EMAs) with the Parabolic SAR indicator to capture trends and manage risk. The strategy aims to open and close positions based on specific crossover and price action conditions, with defined exit rules including a fixed stop-loss and a mandatory exit at a specific time.

Strategy Principles

The strategy uses two EMAs with different periods (8-period and 21-period) and the Parabolic SAR indicator to determine entry and exit conditions. When the short-term EMA crosses above the long-term EMA and the closing price is above the SAR, the strategy opens a long position. When the short-term EMA crosses below the long-term EMA and the closing price is below the SAR, the strategy opens a short position. Long positions are closed when the closing price falls below the SAR, while short positions are closed when the closing price rises above the SAR. The strategy also sets a fixed stop-loss in points to control the risk of each trade. Additionally, the strategy requires all positions to be closed at 15:15 on each trading day.

Strategy Advantages

  1. Combining EMA and SAR indicators helps better capture trends and identify trend reversals.
  2. Fixed stop-loss helps control the risk of individual trades.
  3. Closing all positions at a fixed time each trading day avoids overnight holding risks.
  4. Adjustable parameters allow adaptation to different market conditions and trading instruments.

Strategy Risks

  1. EMA and SAR indicators may generate false signals, leading to losing trades.
  2. Fixed stop-loss points may not adapt well to market volatility, resulting in inappropriate stop-loss placement.
  3. In markets with unclear trends or high volatility, the strategy may frequently open and close positions, leading to high trading costs.
  4. The strategy lacks consideration of market sentiment and fundamental factors, potentially missing important trading opportunities.

Strategy Optimization Directions

  1. Introduce more technical indicators, such as RSI and MACD, to improve the reliability of entry and exit signals.
  2. Optimize stop-loss and take-profit rules, such as using dynamic stop-loss or volatility-based stop-loss methods, to better adapt to market changes.
  3. Consider incorporating market sentiment and fundamental factors, such as trading volume and news events, to enhance the comprehensiveness of the strategy.
  4. Perform parameter optimization and backtesting for different markets and trading instruments to find the best parameter combinations.

Summary

The EMA and Parabolic SAR Combination Strategy attempts to capture trends and control risk by combining two commonly used technical indicators. The strategy is simple and easy to understand, making it suitable for beginners to learn and use. However, the strategy also has some limitations, such as insufficient adaptability to market volatility and a lack of consideration for market sentiment and fundamental factors. Therefore, in practical applications, the strategy needs to be optimized and improved based on specific markets and trading instruments to enhance its stability and profitability.

Source Pine Script

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

//@version=5
strategy("EMA and Parabolic SAR Strategy", overlay=true)

// Input parameters for EMAs and Parabolic SAR
emaShortPeriod = input.int(8, title="Short EMA Period")
emaLongPeriod = input.int(21, title="Long EMA Period")
sarStart = input.float(0.02, title="Parabolic SAR Start")
sarIncrement = input.float(0.02, title="Parabolic SAR Increment")
sarMaximum = input.float(0.2, title="Parabolic SAR Maximum")
fixedSL = input.int(83, title="Fixed Stop Loss (pts)")

// Calculate EMAs and Parabolic SAR
emaShort = ta.ema(close, emaShortPeriod)
emaLong = ta.ema(close, emaLongPeriod)
sar = ta.sar(sarStart, sarIncrement, sarMaximum)

// Entry conditions
longCondition = ta.crossover(emaShort, emaLong) and close > sar
shortCondition = ta.crossunder(emaShort, emaLong) and close < sar

// Exit conditions
longExitCondition = close < sar
shortExitCondition = close > sar

// Strategy entry and exit
if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longExitCondition)
    strategy.close("Long")

if (shortExitCondition)
    strategy.close("Short")

// Fixed Stop Loss
strategy.exit("Long Exit", "Long", stop=close - fixedSL * syminfo.mintick)
strategy.exit("Short Exit", "Short", stop=close + fixedSL * syminfo.mintick)

// Exit all positions at 15:15
exitHour = 15
exitMinute = 15
exitTime = timestamp(year(timenow), month(timenow), dayofmonth(timenow), exitHour, exitMinute)

if (timenow >= exitTime)
    strategy.close_all()

// Plot EMAs and Parabolic SAR
plot(emaShort, color=color.blue, title="8 EMA")
plot(emaLong, color=color.red, title="21 EMA")
plot(sar, style=plot.style_cross, color=color.green, title="Parabolic SAR")

Published by ChaoZhang on the FMZ strategy square · last modified 2024-06-07. 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/EMA-and-Parabolic-SAR-Combination-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