0bps

Strategy vault / Breakout

Multi Technical Indicator Based High Frequency Dynamic Optimization Strategy

This strategy is a high-frequency trading strategy based on a 15-minute timeframe. It combines multiple technical indicators including Exponential Moving Average (EMA), Relative Strength Index (RSI), Average…

Author
ChaoZhang
Complexity
Intermediate · 109 lines
Parameters
0
Backtest bar
1d · swing
Tested on
BTC/USDT · futures

IMG

Overview

This strategy is a high-frequency trading strategy based on a 15-minute timeframe. It combines multiple technical indicators including Exponential Moving Average (EMA), Relative Strength Index (RSI), Average Directional Index (ADX), and Average True Range (ATR) to achieve precise trade signal capture and dynamic risk management. The strategy features a clear visualization design for real-time monitoring of market conditions and trading signals.

Strategy Principles

The core logic is based on the crossover of fast EMA (9 periods) and slow EMA (21 periods) to generate trading signals. RSI (14 periods) filters overbought/oversold zones, ADX (14 periods) confirms trend strength, and ATR (14 periods) dynamically sets stop-loss and take-profit levels. The combination of multiple technical indicators ensures signal reliability. Entry conditions include: Long - fast EMA crosses above slow EMA with RSI below 70 and ADX above 20; Short - fast EMA crosses below slow EMA with RSI above 30 and ADX above 20. Exits are managed through ATR-based dynamic stop-loss and take-profit levels.

Strategy Advantages

  1. High Signal Reliability: Cross-validation of multiple technical indicators significantly improves trading signal accuracy
  2. Flexible Risk Management: ATR-based dynamic stop-loss and take-profit settings automatically adjust to market volatility
  3. Abundant Trading Opportunities: 15-minute timeframe provides sufficient trading opportunities
  4. High Visualization: Clear chart layout and signal display facilitate quick decision-making
  5. High Automation: Complete signal system supports automated trade execution

Strategy Risks

  1. Market Volatility Risk: High-frequency trading may face slippage risk in volatile markets
  2. False Breakout Risk: Short timeframes may generate false signals, requiring ADX filtering
  3. Money Management Risk: Frequent trading may lead to accumulated fees, requiring proper position sizing
  4. Technical Risk: Multiple indicators may generate conflicting signals under certain market conditions
  5. Execution Risk: Automated trading systems require stable network environment and execution conditions

Strategy Optimization Directions

  1. Indicator Parameter Optimization: Parameters can be optimized through backtesting to better adapt to specific market conditions
  2. Signal Filter Enhancement: Volume indicators can be added as auxiliary filtering conditions
  3. Risk Control Improvement: Dynamic position management system can be introduced to adjust trading size based on market volatility
  4. Time Window Optimization: Trading time windows can be dynamically adjusted according to different market phases
  5. Stop-Loss Strategy Optimization: Trailing stop-loss mechanism can be introduced to improve profit protection

Summary

The strategy achieves a balance between signal capture and risk control in high-frequency trading through the synergy of multiple technical indicators. Clear visualization design and comprehensive automation support make it highly practical. Through continuous optimization and risk management improvements, the strategy shows promise for stable performance across different market environments. While risks exist, they can be controlled through proper parameter settings and risk control measures. Successful strategy implementation requires traders to have a deep understanding of the market and maintain continuous attention to risk.

Source Pine Script

/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Scalping BTC Ottimizzato - Grafica Chiara", shorttitle="Scalp BTC Opt", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// === ? INPUTS ===
// ? Medie Mobili
emaFastLength = input.int(9, title="EMA Veloce", minval=1)
emaSlowLength = input.int(21, title="EMA Lenta", minval=1)

// ? RSI
rsiLength = input.int(14, title="RSI Length", minval=1)
rsiOverbought = input.int(70, title="RSI Overbought")
rsiOversold = input.int(30, title="RSI Oversold")

// ? ATR (Stop Loss e Take Profit)
atrLength = input.int(14, title="ATR Length", minval=1)
stopATR = input.float(1.5, title="Stop Loss (ATR Multiplo)", step=0.1)
takeProfitATR = input.float(2.0, title="Take Profit (ATR Multiplo)", step=0.1)

