
Die Kraftfeld-Breakout-Strategie ist eine quantitative Handelsstrategie, die auf Moving Averages und relativ starken Indizes basiert. Die Strategie beurteilt die Richtung des Markttrends, indem sie den Preis für die Überschreitung des kritischen Moving Averages erkennt, in Kombination mit dem RSI-Indikator, um den Zeitpunkt für den Einstieg zu bestimmen. Die Kernidee ist, ein Handelssignal auszusenden, wenn der Preis den Moving Average überschreitet, unterstützt von einem Überkaufsignal des RSI-Indikators.
Die Kraftfeld-Breakout-Strategie verwendet zwei Moving Averages, den ersten mit einem 10-Zyklus-EMA als schnellen Moving Average und den zweiten mit einem 200-Zyklus-EMA als langsamer Moving Average. Die schnelle Linie stellt die aktuelle Preisentwicklung dar, die langsame Linie stellt die langfristige Preisentwicklung dar.
Die Strategie kombiniert auch die RSI-Indikatoren, um den spezifischen Zeitpunkt des Eintritts zu bestimmen. Wenn der Preis in einem Aufwärtstrend ist, wird ein Mehrfachsignal ausgegeben, wenn der RSI-Tiefpunkt unter dem schnellen gleitenden Durchschnitt liegt (RSI-Indikator kleiner als 5). Wenn der Preis in einem Abwärtstrend ist, wird ein Abbruchsignal ausgegeben, wenn der RSI-Hochpunkt oberhalb des schnellen gleitenden Durchschnitts liegt (RSI-Indikator größer als 95).
Der Stop-Loss-Prinzip ist, wenn der Preis wieder unter die 10-Tage-Grenze fällt oder diese durchbricht, dann wird der Stop-Loss ausgeschaltet.
Der größte Vorteil dieser Strategie liegt in der starken Trendverfolgung. Der Moving Average selbst hat eine gute Trendentscheidungsfunktion. Die Strategie nutzt die Vorteile der schnellen und langsamen Durchschnittslinie voll aus, wobei die schnelle Linie die Richtung der kurzfristigen Tendenz bestimmt und die langsame Linie die Richtung der langfristigen Tendenz.
Die Einbeziehung des RSI-Indikators erhöht auch die Vorteile der Strategie. Die Kombination von RSI-Hoch-Low-Punkten kann effektiv ein Handelssignal bei einem Überkauf-Überverkauf auslösen, um so an möglichen Wendepunkten teilzunehmen und die Wirksamkeit der Strategie zu verbessern.
Obwohl diese Strategie eine starke Trend-Tracking-Fähigkeit hat, kann keine Technische Indikator-Strategie Verluste vollständig vermeiden, und es besteht ein gewisses Risiko. Insbesondere können folgende Risiken bestehen:
Um das Risiko zu verringern, können die Moving Average-Parameter angepasst, die RSI-Parameterkombination optimiert, die Stop-Line-Distanz angemessen gelockert, die Größe der Position angemessen kontrolliert usw. Die optimierten Parameterkombinationen sollten in der Rückmessung ausreichend verifiziert werden.
Die Strategie bietet noch Raum für weitere Optimierungen und konzentriert sich hauptsächlich auf folgende Bereiche:
Erhöhung der Adaptive Moving Average, die die Parameter des Moving Average automatisch an die Marktfluktuation anpasst, um die Flexibilität zu erhöhen.
Die Einbeziehung von Volatilitätsindikatoren, wie z. B. Bollinger Bands, ermöglicht eine effektive Bewältigung von stark schwankenden Marktbedingungen.
Erweiterung der Algorithmen für das Maschinelle Lernen, um durch die Ausbildung der KI bessere Parametersätze und Handelsregeln zu erhalten, um die Strategie intelligenter zu machen.
Mehrmarkt-Bündelung, Erweiterung der Tests und Bestätigung der Wirksamkeit der Strategien zwischen den verschiedenen Märkten.
Die Einführung von Modulen für die Fundamentalanalyse, die in Kombination mit Makro-Politik, wichtigen Ereignissen usw. die Marktentwicklung beurteilen und als Grundlage für strategische Entscheidungen dienen sollen.
Die Kraftfeld-Breakout-Strategie ist eine sehr praktische Moving-Average-Strategie. Sie nutzt die Prinzipien des schnellen und langsamen Durchbruchs der Preis-Mittellinie, um Trends zu beurteilen, und unterstützt den RSI-Indikator, um genau einzutreten. Diese Kombination nutzt die Vorteile der Gleichgewicht- und Überkauf-Überverkauf-Indikatoren.
/*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)