Open-Close Crossover Moving Average Trendfolgestrategie


Erstellungsdatum: 2024-01-15 14:24:27 zuletzt geändert: 2024-01-15 14:24:27
Kopie: 0 Klicks: 469
1
konzentrieren Sie sich auf
1166
Anhänger

Open-Close Crossover Moving Average Trendfolgestrategie

Überblick

Eine Trend-Tracking-Strategie mit offenen Schlusskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzungskreuzung

Strategieprinzip

Die Kernlogik dieser Strategie basiert auf der Beziehung zwischen dem Eröffnungspreis und dem Schließungspreis, um den aktuellen Trend zu beurteilen. Der Eröffnungspreis spiegelt die Angebots- und Nachfragebeziehung und die Handelspsychologie des aktuellen Marktes wider, der Schließungspreis spiegelt die Ergebnisse des Handels am Tag wider. Im Allgemeinen bedeutet ein höherer Abschlusspreis als der Eröffnungspreis, dass die Tagesbewegung stärker ist, eine bessere Atmosphäre; wenn der Abschlusspreis niedriger als der Eröffnungspreis ist, bedeutet dies, dass die Tagesbewegung schwächer ist, die Luftatmosphäre schwerer.

Die Strategie nutzt diese Logik, um den aktuellen Trend zu beurteilen, indem sie den Moving Average der Eröffnungs- und Schlusskosten berechnet. Konkret lautet die Entscheidungsregel:

  1. Wenn der bewegliche Durchschnitt des Schlusskurses den beweglichen Durchschnitt des Schlusskurses überschreitet, wird mehr getan. Dies bedeutet, dass die derzeitige Mehrkopf-Atmosphäre zunimmt und es möglich ist, mehrere Optionen zu betreten.

  2. Wenn der bewegliche Durchschnitt des Schlusskurses unter dem beweglichen Durchschnitt des Schlusskurses liegt, wird der Leerwert gemacht. Dies bedeutet, dass die derzeitige Leerheit verstärkt wird, und es kann zu einem leeren Ticket kommen.

  3. Wenn ein Umkehrsignal auftritt, wird die Position beendet.

Die Strategie bietet auch einen Stop-Loss-Tracking, um Gewinne zu sperren. Nach dem Eintritt wird die Punktedifferenz zwischen dem Eintrittspreis und dem aktuellen Preis in Echtzeit berechnet. Wenn der Preis über die festgelegte Stop-Loss-Punktzahl läuft, klettert die Stop-Line nach oben, um einen Teil der Gewinne zu sperren.

Insgesamt handelt es sich bei der Strategie um eine Trendberechnung über die Zeiträume der Moving Average Cycle Length; Positionen, die jeweils nur in eine Richtung gehalten werden; ein Original-Positionsstop ist eine direkte Umkehrung und hat keine Einstellung wie ein ATR-Stop; Es gibt eine Stop-Tracking-Einstellung, um Gewinne zu sperren.

Analyse der Stärken

Die Strategie hat folgende Vorteile:

  1. Entscheidungsfindung klar und einfach│ die Trends anhand der Open-Closed-Relationschaften zu beurteilen, leicht zu verstehen und die Parameter zu optimieren‬

  2. Flexibilität bei der Auswahl von Moving Average-KlassenEs gibt mehr als ein Dutzend unterschiedliche Moving Averages, die flexibel kombiniert werden können, um die besten Parameter zu finden.

  3. Flexible Anpassung der verwendeten AuflösungUm die Signalresonanz zu erhöhen, kann die Strategie auf eine drei- bis vierfache Auflösung des Diagramms eingestellt werden.

  4. Es gibt einen Stop-Loss-Mechanismus.Die Strategie beinhaltet eine Tracking-Stop-Loss-Strategie, um Einzelschäden und Rücknahmen wirksam zu kontrollieren.

  5. Anpassung der HaltedauerDie Volatilität und die Haltedauer können durch Anpassung der Moving Average-Parameter kontrolliert werden.

  6. Flexibel angepasste RisikogewinneDie Risiken können durch Anpassung der Stop-Loss-Punkte und der Abweichung kontrolliert werden.

Risikoanalyse

