Die Ressourcen sind geladen. Beförderung...

Multi-Mode Take Profit/Stop Loss Trend nach einer Strategie auf Basis von EMA, Madrid Ribbon und Donchian Channel

Schriftsteller:ChaoZhang, Datum: 2025-01-10 16:24:30
Tags:EMARRR

 Multi-Mode Take Profit/Stop Loss Trend Following Strategy Based on EMA, Madrid Ribbon and Donchian Channel

Übersicht

Es handelt sich um eine Trendfolgestrategie, die den Exponential Moving Average (EMA), das Madrid Ribbon und den Donchian Channel kombiniert. Die Einzigartigkeit der Strategie liegt in ihren drei wechselbaren Take-Profit/Stop-Loss-Modi: tick-basiert, dollarbasiert und risk-reward ratio-basiert. Sie erhöht die Zuverlässigkeit durch einen Doppelbestätigungsmechanismus und führt nur Trades auf dem zweiten gültigen Signal aus.

Strategieprinzipien

Die Strategie verwendet eine dreifache Kombination technischer Indikatoren, um Handelschancen zu identifizieren: 1. 200-Perioden-EMA zur Bestimmung der allgemeinen Trendrichtung 2. Madrid Ribbon (Kreuzung von 5- und 100-Perioden-EMA) für die mittelfristige Trendbeurteilung 3. Durchbruch des Donchian-Kanals für spezielle Eintrittszeiten

Long-Trade-Konditionen: Preis über 200 EMA, bullisches Madrid Ribbon und Preisbruch über dem Donchian Channel. Kurzhandelskonditionen: Preis unter 200 EMA, niedriges Madrid Ribbon und Preisbruch unter dem Donchian Channel. Um falsche Signale zu reduzieren, werden Trades nur bei dem zweiten gültigen Signal ausgeführt.

Strategische Vorteile

  1. Flexibles Managementsystem für TP/SL, das sich an verschiedene Handelsstile anpassen lässt
  2. Die Kombination mehrerer technischer Indikatoren liefert zuverlässigere Signale
  3. Der Doppelbestätigungsmechanismus verringert die Anzahl der falschen Signale
  4. Die Strategie vermeidet vollständig die Vorhersage ohne Neubemalung.
  5. Hochgradig anpassbar für verschiedene Marktumgebungen

Strategische Risiken

  1. Potenzielle erhebliche Abzüge bei Trendumkehrungen Lösung: Anpassung der Indikatorparameter zur Erhöhung der Strategieempfindlichkeit
  2. Übermäßige Abhängigkeit von technischen Indikatoren kann bestimmte Marktchancen verpassen Lösung: Empfehlen Sie die Kombination mit der Fundamentalanalyse
  3. Festbetrag TP/SL kann nicht für alle Marktbedingungen geeignet sein Lösung: Dynamische Anpassung der TP/SL-Level auf der Grundlage der Volatilität

Strategieoptimierungsrichtlinien

  1. Einführung von Volatilitätsindikatoren für die dynamische TP/SL-Anpassung
  2. Ergänzung der Lautstärkanalyse zur Verbesserung der Signalzuverlässigkeit
  3. Einbeziehung weiterer Indikatoren für die Marktstimmung
  4. Entwicklung eines anpassungsfähigen Optimierungssystems für Parameter
  5. Hinzufügen eines Risikomanagementmoduls, wie z. B. die Kontrolle der maximalen Auslastung

Zusammenfassung

Dies ist eine Trend-Nachstrategie, die mehrere klassische technische Indikatoren kombiniert und die Handelsstabilität durch flexibles TP/SL-Management und einen Doppelbestätigungsmechanismus verbessert. Die hohe Anpassbarkeit der Strategie ermöglicht es, sich an verschiedene Marktumgebungen und Handelsstile anzupassen. Es wird empfohlen, vor dem Live-Handel gründliche historische Daten-Backtesting durchzuführen und die Parameter entsprechend den spezifischen Marktmerkmalen anzupassen.


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

