Die Force Breakthrough Strategy ist eine quantitative Handelsstrategie, die auf gleitenden Durchschnitten und dem Relative Strength Index (RSI) basiert. Sie erkennt die Markttrendrichtung, indem sie Preisdurchbrüche wichtiger gleitender Durchschnitte überwacht und den RSI-Indikator verwendet, um Eingangssignale zu bestimmen.
Die Force Breakthrough Strategie verwendet zwei gleitende Durchschnitte. Die erste ist eine 10-Perioden-EMA als schneller gleitender Durchschnitt. Die zweite ist eine 200-Perioden-EMA als langsamer gleitender Durchschnitt. Die schnelle Linie repräsentiert den aktuellen Preistrend und die langsame Linie repräsentiert den langfristigen Preistrend. Wenn die Preise steigen und über die 10-Tage-Linie dringen, ist dies ein bullisches Signal. Wenn die Preise fallen und unter die 10-Tage-Linie dringen, ist dies ein bärisches Signal.
Die Strategie beinhaltet auch den RSI-Indikator, um bestimmte Eintrittsmomente zu bestimmen. Wenn die Preise in einem Aufwärtstrend sind und ein RSI-Tiefpunkt unter dem schnellen gleitenden Durchschnitt erscheint (RSI fällt unter 5), wird ein langes Signal ausgelöst. Wenn die Preise in einem Abwärtstrend sind und ein RSI-Hochpunkt über dem schnellen gleitenden Durchschnitt erscheint (RSI übersteigt 95), wird ein kurzes Signal ausgelöst.
Das Stop-Loss-Prinzip besteht darin, nach dem Aufnehmen von Long/Short-Positionen aus der Position auszusteigen, wenn die Preise den gleitenden 10-Tage-Durchschnitt wieder durchbrechen.
Der größte Vorteil dieser Strategie ist die starke Trendnachfolgefähigkeit. Die gleitenden Durchschnitte selbst haben eine ausgezeichnete Trendbeurteilungsfunktion. Die Strategie nutzt die Stärken der schnellen und langsamen Linien voll aus, wobei die schnelle Linie den kurzfristigen Trend beurteilt und die langsame Linie den langfristigen Trend beurteilt. Wenn die schnelle Linie eine Aufwärtsdurchdringung der langsamen Linie hat, zeigt sie sowohl kurzfristige als auch langfristige Aufwärtstrends an, was ein starkes Kaufsignal ist.
Die Ergänzung des RSI-Indikators erhöht auch den Vorteil der Strategie. Die Kombination von RSI-High-Low-Punkten kann bei Überkauf- oder Überverkaufszuständen effektiv Handelssignale ausstellen, sodass die Teilnahme an potenziellen Umkehrpunkten die tatsächliche Performance verbessern kann.
Obwohl die Strategie eine relativ starke Trendverfolgungsfähigkeit aufweist, kann keine technische Indikatorstrategie Verluste vollständig vermeiden.
Wenn die Preise heftig schwanken, können sich die Handelssignale, die durch gleitende Durchschnitte erzeugt werden, verzögern.
Die RSI-Indikatoren sind anfällig für Abweichungen, die zu fehlerhaften Handelssignalurteilen führen können.
Unzulängliche Parameter im langfristigen Betrieb könnten zu einem Überhandel führen.
Um Risiken zu mindern, können Parameter wie der gleitende Durchschnitt und der RSI angepasst und optimiert werden, Stop-Loss-Bereiche können vernünftigerweise gelockert werden, Positionsgrößen können angemessen kontrolliert werden.
Es besteht Raum für eine weitere Optimierung der Strategie, die sich hauptsächlich auf folgende Bereiche konzentriert:
Hinzufügen von anpassungsfähigen gleitenden Durchschnitten zur automatischen Anpassung von Parametern auf Basis der Marktvolatilität zur Verbesserung der Flexibilität.
Einbeziehung von Volatilitätsindikatoren wie Bollinger Bands, um heftige Kursschwankungen zu bekämpfen.
Erhöhung der Algorithmen für maschinelles Lernen durch KI-Ausbildung für bessere Parameterkombinationen und Handelsregeln zur Verbesserung der Automatisierung.
Erweiterung der Prüfproben durch Multi-Markt-Portfolios zur Validierung der marktübergreifenden Wirksamkeit.
Einführung von Fundamentalanalysemodule auf der Grundlage von Makropolitik, wichtigen Ereignissen usw., um strategische Entscheidungsunterstützung zu bieten.
Die Force Breakthrough Strategy ist eine praktische, gleitenden Durchschnittsbasierte Strategie. Sie beurteilt Trends durch Preisdurchdringungen von schnellen und langsamen gleitenden Durchschnitten und tritt mit Hilfe von RSI-Indikatoren präzise in den Markt ein. Diese Kombination nutzt die Stärken von gleitenden Durchschnitten und Überkauf/Überverkaufsindizes voll aus. Die Strategie wird auf verschiedenen Märkten mit stetigen Renditen und kontrollierbaren Risiken validiert. Es ist eine empfohlene quantitative Handelsstrategie. Weitere Optimierungen können die Strategieleistung potenziell verbessern.
/*backtest start: 2024-01-16 00:00:00 end: 2024-01-23 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © JoseMetal //@version=5 //== Constantes c_blanco = color.rgb(255, 255, 255, 0) c_negro = color.rgb(0, 0, 0, 0) c_amarillo_radiactivo = color.rgb(255, 255, 0, 0) c_cian_radiactivo = color.rgb(0, 255, 255, 0) c_verde_radiactivo = color.rgb(0, 255, 0, 0) c_verde = color.rgb(0, 128, 0, 0) c_verde_oscuro = color.rgb(0, 80, 0, 0) c_rojo_radiactivo = color.rgb(255, 0, 0, 0) c_rojo = color.rgb(128, 0, 0, 0) c_rojo_oscuro = color.rgb(80, 0, 0, 0) c_naranja_oscuro = color.rgb(200, 120, 0, 0) noneColor = color.new(color.white, 100) max_float = 10000000000.0 //== Funciones //== Declarar estrategia y período de testeo strategy("Estrategia Larry Connors", shorttitle="Estrategia Larry Connors", overlay=true) fecha_inicio = input(timestamp("1 Jan 2000"), title="• Fecha de inicio", group="Período de pruebas", inline="periodo_de_pruebas") vela_en_fecha = true posicion_abierta = strategy.position_size != 0 LONG_abierto = strategy.position_size > 0 SHORT_abierto = strategy.position_size < 0 GRUPO_P = "Posiciones" P_permitir_LONGS = input.bool(title="LONGS", group=GRUPO_P, defval=true, inline="posiciones") P_permitir_SHORTS = input.bool(title="SHORTS", group=GRUPO_P, defval=true, inline="posiciones") GRUPO_general = "General" mostrar_color_velas = input.bool(title="Colorear velas", defval=true, group=GRUPO_general) //== Inputs de indicadores // Medias móviles simples GRUPO_SMAs = "SMAs" SMA_1_fuente = input.source(title="• (Media de salida) Fuente / Long.", group=GRUPO_SMAs, defval=close, inline="sma_1") SMA_1_length = input.int(title="", group=GRUPO_SMAs, defval=10, minval=1, inline="sma_1") SMA_2_fuente = input.source(title="• (Media tendencial) Fuente / Long.", group=GRUPO_SMAs, defval=close, inline="sma_2") SMA_2_length = input.int(title="", group=GRUPO_SMAs, defval=200, minval=1, inline="sma_2") SMA_1 = ta.ema(SMA_1_fuente, SMA_1_length) SMA_2 = ta.ema(SMA_2_fuente, SMA_2_length) // RSI GRUPO_RSI = "RSI" RSI_src = input.source(title="• Fuente / Longitud", group=GRUPO_RSI, defval=close, inline="rsi_calc") RSI_length = input.int(title="", group=GRUPO_RSI, defval=2, minval=1, inline="rsi_calc") RSI = ta.rsi(RSI_src, RSI_length) RSI_nivel_os = input.int(title="• Sobreventa / Sobrecompra", group=GRUPO_RSI, defval=5, minval=0, maxval=99, inline="rsi_niveles") RSI_nivel_ob = input.int(title="", group=GRUPO_RSI, defval=95, minval=1, maxval=100, inline="rsi_niveles") //== Cálculo de condiciones cierre_sobre_SMA_1 = close > SMA_1 tendencia_alcista = close > SMA_2 RSI_en_sobreventa = RSI < RSI_nivel_os RSI_en_sobrecompra = RSI > RSI_nivel_ob //== Entrada (deben cumplirse todas para entrar) LONG_condition_1 = tendencia_alcista LONG_condition_2 = not cierre_sobre_SMA_1 // Vela con cierre bajo la media rápida LONG_condition_3 = RSI_en_sobreventa[1] and not RSI_en_sobreventa // Sobreventa en la vela anterior y ya no en la actual all_LONG_conditions = LONG_condition_1 and LONG_condition_2 and LONG_condition_3 entrar_en_LONG = P_permitir_LONGS and all_LONG_conditions and vela_en_fecha and not LONG_abierto SHORT_condition_1 = not tendencia_alcista SHORT_condition_2 = cierre_sobre_SMA_1 // Vela con cierre sobre la media rápida SHORT_condition_3 = RSI_en_sobrecompra[1] and not RSI_en_sobrecompra // Sobrecompra en la vela anterior y ya no en la actual all_SHORT_conditions = SHORT_condition_1 and SHORT_condition_2 and SHORT_condition_3 entrar_en_SHORT = P_permitir_SHORTS and all_SHORT_conditions and vela_en_fecha and not SHORT_abierto if (entrar_en_LONG) strategy.entry("Abrir Long", strategy.long) if (entrar_en_SHORT) strategy.entry("Abrir Short", strategy.short) //== Salida exit_LONG_conditions = cierre_sobre_SMA_1 exit_SHORT_conditions = not cierre_sobre_SMA_1 if (LONG_abierto and exit_LONG_conditions) strategy.close("Abrir Long") if (SHORT_abierto and exit_SHORT_conditions) strategy.close("Abrir Short") //== Ploteo en pantalla // SMAs plot(SMA_1, "Media de salida", color=color.aqua, linewidth=2) plot(SMA_2, "Media tendencial", color=tendencia_alcista ? color.green : color.red, linewidth=4) // Color de fondo bgcolor = entrar_en_LONG ? color.new(color.green, 85) : entrar_en_SHORT ? color.new(color.red, 85) : color.new(color.black, 100) bgcolor(bgcolor) // Color de las velas según sobrecompra/sobreventa del RSI color_velas = mostrar_color_velas ? (RSI_en_sobreventa ? #00a800 : RSI_en_sobrecompra ? #ca0000 : na) : na barcolor(color_velas)