Estrategia de escalping de la nube de Ichimoku

El autor:¿ Qué pasa?, Fecha: 2023-12-21 11:13:15
Las etiquetas:

img

Resumen general

La estrategia de escalping de la nube de Ichimoku es una estrategia cuantitativa a corto plazo que integra la nube de Ichimoku y el índice direccional promedio (ADX). Utiliza la nube de Ichimoku para determinar la dirección de la tendencia y el ADX para filtrar los mercados no de tendencia para escalpar durante las condiciones de tendencia.

Estrategia lógica

La estrategia consta de dos componentes principales:

  1. Nube Ichimoku para juzgar la dirección de la tendencia

    • Línea de conversión: precio medio de los últimos 7 períodos
    • Línea de base: precio medio de los últimos 26 períodos
    • Distancia de conducción A: punto medio de la línea de conversión y de la línea de base
    • Variación de las cotizaciones de las entidades de crédito

    El precio por encima de la nube indica una tendencia alcista, mientras que por debajo significa una tendencia bajista.

  2. ADX para filtrar el mercado no de tendencia

    Solo toma señales cuando el ADX es mayor de 20, lo que sugiere un mercado de tendencia.

Reglas comerciales:

  • Entradas largas: rupturas de precios por encima de la línea de conversión y ADX>20
  • Entrada corta: las rupturas de precios por debajo de la línea de conversión y el ADX>20
  • Pérdida de parada: 150 ticks
  • Tome ganancias: 200 ticks

Análisis de ventajas

Las ventajas de esta estrategia:

  1. Siguiendo la tendencia, evitando los rangos. Ichimoku Cloud puede determinar con precisión la dirección de la tendencia y los puntos de inflexión. ADX filtra el mercado limitado por el rango para evitar una falsa ruptura.

  2. Control de extracción. 150 ticks para detener la pérdida efectivamente límites por pérdida comercial.

  3. Factor de ganancia alto. 200 ticks tomar ganancia contra 150 ticks stop loss da un factor de ganancia de 1.33, fácil de obtener ganancias.

  4. La frecuencia de negociación adecuada. Sólo la negociación cuando surge una tendencia evita el exceso de negociación.

Análisis de riesgos

Los riesgos son:

  1. Riesgo de falla en la determinación de tendencias. Se produce una señal incorrecta cuando Ichimoku Cloud no detecta la inversión de tendencias. Se pueden optimizar los parámetros para mejorar la precisión.

  2. El riesgo de pérdida de stop puede ser alcanzado durante el mercado rápido.

  3. Riesgo de negociación durante la noche y antes del mercado. La configuración predeterminada solo permite el comercio diurno. El juicio puede fallar durante horas extendidas. Puede habilitar el comercio 24H o personalizar estrategias para sesiones extendidas.

Direcciones de optimización

Las posibles direcciones de optimización:

  1. Ajuste de parámetros de la Nube Ichimoku para encontrar el ajuste óptimo.

  2. Parámetro ADX y optimización del umbral para determinar los mejores valores.

  3. Objetivo de ganancia y optimización de stop loss basado en datos históricos.

  4. Detener la pérdida para seguir mejor la tendencia.

  5. Indicadores adicionales como el MACD y el KD para ayudar a determinar la tendencia.

  6. Optimización adaptativa para diferentes productos.

Conclusión

La estrategia de escalping de Ichimoku Cloud Quant integra las ventajas de Ichimoku Cloud y ADX para determinar con precisión los puntos de inversión de tendencia y filtrar los mercados de rango. Tiene un alto factor de ganancia, una reducción controlable y es adecuada para escalpar a lo largo de la tendencia.


/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-20 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='[STRATEGY][RS]Spot/Binary Scalper V0', shorttitle='IC', overlay=true, initial_capital=100000, currency=currency.USD)
//  ||  Adapted from:
//  ||      http://www.binaryoptionsedge.com/topic/1414-ta-spot-scalping-it-works-damn-good/?hl=singh

//  ||  Ichimoku cloud:
conversionPeriods = input(title='Conversion Periods:',  defval=7, minval=1),
basePeriods = 26//input(title='Base Periods',  defval=26, minval=1)
laggingSpan2Periods = 52//input(title='Lagging Span:',  defval=52, minval=1),
displacement = 26//input(title='Displacement:',  defval=26, minval=1)

f_donchian(_len) => avg(lowest(_len), highest(_len))

f_ichimoku_cloud(_conversion_periods, _base_periods, _lagging_span)=>
    _conversion_line = f_donchian(_conversion_periods)
    _base_line = f_donchian(_base_periods)
    _lead_line1 = avg(_conversion_line, _base_line)
    _lead_line2 = f_donchian(_lagging_span)
    [_conversion_line, _base_line, _lead_line1, _lead_line2]

[conversionLine, baseLine, leadLine1, leadLine2] = f_ichimoku_cloud(conversionPeriods, basePeriods, laggingSpan2Periods)

//ps0 = plot(title='A', series=leadLine1, color=green, linewidth=2)
//ps1 = plot(title='B', series=leadLine2, color=red, linewidth=2)
//fill(title='AB', plot1=ps0, plot2=ps1, color=blue, transp=80)
//plot(title='Base', series=baseLine, color=blue, linewidth=1, offset=displacement)
plot(title='Conversion', series=conversionLine, color=blue, linewidth=1)
//  ||----------------------------------------------------------------------------------------------------------------------------------------------||
//  ||  ADX
len = input(title="Length",  defval=14)
th = input(title="threshold",  defval=20)

TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0


SmoothedTrueRange = nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
//  ||----------------------------------------------------------------------------------------------------------------------------------------------||
//  ||  Trade session:
USE_TRADESESSION = input(title='Use Trading Session?', type=bool, defval=true)
trade_session = input(title='Trade Session:', defval='0400-1500', confirm=false)
istradingsession = not USE_TRADESESSION ? false : not na(time('1', trade_session))
bgcolor(istradingsession?gray:na)
//  ||----------------------------------------------------------------------------------------------------------------------------------------------||
//  ||  Strategy:
trade_size = input(title='Trade Size:',  defval=1)
stop_loss_in_ticks = input(title='Stop Loss in ticks:',  defval=150)
take_profit_in_ticks = input(title='Take Profit in ticks:',  defval=200)

buy_icloud_signal = open < conversionLine and close > conversionLine
buy_adx_signal = DIPlus > 20
buy_signal = istradingsession and buy_icloud_signal and buy_adx_signal

sel_icloud_signal = open > conversionLine and close < conversionLine
sel_adx_signal = DIMinus > 20
sel_signal = istradingsession and sel_icloud_signal and sel_adx_signal


strategy.order('buy', long=true, qty=trade_size, comment='buy', when=buy_signal)
strategy.order('sel', long=false, qty=trade_size, comment='sel', when=sel_signal)

strategy.exit('exit buy', from_entry='buy', profit=take_profit_in_ticks, loss=stop_loss_in_ticks)
strategy.exit('exit sel', from_entry='sel', profit=take_profit_in_ticks, loss=stop_loss_in_ticks)


Más.