//@version=6
strategy("Pamplona Enhanced TP/SL Toggleable", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Input settings
use_tick_based = input.bool(false, title="Use Tick-Based TP/SL")
use_dollar_based = input.bool(false, title="Use Dollar-Based TP/SL")
use_risk_reward = input.bool(true, title="Use Risk-Reward TP/SL") // Default option

tick_size = input.float(0.1, title="Tick Size (for Tick-Based)", minval=0.0001, step=0.0001)
ticks = input.int(10, title="Ticks (for Tick-Based TP/SL)", minval=1)
dollar_tp = input.float(10.0, title="Dollar Take Profit (for Dollar-Based)", minval=0.01, step=0.01)
dollar_sl = input.float(10.0, title="Dollar Stop Loss (for Dollar-Based)", minval=0.01, step=0.01)
risk_reward_ratio = input.float(2.0, title="Risk-Reward Ratio (for Risk-Reward TP/SL)", minval=0.1, step=0.1)
contract_size = input.int(1, title="Contract Size", minval=1)

// Retrieve indicators
ema200 = ta.ema(close, 200)
src = close
ma05 = ta.ema(src, 5)
ma100 = ta.ema(src, 100)
madrid_green = ma05 > ma100
dlen = input.int(20, title="Donchian Channel Period")
highest_d = ta.highest(high, dlen)
lowest_d = ta.lowest(low, dlen)
donchian_green = close > highest_d[1]
donchian_red = close < lowest_d[1]

// Track signals
var int long_signal_count = 0
var int short_signal_count = 0

// Conditions
long_condition_raw = madrid_green and donchian_green and close > ema200
short_condition_raw = not madrid_green and donchian_red and close < ema200

// Update signal counters
if long_condition_raw
    long_signal_count += 1
else
    long_signal_count := 0

if short_condition_raw
    short_signal_count += 1
else
    short_signal_count := 0

// Final conditions to enter on the second signal
long_condition = long_signal_count == 2
short_condition = short_signal_count == 2

// Ensure exactly one TP/SL mode is enabled
tp_sl_mode_count = (use_tick_based ? 1 : 0) + (use_dollar_based ? 1 : 0) + (use_risk_reward ? 1 : 0)
if tp_sl_mode_count != 1
    runtime.error("Enable exactly ONE TP/SL mode (Tick-Based, Dollar-Based, or Risk-Reward).")

// Function to calculate TP/SL based on active mode
calc_tp_sl(entry_price, is_long) =>
    float tp = na
    float sl = na
    if use_tick_based
        tp := is_long ? entry_price + ticks * tick_size : entry_price - ticks * tick_size
        sl := is_long ? entry_price - ticks * tick_size : entry_price + ticks * tick_size
    else if use_dollar_based
        tp := is_long ? entry_price + (dollar_tp / contract_size) : entry_price - (dollar_tp / contract_size)
        sl := is_long ? entry_price - (dollar_sl / contract_size) : entry_price + (dollar_sl / contract_size)
    else if use_risk_reward
        risk = is_long ? close - low : high - close
        tp := is_long ? close + (risk * risk_reward_ratio) : close - (risk * risk_reward_ratio)
        sl := is_long ? close - risk : close + risk
    [tp, sl]

// Entry logic
if long_condition
    [take_profit, stop_loss] = calc_tp_sl(close, true)
    strategy.entry("Long", strategy.long, qty=contract_size)
    strategy.exit("Take Profit", from_entry="Long", limit=take_profit, stop=stop_loss)

if short_condition
    [take_profit, stop_loss] = calc_tp_sl(close, false)
    strategy.entry("Short", strategy.short, qty=contract_size)
    strategy.exit("Take Profit", from_entry="Short", limit=take_profit, stop=stop_loss)

// Plot indicators
plot(ema200, title="200 EMA", color=color.white, linewidth=2)
bgcolor(long_condition ? color.new(color.green, 90) : short_condition ? color.new(color.red, 90) : na)


Verwandt

Mehr