VWMA-ADX Momentum et stratégie longue Bitcoin basée sur la tendance

Auteur:ChaoZhang est là., Date: 2024-04-03 17:47:49 Je suis désolé
Les étiquettes:VWMAADXDMISMALe taux d'intérêtRMALa WMAHMALe secteur privé

img

Résumé

Cette stratégie utilise plusieurs moyennes mobiles (VWMA), l'indice directionnel moyen (ADX) et l'indicateur de mouvement directionnel (DMI) pour capturer les opportunités longues sur le marché Bitcoin. En combinant l'élan des prix, la direction de la tendance et le volume des transactions, la stratégie vise à trouver des points d'entrée avec de fortes tendances haussières et une dynamique suffisante tout en contrôlant strictement le risque.

Principes de stratégie

  1. Utilisez le VWMA de 9 jours et de 14 jours pour déterminer la tendance à long terme.
  2. Introduisez une moyenne mobile adaptative construite à partir de la VWMA à 89 jours, le prix le plus élevé et le prix le plus bas, en tant que filtre de tendance.
  3. Confirmer la force de la tendance à l'aide des indicateurs ADX et DMI. La tendance n'est considérée comme suffisamment forte que lorsque l'ADX est supérieur à 18 et que la différence entre +DI et -DI est supérieure à 15.
  4. Filtrer les barres dont le volume de négociation se situe entre 60% et 95% en utilisant la fonction de pourcentage de volume pour éviter les périodes où le volume de négociation est faible.
  5. Réglez le niveau de stop-loss à 0,96 à 0,99 fois le niveau des bougies précédentes, diminuant à mesure que le délai augmente pour contrôler le risque.
  6. Fermez la position lorsque la durée de détention prédéfinie est atteinte ou que le prix tombe en dessous de la moyenne mobile adaptative.

Analyse des avantages

  1. En combinant plusieurs indicateurs techniques, la stratégie évalue les conditions du marché à partir de diverses dimensions telles que la tendance, l'élan et le volume des transactions, rendant les signaux plus fiables.
  2. Le mécanisme de filtrage adaptatif des moyennes mobiles et du volume de négociation filtre efficacement les faux signaux et réduit les transactions invalides.
  3. Les paramètres stricts de stop-loss et les délais de détention réduisent considérablement l'exposition au risque de la stratégie.
  4. La conception modulaire du code améliore la lisibilité et la maintenance, facilitant ainsi une optimisation et une extension ultérieures.

Analyse des risques

  1. Lorsque le marché fluctue ou que la tendance n'est pas claire, la stratégie peut générer davantage de faux signaux.
  2. Le niveau de stop-loss est relativement serré, ce qui peut entraîner des stop-outs prématurés et accroître les pertes lors de fortes fluctuations du marché.
  3. La stratégie ne tient pas compte des conditions macroéconomiques et des événements importants, et peut échouer face aux événements du "cygne noir".
  4. Les paramètres sont relativement fixes et manquent d'adaptabilité, ce qui peut entraîner des performances instables dans différents environnements de marché.

Directions d'optimisation

  1. Introduire davantage d'indicateurs capables de capturer les conditions du marché, tels que l'indice de force relative (RSI) et les bandes de Bollinger, afin d'améliorer la fiabilité des signaux.
  2. Optimiser dynamiquement le niveau de stop-loss, par exemple en utilisant la plage moyenne réelle (ATR) ou le stop-loss basé sur le pourcentage, pour s'adapter aux différentes conditions de volatilité du marché.
  3. Améliorer le module de contrôle des risques de la stratégie en incorporant des données macroéconomiques et une analyse du sentiment.
  4. Utiliser des algorithmes d'apprentissage automatique pour optimiser automatiquement les paramètres, améliorant ainsi l'adaptabilité et la stabilité de la stratégie.

Résumé

