Esta estrategia utiliza el True Range y el Weighted Moving Average (WMA) para construir un indicador de período cruzado para el juicio de tendencias.
La estrategia calcula primero la amplitud ascendente (sube) y la amplitud descendente (baja), y luego calcula la WMA del ciclo de línea rápida (corto) y el ciclo de línea lenta (largo) respectivamente. La diferencia entre las líneas rápidas y lentas se calcula nuevamente a través de WMA para obtener el indicador (ind). Cuando el indicador cruza por encima de 0, se genera una señal de compra. Cuando cruza por debajo de 0, se genera una señal de venta.
Una vez entrado en el mercado, la estrategia prefiere 5 posiciones, que se acumulan de forma piramidal (doblada). Al mismo tiempo, se establece un mecanismo de stop loss para que las posiciones posteriores abiertas se juzguen si la ganancia flotante actual es inferior a la línea de stop loss, con el fin de controlar los riesgos.
La estrategia integra mecanismos como el juicio transversal, la acumulación de posiciones piramidal y las pérdidas múltiples de parada, que pueden controlar eficazmente los riesgos y obtener beneficios estables.
Los juicios de ciclo cruzado establecen un sistema de juicio de tendencia a través de una combinación de líneas rápidas y lentas, que pueden filtrar eficazmente el ruido del mercado e identificar los puntos de inflexión de la tendencia.
El principal riesgo de esta estrategia es la posibilidad de que un evento repentino provoque una rápida reversión del mercado que desencadene un límite de stop loss y cause pérdidas.
El riesgo de reversión del mercado se puede manejar relajando adecuadamente la línea de stop loss.
La estrategia se puede optimizar en los siguientes aspectos:
Aumentar los indicadores estadísticos para el juicio, utilizar indicadores como la volatilidad y el volumen para corregir los parámetros y hacer la estrategia más adaptable.
Aumentar el modelo de aprendizaje automático para el juicio, utilizar LSTM y otros modelos de aprendizaje profundo para ayudar al juicio y mejorar la precisión de la estrategia.
Optimizar los mecanismos de gestión de las posiciones, considerar el ajuste de la amplitud del aumento de las posiciones de acuerdo con el porcentaje de ganancia variable para hacer que el crecimiento de las posiciones sea más razonable.
Incorporar modelos de cobertura de futuros para controlar aún más los riesgos a través del arbitraje al contado y de futuros.
En resumen, esta es una estrategia de tendencia de ciclo cruzado basada en indicadores de True Range con acumulación de posiciones piramidal y múltiples mecanismos de stop loss, que pueden controlar eficazmente los riesgos y obtener ganancias estables. Es una estrategia comercial cuantitativa muy práctica. Sin embargo, todavía se necesita atención para revertir los riesgos y los problemas de optimización de parámetros. Se pueden hacer más optimizaciones en estadísticas, aprendizaje automático y otros aspectos.
/*backtest start: 2023-01-10 00:00:00 end: 2024-01-16 00:00:00 period: 1d basePeriod: 1h 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/ // © MaclenMtz //@version=5 strategy("[MACLEN] Rangos", shorttitle="Rangos [https://t.me/Bitcoin_Maclen]", overlay=false ) //------WINDOW---------- i_startTime = input(defval = timestamp("01 Jan 2022 00:00 -0700"), title = "Start Time", group = "Backtest Window") i_endTime = input(defval = timestamp("31 Dec 2025 00:00 -0700"), title = "End Time") window = true //----------------------------- sube = close>close[1] ? ta.tr : 0 baja = close<close[1] ? ta.tr : 0 corto = input(10) largo = input(30) suavizado = input(10) fastDiff = ta.wma(sube, corto) - ta.wma(baja,corto) slowDiff = ta.wma(sube, largo) - ta.wma(baja, largo) ind = ta.wma(fastDiff - slowDiff, suavizado) iColor = ind>0 ? color.green : ind<0 ? color.red : color.black plot(ind, color=iColor) plot(0, color=color.white) long = ind[1]<ind and ind[2]<ind[1] and ind<0 short = ind[1]>ind and ind[2]>ind[1] and ind>0 plotshape(long and not long[1], style = shape.xcross, color=color.green, location=location.bottom, size=size.tiny) plotshape(short and not short[1], style = shape.xcross, color=color.red, location=location.top, size=size.tiny) //Contratos contrato1 = input(50000)/(16*close) c1 = contrato1 c2 = contrato1 c3 = contrato1*2 c4 = contrato1*4 c5 = contrato1*8 //cap_enopentrade = strategy.opentrades == 1 ? c1: strategy.opentrades == 2 ? c1+c2: strategy.opentrades == 3 ? c1+c2+c3: strategy.opentrades == 4 ? c1+c2+c3+c4: strategy.opentrades == 5 ? c1+c2+c3+c4+c5 : 0 openprofit_porc = math.round((close-strategy.position_avg_price)/strategy.position_avg_price * 100,2) porc_tp = input.float(6.5) safe = input(-6) //----------------Strategy--------------------------- if strategy.opentrades == 0 strategy.entry('BUY1', strategy.long, qty=c1, when = long and not long[1] and window) if strategy.opentrades == 1 strategy.entry('BUY2', strategy.long, qty=c2, when = long and not long[1] and window and openprofit_porc<safe) if strategy.opentrades == 2 strategy.entry('BUY3', strategy.long, qty=c3, when = long and not long[1] and window and openprofit_porc<safe) if strategy.opentrades == 3 strategy.entry('BUY4', strategy.long, qty=c4, when = long and not long[1] and window and openprofit_porc<safe) if strategy.opentrades == 4 strategy.entry('BUY5', strategy.long, qty=c5, when = long and not long[1] and window and openprofit_porc<safe) min_prof = strategy.openprofit>0 strategy.close_all(when=short and min_prof) plot(openprofit_porc)