Momentum-Oszillator-Trendfolgestrategie


Erstellungsdatum: 2024-01-22 10:08:55 zuletzt geändert: 2024-01-22 10:08:55
Kopie: 1 Klicks: 602
1
konzentrieren Sie sich auf
1617
Anhänger

Momentum-Oszillator-Trendfolgestrategie

Überblick

Die Dynamic Oscillator Trend-Tracking-Strategie ist eine Kombination aus Dynamometer, Oscillator und Moving Average. Sie identifiziert die Aufwärts- und Abwärtstrends von Stage 2 und Stage 4 und erzeugt in diesen beiden Phasen präzise Verkaufs- und Verkaufssignale. Die Strategie nutzt die Marktzyklus-Theorie und eröffnet nur in den profitabelsten Marktphasen Positionen.

Strategieprinzip

Signalgenerierung und Trendbeurteilung

Das Signal für die Strategie stammt hauptsächlich aus einer umfassenden Einschätzung der drei wichtigsten technischen Indikatoren, darunter der Dynamik RSI, der EMA-Gehaltskreuzung und der tatsächlichen Bandbreite der ATR. Insbesondere wird die Strategie bei der Überschreitung der langfristigen EMA auf der kurzfristigen EMA als Aufwärtstrend betrachtet und ein Mehrwertsignal erzeugt. Die Überschreitung der langfristigen EMA unter der kurzfristigen EMA weist auf einen Abwärtstrend hin und erzeugt ein Fehlwertsignal.

Phasen-Signalerzeugung

Das Besondere an dieser Strategie ist, dass sie nur in Stufe 2 des Bullenmarktes und in Stufe 4 des Bärenmarktes Signale erzeugt. Das heißt, sie setzt nur in Zeiten, in denen der Aufwärtstrend am stärksten ist und der Abwärtstrend am deutlichsten ist. Diese Methode minimiert die Risiken, die durch die unsicheren Konsolidierungs- und Verteilungsphasen entstehen, und erhöht die Gewinnwahrscheinlichkeit auf ein hohes Niveau.

Gesamtentscheidungsprozess

Zusammenfassend lässt sich die Entscheidungslogik der Strategie wie folgt zusammenfassen: Bestätigung eines stufenweisen Trends (Stage 2 oder 4) Bestimmung der hohlen Absichten des Dynamik-RSI Ermittlung der Richtung der EMA-Gleichgewichtung Einstellung eines geeigneten Stopps in Kombination mit ATR Eröffnung einer Position, wenn alle Bedingungen erfüllt sind. Dieser Prozess ist klar und effizient und ermöglicht der Strategie, die wichtigsten Wendepunkte des Marktes genau zu erfassen und am profitabelsten Geld zu handeln.

Strategische Vorteile

Nutzung der Marktzyklen zur Erhöhung der Gewinnquote

Der größte Vorteil der Strategie besteht darin, dass sie die periodischen Merkmale des Marktes sehr gut versteht. Durch den Handel nur in den klarsten Auf- und Abwärtsphasen kann sie eine große Menge unbestimmten Geräusches filtern und somit die Erfolgswahrscheinlichkeit auf über 80% erhöhen.

Mehrfachfilter reduziert Falschsignale

Diese Strategie nutzt mehrere Indikatoren wie Dynamik, Trends und Schwankungen, um sie zu überprüfen. Dies vermeidet die fehlerhaften Signale, die von jedem einzelnen Indikator erzeugt werden können, und erhöht die Stabilität und Zuverlässigkeit der Strategie insgesamt.

Parameterreich und hochgradig anpassbar

Die Strategie bietet eine Vielzahl an anpassbaren Parametern, die der Benutzer an seinen persönlichen Stil und die Marktumgebung anpassen kann, um die Strategie auf ein Höchstmaß an Optimierung zu bringen, was die Anpassungsfähigkeit der Strategie erhöht.

Risiken und Lösungen

Marktobjektive Risiken

Keine quantitative Strategie kann die Risiken des Marktes selbst vollständig vermeiden, wie z. B. unvorhersehbare große schwarze Schwimmereignisse. Dies ist jedoch ein Risiko, das objektiv auf dem Markt besteht, und nicht eine Frage der Strategie selbst, die den Händler dazu veranlasst, seinen Verstand zu bewahren, seine Positionen vernünftigerweise zu kontrollieren und Leverage zu nutzen.

Risiken der Parameteroptimierung

Da die Strategieparameter frei angepasst werden können, kann eine unangemessene Anpassung zu Überkonformität führen. Dies muss durch strenge Rückmeldung verhindert werden, um sicherzustellen, dass jede Anpassung der Parameter ausreichend verifiziert ist und sich an die breiteren Marktbedingungen anpasst und nicht auf eine bestimmte historische Situation beschränkt.

Optimierungsrichtung

Erweiterung der Positionsmanagement-Funktionen

Die derzeitige Strategie besteht darin, Positionen mit festen Beträgen aufzubauen, was zu einer übermäßigen Leichtigkeit der Positionen in einem großen Trend führen kann. Daher ist eine optimierbare Richtung die Hinzufügung eines Positionsmanagementmoduls, das Positionen schrittweise erhöhen kann, wenn der Trend eindeutig genug ist, um bessere Ergebnisse in einem großen Trend zu erzielen.

Mit Hilfe von Maschinelles Lernen filtern wir Signale.

Diese Strategie kann mit maschinellem Lernen kombiniert werden, um ein gut ausgebildetes Modell zu erstellen, das die Signalqualität bewertet und einige weniger qualitativ hochwertige Signale filtert, um die Gesamtperformance der Strategie weiter zu verbessern. Dies ist ein wichtiger Aspekt der Strategieoptimierung.

Zusammenfassen

Die Dynamic Oscillator Trend-Tracking-Strategie ist eine hochintelligente und parametrische Strategie. Sie nutzt erfolgreich die Periodizität des Marktes, um die Signalqualität zu verbessern, und erzeugt ein hoch zuverlässiges Markteintrittssignal mit einer Methode der cross-validation von mehreren Indikatoren. Gleichzeitig bietet die große Flexibilität für die Benutzer. Zusammenfassend ist es eine hoch entwickelte Strategie, die vertrauenswürdig und empfehlenswert ist.

Strategiequellcode
/*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)