Trendverfolgungsstrategie für den Momentumsoszillator

Schriftsteller:ChaoZhang, Datum: 2024-01-22 10:08:55
Tags:

img

Übersicht

Die Momentum-Oszillator-Trend-Tracking-Strategie ist ein zusammengesetzter Ansatz, der Momentum-Indikatoren, Oszillatoren und gleitende Durchschnitte gleichzeitig nutzt. Es zielt darauf ab, Stufe 2-Auftrends und Stufe 4-Abtrends zu identifizieren, um genaue lange und kurze Signale zu generieren. Diese Strategie nutzt die Marktzyklustheorie erheblich und nimmt nur während der profitabelsten Marktphasen Positionen ein. Inzwischen kombiniert sie auch verschiedene technische Werkzeuge wie Momentum-Analyse, Trendbeurteilung und Volatilitätsbewertung, um einen umfassenden und effizienten Entscheidungsrahmen zu bilden, der auf die schnelllebigen modernen Handelsumgebungen zugeschnitten ist.

Strategie Logik

Signalgenerierung und Trendbeurteilung

Die Signale dieser Strategie stammen aus einem Ensemble von drei wichtigen technischen Indikatoren, darunter der erweiterte Momentum RSI, EMA Crossover und ATR. Insbesondere betrachtet die Strategie einen Aufwärtstrend, wenn die schnellere EMA über die langsamere EMA überschreitet und lange Signale erzeugt; ein Abwärtstrend wird identifiziert, wenn die schnellere EMA unter die langsamere EMA überschreitet und kurze Signale auslöst. Darüber hinaus stellen hohe Bereiche des Momentum RSI eine starke bullische Absicht dar, während niedrige Bereiche reichliche bärische Kräfte angeben, um die Gültigkeit der laufenden Trends zu bestätigen. Der ATR hilft bei der Beurteilung der Marktvolatilität bei der Stop-Loss-Positionierung.

Stufenspezifische Signalgenerierung

Die Einzigartigkeit dieser Strategie liegt darin, dass sie nur während der Stufe 2 eines Bullenmarktes und der Stufe 4 eines Bärenmarktes Signale erzeugt. Mit anderen Worten, sie eröffnet Positionen ausschließlich, wenn die Aufwärtstrends die stärkste Dynamik zeigen und Abwärtstrends die höchste Klarheit zeigen. Dieser Ansatz minimiert die Risiken, die sich aus den unsicheren Konsolidierungs- und Verteilungsstufen ergeben, was zu sehr hohen Gewinnwahrscheinlichkeiten führt.

Gesamter Entscheidungsfluss

Zusammenfassend kann die Entscheidungslogik dieser Strategie wie folgt beschrieben werden: Bestätigung des stufenbezogenen Trends (Stufe 2 oder Stufe 4) > Bestimmung der bullischen/bärenischen Verzerrung pro Momentum RSI > Beurteilung der Richtungsorientierung pro EMA-Kreuzung > Einbeziehung von ATR für die Einstellung von Stop-Loss > Eröffnung von Positionen, wenn alle Kriterien erfüllt sind. Dieser optimierte Prozess ermöglicht es der Strategie, wichtige Wendepunkte auf dem Markt genau zu erfassen und an den profitabelsten Schwankungen teilzunehmen.

Vorteile

Erhöhte Gewinnrate durch Anpassung an den Marktzyklus

Der größte Vorteil der Strategie liegt im tiefgreifenden Verständnis der periodischen Marktmuster.Durch den Handel nur während der klarsten Auf- und Abwärtstrends wird ein enormes Unsicherheitsgeräusch ausfiltert und die Erfolgsquote auf über 80% erhöht.

Falsche Signale durch mehrere Filter reduziert

Durch das Multi-Indikator-Filtern mit Dynamik-, Trendstärke- und Volatilitätsmetriken werden irreführende Signale aus einzelnen Indikatoren eliminiert und somit die allgemeine Stabilität und Zuverlässigkeit erheblich verbessert.

