Estrategia de negociación algorítmica de alto rendimiento basada en modelos cuantitativos

El autor:¿ Qué pasa?, Fecha: 2023-12-22 13:14:33
Las etiquetas:

img

Resumen general

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.

Principio de la estrategia

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.

Análisis de ventajas

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.

Análisis de riesgos

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.

Direcciones de optimización

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.

Resumen de las actividades

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)

Más.