Esta estrategia construye un modelo de volumen de negociación utilizando el promedio móvil y la desviación estándar del volumen de negociación, y determina la dirección de la tendencia con el promedio móvil del precio para generar señales de negociación cuando el volumen es normal.
La lógica central es construir un modelo de volumen de operaciones y juzgar la tendencia de los precios.
La estrategia combina el modelo de volumen de negociación y la tendencia de precios para evitar perseguir las tendencias de precios cuando el volumen es anormal, lo que puede filtrar algunas señales falsas.
Soluciones:
La lógica general de esta estrategia es clara, utilizando el volumen para evitar perseguir tendencias falsas y las señales de entrada son relativamente confiables. Pero la estrategia en sí es simple con un amplio margen de expansión. Al agregar más indicadores, aprendizaje automático, stop loss y otros módulos, puede mejorar aún más la estabilidad y la capacidad de atrapar tendencias. Esta es una estrategia típica de persecución de tendencias. Después de la optimización, puede convertirse en una estrategia cuantitativa muy práctica.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-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) options = input(1,'') length = input(40,'') nlow = input(5,'') factor = input(1.0,'') vavg = 0.0 vavgn = 0.0 vsd = 0.0 lowlimit = 0.0 uplimit = 0.0 mavg = 0.0 aror = 0.0 adjvol = 0.0 savevol = 0.0 //Find average volume, replacing bad values adjvol := volume if (volume != 0) savevol := volume else savevol := savevol[1] adjvol := savevol // Replace high volume days because they distort standard deviation if (adjvol > 2 * factor * nz(vsd[1])) adjvol := savevol else adjvol := adjvol[1] vavg := sma(adjvol,length) vsd := stdev(adjvol,length) vavgn := sma(adjvol,nlow) // Extreme volume limits lowlimit := vavg - factor * vsd uplimit := vavg + 2 * factor * vsd // System rules based on moving average trend mavg := sma(close,length/2) // Only enter on new trend signals if (options == 2) if (mavg > mavg[1] and mavg[1] <= mavg[2]) strategy.entry("Long", strategy.long) if (mavg<mavg[1] and mavg[1]>=mavg[2]) strategy.entry("Short", strategy.short) else if (mavg > mavg[1] and vavgn > lowlimit) strategy.entry("Long", strategy.long) if (mavg < mavg[1] and vavgn > lowlimit) strategy.entry("Short", strategy.short) // Exit on low volume if (options != 1) if (mavg<mavg[1] or (strategy.position_size > 0 and vavgn<= lowlimit)) strategy.close("Long") if (mavg>mavg[1] or (strategy.position_size > 0 and vavgn<= lowlimit)) strategy.close("Short") else if (mavg < mavg[1]) strategy.close("Long") if (mavg > mavg[1]) strategy.close("Short")