Karobein-Mean-Reversion-Strategie basierend auf Trend


Erstellungsdatum: 2023-11-03 16:56:13 zuletzt geändert: 2023-11-03 16:56:13
Kopie: 1 Klicks: 752
1
konzentrieren Sie sich auf
1617
Anhänger

Karobein-Mean-Reversion-Strategie basierend auf Trend

Überblick

Die Strategie basiert auf der Karobein-Mittelwert-Rückläufer-Indikator und der Preisdynamik. Sie nutzt die Preisdynamik-Hilfsindikatoren, um Trends zu beurteilen, und kombiniert diese mit dem Karobein-Mittelwert-Rückläufer-Indikator für den konkreten Einstieg. Die Strategie ist für mittlere und lange Linien geeignet.

Strategieprinzip

Die Strategie erhält zunächst eine Preisdynamik-Anzeige, indem sie die Veränderungsrate der Preise in verschiedenen Perioden berechnet. Bei der Durchschreitung der dynamischen Schwellenlinie wird ein Mehrkopfsignal erzeugt, und bei der Durchschreitung entsteht ein Leerkopfsignal.

Der Karobein-Mean-Return-Indikator wird basierend auf der mittleren Linear-Return-Eigenschaft des Preises berechnet, der die Beschleunigung und den Weg der Preisschwankungen widerspiegelt. Der Indikator hat eine innere positive Wellen-Eigenschaft, die hilft, die Richtung und den Zeitpunkt des Preisverlaufs zu bestimmen.

Wenn der Preisdynamik-Indikator ein Signal sendet, wird ein Einstiegssignal erzeugt, wenn der Karobein-Mean-Return-Indikator in der entsprechenden Richtungszone ist.

Strategische Vorteile

  1. Die Strategie berücksichtigt sowohl die Preisdynamik als auch die Mean Value Regression und ist somit tendenziell besser beurteilt.

  2. Der Karobein Mean Return Indicator ermöglicht die genaue Ermittlung von Kurswechselpunkten und erhöht die Zeitgenauigkeit des Einstiegs.

  3. Die Haltephase kann durch Parameter frei gesteuert werden und ist für unterschiedliche Zeiträume geeignet.

  4. Die dynamischen Wertminderungsparameter können in Echtzeit angepasst werden, um sich an Marktveränderungen anzupassen.

Strategisches Risiko

  1. Die Strategie ist eine Trend-Tracking-Strategie, die leicht in einem schwankenden Trend eingesetzt werden kann.

  2. Die Karobein-Rückläufer-Durchschnittswerte sind etwas zurückgeblieben und könnten den Preiswendepunkt verpassen.

  3. Es ist wichtig, die Einstellungen für die Haltezeitparameter zu beachten, da eine zu lange Haltezeit zu einer Vergrößerung der Verluste führen kann.

  4. Die dynamischen Wertminderungsparameter sollten entsprechend angepasst werden. Sie sollten nicht zu groß eingestellt werden, da dies die Einstiegszeit verpasst.

Die Risiken können mit folgenden Lösungen begegnet werden:

  1. Indikatoren, die auf Trends schließen können, können Schwankungen vorwegnehmen und die Position rechtzeitig stilllegen.

  2. Wählen Sie eine geeignete Periode für die Karobein-Mittelwert-Rückläufer-Indikator, die nicht zu weit zurückliegt.

  3. Testen Sie verschiedene Haltungszeitparameter und wählen Sie die für Sie geeignete Haltungszeit.

  4. Die Dynamische Threshold-Bereichs-Anpassung darf nicht zu groß sein, um einen Eintritt zu vermeiden.

Richtung der Strategieoptimierung

  1. Testung verschiedener Preisdynamikberechnungszyklen und Optimierungsparameter.

  2. Ein Schwankungsindikator kann eingesetzt werden, um zu erkennen, dass ein Erschütterungsschlag bevorsteht, und ein Stop-Loss kann eingestellt werden.

  3. Optimierbare Karobein Mittelwert-Regression-Indikator-Parameter, um sie empfindlicher zu machen.

  4. Zusätzliche Filterbedingungen, wie beispielsweise die Handelsvolumenindikatoren, können hinzugefügt werden, um die Signalqualität zu verbessern.

  5. Dynamische Optimierungsparameter für Machine-Learning-Algorithmen

Zusammenfassen

Diese Strategie berücksichtigt die Preisdynamik und die Mittelwert-Rückkehrfaktoren und hat eine starke Trendschätzung und Signalgenerierung. Sie kann durch Parameter angepasst werden, um sich an verschiedene Marktumgebungen anzupassen. Der nächste Schritt kann in Bezug auf die Einstiegszeit und die Stop-Loss-Situation weiter optimiert werden, um die Strategie stabiler und stärker zu machen.

