
La estrategia de comercio cuantitativo de ruptura de precios clave de múltiples cabezas de Livermore es un método de comercio sistematizado basado en la filosofía de negociación de Jesse Livermore. La estrategia capta con precisión el momento en que el precio rompe los puntos clave de soporte y resistencia mediante la identificación de tendencias principales, reajustes naturales y reajustes secundarios en el mercado.
La estrategia se basa en la filosofía de negociación de Jesse Livermore y divide las tendencias del mercado en seis estados: tendencia principal ascendente (MAIN_UP), tendencia principal descendente (MAIN_DOWN), rebote natural (NATURAL_REBOUND), rebote secundario (SECONDARY_RETRACEMENT) y rebote secundario (SECONDARY_RETRACEMENT).
Una estrategia para determinar el estado de tendencia en el mercado mediante el cálculo de la relación entre el precio actual y el punto clave histórico, combinado con un coeficiente de distancia entre ejes predeterminado (que puede ser un porcentaje fijo o basado en el cálculo dinámico de ATR). La lógica específica es la siguiente:
En una tendencia ascendente principal, se mantiene el estado de tendencia ascendente y se actualiza el punto más alto cuando los precios no superan el umbral definido por el multiplicador del eje principal; cuando la reversión supera el umbral, se cambia a un estado de reversión natural.
En una tendencia bajista principal, se mantiene el estado de tendencia bajista y se actualiza el punto más bajo cuando el precio continúa bajando o cuando el rebote no supera el umbral definido por el multiplicador del eje principal; cuando el rebote supera el umbral, se cambia a un estado de rebote natural.
La conversión de tendencias entre rebote/reajuste natural y rebote/reajuste secundario, según la relación entre el precio y los máximos y mínimos históricos y el multiplicador de eje principal y secundario predeterminado.
La lógica de generación de señales de negociación es la siguiente: cuando la tendencia se confirma como la tendencia principal al alza durante dos períodos consecutivos, se establece una posición de más de un cabeza; cuando la tendencia se confirma como la tendencia principal a la baja durante dos períodos consecutivos, se elimina la posición.
El juicio sistemático de tendenciasLa estrategia sistematiza el concepto de negociación de Livermore, definiendo los diferentes estados de tendencia a través de modelos matemáticos claros, eliminando la incertidumbre generada por el juicio subjetivo.
Altamente adaptableA través del porcentaje de la distancia entre ejes de la eje parametrizado y las opciones de ATR, la estrategia puede adaptarse a diferentes entornos de mercado y condiciones de volatilidad, aumentando la flexibilidad de la estrategia.
Mecanismo de confirmaciónLa estrategia requiere dos ciclos consecutivos de confirmación de la tendencia para ejecutar la operación, lo que reduce efectivamente las pérdidas causadas por una falsa ruptura.
Integración de la gestión de fondosEstrategia de gestión de posiciones utilizando porcentajes de derechos y intereses de las cuentas, para asegurar un margen de riesgo consistente en diferentes tamaños de cuentas.
Captura de tendencias a largo plazoLa estrategia capta las tendencias de grandes ciclos de manera eficaz, evitando la interferencia de los ruidos de corto plazo, al distinguir entre las tendencias principales y las secundarias.
Riesgo de retraso: Como la estrategia requiere confirmar el estado de la tendencia en dos ciclos para ejecutar la operación, es posible que se pierda parte de los beneficios al comienzo de la tendencia o que se sufra un retiro mayor cuando la tendencia se invierte.
Sensibilidad de los parámetrosEl rendimiento de la estrategia depende en gran medida de la configuración de parámetros como el porcentaje de distancia entre ejes, el número de multiplicadores de ejes primarios y secundarios, etc. Los parámetros incorrectos pueden causar exceso de comercio o perder señales importantes.
Limitación de las transacciones unidireccionalesLa estrategia está diseñada para ejecutar solo operaciones de más de una cabeza, lo que puede afectar a la rentabilidad general de los mercados de baja de largo plazo y a la suspensión de fondos por un período más largo.
Tendencias que definen la complejidadLa lógica de conversión entre los seis estados de tendencia es más compleja y puede causar cambios frecuentes de estado en momentos de gran volatilidad del mercado, lo que aumenta el costo de la transacción.
La falta de un mecanismo de detención de pérdidasEl código no incluye un Stop Loss definido, lo que significa que el riesgo de pérdidas es mayor en caso de una reversión brusca del mercado.
Aumentar el mecanismo de suspensión de pérdidasIntroducción de estrategias de stop loss basadas en ATR o porcentaje fijo para controlar el riesgo de una sola operación antes de que la tendencia se revierta. La implementación concreta es que se puede establecer un precio de stop loss al mismo tiempo que se crea una posición de varios titulares, para proteger la seguridad de los fondos.
Mecanismo de reconocimiento de tendencias optimizado: La estrategia actual requiere dos períodos consecutivos de confirmación de tendencias, se puede considerar la combinación de volumen de tráfico u otros indicadores técnicos para la confirmación de tendencias y mejorar la calidad de la señal.
Añadida la función de vacíoExtensión de estrategias para apoyar el comercio de divisas, aprovechar las oportunidades de ganancias en la tendencia descendente y mejorar la eficiencia de la estrategia en todo el tiempo.
Ajuste de parámetros dinámicosIntroducción de mecanismos de ajuste de parámetros dinámicos basados en la volatilidad histórica o el estado del mercado, para que las estrategias se adapten mejor a diferentes entornos del mercado.
Añadir condiciones de filtraciónEl objetivo de la estrategia es: combinar el ciclo del mercado, la estacionalidad o los filtros básicos para evitar la apertura de posiciones en condiciones desfavorables y mejorar la tasa de ganancias.
Construcción de almacenes por lotesEl objetivo de la iniciativa es: implementar un mecanismo de entrada y salida por lotes, reducir el riesgo de selección de la oportunidad y optimizar la eficiencia en el uso de los fondos.
La estrategia de comercio cuantitativo de brecha de precios clave de múltiples cabezas de Livermore traduce con éxito el concepto de comercio clásico de Jesse Livermore en un sistema algorítmico de ejecución cuantitativa. Al definir con precisión los seis estados de tendencia del mercado y sus condiciones de conversión, la estrategia es capaz de identificar y rastrear con eficacia las principales tendencias al alza y ejecutar operaciones múltiples sobre la base de la tendencia confirmada.
Si bien la estrategia tiene ventajas como sistematización, adaptabilidad y mecanismos de confirmación integrados, también enfrenta riesgos como atraso, sensibilidad a los parámetros y falta de paradas. La estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más mediante la optimización de direcciones como el aumento de los mecanismos de paradas, la optimización de la detección de tendencias, la expansión de la función de desempate y el ajuste dinámico de los parámetros.
En general, la estrategia ofrece un marco sólido para los inversores que buscan una implementación sistemática de la filosofía de negociación de Livermore, con la esperanza de obtener rendimientos estables a largo plazo en las operaciones reales con el ajuste adecuado de los parámetros y la optimización de la gestión del riesgo.
/*backtest
start: 2024-07-16 00:00:00
end: 2025-07-12 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":200000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bozhang_ox
//@version=6
strategy("Trading strategy Jesse Livermore", overlay=true)
// Input parameters
pivot_distance_percentage = input.float(0.5, title="Pivot Distance Percentage")
major_pivot_multiplier = input.int(6, title="Major Pivot Multiplier")
minor_pivot_multiplier = input.int(3, title="Minor Pivot Multiplier")
use_atr_pivot_distance = input.bool(false, title="Use ATR for Pivot Distance")
atr_period = input.int(14, title="ATR Period")
atr_pivot_multiplier = input.float(1, title="ATR Pivot Multiplier")
// Calculate ATR
atr = ta.atr(atr_period)
// Helper function to calculate pivot distance ratio
pivot_distance_ratio = use_atr_pivot_distance ? (atr * atr_pivot_multiplier) / close : pivot_distance_percentage / 100
// Trend states
NONE = 0
MAIN_UP = 6
MAIN_DOWN = 1
NATURAL_REBOUND = 2
NATURAL_RETRACEMENT = 5
SECONDARY_REBOUND = 4
SECONDARY_RETRACEMENT = 3
// Variables to track trends
var float main_up_max = na
var float main_down_min = na
var float natural_rebound_max = na
var float natural_retracement_min = na
var int trend = NONE
var int prev_trend = NONE
var int prev_prev_trend = NONE
// Initialize variables
if na(main_up_max)
main_up_max := -1e10
if na(main_down_min)
main_down_min := 1e10
if na(natural_rebound_max)
natural_rebound_max := -1e10
if na(natural_retracement_min)
natural_retracement_min := 1e10
// Trend logic
if trend == NONE
if close > close[1]
trend := MAIN_UP
main_up_max := close
else
trend := MAIN_DOWN
main_down_min := close
else if trend == MAIN_UP
if close > close[1] or (main_up_max - close < close[1] * pivot_distance_ratio * major_pivot_multiplier)
trend := MAIN_UP
main_up_max := math.max(main_up_max, close)
else
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
else if trend == MAIN_DOWN
if close < close[1] or (close - main_down_min < close[1] * pivot_distance_ratio * major_pivot_multiplier)
trend := MAIN_DOWN
main_down_min := math.min(main_down_min, close)
else
trend := NATURAL_REBOUND
natural_rebound_max := close
else if trend == NATURAL_REBOUND
if close > close[1]
if close <= main_up_max
if close - natural_rebound_max <= close[1] * pivot_distance_ratio * minor_pivot_multiplier
trend := NATURAL_REBOUND
natural_rebound_max := math.max(natural_rebound_max, close)
else
trend := MAIN_UP
main_up_max := close
else
trend := MAIN_UP
main_up_max := close
else
if natural_rebound_max - close <= close[1] * pivot_distance_ratio * major_pivot_multiplier
trend := NATURAL_REBOUND
else if close < natural_retracement_min
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
else
trend := SECONDARY_RETRACEMENT
else if trend == NATURAL_RETRACEMENT
if close < close[1]
if close >= main_down_min
if natural_retracement_min - close <= close[1] * pivot_distance_ratio * minor_pivot_multiplier
trend := NATURAL_RETRACEMENT
natural_retracement_min := math.min(natural_retracement_min, close)
else
trend := MAIN_DOWN
main_down_min := close
else
trend := MAIN_DOWN
main_down_min := close
else
if close - natural_retracement_min <= close[1] * pivot_distance_ratio * major_pivot_multiplier
trend := NATURAL_RETRACEMENT
else if close > natural_rebound_max
trend := NATURAL_REBOUND
natural_rebound_max := close
else
trend := SECONDARY_REBOUND
else if trend == SECONDARY_REBOUND
if close <= natural_rebound_max and close >= natural_retracement_min
trend := SECONDARY_REBOUND
else if close < natural_retracement_min
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
else
trend := NATURAL_REBOUND
natural_rebound_max := close
else if trend == SECONDARY_RETRACEMENT
if close >= natural_retracement_min and close <= natural_rebound_max
trend := SECONDARY_RETRACEMENT
else if close > natural_rebound_max
trend := NATURAL_REBOUND
natural_rebound_max := close
else
trend := NATURAL_RETRACEMENT
natural_retracement_min := close
// Execute trades based on trend changes
if prev_trend != prev_prev_trend
if trend == MAIN_UP and prev_trend == MAIN_UP
strategy.entry("Long Entry", strategy.long, comment="Long Entry")
else if trend == MAIN_DOWN and prev_trend == MAIN_DOWN
strategy.close("Long Entry", comment = "Long Close")
// Update previous trend
prev_prev_trend := prev_trend
prev_trend := trend