Durchbruch-Trendverfolgungsstrategie mit Indikatorenkombinationen


Erstellungsdatum: 2024-02-20 11:38:22 zuletzt geändert: 2024-02-20 11:38:22
Kopie: 2 Klicks: 591
1
konzentrieren Sie sich auf
1617
Anhänger

Durchbruch-Trendverfolgungsstrategie mit Indikatorenkombinationen

Überblick

Diese Strategie ist bekannt als “Rhino Indicator Portfolio Breakthrough Trend Tracking Strategy”. Die Strategie verwendet mehrere Indikatoren, um die Richtung der Markttrends zu identifizieren und Trend-Tracking-Operationen durchzuführen. Sie umfasst hauptsächlich folgende Teile:

  1. Die wichtigsten Markttrends werden anhand der Wellen-Trend-Indikatoren ermittelt.
  2. Die Kombination von RSI und Cashflow-Index filtert einige falsche Signale aus
  3. Die EMA-Indikatoren bestimmen, in welche Richtung die Maßnahmen gehen
  4. Eintritt mit bahnbrechenden Methoden, um zu gewährleisten, dass Trends eingehalten werden

Strategieprinzip

Die Strategie richtet sich hauptsächlich an der Richtung und Stärke der großen Trends und bietet mehrere freie, beidseitige Geschäfte. Die operativen Prinzipien sind wie folgt:

Mehrköpfige Eintrittszeichen:

  1. Der Preis liegt oberhalb der 200-Tage-EMA und zeigt, dass er sich in einem Flex-Markt befindet.
  2. Preisrückführung in die 50 Tage EMA-Grenze
  3. Der Wellenindikator kehrt in den Aufwärtstrend um und gibt ein Kaufsignal
  4. RSI und MFI zeigen Überkauft
  5. Drei aufeinanderfolgende K-Linien brechen die 50-Tage-EMA, was auf einen Aufwärtstrend hindeutet

Eintrittszeichen für die Luftwaffe: Im Gegensatz zu einem mehrköpfigen Eintrittssignal

Wie man einen Stop-Loss macht: Es gibt zwei Optionen: Minimum/Maximum Stop, ATR Stop

Strategische Stärkenanalyse

Diese Strategie hat folgende Vorteile:

  1. Mehrfache Indikatoren zur Beurteilung von Trends und zur Vermeidung von False Breaks
  2. Die EMA ist ein Instrument, um Trends zu ermitteln und zu verfolgen.
  3. Verfolgung von Stop-Loss-Methoden für nachhaltige Profitabilität
  4. Sie können mehrere Leerlaufzeiten gleichzeitig durchführen und dem Markt folgen.

Strategische Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Wahrscheinlichkeit, dass der Indikator ein falsches Signal ausgibt
  2. Der Stop-Loss-Punkt ist zu klein, erhöht das Stop-Loss-Risiko
  3. Es gibt viele Transaktionen, und die Transaktionsgebühren sind ein versteckter Verlust.

Um die oben genannten Risiken zu verringern, können Optimierungen in folgenden Bereichen vorgenommen werden:

  1. Anpassung der Indikatorparameter und Filterung von Fehlsignalen
  2. Entspannung der Stop Losses
  3. Optimierung der Kennzahlen und Verringerung der Anzahl der Transaktionen

Richtung der Strategieoptimierung

Auf der Code-Ebene kann diese Strategie optimiert werden in folgenden Bereichen:

  1. Anpassung der Parameter für Wellen, RSI und MFI zur Auswahl der optimalen Kombination
  2. Testen der Leistung verschiedener EMA-Zyklusparameter
  3. Anpassung des Gewinn-Risiko-Faktors des Stop-Losses zur optimalen Konfiguration

Durch die Anpassung und Prüfung von Parametern kann eine Strategie zur Maximierung der Erträge und zur Verringerung der Rücknahmen und Risiken eingesetzt werden.

Zusammenfassen

Die Strategie verwendet verschiedene Indikatoren, um die Richtung der großen Trends zu bestimmen, die EMA-Indikatoren als konkrete Handlungssignale zu verwenden und die Gewinne durch die Verfolgung von Stop-Loss-Methoden zu sichern. Durch die Optimierung der Parameter können bessere stabile Erträge erzielt werden. Es sollte jedoch auch auf bestimmte Systemrisiken geachtet werden, die die Wirkung der Indikatoren und die Veränderungen der Marktumgebung ständig beobachten.