// ? ADX
adxLength = input.int(14, title="ADX Length", minval=1)
adxSmoothing = input.int(14, title="ADX Smoothing", minval=1)
adxThreshold = input.int(20, title="Soglia ADX per Trend Forte", minval=1)

// === ? CALCOLI PRINCIPALI ===
// ? Medie Mobili
emaFast = ta.ema(close, emaFastLength)
emaSlow = ta.ema(close, emaSlowLength)

// ? RSI
rsi = ta.rsi(close, rsiLength)

// ? ATR
atr = ta.atr(atrLength)

// ? ADX tramite DMI con Smoothing
[adx, diPlus, diMinus] = ta.dmi(adxLength, adxSmoothing)

// === ? CONDIZIONI LONG E SHORT ===
// ✅ Long: EMA Veloce incrocia EMA Lenta al rialzo, RSI sotto 70, ADX > 20
longCondition = (ta.crossover(emaFast, emaSlow)) and (rsi < rsiOverbought) and (adx > adxThreshold)

// ? Short: EMA Veloce incrocia EMA Lenta al ribasso, RSI sopra 30, ADX > 20
shortCondition = (ta.crossunder(emaFast, emaSlow)) and (rsi > rsiOversold) and (adx > adxThreshold)

// ? Stop Loss e Take Profit Dinamici
longStop = strategy.position_avg_price - (atr * stopATR)
longTarget = strategy.position_avg_price + (atr * takeProfitATR)

shortStop = strategy.position_avg_price + (atr * stopATR)
shortTarget = strategy.position_avg_price - (atr * takeProfitATR)

// === ? INGRESSO E USCITA ===
// ? Ingresso LONG
if (longCondition and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)
    strategy.exit("TakeProfit/StopLoss Long", stop=longStop, limit=longTarget)

// ? Ingresso SHORT
if (shortCondition and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)
    strategy.exit("TakeProfit/StopLoss Short", stop=shortStop, limit=shortTarget)

// ? USCITA MANUALE BASATA SU RSI
if (rsi > rsiOverbought and strategy.position_size > 0)
    strategy.close("Long", comment="RSI Overbought Exit")

if (rsi < rsiOversold and strategy.position_size < 0)
    strategy.close("Short", comment="RSI Oversold Exit")

// === ? VISUALIZZAZIONE GRAFICA OTTIMIZZATA ===

// ? MEDIE MOBILI ANCORATE ALLE CANDELE
plot(emaFast, title="EMA Veloce", color=color.blue, linewidth=2)
plot(emaSlow, title="EMA Lenta", color=color.red, linewidth=2)

// ? SEGNALI VISIVI ANCORATI ALLE CANDELE
plotshape(longCondition, title="Segnale Long", style=shape.triangleup, location=location.belowbar, color=color.green, text="Long", size=size.small)
plotshape(shortCondition, title="Segnale Short", style=shape.triangledown, location=location.abovebar, color=color.red, text="Short", size=size.small)

// ? RSI (Pannello Separato)
var float rsiPanel = na
rsiPanel := rsi
plot(rsiPanel, title="RSI", color=color.orange, linewidth=2)
hline(rsiOverbought, "RSI Overbought", color=color.red, linestyle=hline.style_dotted)
hline(rsiOversold, "RSI Oversold", color=color.green, linestyle=hline.style_dotted)

// ? ADX (Pannello Separato)
var float adxPanel = na
adxPanel := adx
plot(adxPanel, title="ADX", color=color.blue, linewidth=2)
hline(adxThreshold, "ADX Soglia", color=color.gray, linestyle=hline.style_dotted)

// ? ATR (Pannello Separato)
var float atrPanel = na
atrPanel := atr
plot(atrPanel, title="ATR", color=color.purple, linewidth=2)

// ? ALERT
alertcondition(longCondition, title="Segnale Long", message="Entra Long Manualmente!")
alertcondition(shortCondition, title="Segnale Short", message="Entra Short Manualmente!")

Published by ChaoZhang on the FMZ strategy square · last modified 2024-12-27. 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/Multi-Technical-Indicator-Based-High-Frequency-Dynamic-Optimization-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