Estrategia de tendencia Super Ichimoku


Fecha de creación: 2023-11-06 16:32:11 Última modificación: 2023-11-06 16:32:11
Copiar: 0 Número de Visitas: 1427
1
Seguir
1617
Seguidores

Estrategia de tendencia Super Ichimoku

Descripción general

La estrategia de super 1 es una estrategia de negociación de tendencias basada en el indicador de super 1 para tomar decisiones de negociación. La estrategia utiliza la línea de conversión, la línea de referencia y la relación de la banda de nube del indicador de super 1 para determinar la dirección de la tendencia actual y se combina con la reversión del precio para entrar.

La estrategia superior a uno se aplica principalmente a la negociación de tendencias en líneas medianas y largas, que pueden beneficiarse de tendencias más grandes. La estrategia también tiene una fuerte capacidad de identificación de tendencias.

Principio de estrategia

Las estrategias de Super 1 se basan en los siguientes factores para determinar la dirección de las operaciones:

  1. La relación entre la línea de conversión y la línea de referencia:Cuando la línea de conversión sube, mira al alza, y cuando baja, mira a la baja.

  2. El color de las nubes:Cuando las bandas de nubes son verdes se ve un aumento, cuando son rojas se ve un descenso

  3. Los precios se han vuelto a ajustar:La entrada requiere que el precio se recupere fuera de la línea de conversión y la línea de referencia.

En concreto, las señales de intercambio de la estrategia son:

¿Qué es lo que está pasando?

  • Línea de conversión más alta que la línea de referencia
  • Precios más altos que la línea de conversión y la línea de referencia
  • Línea de conversión y línea de referencia por encima de la franja de nubes
  • Precio de recuperación por debajo de la línea de conversión y la línea de referencia

¿Qué es lo que está pasando?

  • Línea de conversión por debajo de la línea de referencia
  • Precios por debajo de la línea de conversión y la línea de referencia
  • Línea de conversión y línea de referencia por debajo de la franja de nubes
  • Precio de recuperación por encima de la línea de conversión y la línea de referencia

Cuando se cumplen al mismo tiempo con las señales de hacer más / vacío, la operación de apertura de posición se realiza de acuerdo con la situación de la posición.

Análisis de las ventajas

La estrategia de Super Uno tiene las siguientes ventajas:

  1. El uso de combinaciones de indicadores superiores a uno para determinar la dirección de la tendencia, con una mayor precisión

  2. La línea de conversión y la línea de referencia pueden determinar claramente las tendencias a corto y medio plazo, mientras que la banda de nubes puede determinar las tendencias a largo plazo.

  3. Las condiciones requieren que el precio retroceda en la línea de giro para evitar pérdidas por falsas rupturas

  4. El control de riesgos utiliza el precio más bajo y más alto de los últimos tiempos para establecer un stop loss y controlar eficazmente las pérdidas individuales

  5. Las ganancias son más razonables que las pérdidas, buscamos ganancias estables

  6. Aplicable en diferentes períodos, adecuado para el comercio de tendencias de línea media y larga

  7. La estrategia es clara y fácil de entender, y hay mucho espacio para optimizar los parámetros.

  8. Puede funcionar bien en varios entornos de mercado

Análisis de riesgos

La estrategia de Super Uno también tiene los siguientes riesgos:

  1. En un mercado convulso, el stop loss puede ser activado con frecuencia y afectar los beneficios.

  2. No invertir la posición a tiempo cuando las tendencias cambian rápidamente puede llevar a pérdidas

  3. La relación de ganancias y pérdidas establecida no es adecuada para todas las variedades y requiere parámetros de ajuste para diferentes parámetros

  4. Cuando hay un espacio limitado para elevarse después de romper la banda de nubes, es posible que haya un beneficio limitado.

  5. Los parámetros del indicador requieren optimización de pruebas repetidas, no son adecuados para variedades con ajustes frecuentes de parámetros

El riesgo puede reducirse de la siguiente manera:

  1. Optimización de parámetros para adaptarse mejor a diferentes ciclos y características de variedades

  2. En combinación con otros indicadores, filtra las señales de entrada para evitar falsas rupturas en mercados convulsos.

  3. Ajuste dinámico de la posición del stop para reducir la probabilidad de que el stop se active

  4. Prueba de diferentes configuraciones de rentabilidad

  5. El uso de métodos como la configuración gráfica para determinar la fuerza de la señal de tendencia

Dirección de optimización

Las estrategias de supervisión se pueden optimizar en los siguientes aspectos:

  1. Optimización de la línea de conversión y de los parámetros de la línea de referencia para que se ajusten mejor a las características de las variedades comercializadas

  2. Optimización de los parámetros de las bandas de nube para que las bandas de nube sean más precisas para juzgar las tendencias a largo plazo

  3. Optimización de los algoritmos de stop loss, como el stop loss establecido según el ATR o el stop loss dinámico

  4. En combinación con otros indicadores para filtrar la señal, configurar más condiciones de filtrado, reducir la probabilidad de entrada errónea

  5. Optimización de la configuración de pérdidas y ganancias, adaptación de la estrategia a las características de las diferentes variedades y ciclos

  6. La administración de posiciones de la manera Martingale para adaptarse a las diferentes frecuencias de fluctuación del mercado

  7. El uso de métodos de aprendizaje automático para optimizar los parámetros y lograr una mayor estabilidad

  8. Configuración de diferentes períodos de negociación para adaptarse a las características del mercado durante la noche y entre plazas

Resumir

La estrategia superior a uno es una estrategia muy adecuada para el comercio de tendencias de líneas medias y largas. La ventaja de usar un indicador superior a uno para determinar la dirección de la tendencia es evidente, mientras que la entrada combinada con la corrección de precios puede evitar la entrada errónea.

Código Fuente de la Estrategia
/*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))