
La estrategia utiliza las medias móviles de volumen de transacciones y el estándar de diferencia para construir un modelo de volumen de transacciones, en combinación con el precio de las medias móviles para determinar la dirección de la tendencia y emitir una señal de transacción en caso de volumen de transacciones normales. La estrategia también establece un límite alto o bajo de volumen de transacciones, que puede evitar la emisión de señales erróneas en caso de volumen de transacciones anormales.
La lógica central es construir un modelo de volumen de transacciones y un juicio de tendencias de precios.
La estrategia combina modelos de volumen de transacciones y tendencias de precios para evitar el seguimiento de tendencias de precios en casos de volumen de transacciones anormales y puede filtrar algunas señales falsas.
La solución al riesgo:
La estrategia tiene una idea clara, utiliza el volumen de operaciones para evitar el seguimiento de falsas tendencias, las señales de entrada son más fiables. Sin embargo, la estrategia en sí misma es simple y tiene un gran espacio de expansión, se puede optimizar mediante la adición de más módulos de indicadores, aprendizaje automático, parada de pérdidas, etc., para mejorar aún más la estabilidad y la capacidad de capturar tendencias.
/*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")