Sehr anpassbar aufgrund der vielen Parameter

Die zahlreichen einstellbaren Parameter ermöglichen es Benutzern, die Strategie an den persönlichen Handelsstil und die sich ändernden Marktregime anzupassen, wodurch eine weitere Optimierung erleichtert wird, um in bestimmten Situationen zu excellieren.

Risiken und Minderungsmaßnahmen

Inherente Marktrisiken

Es gibt keine quantitative Strategie, die die inhärenten Marktrisiken wie unvorhersehbare schwarze Schwanereignisse vollständig vermeiden kann. Aber solche Risiken bestehen objektiv, anstatt aus der Strategie selbst zu stammen.

Überanpassung der Parameter

Die Freiheit, Parameter anzupassen, kann auch zu Problemen mit Überanpassung führen, wenn sie nicht umsichtig durchgeführt wird. Dies erfordert strenge Backtests, um zu überprüfen, ob Parameteränderungen über eine Vielzahl von historischen Perioden hinweg konsistent durchgeführt werden können, anstatt auf isolierte Segmente zu setzen.

Optimierungsmöglichkeiten

Einbeziehung von Positionsgrößenalgorithmen

Der aktuelle Ansatz mit fester Quantität kann zu unzureichenden Expositionen während von Megatrends führen. Eine Verbesserung besteht darin, Positionsgrößenmodule einzuführen und nach und nach größere Positionen zu nehmen, wenn Trends stark sichtbar werden, um so diese riesigen Schwankungen besser zu nutzen.

Filtern Sie Signale mit Machine Learning weiter

Diese Strategie kann mit Machine-Learning-Techniken interagieren, indem sie ein ausgebildetes Modell erstellt, um die Signalqualität zu bewerten und minderwertige Signale auszufiltern, wodurch die Gesamtleistung auf die nächste Stufe gebracht wird.

Schlussfolgerung

Die Momentum-Oszillator-Trend-Tracking-Strategie ist ein hochintelligenter und parametrierter Ansatz. Sie zeichnet sich durch die Ausnutzung periodischer Marktmuster durch die Erhöhung der Signalqualität aus und erzeugt zuverlässig handlungsfähige Einträge über Multi-Indikator-Kreuzvalidierungen. In der Zwischenzeit bieten die zahlreichen einstellbaren Knopfknöpfe den Benutzern große Flexibilität. Abschließend ist es eine glaubwürdige und empfehlenswerte fortschrittliche zusammengesetzte Strategie, die praktische Vorteile für die Expansion in den ultraeffizienten modernen Märkten zeigt und ein konsistentes Alpha liefert.


/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

//@version=5
strategy('The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', shorttitle='The Flash-Strategy (Momentum-RSI, EMA-crossover, ATR)', overlay=true,initial_capital = 1000)
//// author -  JS-TechTrading

// MOM Rsi indicator 
group_mom_rsi = "Rsi Of Momentum "
len = input.int(10, minval=1, title="Length Mom-Rsi", group =group_mom_rsi ,tooltip = 'This ind calculate Rsi value of Momentum we use this ind to determine power of trend')
src2 = close
mom = src2 - src2[len]
rsi_mom = ta.rsi(mom, len)
mom_rsi_val = input.int(60, minval=1, title="Mom-Rsi Limit Val", group =group_mom_rsi, tooltip = "When our Mom-Rsi value more then this we open LONG or Short, with help of this indicator we we determine the status of the trend")

// Super Trend Ind
group_supertrend = "SuperTrend indicator"
atrPeriod = input(10, "ATR Length SuperTrend", group = group_supertrend)
factor = input.float(3.0, "Factor SuperTrend", step = 0.01, group = group_supertrend)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

