Esta estrategia es una estrategia de comercio algorítmica de alto rendimiento basada en modelos cuantitativos. Utiliza el modelo de volumen de Modelius como modelo básico y lo extiende y optimiza aún más.
El núcleo de esta estrategia es el modelo de volumen de Modelius. Este modelo identifica las oportunidades de negociación cuantitativas en el mercado mediante la detección de cambios de precio y volumen. Específicamente, la estrategia combina el precio de cierre, el precio de apertura, el precio más alto, el precio más bajo para calcular la dirección de la línea K actual basada en ciertas reglas. Cuando la dirección de la línea K cambia, la calidad de la oportunidad de negociación cuantitativa se juzga en función del volumen de negociación. Además, la estrategia también combina el indicador SAR y el indicador de promedio móvil para ayudar a determinar el momento de entrada y salida.
La lógica básica del trading es ir largo cuando el indicador pasa de negativo a positivo y ir corto cuando el indicador pasa de positivo a negativo.
La mayor ventaja de esta estrategia es que el modelo de volumen de Modelius puede identificar eficazmente oportunidades comerciales cuantitativas. En comparación con los indicadores técnicos tradicionales, este modelo presta más atención a los cambios de volumen, lo que es muy práctico en el comercio cuantitativo de alta frecuencia de hoy. Además, las reglas de entrada de la estrategia son relativamente estrictas, lo que puede evitar de manera efectiva la pérdida de oportunidades comerciales cuantitativas al tiempo que reduce la probabilidad de desorden tanto como sea posible.
El principal riesgo de esta estrategia es que el modelo de volumen de Modelius en sí mismo no puede evitar completamente el ruido. Cuando hay una fluctuación anormal del mercado, llevará a señales comerciales incorrectas. Además, los parámetros de la estrategia también afectarán los resultados finales.
Para controlar los riesgos, los parámetros pueden ajustarse en consecuencia y combinarse con otros indicadores para el juicio auxiliar.
Por ejemplo, se pueden considerar algoritmos de aprendizaje automático para optimizar dinámicamente la configuración de parámetros. o combinar el análisis de sentimiento y otros indicadores para mejorar la precisión de la decisión. Además, se puede estudiar la correlación entre diferentes variedades para establecer un modelo de arbitraje de múltiples variedades.
En resumen, esta estrategia utiliza las ventajas del modelo cuantitativo de volumen de Modelius y diseña un conjunto de estrategias de negociación algorítmicas con alta operabilidad.
/*backtest start: 2022-12-15 00:00:00 end: 2023-12-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title="strategy modelius volume model ", shorttitle="mvm",overlay=true, calc_on_order_fills=true, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false) method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method") methodvalue = input(defval=14.0, type=float, minval=0, title="Value") pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source") useClose = pricesource == "Close" useOpenClose = pricesource == "Open / Close" or useClose useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume") isOscillating=input(defval=true, type=bool, title="Oscillating") normalize=input(defval=false, type=bool, title="Normalize") vol = useTrueRange == "Always" or (useTrueRange == "Auto" and na(volume))? tr : volume op = useClose ? close : open hi = useOpenClose ? close >= op ? close : op : high lo = useOpenClose ? close <= op ? close : op : low if method == "ATR" methodvalue := atr(round(methodvalue)) if method == "Part of Price" methodvalue := close/methodvalue currclose = na prevclose = nz(currclose[1]) prevhigh = prevclose + methodvalue prevlow = prevclose - methodvalue currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose direction = na direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1]) directionHasChanged = change(direction) != 0 directionIsUp = direction > 0 directionIsDown = direction < 0 barcount = 1 barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount vol := not directionHasChanged ? vol[1] + vol : vol res = barcount > 1 ? vol/barcount : vol x=isOscillating and directionIsDown ? -res : res TP = input(0) * 10 SL = input(0) * 10 TS = input(1) * 10 TO = input(3) * 10 CQ = 100 TPP = (TP > 0) ? TP : na SLP = (SL > 0) ? SL : na TSP = (TS > 0) ? TS : na TOP = (TO > 0) ? TO : na longCondition = crossover(x,0) if (longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(x,0) if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Close Short", "Short", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP) strategy.exit("Close Long", "Long", qty_percent=CQ, profit=TPP, loss=SLP, trail_points=TSP, trail_offset=TOP)