Stratégie de trading de suivi de tendance basée sur l'oscillateur de volume


Date de création: 2024-01-29 15:04:18 Dernière modification: 2024-01-29 15:04:18
Copier: 0 Nombre de clics: 760
1
Suivre
1617
Abonnés

Stratégie de trading de suivi de tendance basée sur l’oscillateur de volume

Aperçu

Cette stratégie est une stratégie de suivi de la tendance basée sur l’indicateur modifié de l’oscillateur de la quantité de transaction. Elle utilise la moyenne de la quantité de transaction, identifie les signaux qui augmentent la quantité de transaction, afin de juger d’entrer ou de sortir de la position.

Principe de stratégie

  1. Calculer la moyenne de la quantité transmise en vol_sum, dont la longueur est vol_length, et effectuer la moyenne de la longueur en vol_smooth.
  2. Une augmentation de volume supérieure au seuil de dépréciation génère un signal d’achat et une baisse supérieure au seuil de dépréciation génère un signal de vente.
  3. Afin de filtrer les erreurs, l’opération d’achat n’est effectuée que lorsque la tendance des prix est à la hausse par rapport au prix de clôture de la ligne de la racine de direction K. L’opération de vente n’est effectuée que lorsque la tendance des prix est à la baisse.
  4. Il existe deux seuils threshold et threshold2. Threshold2 est utilisé pour générer un signal de transaction et threshold2 est utilisé pour arrêter la perte.
  5. Logique de stockage des commandes par le biais de la machine d’état

Analyse des avantages

  1. L’utilisation d’indicateurs de volume de transaction permet de capturer les changements dans les courants d’achat et de vente du marché, ce qui améliore la précision du signal.
  2. En combinant les tendances des prix, on peut éviter de générer des signaux erronés lors des fluctuations des prix.
  3. L’ouverture et la fermeture de positions à deux seuils permettent une meilleure maîtrise des risques.

Analyse des risques

  1. Les indicateurs de volumes de livraison sont eux-mêmes retardés et risquent de manquer le point de basculement.
  2. Les paramètres incorrects peuvent entraîner une fréquence de transaction trop élevée ou un retard de signal.
  3. Le point d’arrêt peut être franchi dans un scénario d’augmentation du volume de transactions.

Ces risques peuvent être maîtrisés en ajustant les paramètres, en optimisant le calcul des indicateurs et en les confirmant avec d’autres indicateurs.

Direction d’optimisation

  1. On peut envisager d’optimiser les paramètres de l’indicateur pour s’adapter et s’adapter automatiquement aux conditions du marché.
  2. Les signaux peuvent être combinés avec d’autres indicateurs, tels que l’indice de volatilité des prix, pour une vérification plus approfondie et une meilleure précision.
  3. Il est possible d’étudier l’application de modèles d’apprentissage automatique aux jugements de signaux, afin d’améliorer l’exactitude des jugements de modèles.

Résumer

Cette stratégie est une stratégie de suivi de tendance relativement stable, grâce à un oscillateur de volume de transaction amélioré, qui aide à juger de la tendance des prix, à établir deux seuils pour l’ouverture et la fermeture de positions. L’espace d’optimisation est principalement lié à l’ajustement des paramètres, au filtrage des signaux et à la stratégie d’arrêt des pertes.

Code source de la stratégie
/*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")