Strategiequellcode
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Lowest Low/ Highest High & ATR Stop Loss/ Take Profit
//Optimized for the 30 minutes chart

strategy(title="TradePro's Trading Idea Cipher B+ Divergence EMA Pullback Strategy", shorttitle="WT MFI RSI EMA PB STRAT", overlay = true, pyramiding = 0, max_bars_back=5000, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=5000, currency=currency.USD)

// { Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2016)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true

// See if this bar's time happened on/after start date
afterStartDate = time >= start and time<=finish?true:false

zeroline = 0

// } Time Range

// { Wavetrend, RSI, MFI

// WaveTrend
cl = input(12, "Channel Length")
al = input(12, "Average Length")
overbought = input(53, title = 'WT Overbought Level 1', type = input.integer)
oversold = input(-53, title = 'WT Oversold Level 1', type = input.integer)
ap = hlc3 
esa = ema(ap, cl)
d = ema(abs(ap - esa), cl)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, al)
 
wt1 = tci
wt2 = sma(wt1,4)

wtOs = wt2 <= oversold
wtOb = wt2 >= overbought
wtX = cross(wt1, wt2)
wtUp = wt2 - wt1 <= 0
wtDown = wt2 - wt1 >= 0
buySignal = wtX and wtOs and wtUp
sellSignal = wtX and wtOb and wtDown

// RSI & MFI

rsiMFIPosY = input(2, title = 'MFI Area Y Pos', type = input.float)
rsiMFIperiod = input(80,title = 'MFI Period', type = input.integer)
rsiMFIMultiplier = input(200, title = 'MFI Area multiplier', type = input.float)
f_rsimfi(_period, _multiplier, _tf) => security(syminfo.tickerid, _tf, sma(((close - open) / (high - low)) * _multiplier, _period) - rsiMFIPosY)
rsiMFI = f_rsimfi(rsiMFIperiod, rsiMFIMultiplier, timeframe.period)

// } Wavetrend, RSI, MFI

// { EMA
emasrc = close
res = input(title="EMA Timeframe", type=input.resolution, defval="30")
len1 = input(title="EMA1 Length", type=input.integer, defval=200)
col1 = color.yellow

len2 = input(title="EMA2 Length", type=input.integer, defval=50)
col2 = color.blue

// Calculate EMA
ema1 = ema(emasrc, len1)
emaSmooth1 = security(syminfo.tickerid, res, ema1, barmerge.gaps_off, barmerge.lookahead_off)

ema2 = ema(emasrc, len2)
emaSmooth2 = security(syminfo.tickerid, res, ema2, barmerge.gaps_off, barmerge.lookahead_off)

// Draw EMA
plot(emaSmooth1, title="EMA1", linewidth=1, color=col1)
plot(emaSmooth2, title="EMA2", linewidth=1, color=col2)

// } EMA

// { Long Entry

enablelong = input(true, title="Enable long?")

//Long Signal
upcondition = close > emaSmooth1
wavetrendlong = wt1 and wt2 < zeroline
mfilong = rsiMFI > 0
emapblong1 = (close > emaSmooth2) and (close[1] < emaSmooth2[1])
emapblong2 = ((close[2] > emaSmooth2[2]) and (close[3] > emaSmooth2[3]) and (close[4] > emaSmooth2[4])) or ((close[5] > emaSmooth2[5]) and (close[6] > emaSmooth2[6]) and (close[7] > emaSmooth2[7])) or ((close[8] > emaSmooth2[8]) and (close[9] > emaSmooth2[9]) and (close[10] > emaSmooth2[10]))

longcondition = upcondition and wavetrendlong and buySignal and mfilong and emapblong1 and emapblong2

//strategy buy long
if (longcondition) and (afterStartDate) and strategy.opentrades < 1 and (enablelong == true)
    strategy.entry("long", strategy.long)

plotshape(longcondition, style=shape.arrowup,
                 location=location.abovebar, color=color.green)

// } Long Entry

// { Short Entry

enableshort = input(true, title="Enable short?")