Die Strategie birgt auch einige Risiken, die sich auf folgende Bereiche konzentrieren:

  1. Verpasste TrendwendeDie Ausgangssignale für diese Strategie können etwas später als die Preisumkehr ausfallen, was zu einem Schwanzschlag führt. Dies kann durch eine angemessene Verkürzung der Moving Average-Periode gemildert werden.

  2. Nicht für eine Stadt mit starken Eruptionen❚ Bei starken Erschütterungen wird die Strategie häufig aufgeschlagen und mit hohen Gebühren belastet. In diesem Fall können die Stop-Loss-Punkte entsprechend gelockert oder die Moving-Average-Zyklen verlängert werden.

  3. Einheitliche IndikatorenDie Strategie basiert nur auf einer Gruppe von Indikatoren und ist anfällig für Ausfälle. Die Einführung anderer Indikatoren wie MACD kann in Betracht gezogen werden, um die Strategielogik zu bereichern.

  4. Parameter sind leicht zu optimieren│ Moving Average Parameter und Stop Loss Parameter sind leicht zu überoptimieren, die tatsächliche Leistung kann schlechter als die Rückmeldung sein │ Parameterwahl sollte mit Vorsicht betrachtet werden │

Optimierungsrichtung

Die Strategie kann in folgenden Richtungen optimiert werden:

  1. Kombination mit anderen Indikatoren◯ Das Einführen von Incremental Indicators, Volatility Indicators usw. kann versucht werden, um die Strategielogik zu bereichern und die Stabilität zu verbessern.

  2. Parameter-Anpassung zur Periodisierung│ │ kann mit Markttypen kombiniert werden, um die Moving Average-Parameter dynamisch anzupassen, um den Zyklus in Trends zu verlängern und im Umbruch zu verkürzen‬

  3. Dynamische Anpassung der Risikometrik│ kann die Stop-Loss-Punkte und die Verlagerung dynamisch anpassen, basierend auf den tatsächlichen Schwankungen in der letzten Zeit.│

  4. Erweiterte Stop-Loss-LogikDie bestehenden Stop-Loss-Methoden basieren nur auf Preisen und Punkten. Es kann überlegt werden, umfangreichere Stop-Loss-Methoden wie ATR einzuführen.

Zusammenfassen

Die Trend-Tracking-Strategie der offenen und abgeschlossenen Kreuzung von Moving Averages ist eine eher typische Strategie, die die Richtung der Trends aufgrund der offenen und abgeschlossenen Verhältnisse bestimmen. Sie hat die Vorteile, dass die Entscheidungsregeln einfach und klar sind, flexibel und anpassbar sind und Risiken kontrolliert werden können. Es gibt auch Probleme wie Fehlwendepunkte und unangemessene starke Erschütterungen.

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

//@version=4

strategy(title = "Open Close Cross Strategy (PineScript=v4)", shorttitle = "OCC Strategy", overlay = true )

// Revision:        1
// Author:          @JayRogers
//
// Description:
//  - Strategy based around Open-Close Crossovers.
// Setup:
//  - I have generally found that setting the strategy resolution to 3-4x that of the chart you are viewing
//    tends to yield the best results, regardless of which MA option you may choose (if any)
//  - Don't aim for perfection. Just aim to get a reasonably snug fit with the O-C band, with good runs of
//    green and red.
//  - Option to either use basic open and close series data, or pick your poison with a wide array of MA types.
//  - Optional trailing stop for damage mitigation if desired (can be toggled on/off)
//  - Positions get taken automagically following a crossover - which is why it's better to set the resolution
//    of the script greater than that of your chart, so that the trades get taken sooner rather than later.
//  - If you make use of the trailing stops, be sure to take your time tweaking the values. Cutting it too fine
//    will cost you profits but keep you safer, while letting them loose could lead to more drawdown than you
//    can handle.

