La estrategia Choppiness K-line Breakthrough es una estrategia de negociación cuantitativa que utiliza patrones de línea K e indicadores de impulso para determinar entradas y salidas para el comercio de acciones.
Los conceptos básicos de la estrategia Choppiness K-line Breakthrough son:
Utilizando el índice de canal de productos básicos (CCI) para determinar si los precios están en zonas de sobrecompra o sobreventa.
Identificación de patrones de línea K para detectar señales de ruptura. Una línea K roja con un cierre más alto que el abierto indica una tendencia alcista, mientras que una línea K verde cerrándola más baja que la abierta muestra una tendencia bajista.
Incorporar el volumen de negociación para considerar sólo las señales de compra y venta cuando el volumen está aumentando.
Tomar posiciones largas cuando se identifica una tendencia alcista y el CCI muestra sobreventa. Tomar posiciones cortas cuando se identifica una tendencia bajista y el CCI muestra sobrecompra.
Configurar puntos de stop loss y take profit para controlar los riesgos y bloquear las ganancias.
Específicamente, la estrategia utiliza el CCI para el análisis de sobrecompra / sobreventa, los patrones de la línea K para la dirección de la tendencia y el volumen para el impulso.
La estrategia Choppiness K-line tiene las siguientes ventajas:
La combinación de múltiples indicadores mejora la confiabilidad de las señales de negociación.
El uso de patrones de línea K ayuda a identificar con precisión las inversiones de tendencia.
Detener pérdidas y obtener ganancias controla eficazmente los riesgos y bloquea las ganancias.
Sólo teniendo en cuenta las señales de aumento de volumen evita señales falsas.
La lógica de la estrategia es clara y los parámetros son flexibles para la optimización entre acciones y entornos de mercado.
La estrategia puede mejorarse aún más mediante más factores, aprendizaje automático, etc., mejorando la estabilidad y la rentabilidad.
Los riesgos potenciales de la estrategia incluyen:
Las señales CCI pueden retrasarse, causando puntos de entrada óptimos perdidos.
Las rupturas falsas en los patrones de línea K pueden causar pérdidas innecesarias.
Los aumentos de volumen también pueden manipularse, por lo que es importante vigilar la divergencia de volumen-precio.
El stop loss/take profit estático puede salir temprano o perder más tendencias.
Los parámetros que se ajustan a una pieza pueden no ser adecuados para otras, por lo que se requiere un ajuste específico.
Los resultados de las pruebas de retroceso pueden no representar el rendimiento en vivo.
La estrategia puede reforzarse mediante:
Optimización de los parámetros CCI para una generación de señal más rápida.
Añadiendo más indicadores como MACD, Bandas de Bollinger para mejorar la precisión de la señal.
Utilizando modelos de aprendizaje automático entrenados en datos históricos para predecir los puntos de entrada/salida.
Empleando un stop loss dinámico y tomando ganancias basado en la volatilidad del mercado.
Mejorar la lógica de aumento de volumen para detectar la divergencia de volumen-precio.
Ajuste de los parámetros de las diferentes existencias y regímenes de mercado para mejorar la estabilidad.
Incorporar mecanismos de seguimiento de tendencias para un mejor rendimiento en todas las etapas del mercado.
Modularizar la estrategia para una mayor flexibilidad y extensibilidad.
La estrategia Choppiness K-line Breakthrough es una estrategia comercial a corto plazo relativamente sencilla. Combina indicadores técnicos comunes para una lógica clara y control de riesgos a través de stop loss y take profit. La estrategia se puede optimizar de manera flexible en función de las necesidades para capturar reversiones a corto plazo y tendencias a mediano plazo.
/*backtest start: 2023-09-06 00:00:00 end: 2023-10-06 00:00:00 period: 2h 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/ // © vikris //@version=4 strategy("[VJ]War Machine PAT Intra", overlay=true, calc_on_every_tick = false) // ********** Strategy inputs - Start ********** // Used for intraday handling // Session value should be from market start to the time you want to square-off // your intraday strategy // Important: The end time should be at least 2 minutes before the intraday // square-off time set by your broker var i_marketSession = input(title="Market session", type=input.session, defval="0915-1455", confirm=true) // Make inputs that set the take profit % (optional) longProfitPerc = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01 shortProfitPerc = input(title="Short Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01 // Set stop loss level with input options (optional) longLossPerc = input(title="Long Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01 shortLossPerc = input(title="Short Stop Loss (%)", type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01 trendFactor = input(title="Trend Factor(Lower means trending)", type=input.integer, minval=1, step=1, defval=50) oversold = input(title="Oversold", type=input.integer, minval=1, step=1, defval=25) overbought = input(title="Overbought", type=input.integer, minval=1, step=1, defval=75) // ********** Strategy inputs - End ********** // ********** Supporting functions - Start ********** // A function to check whether the bar or period is in intraday session barInSession(sess) => time(timeframe.period, sess) != 0 // Figure out take profit price longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) // Determine stop loss price longStopPrice = strategy.position_avg_price * (1 - longLossPerc) shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc) // ********** Supporting functions - End ********** // ********** Strategy - Start ********** // See if intraday session is active bool intradaySession = barInSession(i_marketSession) // Trade only if intraday session is active //=================Strategy logic goes in here=========================== //Vol Confirmation vol = volume > volume[1] //Engulfing candle confirm bullishEC = close > open[1] and close[1] < open[1] bearishEC = close < open[1] and close[1] > open[1] //Candles colors greenCandle = (close > open) redCandle = (close < open) length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000) src = hlc3 upper = sum(volume * (change(src) <= 0 ? 0 : src), length) lower = sum(volume * (change(src) >= 0 ? 0 : src), length) _rsi(upper, lower) => 100.0 - (100.0 / (1.0 + upper / lower)) mf = _rsi(upper, lower) ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length) //tradeSignal = ((rsiOS or rsiOS[1]) and bullishEC) or ((rsiOB or rsiOB[1]) and bearishEC) //Final Long/Short Condition longCondition = redCandle and mf < oversold and ci <trendFactor and vol shortCondition = greenCandle and mf >overbought and ci <trendFactor and vol //Long Strategy - buy condition and exits with Take profit and SL if (longCondition and intradaySession) stop_level = longStopPrice profit_level = longExitPrice strategy.entry("My Long Entry Id", strategy.long) strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level) //Short Strategy - sell condition and exits with Take profit and SL if (shortCondition and intradaySession) stop_level = shortStopPrice profit_level = shortExitPrice strategy.entry("My Short Entry Id", strategy.short) strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level) // Square-off position (when session is over and position is open) squareOff = (not intradaySession) and (strategy.position_size != 0) strategy.close_all(when = squareOff, comment = "Square-off") // ********** Strategy - End **********