Estrategia de ruptura de velas japonesas Ichimoku


Fecha de creación: 2023-12-21 10:44:37 Última modificación: 2023-12-21 10:44:37
Copiar: 2 Número de Visitas: 721
1
Seguir
1621
Seguidores

Estrategia de ruptura de velas japonesas Ichimoku

Descripción general

La estrategia se basa en un indicador muy conocido en el análisis técnico de mercados, el indicador Ichimoku Kinko Hyo, que utiliza la forma de la nube y la relación de los precios con la nube para determinar la dirección de la tendencia y descubrir oportunidades de comercio. La estrategia se aplica a operaciones de posición de línea media y larga.

Principio de estrategia

La estrategia utiliza varios componentes del indicador Ichimoku Kinko Hyo, que incluyen la línea de conversión ((Tenkan-Sen), la línea de referencia ((Kijun-Sen), la línea de vanguardia ((Senkou Span A), la línea de liderazgo ((Senkou Span B) y la línea de retraso ((Chikou Span)). Estas líneas se unen para formar lo que se conoce como la nube Ichimoku. Cuando el precio se rompe con la nube, se generan señales de compra y venta.

En concreto, la estrategia para determinar si el precio ha roto la nube se basa principalmente en las dos líneas Senkou Span A y Senkou Span B. La zona entre estas dos líneas constituye la nube. Se produce una señal de compra cuando el precio se cierra a la brecha superior de la nube; se produce una señal de venta cuando el precio se cierra a la brecha inferior de la nube.

Además, la estrategia también establece precios de stop loss y stop-loss. Utilizando syminfo.pointvalue y la información de posiciones de la estrategia, se calcula el número de puntos de pérdida y se convierte en precios concretos.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. El indicador de Ichimoku para determinar la dirección de la tendencia puede filtrar el ruido del mercado y identificar tendencias medianas y largas.
  2. La formación de señales de penetración en las nubes evita los daños causados por la falsa penetración.
  3. La combinación de paradas de pérdidas y paradas de paradas permite limitar las pérdidas individuales y bloquear los beneficios.
  4. Los parámetros son ajustables y se puede probar el impacto de los diferentes parámetros en el rendimiento de la estrategia
  5. Nube de visualización y otros componentes de Ichimoku, que forman una señal gráfica de intercambio intuitiva

Análisis de riesgos

La estrategia también tiene ciertos riesgos:

  1. Las posiciones en la línea media y larga podrían tener grandes pérdidas
  2. La señal de penetración podría estar atrasada y perderse el mejor punto de entrada.
  3. Las falsas brechas pueden causar señales erróneas y pérdidas
  4. El tiempo de retención es demasiado largo y los costos derivados son altos.
  5. Los precios de stop loss y stop loss establecidos pueden ser superados

Respuesta:

  1. Reducir adecuadamente el ciclo de tenencia de posiciones y reducir el riesgo de pérdidas y ganancias individuales
  2. Eficacia de la señal de ruptura en combinación con otros indicadores
  3. Mejorar la eficacia de las barreras de deterioro para evitar que se bloqueen
  4. Optimización del plazo de tenencia y reducción de los costos

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Prueba diferentes combinaciones de parámetros para encontrar el mejor
  2. En combinación con otros indicadores para filtrar la señal y evitar falsos brechas
  3. Ajuste dinámico del nivel de parada de pérdidas, trails stop loss
  4. Condiciones de salida personalizadas: señal de retroceso de ruptura de la nube, disparo de la amplitud de retorno del precio
  5. Añadir un mecanismo de gestión de posiciones

Resumir

La estrategia de ruptura de la línea de solsticio de Ichimoku es una estrategia de ruptura típica que utiliza el indicador de Ichimoku Kinko Hyo para determinar la dirección de la tendencia de la línea media y larga. Tiene ventajas como la ajustabilidad de los parámetros, la forma intuitiva y las señales visuales, pero también existe cierto riesgo de falsa ruptura, riesgo de tenencia de posición, etc. Se puede reducir el riesgo de estabilidad de la estrategia mediante la optimización de los parámetros, la filtración de señales y la configuración de paradas de pérdidas.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © moneyofthegame
// Basado en estrategias con el indicador ICHIMOKU KINKO HIYO
// El tiempo es oro colega :)

//@version=5
strategy('Ichimoku Cloud Estrategia Ruptura Nubes SWING TRADER  (By Insert Cheese)', shorttitle='Ichimoku Cloud Estrategia Ruptura Nubes SWING TRADER  (By Insert Cheese)',

         overlay=true,
         initial_capital=500,
         process_orders_on_close=true,
         default_qty_type=strategy.percent_of_equity,
         default_qty_value=100,
         commission_type=strategy.commission.percent,
         commission_value=0.05,
         currency=currency.NONE)
         




// Inputs: Ichimoku parametros
ts_bars =   input.int(9,  minval=1, title='Tenkan-Sen ',          group='Parámetros Ichimoku')
ks_bars =   input.int(26, minval=1, title='Kijun-Sen ',           group='Parámetros Ichimoku')
ssb_bars =  input.int(52, minval=1, title='Senkou-Span B ',       group='Parámetros Ichimoku')
cs_offset = input.int(26, minval=1, title='Chikou-Span',          group='Parámetros Ichimoku')
ss_offset = input.int(26, minval=1, title='Senkou-Span A',        group='Parámetros Ichimoku')

middle(len) => // LONGITITUD Ichimoku (SenkouB)
    math.avg(ta.lowest(len), ta.highest(len))

// Ichimoku Componentes
tenkan = middle (ts_bars)
kijun   = middle (ks_bars)
senkouA = math.avg(tenkan, kijun)
senkouB = middle (ssb_bars)


// Plot Ichimoku Kinko Hyo
plot(tenkan,                                     color=color.rgb(171, 128, 0),                              title="Tenkan-Sen",    display = display.none)
plot(kijun,                                      color=color.rgb(39, 0, 112),                               title="Kijun-Sen",     display = display.none)
plot(close, offset=-cs_offset+1,                 color=color.rgb(224, 200, 251),                            title="Chikou-Span",   display = display.none)
sa=plot(senkouA, offset=ss_offset-1,             color=color.rgb(68, 128, 0),                               title="Senkou-Span A", display = display.none)
sb=plot(senkouB, offset=ss_offset-1,             color=color.rgb(131, 0, 120),                              title="Senkou-Span B", display = display.none)
fill(sa, sb, color = senkouA > senkouB ?         color.rgb(0, 211, 11, 82) : color.rgb(75, 0, 126, 82),   title="Cloud color")

// Calculating 
ss_high = math.max(senkouA[ss_offset - 1], senkouB[ss_offset - 1])  //parte alta de la nube
ss_low = math.min(senkouA[ss_offset - 1], senkouB[ss_offset - 1])   //parte baja de la nube
ss_medium = ss_low + (ss_high - ss_low) / 2                         //parte intermedia


// Input para seleccionar largos o cortos
long_entry_enable =  input.bool(true, title='Entradas Largo',   group='Backtest Operativa', inline='SP20')
short_entry_enable = input.bool(true, title='Entradas Corto',   group='Backtest Operativa', inline='SP20')

// Input backtest rango de fechas 
fromMonth =  input.int  (defval=1,     title='Desde Mes',  minval=1,     maxval=12,      group='Backtest rango de fechas')
fromYear  =  input.int  (defval=2000,  title='Desde Año',  minval=1970,                  group='Backtest rango de fechas')
fromDay   =  input.int  (defval=1,     title='Desde Día',  minval=1,     maxval=31,      group='Backtest rango de fechas')
thruDay   =  input.int  (defval=1,     title='Hasta Día',  minval=1,     maxval=31,      group='Backtest rango de fechas')
thruMonth =  input.int  (defval=1,     title='Hasta Mes',  minval=1,     maxval=12,      group='Backtest rango de fechas')
thruYear  =  input.int  (defval=2099,  title='Hasta Año',  minval=1970,                  group='Backtest rango de fechas')

inDataRange = time >= timestamp(syminfo.timezone, fromYear, fromMonth, fromDay, 0, 0) and time < timestamp(syminfo.timezone, thruYear, thruMonth, thruDay, 0, 0)


//Estrategia

// Señales de entrada y salida

price_above_kumo = close  > ss_high // precio cierra arriba de la nube
price_below_kumo = close  < ss_low // precio cierra abajo de la nube
price_cross_above_kumo = ta.crossover  (close  , ss_high )   //precio cruza la nube parte alta
price_cross_below_kumo = ta.crossunder (close  , ss_low )     // precio cruza la nube parte baja

bullish = (price_above_kumo and price_cross_above_kumo)
bearish = (price_below_kumo and price_cross_below_kumo)

comprado = strategy.position_size > 0
vendido = strategy.position_size  < 0

sl_long =  price_above_kumo
sl_short = price_below_kumo


if ( not comprado and bullish and inDataRange and long_entry_enable)
//realizar compra
    strategy.entry("Buy", strategy.long)

//realizar salida long
if (comprado and bearish and inDataRange and long_entry_enable)
    strategy.close ("Buy", comment = "cerrado")

if ( not vendido and bearish and inDataRange and short_entry_enable)
//realizar venta
    strategy.entry("Sell", strategy.short)
    
//realizar salida long
if (vendido  and bullish and inDataRange and short_entry_enable)
    strategy.close ("Buy", comment = "cerrado")

// Función Calcular TP y SL

// Inputs para SL y TP


tpenable = input.bool(true, title =  "SL y TP metodo")



moneyToSLPoints(money)  =>
    strategy.position_size !=0 and tpenable ?  (money / syminfo.pointvalue / math.abs (strategy.position_size)) / syminfo.mintick : na

p = moneyToSLPoints(input.float(  100.0, minval=0.1, step=10.0, title = "Take Profit $$"))
l = moneyToSLPoints(input.float(  100.0, minval=0.1, step=10.0, title = "Stop Loss $$"))
strategy.exit("Close", profit = p, loss = l)



// debug plots for visualize SL & TP levels
pointsToPrice(pp) =>
    na(pp) ? na : strategy.position_avg_price + pp * math.sign(strategy.position_size) * syminfo.mintick
    
pp = plot(pointsToPrice(p),color = color.rgb(76, 175, 79, 96), style = plot.style_linebr )
lp = plot(pointsToPrice(-l),color = color.rgb(76, 175, 79, 96), style = plot.style_linebr )
avg = plot( strategy.position_avg_price, color = color.rgb(76, 175, 79, 96), style = plot.style_linebr )
fill(pp, avg, color = color.rgb(76, 175, 79, 96))
fill(avg, lp, color = color.rgb(255, 82, 82, 97))