Choppiness estrategia de avance de la línea K

El autor:¿ Qué pasa?, Fecha: 2023-10-07 15:59:26
Las etiquetas:

Resumen general

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.

Estrategia lógica

Los conceptos básicos de la estrategia Choppiness K-line Breakthrough son:

  1. Utilizando el índice de canal de productos básicos (CCI) para determinar si los precios están en zonas de sobrecompra o sobreventa.

  2. 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.

  3. Incorporar el volumen de negociación para considerar sólo las señales de compra y venta cuando el volumen está aumentando.

  4. 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.

  5. 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.

Análisis de ventajas

La estrategia Choppiness K-line tiene las siguientes ventajas:

  1. La combinación de múltiples indicadores mejora la confiabilidad de las señales de negociación.

  2. El uso de patrones de línea K ayuda a identificar con precisión las inversiones de tendencia.

  3. Detener pérdidas y obtener ganancias controla eficazmente los riesgos y bloquea las ganancias.

  4. Sólo teniendo en cuenta las señales de aumento de volumen evita señales falsas.

  5. La lógica de la estrategia es clara y los parámetros son flexibles para la optimización entre acciones y entornos de mercado.

  6. La estrategia puede mejorarse aún más mediante más factores, aprendizaje automático, etc., mejorando la estabilidad y la rentabilidad.

Análisis de riesgos

Los riesgos potenciales de la estrategia incluyen:

  1. Las señales CCI pueden retrasarse, causando puntos de entrada óptimos perdidos.

  2. Las rupturas falsas en los patrones de línea K pueden causar pérdidas innecesarias.

  3. Los aumentos de volumen también pueden manipularse, por lo que es importante vigilar la divergencia de volumen-precio.

  4. El stop loss/take profit estático puede salir temprano o perder más tendencias.

  5. Los parámetros que se ajustan a una pieza pueden no ser adecuados para otras, por lo que se requiere un ajuste específico.

  6. Los resultados de las pruebas de retroceso pueden no representar el rendimiento en vivo.

Direcciones de optimización

La estrategia puede reforzarse mediante:

  1. Optimización de los parámetros CCI para una generación de señal más rápida.

  2. Añadiendo más indicadores como MACD, Bandas de Bollinger para mejorar la precisión de la señal.

  3. Utilizando modelos de aprendizaje automático entrenados en datos históricos para predecir los puntos de entrada/salida.

  4. Empleando un stop loss dinámico y tomando ganancias basado en la volatilidad del mercado.

  5. Mejorar la lógica de aumento de volumen para detectar la divergencia de volumen-precio.

  6. Ajuste de los parámetros de las diferentes existencias y regímenes de mercado para mejorar la estabilidad.

  7. Incorporar mecanismos de seguimiento de tendencias para un mejor rendimiento en todas las etapas del mercado.

  8. Modularizar la estrategia para una mayor flexibilidad y extensibilidad.

Conclusión

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 **********

Más.