
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.
Las estrategias de Super 1 se basan en los siguientes factores para determinar la dirección de las operaciones:
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.
El color de las nubes:Cuando las bandas de nubes son verdes se ve un aumento, cuando son rojas se ve un descenso
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?
¿Qué es lo que está pasando?
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.
La estrategia de Super Uno tiene las siguientes ventajas:
El uso de combinaciones de indicadores superiores a uno para determinar la dirección de la tendencia, con una mayor precisión
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.
Las condiciones requieren que el precio retroceda en la línea de giro para evitar pérdidas por falsas rupturas
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
Las ganancias son más razonables que las pérdidas, buscamos ganancias estables
Aplicable en diferentes períodos, adecuado para el comercio de tendencias de línea media y larga
La estrategia es clara y fácil de entender, y hay mucho espacio para optimizar los parámetros.
Puede funcionar bien en varios entornos de mercado
La estrategia de Super Uno también tiene los siguientes riesgos:
En un mercado convulso, el stop loss puede ser activado con frecuencia y afectar los beneficios.
No invertir la posición a tiempo cuando las tendencias cambian rápidamente puede llevar a pérdidas
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
Cuando hay un espacio limitado para elevarse después de romper la banda de nubes, es posible que haya un beneficio limitado.
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:
Optimización de parámetros para adaptarse mejor a diferentes ciclos y características de variedades
En combinación con otros indicadores, filtra las señales de entrada para evitar falsas rupturas en mercados convulsos.
Ajuste dinámico de la posición del stop para reducir la probabilidad de que el stop se active
Prueba de diferentes configuraciones de rentabilidad
El uso de métodos como la configuración gráfica para determinar la fuerza de la señal de tendencia
Las estrategias de supervisión se pueden optimizar en los siguientes aspectos:
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
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
Optimización de los algoritmos de stop loss, como el stop loss establecido según el ATR o el stop loss dinámico
En combinación con otros indicadores para filtrar la señal, configurar más condiciones de filtrado, reducir la probabilidad de entrada errónea
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
La administración de posiciones de la manera Martingale para adaptarse a las diferentes frecuencias de fluctuación del mercado
El uso de métodos de aprendizaje automático para optimizar los parámetros y lograr una mayor estabilidad
Configuración de diferentes períodos de negociación para adaptarse a las características del mercado durante la noche y entre plazas
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.
/*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))