Esta estrategia combina el indicador de la banda de Bollinger y los indicadores de volumen para identificar oportunidades de ruptura de impulso fuerte por encima de la banda superior de Bollinger cuando el volumen de negociación es alto y se ingresan posiciones largas.
Esta estrategia considera principalmente tres factores: nivel de precios, impulso y tendencia. Cuando el precio rompe la banda superior de Bollinger en la zona de compra, el aumento en el volumen de operaciones indica un fuerte impulso y entrada de capital. Este es el momento adecuado para ingresar a una posición larga. Luego utiliza promedios móviles para determinar la tendencia del mercado para evitar mantener posiciones muertas. Al combinar la acción de precios, el impulso y el control de riesgos, tiene como objetivo capturar ganancias de tendencias fuertes.
Combinando el filtro de volumen, sólo compra con un impulso fuerte, reduciendo el riesgo.
Capaz de reducir las pérdidas en el tiempo mediante la determinación de la tendencia de la media móvil, reduciendo las pérdidas de tenencia.
Estrategia cuantitativa implementada que combina múltiples indicadores para la toma de decisiones.
Estructuras de código claras, fáciles de leer y mantener, diseño modular de cálculo de indicadores, generación de señales y gestión de la posición.
Las bandas de Bollinger podrían fallar durante las fluctuaciones extremas de precios, faltando señales o generando señales falsas.
No hay ganancias cuando el volumen general de operaciones es bajo.
La determinación de la tendencia de las medias móviles también podría fallar, al no poder garantizar plenamente un stop loss efectivo.
El ajuste incorrecto de parámetros también afecta la rentabilidad de la estrategia.
Añadir más indicadores técnicos para un mejor análisis de tendencia y soporte/resistencia, mejorando el stop loss, por ejemplo, patrones de candlesticks, canales, niveles de soporte clave.
Añadir modelos de aprendizaje automático para juzgar las posibilidades reales de fuga, reduciendo las señales falsas. por ejemplo, modelos de aprendizaje profundo LSTM.
Optimizar las estrategias de gestión de capital, como el tamaño dinámico de las posiciones, el seguimiento de la parada de pérdida para reducir el impacto de la pérdida de una sola operación.
Prueba más productos y marcos de tiempo, ajusta parámetros como bandas de Bollinger, ventana de volumen para mejorar la robustez de la estrategia.
Esta estrategia integra la banda de Bollinger y los indicadores de volumen de negociación para identificar fuertes oportunidades de compra de impulso, con promedios móviles que aseguran un stop loss efectivo.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 1h basePeriod: 15m 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/ // © KAIST291 //@version=4 initial_capital=1000 strategy("prototype", overlay=true) length1=input(1) length3=input(3) length7=input(7) length9=input(9) length14=input(14) length20=input(20) length60=input(60) length120=input(120) ma1= sma(close,length1) ma3= sma(close,length3) ma7= sma(close,length7) ma9= sma(close,length9) ma14=sma(close,length14) ma20=sma(close,length20) ma60=sma(close,length60) ma120=sma(close,length120) rsi=rsi(close,14) // BUYING VOLUME AND SELLING VOLUME // BV = iff( (high==low), 0, volume*(close-low)/(high-low)) SV = iff( (high==low), 0, volume*(high-close)/(high-low)) vol = iff(volume > 0, volume, 1) dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100) weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100) //----------------------------------------------------------- Davgvol = sma(volume, dailyLength) Wavgvol = sma(volume, weeklyLength) //----------------------------------------------------------- length = input(20, minval=1) src = input(close, title="Source") mult = input(2.0, minval=0.001, maxval=50, title="StdDev") mult2= input(1.5, minval=0.001, maxval=50, title="exp") mult3= input(1.0, minval=0.001, maxval=50, title="exp1") mult4= input(2.5, minval=0.001, maxval=50, title="exp2") basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev dev2= mult2 * stdev(src, length) Supper= basis + dev2 Slower= basis - dev2 dev3= mult3 * stdev(src, length) upper1= basis + dev3 lower1= basis - dev3 dev4= mult4 * stdev(src, length) upper2=basis + dev4 lower2=basis - dev4 offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) //---------------------------------------------------- exit=(close-strategy.position_avg_price / strategy.position_avg_price*100) bull=( BV>SV and BV>Davgvol) bull2=(BV>SV and BV>Davgvol) bux =(close>Supper and close>Slower and volume<Davgvol) bear=(SV>BV and SV>Davgvol) con=(BV>Wavgvol and rsi>80) imInATrade = strategy.position_size != 0 highestPriceAfterEntry = valuewhen(imInATrade, high, 0) // STRATEGY LONG // if (bull and close>upper1 and close>Supper and high>upper and rsi<80) strategy.entry("Long",strategy.long) if (strategy.position_avg_price*1.02<close) strategy.close("Long") else if (low<ma9 and strategy.position_avg_price<close) strategy.close("Long") else if (ma20>close and strategy.position_avg_price<close ) strategy.close("Long") else if (rsi>80 and strategy.position_avg_price<close) strategy.close("Long") else if (strategy.openprofit < strategy.position_avg_price*0.9-close) strategy.close("Long") else if (high<upper and strategy.position_avg_price<close) strategy.close("Long") ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120)) if (close<strategy.position_avg_price*0.98) strategy.close("Short") else if (rsi<20) strategy.close("Short")