Cette stratégie construit un modèle de volume de négociation en utilisant la moyenne mobile et l'écart type du volume de négociation, et détermine la direction de la tendance avec la moyenne mobile du prix pour générer des signaux de négociation lorsque le volume est normal.
La logique de base est de construire un modèle de volume des transactions et de juger de la tendance des prix.
La stratégie combine le modèle de volume de négociation et la tendance des prix pour éviter de poursuivre les tendances des prix lorsque le volume est anormal, ce qui peut filtrer certains faux signaux.
Les solutions:
La logique générale de cette stratégie est claire, en utilisant le volume pour éviter de poursuivre de fausses tendances et les signaux d'entrée sont relativement fiables. Mais la stratégie elle-même est simple avec une grande marge d'expansion. En ajoutant plus d'indicateurs, d'apprentissage automatique, de stop loss et d'autres modules, elle peut améliorer encore la stabilité et la capacité de capturer les tendances. Il s'agit d'une stratégie typique de poursuite des tendances. Après optimisation, elle peut devenir une stratégie quantitative très pratique.
/*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")