Este artículo explica en detalle una estrategia de negociación cuantitativa de múltiples indicadores diseñada para criptomonedas. Utiliza promedios móviles, osciladores, canales, etc. para señales de entrada y control de riesgos.
I. Lógica de la estrategia
Las principales categorías de indicadores utilizados son:
Oscilador ROC para medir los niveles de sobrecompra/sobreventa.
Canal Donchian para apoyo dinámico y resistencia.
El poder de los osos identifica las características del fondo.
Equilibrio de fuerzas para el juicio de tendencias.
Promedio móvil para el filtrado de tendencias.
Las operaciones solo se realizan cuando varios indicadores están de acuerdo.
II. Ventajas de la Estrategia
La mayor ventaja es la complementariedad de los indicadores, a juzgar por las múltiples dimensiones.
Otra ventaja es el stop loss directo y sensato y tomar ganancias para una gestión prudente del dinero.
Por último, el amplio espacio de parámetros permite ajustar las criptomonedas.
III. Riesgos potenciales
Sin embargo, existen algunos riesgos:
En primer lugar, las combinaciones de múltiples indicadores aumentan la dificultad de optimización.
En segundo lugar, las discrepancias entre indicadores requieren reglas lógicas claras.
Por último, los parámetros deben optimizarse para productos específicos.
IV. Resumen
En resumen, este artículo ha explicado una estrategia cuantitativa de múltiples indicadores adaptada a las criptomonedas. Combina de manera inteligente indicadores para la gestión de riesgos y dinero. A través de la optimización de parámetros puede lograr ganancias constantes, pero necesita gestionar la dificultad de optimización y el uso de indicadores.
/*backtest start: 2023-09-07 00:00:00 end: 2023-09-14 00:00:00 period: 4m 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/ // © mbagheri746 //@version=4 strategy("Bagheri IG Ether", overlay=true, margin_long=100, margin_short=100) TP = input(3000, minval = 1 , title ="Take Profit") SL = input(3443, minval = 1 , title ="Stop Loss") //_________________ RoC Definition _________________ rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=185) smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=49) src = input(title="Source", type=input.source, defval=close) ma = ema(src, smoothingLength) mom = change(ma, rocLength) sroc = nz(ma[rocLength]) == 0 ? 100 : mom == 0 ? 0 : 100 * mom / ma[rocLength] //srocColor = sroc >= 0 ? #0ebb23 : color.red //plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0) //hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898) //_________________ Donchian Channel _________________ length1 = input(43, minval=1, title="Upper Channel") length2 = input(43, minval=1, title="Lower Channel") offset_bar = input(90,minval=0, title ="Offset Bars") upper = highest(length1) lower = lowest(length2) basis = avg(upper, lower) DC_UP_Band = upper[offset_bar] DC_LW_Band = lower[offset_bar] l = plot(DC_LW_Band, style=plot.style_line, linewidth=2, color=color.red) u = plot(DC_UP_Band, style=plot.style_line, linewidth=2, color=color.aqua) fill(l,u,color = color.new(color.aqua,transp = 90)) //_________________ Bears Power _________________ wmaBP_period = input(61,minval=1,title="BearsP WMA Period") line_wma = ema(close, wmaBP_period) BP = low - line_wma //_________________ Balance of Power _________________ ES_BoP=input(15, title="BoP Exponential Smoothing") BOP=(close - open) / (high - low) SBOP = rma(BOP, ES_BoP) //_________________ Alligator _________________ //_________________ CCI _________________ //_________________ Moving Average _________________ sma_period = input(74, minval = 1 , title = "SMA Period") sma_shift = input(37, minval = 1 , title = "SMA Shift") sma_primary = sma(close,sma_period) SMA_sh = sma_primary[sma_shift] plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow) //_________________ Long Entry Conditions _________________// MA_Lcnd = SMA_sh > low and SMA_sh < high ROC_Lcnd = sroc < 0 DC_Lcnd = open < DC_LW_Band BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2] BOP_Lcnd = SBOP[1] < SBOP[0] //_________________ Short Entry Conditions _________________// MA_Scnd = SMA_sh > low and SMA_sh < high ROC_Scnd = sroc > 0 DC_Scnd = open > DC_UP_Band BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2] BOP_Scnd = SBOP[1] > SBOP[0] //_________________ OPEN POSITION __________________// strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd) strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd) //_________________ CLOSE POSITION __________________// strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL) strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL) //_________________ TP and SL Plot __________________// currentPL= strategy.openprofit pos_price = strategy.position_avg_price open_pos = strategy.position_size TP_line = (strategy.position_size > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0 SL_line = (strategy.position_size > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0 // hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false) // hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false) Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1) Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1) Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1) fill(Tline , Pline, color = color.new(color.green,transp = 90)) fill(Sline , Pline, color = color.new(color.red,transp = 90)) //_________________ Label __________________// inMyPrice = input(title="My Price", type=input.float, defval=0) inLabelStyle = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right") posColor = color.new(color.green, 25) negColor = color.new(color.red, 25) dftColor = color.new(color.aqua, 25) posPnL = (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0 posDir = (strategy.position_size > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat" posCol = (posPnL > 0) ? posColor : (posPnL < 0) ? negColor : dftColor myPnL = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0 var label lb = na label.delete(lb) lb := label.new(bar_index, close, color=posCol, style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left, text= "╔═══════╗" +"\n" + "Pos: " +posDir +"\n" + "Pos Price: "+tostring(strategy.position_avg_price) +"\n" + "Pos PnL: " +tostring(posPnL, "0.00") + "%" +"\n" + "My Price: " +tostring(inMyPrice) +"\n" + "My PnL: " +tostring(myPnL, "0.00") + "%" +"\n" + "╚═══════╝")