//Short Signal
downcondition = close < emaSmooth1
wavetrendshort = wt1 and wt2 > zeroline
mfishort = rsiMFI < 0
emapbshort1 = (close < emaSmooth2) and (close[1] > emaSmooth2[1])
emapbshort2 = ((close[2] < emaSmooth2[2]) and (close[3] < emaSmooth2[3]) and (close[4] < emaSmooth2[4])) or ((close[5] < emaSmooth2[5]) and (close[6] < emaSmooth2[6]) and (close[7] < emaSmooth2[7])) or ((close[8] < emaSmooth2[8]) and (close[9] < emaSmooth2[9]) and (close[10] < emaSmooth2[10]))

shortcondition = downcondition and wavetrendshort and sellSignal and mfishort and emapbshort1 and emapbshort2

//strategy buy short
if (shortcondition) and (afterStartDate) and strategy.opentrades < 1 and (enableshort == true)
    strategy.entry("short", strategy.short)

plotshape(shortcondition, style=shape.arrowdown,
                 location=location.belowbar, color=color.red)

// } Short Entry

// { Exit Conditions
bought = strategy.position_size[1] < strategy.position_size
sold = strategy.position_size[1] > strategy.position_size
barsbought = barssince(bought)
barssold = barssince(sold)
slbuffer = input(title="SL Buffer", type=input.float, step=0.1, defval=0)

// } Exit Conditions

// { Lowest Low/ Highes High Exit Condition
enablelowhigh = input(false, title="Enable lowest low/ highest high exit?")

//Lowest Low LONG
profitfactorlong = input(title="ProfitfactorLong", type=input.float, step=0.1, defval=2)
loLen = input(title="Lowest Low Lookback", type=input.integer,
  defval=50, minval=2)
stop_level_long = lowest(low, loLen)[1]

if enablelowhigh == true and strategy.position_size>0
    profit_level_long = strategy.position_avg_price + ((strategy.position_avg_price - stop_level_long[barsbought])*profitfactorlong) + slbuffer
    strategy.exit(id="TP/ SL", stop=stop_level_long[barsbought] - slbuffer, limit=profit_level_long)

//Lowest Low SHORT
profitfactorshort = input(title="ProfitfactorShort", type=input.float, step=0.1, defval=2)
highLen = input(title="highest high lookback", type=input.integer,
  defval=50, minval=2)
stop_level_short = highest(high, highLen)[1]

if enablelowhigh == true and strategy.position_size<0
    profit_level_short = strategy.position_avg_price - ((stop_level_short[barssold] - strategy.position_avg_price)*profitfactorshort) - slbuffer
    strategy.exit(id="TP/ SL", stop=stop_level_short[barssold] + slbuffer, limit=profit_level_short)

// } Lowest Low/ Highes High Exit Condition

// { ATR Take Profit/ Stop Loss
enableatr = input(true, title="Enable ATR exit?")
atrprofitfactorlong = input(title="ATR Profitfactor Long", type=input.float, step=0.1, defval=6)
atrstopfactorlong = input(title="ATR Stopfactor Long", type=input.float, step=0.1, defval=5)
atrprofitfactorshort = input(title="ATR Profitfactor Short", type=input.float, step=0.1, defval=3)
atrstopfactorshort = input(title="ATR Stopfactor Short", type=input.float, step=0.1, defval=5)

//ATR
lengthATR = input(title="ATR Length", defval=11, minval=1)
atr = atr(lengthATR)

//LONG EXIT
if (afterStartDate) and ((enableatr == true) and (strategy.opentrades > 0))
    barsbought1 = barssince(bought)
    profit_level = strategy.position_avg_price + (atr*atrprofitfactorlong)
    stop_level = strategy.position_avg_price - (atr*atrstopfactorlong)
    strategy.exit("Take Profit/ Stop Loss", "long", stop=stop_level[barsbought1], limit=profit_level[barsbought1])

//SHORT EXIT
if (afterStartDate) and ((enableatr == true) and (strategy.opentrades > 0))
    barssold1 = barssince(sold)
    profit_level = strategy.position_avg_price - (atr*atrprofitfactorshort)
    stop_level = strategy.position_avg_price + (atr*atrstopfactorshort)
    strategy.exit("Take Profit/ Stop Loss", "short", stop=stop_level[barssold1], limit=profit_level[barssold1])

// } ATR Take Profit/ Stop Loss