Tendance basée sur le volume suivant la stratégie de négociation

Auteur:ChaoZhang est là., Date: 2024-01-29 15h04 et 18h
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de trading basée sur un indicateur d'oscillateur de volume modifié. Il utilise des moyennes mobiles de volume pour identifier les signaux de volume croissant et détermine les entrées ou les sorties.

La logique de la stratégie

  1. Calculer la moyenne mobile de volume vol_sum avec la longueur de vol_length et lisser par la moyenne mobile de période vol_smooth.
  2. Générer des signaux longs lorsque le volume dépasse le seuil et des signaux courts lorsque le volume dépasse le seuil.
  3. Pour filtrer les faux signaux, ne prenez que longtemps lorsque la tendance des prix vérifiée dans les barres de direction passées est en hausse et vice versa.
  4. Définir deux valeurs de seuil, seuil et seuil2. seuil génère des signaux de trading tandis que seuil2 agit comme un stop loss.
  5. Gérer les ordres d'ouverture/fermeture par le biais d'une logique de machine à état.

Analyse des avantages

  1. L'indicateur de volume capture les variations du pouvoir d'achat/de vente du marché pour des signaux plus précis.
  2. La combinaison avec la tendance des prix évite les mauvais signaux lors des fluctuations des prix.
  3. Deux seuils permettent de mieux contrôler les risques.

Analyse des risques

  1. L'indicateur de volume a un décalage et peut manquer les points tournants des prix.
  2. Des paramètres incorrects entraînent une survente ou des retards de signal.
  3. Le stop loss peut être atteint lors de pics de volumes de négociation.

Les risques peuvent être atténués en ajustant les paramètres, en optimisant le calcul des indicateurs et en combinant d'autres confirmations.

Directions d'optimisation

  1. Optimisation adaptative des paramètres en fonction des conditions du marché.
  2. Incorporer d'autres indicateurs tels que l'indice de volatilité pour vérifier davantage les signaux.
  3. Recherche appliquant des modèles d'apprentissage automatique pour améliorer la précision du signal.

Conclusion

Cette stratégie utilise un oscillateur de volume amélioré avec tendance de prix pour déterminer les entrées et les sorties avec deux valeurs de seuil de stop-loss.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy('Volume Advanced', default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075, currency='USD')
startP = timestamp(input(2017, "Start Year"), input(12, "Start Month"), input(17, "Start Day"), 0, 0)
end    = timestamp(input(9999, "End Year"),   input(1, "End Month"),   input(1, "End Day"),   0, 0)
_testPeriod() =>
    iff(time >= startP and time <= end, true, false)

source = close 
vol_length  = input(34, title = "Volume - Length")
vol_smooth  = input(200,title = "Volume - Smoothing")
volriselen  = input(21,  title = "Volume - Risinglength")
volfalllen  = input(13, title = "Volume - Fallinglength")
threshold   = input(1,"threshold")
threshold2  = input(1.2,step=0.1, title="Threshold 2")
direction = input(13,"amount of bars")


volsum  = sum(volume, vol_length) / (sum(volume, vol_smooth) / (vol_smooth / vol_length))


LongEntry  = (rising(volsum, volriselen) or crossover (volsum, threshold)) and close > close[direction]
ShortEntry = (rising(volsum, volriselen) or crossover (volsum, threshold)) and close < close[direction]
LongExit1  = falling (volsum,volfalllen)
ShortExit1 = falling (volsum,volfalllen)
LongExit2= (crossover(volsum, threshold2) and close < close[direction])


_state = 0
_prev = nz(_state[1])
_state := _prev

if _prev == 0
    if LongEntry
        _state := 1
        _state
    if ShortEntry
        _state := 2
        _state
if _prev == 1
    if ShortEntry or LongExit1
        _state := 0
        _state
if _prev == 2
    if LongEntry or ShortExit1
        _state := 0
        _state

_bLongEntry = _state == 1 
_bLongClose = _state == 0 

long_condition = _bLongEntry and close > close[direction]
strategy.entry('BUY', strategy.long, when=long_condition)  
 
short_condition =  _bLongClose or LongExit2
strategy.close('BUY', when=short_condition)

plot(volsum,      color = color.green,    title="Vol_Sum")
plot(threshold, color = color.fuchsia, transp=50, title="Threshold")
plot(threshold2, color=color.white, transp = 50, title="Threshold 2")

Plus de