// === INPUTS ===
useRes = input(defval=true, title="Use Alternate Resolution? ( recommended )")
stratRes = input(defval="120", title="Set Resolution ( should not be lower than chart )", type=input.resolution)
useMA = input(defval=true, title="Use MA? ( otherwise use simple Open/Close data )")
basisType = input(defval="DEMA", title="MA Type: SMA, EMA, DEMA, TEMA, WMA, VWMA, SMMA, HullMA, LSMA, ALMA ( case sensitive )", type=input.string)
basisLen = input(defval=14, title="MA Period", minval=1)
offsetSigma = input(defval=6, title="Offset for LSMA / Sigma for ALMA", minval=0)
offsetALMA = input(defval=0.85, title="Offset for ALMA", minval=0, step=0.01)
useStop = input(defval=true, title="Use Trailing Stop?")
slPoints = input(defval=200, title="Stop Loss Trail Points", minval=1)
slOffset = input(defval=400, title="Stop Loss Trail Offset", minval=1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// Returns MA input selection variant, default to SMA if blank or typo.
variant(type, src, len, offSig, offALMA) =>
    v1 = sma(src, len)  // Simple
    v2 = ema(src, len)  // Exponential
    v3 = 2 * v2 - ema(v2, len)  // Double Exponential
    v4 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)  // Triple Exponential
    v5 = wma(src, len)  // Weighted
    v6 = vwma(src, len)  // Volume Weighted
    sma_1 = sma(src, len)  // Smoothed
    v7 = na(v5[1]) ? sma_1 : (v5[1] * (len - 1) + src) / len
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))  // Hull
    v9 = linreg(src, len, offSig)  // Least Squares
    v10 = alma(src, len, offALMA, offSig)  // Arnaud Legoux
    type == "EMA" ? v2 : type == "DEMA" ? v3 : type == "TEMA" ? v4 : 
       type == "WMA" ? v5 : type == "VWMA" ? v6 : type == "SMMA" ? v7 : 
       type == "HullMA" ? v8 : type == "LSMA" ? v9 : type == "ALMA" ? v10 : v1
// security wrapper for repeat calls
reso(exp, use, res) =>
    security_1 = security(syminfo.tickerid, res, exp)
    use ? security_1 : exp
// === /BASE FUNCTIONS ===

// === SERIES SETUP ===
// open/close
variant__1 = variant(basisType, close, basisLen, offsetSigma, offsetALMA)
reso__1 = reso(variant__1, useRes, stratRes)
reso__2 = reso(close, useRes, stratRes)
closeSeries = useMA ? reso__1 : reso__2
variant__2 = variant(basisType, open, basisLen, offsetSigma, offsetALMA)
reso__3 = reso(variant__2, useRes, stratRes)
reso__4 = reso(open, useRes, stratRes)
openSeries = useMA ? reso__3 : reso__4
trendState = bool(na)
trendState := closeSeries > openSeries ? true : 
   closeSeries < openSeries ? false : trendState[1]
// === /SERIES ===

// === PLOTTING ===
barcolor(color=closeSeries > openSeries ? #006600 : #990000, title="Bar Colours")
// channel outline
closePlot = plot(closeSeries, title="Close Line", color=#009900, linewidth=2, style=plot.style_line, transp=90)
openPlot = plot(openSeries, title="Open Line", color=#CC0000, linewidth=2, style=plot.style_line, transp=90)
// channel fill
closePlotU = plot(trendState ? closeSeries : na, transp=100, editable=false)
openPlotU = plot(trendState ? openSeries : na, transp=100, editable=false)
closePlotD = plot(trendState ? na : closeSeries, transp=100, editable=false)
openPlotD = plot(trendState ? na : openSeries, transp=100, editable=false)
fill(openPlotU, closePlotU, title="Up Trend Fill", color=#009900, transp=40)
fill(openPlotD, closePlotD, title="Down Trend Fill", color=#CC0000, transp=40)
// === /PLOTTING ===

// === STRATEGY ===
// conditions
longCond = crossover(closeSeries, openSeries)
shortCond = crossunder(closeSeries, openSeries)
// entries and base exit
strategy.entry("long", strategy.long, when=longCond)
strategy.entry("short", strategy.short, when=shortCond)
// if we're using the trailing stop
if useStop
    strategy.exit("XL", from_entry="long", trail_points=slPoints, trail_offset=slOffset)
    strategy.exit("XS", from_entry="short", trail_points=slPoints, trail_offset=slOffset)
// not sure needed, but just incase..
strategy.exit("XL", from_entry="long", when=shortCond)
strategy.exit("XS", from_entry="short", when=longCond)
// === /STRATEGY ===