En la carga de los recursos... Cargando...

En el caso de las entidades financieras, el valor de la inversión se calcula de acuerdo con el método de cálculo de la rentabilidad.

El autor:¿ Qué pasa?, fecha: 2024-05-15 16:56:03
Las etiquetas:CCIIndicador de riesgoKCLa SMAEl EMAEl número de personas afectadasEl CMATMA

img

Resumen general

Esta estrategia combina tres indicadores técnicos: CCI, RSI y Keltner Channels (KC), junto con un filtro de tendencia para lograr una negociación bidireccional en los pares de divisas AUDNZD y GBPNZD. Utiliza CCI y RSI para determinar las condiciones de sobrecompra y sobreventa, KC como referencia para el stop-loss y take-profit, y un promedio móvil como filtro de tendencia para abrir posiciones en línea con la tendencia.

Principios de estrategia

  1. Calcule los indicadores CCI, RSI y KC. La línea superior de KC es la línea media más ATR, y la línea inferior es la línea media menos ATR.
  2. Seleccionar el tipo de media móvil (SMA, EMA, SMMA, CMA o TMA) y el método de filtro de tendencia (OFF, Normal o Invertido) basados en los parámetros de entrada.
  3. Condiciones de entrada a largo plazo: permite posiciones largas, CCI < línea de sobreventa, cierre < línea inferior de KC, RSI < línea de sobreventa, volumen > multiplicador de volumen promedio de 50 períodos, sin posición larga actual.
  4. Condiciones de entrada a corto plazo: permiten el corto plazo, CCI > línea de sobrecompra, cierre > línea superior de KC, RSI > línea de sobrecompra, volumen > volumen promedio de 50 períodos * multiplicador, no existe posición corta actual.
  5. Condición de salida larga: CCI > 0, condición de salida corta: CCI < 0.
  6. Enviar alertas al abrir y cerrar posiciones.

Ventajas estratégicas

  1. Combina múltiples indicadores para un análisis completo, mejorando la precisión de la señal.
  2. Utiliza métodos de filtro de tendencias, lo que permite ajustes flexibles basados en las tendencias del mercado.
  3. Ofrece múltiples tipos de medias móviles, adaptándose a las diferentes características del mercado.
  4. Validado mediante datos históricos a largo plazo, demostrando una buena estabilidad y idoneidad para el uso a largo plazo.
  5. Comercio bidireccional, adecuado para diversas condiciones de mercado, proporcionando más oportunidades de ganancia.
  6. Altamente automatizado, sin necesidad de intervención manual, ahorrando tiempo y esfuerzo.

Riesgos estratégicos

  1. No tiene el tradicional stop-loss y take-profit, lo que puede conducir a reducciones significativas en condiciones extremas de mercado.
  2. Puede experimentar una apertura y cierre frecuentes de posiciones en mercados agitados, aumentando los costes de negociación.
  3. Utiliza períodos de CCI relativamente cortos, lo que puede generar señales de ruido.
  4. Los filtros de tendencias pueden tener una eficacia limitada cuando las tendencias no son claras o la volatilidad del mercado aumenta.
  5. Posiciones fijas, no capaces de adaptarse a los cambios en la volatilidad del mercado.

Direcciones para la optimización de la estrategia

  1. Considere la posibilidad de añadir paradas de seguimiento o paradas de pérdidas de punto fijo para controlar el riesgo de una operación única.
  2. Optimizar aún más los parámetros RSI y CCI para reducir las señales de ruido.
  3. Considerar la introducción de indicadores de volatilidad como el ATR para ajustar el tamaño de las posiciones y los stop-loss en función de la volatilidad del mercado.
  4. Añadir más pares de divisas y optimizar los parámetros individualmente en función de las características de cada instrumento.
  5. Intentar introducir el aprendizaje automático y otras tecnologías de IA para la optimización de parámetros adaptativos.

Resumen de las actividades

Esta estrategia emplea múltiples indicadores clásicos y es relativamente fácil de codificar y backtestar en TradingView. Si bien los resultados de backtesting son buenos, el control de riesgos y los ajustes de parámetros aún son necesarios para la negociación en vivo. Se recomienda comenzar con pequeños fondos para probar y aumentar gradualmente la inversión a medida que se acumula la experiencia.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('CCI Strategy with Trend Filter AUDNZD, GBPNZD', overlay=true, default_qty_type=strategy.cash, default_qty_value=50000, commission_value=0.0005, slippage=2, initial_capital=10000)