Strategiequellcode
/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: capissimo
strategy("Normalized Vector Strategy, ver.3 (sc)", precision=2, overlay=false)
// This is a scaled Normalized Vector Strategy with a Karobein Oscillator
// original: Drkhodakarami (https://www.tradingview.com/script/Fxv2xFWe-Normalized-Vector-Strategy-By-Drkhodakarami-Opensource/)

// Repainting: in general there two types of repainting:
// * when the last candle is constantly being redrawn
// * when the indicator draws a different configuration after it has been deactivated/reactivated, i.e. refreshed

// The former is a natural behaviour, which presents a constant source of frustration, 
// when a signal directly depends on the current market situation and can be overcome 
// with various indirect techniques like divergence.

// The latter suggests a flaw in the indicator design.
// Unfortunately, the Normalized Vector Strategy is repainting in the latter sense, although being
// really promising. Would be nice if our community suggests a solution to this problem ))

// This strat consistently performs with high accuracy, showing up to 96% scores
// Here are some of the best parameters:
// TF     Lookback   Performance (ca.)
// 1m     13         92%
// 3m     34         92%
// 5m     85         92%
// 15m    210        90%
// 30m    360        89%
// 1H     1440,720   94%, 87%

// The Karobein Oscillator has an intrinsic sinusoidal behaviour that helps in determining direction and timing.
// It does not repaint.
// original: alexgrover (https://www.tradingview.com/script/JiNi0f62-Karobein-Oscillator/)

scaleMinimax(X, p, min, max) => 
    hi = highest(X, p), lo = lowest(X, p)
    (max - min) * (X - lo)/(hi - lo) + min

price    = input(close,  "Price Data")
tf       = input(34,     "Timeframe", minval=1, maxval=1440)
thresh   = input(14.,    "Threshold", minval=.1, step=.1) 
div      = input(1000000,"Divisor", options=[1,10,100,1000,10000,100000,1000000,10000000,100000000])
showVol  = input(false,  "Volume")
useold   = input(true,   "Use Old System")

lime  = color.new(color.lime, 10), fuchsia = color.new(color.fuchsia, 10), 
black = color.new(color.black, 100), gray = color.new(color.gray, 50)

vol  = useold ? security(syminfo.tickerid, tostring(tf), volume, barmerge.gaps_off, barmerge.lookahead_on) 
              : security(syminfo.tickerid, tostring(tf), volume)
obv  = cum(change(price) > 0 ? vol : change(price) < 0 ? -vol : 0*vol)
prix = showVol ? obv : price
    
getdiff(prc, tf) =>
    prev  = useold ? security(syminfo.tickerid, tostring(tf), prc[1], barmerge.gaps_off, barmerge.lookahead_on) :
                     security(syminfo.tickerid, tostring(tf), prc[1])
    curr  = useold ? security(syminfo.tickerid, tostring(tf), prc, barmerge.gaps_off, barmerge.lookahead_on) : 
                     security(syminfo.tickerid, tostring(tf), prc)
    (curr/prev) - 1
    
p  = getdiff(prix, tf)
up = thresh/div, dn = -thresh/div
longCondition  = crossover(p, up)
shortCondition = crossunder(p, dn)

bg = longCondition ? lime : shortCondition ? fuchsia : black
cl = p > up ? color.green : p < dn ? color.red : color.silver

bgcolor(bg, editable=false)
plot(scaleMinimax(up, 2500, -1, 1), color=lime, editable=false, transp=0)
hline(0, linestyle=hline.style_dotted, title="base line", color=gray, editable=false)
plot(scaleMinimax(dn, 2500, -1, 1), color=fuchsia, editable=false, transp=0)
plot(scaleMinimax(p, 2500, -1, 1), color=cl, style=plot.style_histogram, transp=70, editable=false)
plot(scaleMinimax(p, 2500, -1, 1), color=cl, style=plot.style_linebr, title="prediction", transp=0, editable=false)

strategy.entry("L", true, 1, when=longCondition)
strategy.entry("S", false, 1, when=shortCondition)

alertcondition(longCondition, title='Long', message='Long Signal!')
alertcondition(shortCondition, title='Short', message='Short Signal!')

//*** Karobein Oscillator
per  = input(8, "Karobein Osc Lookback")

prix2  = ema(price, per)
a = ema(prix2 < prix2[1] ? prix2/prix2[1] : 0, per)
b = ema(prix2 > prix2[1] ? prix2/prix2[1] : 0, per)
c = (prix2/prix2[1])/(prix2/prix2[1] + b)
d = 2*((prix2/prix2[1])/(prix2/prix2[1] + c*a)) - 1

plot(scaleMinimax(d, 2500, -1, 1), color=color.orange, transp=0)