La estrategia Super Ichi es una estrategia de trading de tendencia que toma decisiones comerciales basadas en el indicador Super Ichi.
La estrategia Super Ichi es principalmente adecuada para el comercio de tendencias a mediano y largo plazo y tiene como objetivo sacar provecho de las principales tendencias.
La estrategia Super Ichi evalúa principalmente los siguientes elementos para determinar la dirección de la negociación:
Tenkan y Kijun relación: alcista cuando Tenkan está en la cima, bajista cuando está debajo
Color de las nubes: alcista cuando la nube es verde, bajista cuando es roja
Recuperación de precios: Requiere una retirada de las líneas antes de la entrada
Específicamente, las señales comerciales son:
Una señal larga.:
Señales cortas:
Cuando se activa la señal larga/corta, se abrirá una posición basada en la posición actual.
La estrategia Super Ichi tiene las siguientes ventajas:
Utiliza la combinación Ichimoku para determinar las tendencias con precisión
Tenkan/Kijun muestra tendencias a corto plazo, Cloud muestra tendencias a largo plazo
El requisito de retroceso evita las falsas rupturas
La gestión del riesgo utiliza los cambios recientes de alto/bajo para detener pérdidas para limitar las pérdidas
Relación razonable riesgo-beneficio para las ganancias constantes
Aplicable a diferentes plazos para la negociación de tendencias a medio y largo plazo
Lógica clara y gran espacio de optimización
Se desempeña bien en diversas condiciones de mercado
La estrategia Super Ichi también tiene los siguientes riesgos:
Las pérdidas de detención pueden desencadenarse con frecuencia durante los mercados variados, lo que afecta a la rentabilidad
No revertir rápidamente las posiciones cuando la tendencia cambia rápidamente podría dar lugar a pérdidas
Los coeficientes riesgo-rendimiento de incumplimiento pueden no ser adecuados para todos los instrumentos, se requiere un ajuste fino
Potencial de crecimiento limitado cuando la ruptura de la nube tiene un seguimiento limitado
Los parámetros de los indicadores necesitan pruebas y optimización extensas para los instrumentos activos
Los riesgos pueden reducirse mediante:
Optimización de parámetros para diferentes plazos e instrumentos
Añadir filtros para evitar entradas falsas de ruptura durante el mercado de rango
Utilizando pérdidas de parada dinámicas para reducir la parada
Prueba de diferentes ajustes de la relación riesgo-recompensa
Confirmación de la intensidad de la señal utilizando patrones de gráficos, etc.
La estrategia Super Ichi puede optimizarse en los siguientes aspectos:
Optimizar los parámetros Tenkan/Kijun para adaptarse mejor al instrumento negociado
Optimizar los parámetros de la nube para una mejor evaluación de la tendencia a largo plazo
Mejorar el algoritmo de stop loss, por ejemplo, basado en ATR o trailing stops
Añadir filtros con otros indicadores para reducir las entradas falsas
Indicadores de riesgo-beneficio ajustados para diferentes instrumentos y plazos
Utilice el dimensionamiento de las posiciones de martingale para adaptarse a la variabilidad de la volatilidad del mercado
Utilice el aprendizaje automático para la optimización de parámetros y la robustez
Establecer parámetros separados para sesiones diurnas y nocturnas
La estrategia Super Ichi es muy adecuada para el comercio de tendencias a mediano y largo plazo en general. Se destaca en la determinación de la dirección de la tendencia utilizando Ichimoku, mientras que el requisito de retroceso evita entradas falsas. Con la optimización de parámetros, puede lograr ganancias constantes en más instrumentos y plazos.
/*backtest start: 2022-11-05 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // Strategy based on the the SuperIchi indicator. // // Strategy was designed for the purpose of back testing. // See strategy documentation for info on trade entry logic. // // Credits: // - SuperIchi [LUX]: LuxAlgo (https://www.tradingview.com/script/vDGd9X9y-SuperIchi-LUX/) //@version=5 strategy("SuperIchi Strategy", overlay=true, initial_capital=1000, currency=currency.NONE, max_labels_count=500, default_qty_type=strategy.cash, commission_type=strategy.commission.percent, commission_value=0.01) // ============================================================================= // STRATEGY INPUT SETTINGS // ============================================================================= // --------------- // Risk Management // --------------- swingLength = input.int(15, "Swing High/Low Lookback Length", group='Strategy: Risk Management', tooltip='Stop Loss is calculated by the swing high or low over the previous X candles') accountRiskPercent = input.float(2, "Account percent loss per trade", step=0.1, group='Strategy: Risk Management', tooltip='Each trade will risk X% of the account balance') profitFactor = input.float(2, "Profit Factor (R:R Ratio)", step = 0.1, group='Strategy: Risk Management') useAtrOverride = input.bool(true, "Use Swing High/Low ATR Override", group='Strategy: Risk Management', tooltip='In some cases price may not have a large enough (if any) swing withing previous X candles. Turn this on to use an ATR value when swing high/low is lower than the given ATR value') atrMultiplier = input.int(1, "Swing High/Low ATR Override Multiplier", group='Strategy: Risk Management') atrLength = input.int(14, "Swing High/Low ATR Override Length", group='Strategy: Risk Management') // ----------------- // Strategy Settings // ----------------- pullbackLength = input.int(5, "Pullback Lookback Length", group='Strategy: Settings', tooltip='Number of candles to consider for a pullback into the moving averages (prerequisite for trade entry)') // ---------- // Date Range // ---------- start_year = input.int(title='Start Date', defval=2022, minval=2010, maxval=3000, group='Strategy: Date Range', inline='1') start_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) start_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='1', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]) end_year = input.int(title='End Date', defval=2023, minval=1800, maxval=3000, group='Strategy: Date Range', inline='2') end_month = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) end_date = input.int(title='', defval=1, group='Strategy: Date Range', inline='2', options = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]) in_date_range = time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0) and time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0) // ============================================================================= // INDICATORS // ============================================================================= // --------------- // SuperIchi [LUX] // --------------- tenkan_len = input(9,'Tenkan ',inline='SuperIchi', group='Indicator: SuperIchi Settings') tenkan_mult = input(2.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings') kijun_len = input(26,'Kijun ',inline='SuperIchi', group='Indicator: SuperIchi Settings') kijun_mult = input(4.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings') spanB_len = input(52,'Senkou Span B ',inline='SuperIchi', group='Indicator: SuperIchi Settings') spanB_mult = input(6.,'',inline='SuperIchi', group='Indicator: SuperIchi Settings') offset = input(26,'Displacement', inline='SuperIchi', group='Indicator: SuperIchi Settings') //------------------------------------------------------------------------------ avg(src,length,mult)=> atr = ta.atr(length)*mult up = hl2 + atr dn = hl2 - atr upper = 0.,lower = 0. upper := src[1] < upper[1] ? math.min(up,upper[1]) : up lower := src[1] > lower[1] ? math.max(dn,lower[1]) : dn os = 0,max = 0.,min = 0. os := src > upper ? 1 : src < lower ? 0 : os[1] spt = os == 1 ? lower : upper max := ta.cross(src,spt) ? math.max(src,max[1]) : os == 1 ? math.max(src,max[1]) : spt min := ta.cross(src,spt) ? math.min(src,min[1]) : os == 0 ? math.min(src,min[1]) : spt math.avg(max,min) //------------------------------------------------------------------------------ tenkan = avg(close,tenkan_len,tenkan_mult) kijun = avg(close,kijun_len,kijun_mult) senkouA = math.avg(kijun,tenkan) senkouB = avg(close,spanB_len,spanB_mult) //------------------------------------------------------------------------------ tenkan_css = #2157f3 //blue kijun_css = #ff5d00 //red cloud_a = color.new(color.teal,80) cloud_b = color.new(color.red,80) chikou_css = #7b1fa2 plot(tenkan,'Tenkan-Sen',tenkan_css) plot(kijun,'Kijun-Sen',kijun_css) plot(ta.crossover(tenkan,kijun) ? kijun : na,'Crossover',#2157f3,3,plot.style_circles) plot(ta.crossunder(tenkan,kijun) ? kijun : na,'Crossunder',#ff5d00,3,plot.style_circles) A = plot(senkouA,'Senkou Span A',na,offset=offset-1) B = plot(senkouB,'Senkou Span B',na,offset=offset-1) fill(A,B,senkouA > senkouB ? cloud_a : cloud_b) plot(close,'Chikou',chikou_css,offset=-offset+1,display=display.none) // ============================================================================= // STRATEGY LOGIC // ============================================================================= plotchar(kijun, "kijun", "", location = location.top) plotchar(senkouA[offset-1], "senkouA", "", location = location.top) plotchar(tenkan > kijun, "line above", "", location = location.top) plotchar(close > tenkan, "price above", "", location = location.top) plotchar(kijun > senkouA[offset-1], "above cloud", "", location = location.top) // blue line above red line + price above both lines + both lines above cloud longSen = tenkan > kijun and close > tenkan and kijun > senkouA[offset-1] // red line below blue line + price below both lines + both lines below cloud shortSen = tenkan < kijun and close < tenkan and kijun < senkouA[offset-1] plotchar(longSen, "longSen", "", location = location.top) plotchar(shortSen, "shortSen", "", location = location.top) // Cloud is green longSenkou = senkouA[offset-1] > senkouB[offset-1] // Cloud is red shortSenkou = senkouA[offset-1] < senkouB[offset-1] // price must have pulled back below sen lines before entry barsSinceLongPullback = ta.barssince(close < kijun and close < tenkan) longPullback = barsSinceLongPullback <= pullbackLength // price must have pulled back above sen lines before entry barsSinceShortPullback = ta.barssince(close > kijun and close > tenkan) shortPullback = barsSinceShortPullback <= pullbackLength // plotchar(lowestClose, "lowestClose", "", location = location.top) // plotchar(highestClose, "highestClose", "", location = location.top) inLong = strategy.position_size > 0 inShort = strategy.position_size < 0 longCondition = longSen and longSenkou and longPullback and in_date_range shortCondition = shortSen and shortSenkou and shortPullback and in_date_range swingLow = ta.lowest(source=low, length=swingLength) swingHigh = ta.highest(source=high, length=swingLength) atr = useAtrOverride ? ta.atr(atrLength) * atrMultiplier : 0 longSl = math.min(close - atr, swingLow) shortSl = math.max(close + atr, swingHigh) longStopPercent = math.abs((1 - (longSl / close)) * 100) shortStopPercent = math.abs((1 - (shortSl / close)) * 100) longTpPercent = longStopPercent * profitFactor shortTpPercent = shortStopPercent * profitFactor longTp = close + (close * (longTpPercent / 100)) shortTp = close - (close * (shortTpPercent / 100)) // Position sizing (default risk 2% per trade) riskAmt = strategy.equity * accountRiskPercent / 100 longQty = math.abs(riskAmt / longStopPercent * 100) / close shortQty = math.abs(riskAmt / shortStopPercent * 100) / close if (longCondition and not inLong) strategy.entry("Long", strategy.long, qty=longQty) strategy.exit("Long SL/TP", from_entry="Long", stop=longSl, limit=longTp, alert_message='Long SL Hit') buyLabel = label.new(x=bar_index, y=high[1], color=color.green, style=label.style_label_up) label.set_y(id=buyLabel, y=low) label.set_tooltip(id=buyLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + "\nQty: " + str.tostring(longQty) + "\nSwing low: " + str.tostring(swingLow) + "\nStop Percent: " + str.tostring(longStopPercent) + "\nTP Percent: " + str.tostring(longTpPercent)) if (shortCondition and not inShort) strategy.entry("Short", strategy.short, qty=shortQty) strategy.exit("Short SL/TP", from_entry="Short", stop=shortSl, limit=shortTp, alert_message='Short SL Hit') sellLabel = label.new(x=bar_index, y=high[1], color=color.red, style=label.style_label_up) label.set_y(id=sellLabel, y=low) label.set_tooltip(id=sellLabel, tooltip="Risk Amt: " + str.tostring(riskAmt) + "\nQty: " + str.tostring(shortQty) + "\nSwing high: " + str.tostring(swingHigh) + "\nStop Percent: " + str.tostring(shortStopPercent) + "\nTP Percent: " + str.tostring(shortTpPercent))