// State variables to ensure one entry per signal
var bool isLongOpen = false
var bool isShortOpen = false

// Input Parameters for allowing long and short trades
allowLong = input(true, title='Allow Long Trades')
allowShort = input(true, title='Allow Short Trades')

// Trend Filter Inputs
maType = input.string(title='MA Type', options=['OFF', 'SMA', 'EMA', 'SMMA', 'CMA', 'TMA'], defval='OFF')
trendFilterMethod = input.string(title='Trend Filter Method', options=['OFF', 'Normal', 'Reversed'], defval='OFF')
maLength = input(14, title='MA Length')

// Other Input Parameters
lengthKC = input(30, title='Keltner Channels Length')
multKC = input(0.7, title='Keltner Channels Multiplier')
lengthCCI = input(5, title='CCI Length')
overboughtCCI = input(75, title='CCI Overbought Level')
oversoldCCI = input(-75, title='CCI Oversold Level')
rsiPeriod = input(30, title='RSI Period')
rsiOverbought = input(60, title='RSI Overbought Level')
rsiOversold = input(60, title='RSI Oversold Level')
volumeMultiplier = input.float(0, title='Volume Multiplier', step=0.1, minval=0)

// Define Moving Averages
var float maValue = na
if maType == 'SMA'
    maValue := ta.sma(close, maLength)
else if maType == 'EMA'
    maValue := ta.ema(close, maLength)
else if maType == 'SMMA'
    float initialSMMA = ta.sma(close, maLength)
    maValue := na(maValue[1]) ? initialSMMA : (maValue[1] * (maLength - 1) + close) / maLength
else if maType == 'CMA'
    float firstSMA = ta.sma(close, maLength)
    float secondSMA = ta.sma(close, maLength)
    maValue := na(maValue[1]) ? firstSMA : (firstSMA + secondSMA - maValue[1]) / 2
else if maType == 'TMA'
    maValue := ta.sma(ta.sma(close, math.round(maLength / 2)), math.round(maLength / 2) + 1)

// Entry Conditions with Trend Filter
longCondition = allowLong and (trendFilterMethod == 'OFF' or trendFilterMethod == 'Normal' and close > maValue or trendFilterMethod == 'Reversed' and close < maValue)
shortCondition = allowShort and (trendFilterMethod == 'OFF' or trendFilterMethod == 'Normal' and close < maValue or trendFilterMethod == 'Reversed' and close > maValue)

// Keltner Channels
typicalPrice = hlc3
middleLine = ta.sma(typicalPrice, lengthKC)
range_1 = multKC * ta.atr(lengthKC)
upperChannel = middleLine + range_1
lowerChannel = middleLine - range_1

// CCI
cci = ta.cci(close, lengthCCI)

// RSI
rsi = ta.rsi(close, rsiPeriod)

// Volume
volCondition = volume > ta.sma(volume, 50) * volumeMultiplier

// Combined Entry Conditions with Trend Filter and state check
longCondition := longCondition and cci < oversoldCCI and low < lowerChannel and rsi < rsiOversold and volCondition and not isLongOpen
shortCondition := shortCondition and cci > overboughtCCI and high > upperChannel and rsi > rsiOverbought and volCondition and not isShortOpen

// Execute orders at the open of the new bar after conditions are met
if longCondition
    strategy.entry('Long', strategy.long)
    alert('LicenseID,buy,AUDNZD,risk=1')
    isLongOpen := true
if shortCondition
    strategy.entry('Short', strategy.short)
    alert('LicenseID,sell,AUDNZD,risk=1')
    isShortOpen := true

// Exit Conditions and Alerts
longExitCondition = cci > 0
shortExitCondition = cci < 0
if (longExitCondition and isLongOpen)
    strategy.close('Long')
    alert('LiceneseID,closelong,AUDNZD')
    isLongOpen := false
if (shortExitCondition and isShortOpen)
    strategy.close('Short')
    alert('LicenseID,closeshort,AUDNZD')
    isShortOpen := false

// Plotting
plot(upperChannel, color=color.new(color.red, 0), linewidth=1)
plot(lowerChannel, color=color.new(color.green, 0), linewidth=1)
hline(overboughtCCI, 'Overbought', color=color.red)
hline(oversoldCCI, 'Oversold', color=color.green)


Relacionados

Más.