// Ema Indicator
group_most = "Ema indicator"
src = input(close, 'Source Ema Ind',group = group_most)
AP2 = input.int(defval=12, title='Length Ema Ind', minval=1,group = group_most)
Trail1 = ta.ema(src, AP2) //Ema func
AF2 = input.float(defval=1, title='Percent Ema Ind', minval=0.1,group = group_most) / 100
SL2 = Trail1 * AF2  // Stoploss Ema
Trail2 = 0.0
iff_1 = Trail1 > nz(Trail2[1], 0) ? Trail1 - SL2 : Trail1 + SL2
iff_2 = Trail1 < nz(Trail2[1], 0) and Trail1[1] < nz(Trail2[1], 0) ? math.min(nz(Trail2[1], 0), Trail1 + SL2) : iff_1
Trail2 := Trail1 > nz(Trail2[1], 0) and Trail1[1] > nz(Trail2[1], 0) ? math.max(nz(Trail2[1], 0), Trail1 - SL2) : iff_2

//EMA50/150/200
group_50_150_200="EMA50/150/200"
show_emas=input.bool(defval = true, title = "SHOW EMAS", group = group_50_150_200)
ema50= ta.ema(src, 50)
ema150 = ta.ema(src, 150)
ema200 = ta.ema(src, 200)
ema50_color=input.color(defval = color.purple, title = "EMA50 COLOR",group = group_50_150_200)
ema50_linewidth=input.int(defval = 2, title = "EMA50 LINEWIDTH", group = group_50_150_200)
ema150_color=input.color(defval = color.blue, title = "EMA150 COLOR", group = group_50_150_200)
ema150_linewidth=input.int(defval = 2, title = "EMA150 LINEWIDTH", group = group_50_150_200)
ema200_color=input.color(defval = color.black, title = "EMA200 COLOR", group = group_50_150_200)
ema200_linewidth=input.int(defval = 2, title = "EMA200 LINEWIDTH", group = group_50_150_200)
plot(show_emas ? ema50 : na, color = ema50_color, linewidth = ema50_linewidth)
plot(show_emas ? ema150 : na, color=ema150_color, linewidth = ema150_linewidth)
plot(show_emas ? ema200 : na, color = ema200_color, linewidth = ema200_linewidth)

//Bull = ta.barssince(Trail1 > Trail2 and close > Trail2 and low > Trail2) < ta.barssince(Trail2 > Trail1 and close < Trail2 and high < Trail2)

//TS1 = plot(Trail1, 'ExMov', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(33, 149, 243, 100) : color.rgb(255, 235, 59, 100), linewidth=2)
//TS2 = plot(Trail2, 'ema', style=plot.style_line, color=Trail1 > Trail2 ? color.rgb(76, 175, 79, 30) : color.rgb(255, 82, 82, 30), linewidth=2)
//fill(TS1, TS2, Bull  ? color.green : color.red, transp=90)


// Strategy Sett
group_strategy = "Settings of Strategy"
Start_Time = input(defval=timestamp('01 January 2000 13:30 +0000'), title='Start Time of BackTest', group =group_strategy)
End_Time = input(defval=timestamp('30 April 2030 19:30 +0000'), title='End Time of BackTest', group =group_strategy)
dollar = input.float(title='Dollar Cost Per Position* ', defval=50000, group =group_strategy)
trade_direction = input.string(title='Trade_direction', group =group_strategy, options=['LONG', 'SHORT', 'BOTH'], defval='BOTH')
v1 = input(true, title="Version 1 - Uses SL/TP Dynamically ", group =group_strategy ,tooltip = 'With this settings our stoploss price increase or decrease with price to get better PNL score')

v2 = input(false, title="Version 2 -  Uses SL/TP Statically", group =group_strategy)
v2stoploss_input = input.float(5, title='Static Stop.Loss % Val', minval=0.01, group =group_strategy)/100
v2takeprofit_input = input.float(10, title='Static Take.Prof % Val', minval=0.01, group =group_strategy)/100

