El Donchian Adaptive Moving Average Trading System es una estrategia de negociación cuantitativa que rastrea las tendencias de precios.
La estrategia primero calcula el rango de volatilidad verdadera. El rango de volatilidad verdadera se refiere al rango de movimiento de precios desde el precio de cierre del candelero anterior hasta los precios más altos y más bajos del candelero actual. Luego calcula el promedio móvil simple del rango de volatilidad verdadera como el ancho de banda del canal de Donchian. Combinado con promedios móviles de dos períodos de tiempo, juzga la tendencia del precio. Las reglas de juicio específicas son las siguientes:
Cuando el precio rompe el promedio móvil a largo plazo más el ancho de banda y el promedio móvil a corto plazo más el ancho de banda, ir largo; cuando el precio cae por debajo del promedio móvil a largo plazo menos el ancho de banda y el promedio móvil a corto plazo menos el ancho de banda, ir corto. Las condiciones de cierre son cerrar posiciones largas cuando los precios caen por debajo de los promedios móviles largos y cortos aumentados por el ancho de banda; cerrar posiciones cortas cuando los precios aumentan por encima de los promedios móviles largos y cortos aumentados por el ancho de banda.
Por lo tanto, al ajustar dinámicamente el ancho de banda del canal Donchain en función de la volatilidad real y filtrando con medias móviles dobles, la estrategia puede rastrear eficazmente las tendencias de precios a medio y largo plazo, reducir las señales falsas y obtener oportunidades comerciales estables a largo plazo.
Esta estrategia tiene las siguientes ventajas:
El uso de la volatilidad real para ajustar dinámicamente el ancho de banda del canal evita parámetros estáticos y se adapta mejor a los cambios del mercado.
La combinación de dos medias móviles puede filtrar eficazmente el ruido y reducir las señales falsas.
El seguimiento de las tendencias a medio y largo plazo puede reducir las operaciones repetitivas y reducir la frecuencia de las mismas para obtener oportunidades de beneficio a largo plazo.
La lógica de la estrategia es simple y clara, fácil de implementar, tolerante a fallos y adecuada para el comercio algorítmico automatizado.
La estrategia también tiene algunos riesgos:
Los indicadores de volatilidad pueden ayudar a juzgar las situaciones a corto plazo y optimizar las entradas.
Los parámetros deben optimizarse para diferentes sectores y existencias individuales.
Los puntos de stop loss deben aflojarse adecuadamente ante cambios significativos de tendencia de emergencias.
En resumen, el sistema de negociación de promedios móviles adaptativos de Donchian es una estrategia cuantitativa general estable, simple y fácil de implementar. Al utilizar canales dinámicos y doble filtrado de promedios móviles, puede rastrear efectivamente las tendencias del mercado a medio y largo plazo, reducir la frecuencia de negociación y obtener ganancias sostenidas a largo plazo. Mientras tanto, también se debe tener en cuenta la optimización de la configuración de parámetros, la prevención de riesgos y el stop loss adecuado para adaptarse a las emergencias. En general, esta estrategia tiene un rendimiento excepcional y es adecuada para el seguimiento de tendencias algorítmicas a medio y largo plazo.
/*backtest start: 2023-02-14 00:00:00 end: 2024-02-20 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/ // © dongyun //@version=4 strategy("唐齐安移动平均交易系统", overlay=true) longperiod = input(20,'长线') shortperiod = input(5,'短线') bandfactor = input(1.0,'') TrueHigh = 0.0 TrueLow = 0.0 TrueRange = 0.0 TrueHigh := close[1] > high ? close[1] : high TrueLow := close[1] < low ? close[1] : low TrueRange := TrueHigh - TrueLow AvgTrueRange = sma(TrueRange,longperiod) MAlong = sma(close,longperiod) MAshort = sma(close,shortperiod) band = AvgTrueRange * bandfactor if close > MAlong[1] + band[1] and close > MAshort[1] + band[1] strategy.entry("Long", strategy.long, when=strategy.position_size < 1) else if close < MAlong[1] - band[1] and close < MAshort[1] - band[1] strategy.entry("Short", strategy.short, when=strategy.position_size > -1) if close < MAlong[1] - band[1] or close < MAshort[1] - band[1] strategy.close("Long", when=strategy.position_size > 0) else if close > MAlong[1] + band[1] or close > MAshort[1] + band[1] strategy.close("Short", when=strategy.position_size < 0)