La estrategia Kuberan es una estrategia de trading desarrollada por Kathir. Combina múltiples técnicas analíticas para formar un enfoque de trading único y potente.
Kuberan es más que una estrategia; es un sistema comercial integral. Integra el análisis de tendencias, indicadores de impulso y métricas de volumen para identificar oportunidades comerciales de alta probabilidad. Al aprovechar la sinergia de estos elementos, Kuberan proporciona señales claras de entrada y salida, adecuadas para operadores de todos los niveles.
En el núcleo de la estrategia de Kuberan está el principio de confluencia de múltiples indicadores. Utiliza una combinación única de indicadores que trabajan en armonía para reducir el ruido y las falsas señales.
Al considerar de manera exhaustiva estos factores, la estrategia de Kuberan puede adaptarse adaptativamente a diversas condiciones del mercado y capturar oportunidades comerciales de alta probabilidad.
Para mitigar estos riesgos, pueden aplicarse medidas de control adecuadas, como ajustes periódicos de parámetros, fijación de stop-loss razonables, moderación del apalancamiento y seguimiento de los cambios fundamentales.
Kuberan es una estrategia de trading poderosa y confiable que combina ingeniosamente múltiples métodos de análisis técnico. A través del principio de confluencia de indicadores, sobresale en la captura de tendencias e identificación de puntos de inflexión. Aunque ninguna estrategia es inmune a los riesgos, Kuberan ha demostrado su robustez en backtesting. Con medidas apropiadas de control de riesgos y esfuerzos de optimización, esta estrategia puede ayudar a los operadores a obtener una ventaja en las batallas de mercado, impulsando un crecimiento a largo plazo y constante de sus carteras de inversión.
/*backtest start: 2024-03-14 00:00:00 end: 2024-03-21 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © LonesomeThecolor.blue // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © LonesomeThecolor.blue //@version=5 strategy('Kuberan*', overlay=true, max_lines_count=500) lb = input.int(5, title='Left Bars', minval=1) rb = input.int(5, title='Right Bars', minval=1) showsupres = input.bool(false, title='Support/Resistance', inline='srcol') supcol = input.color(color.lime, title='', inline='srcol') rescol = input.color(color.red, title='', inline='srcol') // srlinestyle = input(line.style_dotted, title='Line Style/Width', inline='style') srlinewidth = input.int(3, title='', minval=1, maxval=5, inline='style') changebarcol = input.bool(true, title='Change Bar Color', inline='bcol') bcolup = input.color(color.blue, title='', inline='bcol') bcoldn = input.color(color.black, title='', inline='bcol') ph = ta.pivothigh(lb, rb) pl = ta.pivotlow(lb, rb) iff_1 = pl ? -1 : na // Trend direction hl = ph ? 1 : iff_1 iff_2 = pl ? pl : na // similar to zigzag but may have multTLiple highs/lows zz = ph ? ph : iff_2 valuewhen_1 = ta.valuewhen(hl, hl, 1) valuewhen_2 = ta.valuewhen(zz, zz, 1) zz := pl and hl == -1 and valuewhen_1 == -1 and pl > valuewhen_2 ? na : zz valuewhen_3 = ta.valuewhen(hl, hl, 1) valuewhen_4 = ta.valuewhen(zz, zz, 1) zz := ph and hl == 1 and valuewhen_3 == 1 and ph < valuewhen_4 ? na : zz valuewhen_5 = ta.valuewhen(hl, hl, 1) valuewhen_6 = ta.valuewhen(zz, zz, 1) hl := hl == -1 and valuewhen_5 == 1 and zz > valuewhen_6 ? na : hl valuewhen_7 = ta.valuewhen(hl, hl, 1) valuewhen_8 = ta.valuewhen(zz, zz, 1) hl := hl == 1 and valuewhen_7 == -1 and zz < valuewhen_8 ? na : hl zz := na(hl) ? na : zz findprevious() => // finds previous three points (b, c, d, e) ehl = hl == 1 ? -1 : 1 loc1 = 0.0 loc2 = 0.0 loc3 = 0.0 loc4 = 0.0 xx = 0 for x = 1 to 1000 by 1 if hl[x] == ehl and not na(zz[x]) loc1 := zz[x] xx := x + 1 break ehl := hl for x = xx to 1000 by 1 if hl[x] == ehl and not na(zz[x]) loc2 := zz[x] xx := x + 1 break ehl := hl == 1 ? -1 : 1 for x = xx to 1000 by 1 if hl[x] == ehl and not na(zz[x]) loc3 := zz[x] xx := x + 1 break ehl := hl for x = xx to 1000 by 1 if hl[x] == ehl and not na(zz[x]) loc4 := zz[x] break [loc1, loc2, loc3, loc4] float a = na float b = na float c = na float d = na float e = na if not na(hl) [loc1, loc2, loc3, loc4] = findprevious() a := zz b := loc1 c := loc2 d := loc3 e := loc4 e _hh = zz and a > b and a > c and c > b and c > d _ll = zz and a < b and a < c and c < b and c < d _hl = zz and (a >= c and b > c and b > d and d > c and d > e or a < b and a > c and b < d) _lh = zz and (a <= c and b < c and b < d and d < c and d < e or a > b and a < c and b > d) plotshape(_hl, title='Higher Low', style=shape.labelup, color=color.new(color.lime, 0), textcolor=color.new(color.black, 0), location=location.belowbar, offset=-rb) plotshape(_hh, title='Higher High', style=shape.labeldown, color=color.new(color.lime, 0), textcolor=color.new(color.black, 0), location=location.abovebar, offset=-rb) plotshape(_ll, title='Lower Low', style=shape.labelup, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), location=location.belowbar, offset=-rb) plotshape(_lh, title='Lower High', style=shape.labeldown, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), location=location.abovebar, offset=-rb) float res = na float sup = na res := _lh ? zz : res[1] sup := _hl ? zz : sup[1] int trend = na iff_3 = close < sup ? -1 : nz(trend[1]) trend := close > res ? 1 : iff_3 res := trend == 1 and _hh or trend == -1 and _lh ? zz : res sup := trend == 1 and _hl or trend == -1 and _ll ? zz : sup rechange = res != res[1] suchange = sup != sup[1] var line resline = na var line supline = na if showsupres if rechange line.set_x2(resline, bar_index) line.set_extend(resline, extend=extend.none) resline := line.new(x1=bar_index - rb, y1=res, x2=bar_index, y2=res, color=rescol, extend=extend.right, style=line.style_dotted, width=srlinewidth) resline if suchange line.set_x2(supline, bar_index) line.set_extend(supline, extend=extend.none) supline := line.new(x1=bar_index - rb, y1=sup, x2=bar_index, y2=sup, color=supcol, extend=extend.right, style=line.style_dotted, width=srlinewidth) supline iff_4 = trend == 1 ? bcolup : bcoldn barcolor(color=changebarcol ? iff_4 : na) // Inputs A1 = input(5, title='Key Value. \'This changes the sensitivity\' for sell1') C1 = input(400, title='ATR Period for sell1') A2 = input(6, title='Key Value. \'This changes the sensitivity\' for buy2') C2 = input(1, title='ATR Period for buy2') h = input(false, title='Signals from Heikin Ashi Candles') xATR1 = ta.atr(C1) xATR2 = ta.atr(C2) nLoss1 = A1 * xATR1 nLoss2 = A2 * xATR2 src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close xATRTrailingStop1 = 0.0 iff_5 = src > nz(xATRTrailingStop1[1], 0) ? src - nLoss1 : src + nLoss1 iff_6 = src < nz(xATRTrailingStop1[1], 0) and src[1] < nz(xATRTrailingStop1[1], 0) ? math.min(nz(xATRTrailingStop1[1]), src + nLoss1) : iff_5 xATRTrailingStop1 := src > nz(xATRTrailingStop1[1], 0) and src[1] > nz(xATRTrailingStop1[1], 0) ? math.max(nz(xATRTrailingStop1[1]), src - nLoss1) : iff_6 xATRTrailingStop2 = 0.0 iff_7 = src > nz(xATRTrailingStop2[1], 0) ? src - nLoss2 : src + nLoss2 iff_8 = src < nz(xATRTrailingStop2[1], 0) and src[1] < nz(xATRTrailingStop2[1], 0) ? math.min(nz(xATRTrailingStop2[1]), src + nLoss2) : iff_7 xATRTrailingStop2 := src > nz(xATRTrailingStop2[1], 0) and src[1] > nz(xATRTrailingStop2[1], 0) ? math.max(nz(xATRTrailingStop2[1]), src - nLoss2) : iff_8 pos1 = 0 iff_9 = src[1] > nz(xATRTrailingStop1[1], 0) and src < nz(xATRTrailingStop1[1], 0) ? -1 : nz(pos1[1], 0) pos1 := src[1] < nz(xATRTrailingStop1[1], 0) and src > nz(xATRTrailingStop1[1], 0) ? 1 : iff_9 pos2 = 0 iff_10 = src[1] > nz(xATRTrailingStop2[1], 0) and src < nz(xATRTrailingStop2[1], 0) ? -1 : nz(pos2[1], 0) pos2 := src[1] < nz(xATRTrailingStop2[1], 0) and src > nz(xATRTrailingStop2[1], 0) ? 1 : iff_10 xcolor1 = pos1 == -1 ? color.red : pos1 == 1 ? color.green : color.blue xcolor2 = pos2 == -1 ? color.red : pos2 == 1 ? color.green : color.blue ema1 = ta.ema(src, 1) ema2 = ta.ema(src, 1) above1 = ta.crossover(ema1, xATRTrailingStop1) below1 = ta.crossover(xATRTrailingStop1, ema1) above2 = ta.crossover(ema2, xATRTrailingStop2) below2 = ta.crossover(xATRTrailingStop2, ema2) buy1 = src > xATRTrailingStop1 and above1 sell1 = src < xATRTrailingStop1 and below1 buy2 = src > xATRTrailingStop2 and above2 sell2 = src < xATRTrailingStop2 and below2 barbuy1 = src > xATRTrailingStop1 barsell1 = src < xATRTrailingStop1 barbuy2 = src > xATRTrailingStop2 barsell2 = src < xATRTrailingStop2 // plotshape(buy1, title="Buy 1", text='Buy 1', style=shape.labelup, location=location.belowbar, color=color.green, textcolor=color.white, transp=0, size=size.tiny) plotshape(sell1, title='Sell 1', text='Sell 1', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(buy2, title='Buy 2', text='Buy 2', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) // plotshape(sell2, title="Sell 2", text='Sell 2', style=shape.labeldown, location=location.abovebar, color=color.red, textcolor=color.white, transp=0, size=size.tiny) // barcolor(barbuy1 ? color.green : na) barcolor(barsell1 ? color.red : na) barcolor(barbuy2 ? color.green : na) // barcolor(barsell2 ? color.red : na) // alertcondition(buy1, "UT Long 1", "UT Long 1") alertcondition(sell1, 'UT Short 1', 'UT Short 1') alertcondition(buy2, 'UT Long 2', 'UT Long 2') // strategy.entry('long', strategy.long, when=buy2) source = close length = input.int(20, minval=1) mult = input.float(2.0, minval=0.001, maxval=50) basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) upper = basis + dev lower = basis - dev buyEntry = ta.crossover(source, lower) sellEntry = ta.crossunder(source, upper) if (ta.crossover(source, lower) ) strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="BBandLE") else strategy.cancel(id="BBandLE") if (ta.crossunder(source, upper)) strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",comment="BBandSE") else strategy.cancel(id="BBandSE") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr) lengthTL = input.int(14, 'Swing Detection Lookback') multTL = input.float(1., 'Slope', minval = 0, step = .1) calcMethod = input.string('Atr', 'Slope Calculation Method', options = ['Atr','Stdev','Linreg']) backpaint = input(true, tooltip = 'Backpainting offset displayed elements in the past. Disable backpainting to see real time information returned by the indicator.') //Style upCss = input.color(color.teal, 'Up Trendline Color', group = 'Style') dnCss = input.color(color.red, 'Down Trendline Color', group = 'Style') showExt = input(true, 'Show Extended Lines') //-----------------------------------------------------------------------------} //Calculations //-----------------------------------------------------------------------------{ var upperTL = 0. var lowerTL = 0. var slope_phTL = 0. var slope_plTL = 0. var offset = backpaint ? lengthTL : 0 n = bar_index srcTL = close phTL = ta.pivothigh(lengthTL, lengthTL) plTL = ta.pivotlow(lengthTL, lengthTL) //Slope Calculation Method slope = switch calcMethod 'Atr' => ta.atr(lengthTL) / lengthTL * multTL 'Stdev' => ta.stdev(srcTL,lengthTL) / lengthTL * multTL 'Linreg' => math.abs(ta.sma(srcTL * n, lengthTL) - ta.sma(srcTL, lengthTL) * ta.sma(n, lengthTL)) / ta.variance(n, lengthTL) / 2 * multTL //Get slopes and calculate trendlines slope_phTL := phTL ? slope : slope_phTL slope_plTL := plTL ? slope : slope_plTL upperTL := phTL ? phTL : upperTL - slope_phTL lowerTL := pl ? pl : lowerTL + slope_plTL var upos = 0 var dnos = 0 upos := phTL ? 0 : close > upperTL - slope_phTL * lengthTL ? 1 : upos dnos := pl ? 0 : close < lowerTL + slope_plTL * lengthTL ? 1 : dnos