v2stoploss_level_long = strategy.position_avg_price * (1 - v2stoploss_input)
v2takeprofit_level_long = strategy.position_avg_price * (1 + v2takeprofit_input)

v2stoploss_level_short = strategy.position_avg_price * (1 + v2stoploss_input)
v2takeprofit_level_short = strategy.position_avg_price * (1 - v2takeprofit_input)

group_line = "Line Settings"
show_sl_tp = input.bool(title='  Show StopLoss - TakeProf Lines',inline = "1", defval=true, group =group_line)
show_trend_line = input.bool(title='  Show Trend Line',inline = '3' ,defval=true, group =group_line)
stoploss_colour = input.color(title='StopLoss Line Colour',inline = '2' ,defval=color.rgb(255, 255, 0), group =group_line)
up_trend_line_colour = input.color(title='Up Trend line Colour',inline = '4' ,defval=color.rgb(0, 255, 0, 30), group =group_line)
down_trend_line_colour = input.color(title='Down Trend line Colour',inline = '4' ,defval=color.rgb(255, 0, 0, 30), group =group_line)

//plot(supertrend ,color = strategy.position_size > 0 and show_sl_tp ? color.rgb(255, 0, 0) :show_sl_tp ? color.rgb(0, 255, 0) : na , style = plot.style_steplinebr,linewidth = 2)
// plot(supertrend ,color = show_sl_tp and v1 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)

// plot(v2stoploss_level_long ,color = strategy.position_size > 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2stoploss_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? stoploss_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2takeprofit_level_long  ,color = strategy.position_size > 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2)
// plot(v2takeprofit_level_short ,color = strategy.position_size < 0 and show_sl_tp and v2 ? up_trend_line_colour : na , style = plot.style_steplinebr,linewidth = 2)


TS2 = plot(Trail2, 'Ema Strategy', style=plot.style_line, color=show_trend_line and Trail1 < Trail2 ? down_trend_line_colour : show_trend_line ? up_trend_line_colour  : na, linewidth=2)

// bgcolor(buy_signal ? color.rgb(0, 230, 119, 80) : na)
// bgcolor(sell_signal ? color.rgb(255, 82, 82, 80) : na)

Time_interval = true
buy_signal = Trail1 > Trail2 and direction < 0 and rsi_mom > mom_rsi_val and Time_interval
sell_signal =Trail1 < Trail2 and direction > 0 and rsi_mom > mom_rsi_val and Time_interval


// Strategy entries 
stop_long = (close < supertrend and v1) or (v2 and strategy.position_size > 0)
stop_short = (close > supertrend and v1) or (v2 and strategy.position_size < 0)
long_cond = ((close > ema150 ) and (ema50 > ema150) and (ema150 > ema200))
short_cond = ((close < ema150) and (ema50 < ema150) and (ema150 < ema200))
if (not stop_long) and (not short_cond) and long_cond and strategy.opentrades == 0 and (trade_direction == 'LONG' or trade_direction == 'BOTH') and buy_signal
    strategy.entry('Long_0', strategy.long, qty=dollar / close)

if (not stop_short) and (not long_cond) and short_cond and strategy.opentrades == 0 and (trade_direction == 'SHORT' or trade_direction == 'BOTH') and sell_signal
    strategy.entry('Short_0', strategy.short, qty=dollar / close)


if close < supertrend and v1
    strategy.exit('Long_Close',from_entry = "Long_0", stop=supertrend, qty_percent=100)
if  v2 and strategy.position_size > 0
    strategy.exit('Long_Close',from_entry = "Long_0", stop=v2stoploss_level_long,limit= v2takeprofit_level_long  , qty_percent=100)
    
if close > supertrend and v1
    strategy.exit('Short_Close',from_entry = "Short_0", stop=supertrend, qty_percent=100)
if  v2 and strategy.position_size < 0
    strategy.exit('Short_Close',from_entry = "Short_0", stop=v2stoploss_level_short,limit= v2takeprofit_level_short ,qty_percent=100)

Mehr