La stratégie de long terme de Bitcoin de VWMA-ADX capture efficacement les opportunités à la hausse sur le marché de Bitcoin en considérant de manière exhaustive les tendances des prix, l'élan, le volume des transactions et d'autres indicateurs techniques. Dans le même temps, des mesures strictes de contrôle des risques et des conditions de sortie claires garantissent que le risque de la stratégie est bien contrôlé. Cependant, la stratégie présente également certaines limitations, telles qu'une adaptabilité insuffisante aux environnements changeants du marché et la nécessité de stratégies de stop-loss optimisées.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Q_D_Nam_N_96

//@version=5
strategy("Long BTC Strategy", overlay=true, 
     default_qty_type = strategy.percent_of_equity, 
     default_qty_value = 100, initial_capital = 1000, currency = currency.USD)

Volume_Quartile(vol) =>
    qvol1 = ta.percentile_linear_interpolation(vol, 60,15)
    qvol2 = ta.percentile_linear_interpolation(vol, 60,95)
    vol > qvol1 and vol < qvol2

smma(src, length) =>
	smma =  0.0
	smma := na(smma[1]) ? ta.sma(src, length) : (smma[1] * (length - 1) + src) / length
	smma

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "RMA" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)
        "HMA" => ta.hma(source, length)
        "SMMA" => smma(source, length)

DMI(len, lensig) =>
    up = ta.change(high)
    down = -ta.change(low)
    plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
    trur = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(plusDM, len) / trur)+11
    minus = fixnan(100 * ta.rma(minusDM, len) / trur)-11
    sum = plus + minus
    adx = 100 * ta.vwma(math.abs(plus - minus-11) / (sum == 0 ? 1 : sum), lensig)

    [adx, plus, minus]

cond1 = Volume_Quartile(volume*hlcc4)

ma1 = ma(close,9, "VWMA")
// plot(ma1, color = color.blue)
ma2 = ma(close,14, "VWMA")
// plot(ma2, color = color.orange)

n = switch timeframe.period
    "240" => 0.997
    => 0.995

ma3 = (0.1*ma(ta.highest(close,89),89, "VWMA") + 
     0.9*ma(ta.lowest(close,89),89, "VWMA"))*n

plot(ma3, color = color.white)

[adx, plus, minus] = DMI(7, 10)


cond2 = adx > 18 and plus - math.abs(minus) > 15

var int count = 0

if barstate.isconfirmed and strategy.position_size != 0
    count += 1
else
    count := 0

p_roc = 0
if timeframe.period == '240'
    p_roc := 14
else
    p_roc := 10

longCondition = ta.crossover(ma1, ma2) and (close > open ? close > ma3 : open > ma3) and ((ma3 - ma3[1])*100/ma3[1] >= -0.2) and ((close-close[p_roc])*100/close[p_roc] > -2.0)
float alpha = 0.0
float sl_src = high[1]
if (longCondition and cond1 and cond2 and strategy.position_size == 0)
    strategy.entry("buy", strategy.long)
    if timeframe.period == '240'
        alpha := 0.96
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+5, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '30'
        alpha := 0.985
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '45'
        alpha := 0.985
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '60'
        alpha := 0.98
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '120'
        alpha := 0.97
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == '180'
        alpha := 0.96
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else if timeframe.period == 'D'
        alpha := 0.95
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)
    else 
        alpha := 0.93
        strategy.exit("exit-buy","buy", stop = sl_src*alpha)
        // line.new(bar_index, sl_src*alpha, bar_index+20, sl_src*alpha, width = 2, color = color.white)

period = switch timeframe.period
    "240" => 90
    "180" => 59
    "120" => 35
    "30" => 64
    "45" => 40
    "60" => 66
    "D" => 22
    => 64

if (count > period or close < ma3)
    strategy.close('buy', immediately = true) 

Relationnée

Plus de

- Je ne sais pas.Il est préférable d'ajouter un pare-chocs mobile.