Stratégie Bitcoin longue VWMA-ADX basée sur la dynamique et la tendance

VWMA ADX DMI SMA EMA RMA WMA HMA SMMA
Date de création: 2024-04-03 17:47:49 Dernière modification: 2024-04-03 17:47:49
Copier: 8 Nombre de clics: 951
1
Suivre
1617
Abonnés

Stratégie Bitcoin longue VWMA-ADX basée sur la dynamique et la tendance

Aperçu

La stratégie utilise plusieurs moyennes mobiles (VWMA), l’indice directionnel moyen (ADX) et l’indicateur de mouvement (DMI) pour capturer les opportunités dans le marché. En combinant plusieurs indicateurs techniques tels que le mouvement des prix, la direction de la tendance et le volume des transactions, la stratégie vise à trouver des points d’entrée où la tendance haussière est forte et dynamique, tout en contrôlant strictement les risques.

Principe de stratégie

  1. Les VWMA du 9e et du 14e jour sont utilisés pour juger des tendances à plusieurs têtes, et produisent un signal à plusieurs têtes lorsque la moyenne à court terme traverse la moyenne à long terme.
  2. L’introduction d’une courbe d’adaptation construite à partir d’un VWMA de 89 jours de hauts et de bas sert de filtre de tendance, et l’ouverture d’une position n’est envisagée que lorsque le prix de clôture ou d’ouverture est supérieur à cette courbe.
  3. Pour confirmer la force d’une tendance à l’aide de l’indicateur ADX et DMI, la tendance est considérée comme suffisamment forte uniquement lorsque l’ADX est supérieur à 18 et que la différence entre +DI et -DI est supérieure à 15.
  4. Utilisez une fonction de pourcentage de volume des transactions pour filtrer le volume des transactions sur une barre comprise entre 60% et 95%, en évitant les périodes où le volume des transactions est trop faible.
  5. Le stop loss est placé entre 0,96 et 0,99 fois la hauteur de la ligne K précédente et diminue avec l’agrandissement de la période pour contrôler le risque.
  6. Le placement est effectué lorsque le temps de tenue de position prévu est atteint ou lorsque le prix tombe au-dessous de la ligne moyenne d’adaptation.

Analyse des avantages

  1. Les signaux sont plus fiables en combinant plusieurs indicateurs techniques pour évaluer l’état du marché dans plusieurs dimensions telles que la tendance, la dynamique et le volume des transactions.
  2. Les mécanismes de filtrage de la moyenne adaptative et du volume des transactions permettent de filtrer efficacement les faux signaux et de réduire les transactions invalides.
  3. Les paramètres stricts de stop-loss et les limites de temps de détention réduisent considérablement la marge de risque de la stratégie.
  4. Le code est conçu pour être modulaire, lisible et maintenable, ce qui facilite l’optimisation et l’extension ultérieures.

Analyse des risques

  1. Cette stratégie peut générer plus de faux signaux lorsque le marché est en état de choc ou de tendance incertaine.
  2. Les arrêts sont relativement proches et peuvent être déclenchés prématurément en cas de forte volatilité, entraînant une augmentation des pertes.
  3. L’absence de prise en compte de la situation macroéconomique et des événements majeurs pourrait être inefficace face à l’événement Black Swan.
  4. Les paramètres sont relativement fixes, manquent d’adaptabilité et peuvent être instables dans différents environnements de marché.

Direction d’optimisation

  1. L’introduction de plus d’indicateurs permettant de décrire l’environnement du marché, tels que l’indice de force relative (RSI) et les bandes de Brin, améliore la fiabilité du signal.
  2. Optimisation dynamique de la position de stop loss, par exemple en utilisant l’ATR ou le stop loss pourcentage pour répondre à différentes conditions de volatilité du marché.
  3. Le module de contrôle des risques de la stratégie a été renforcé par la combinaison de données macroéconomiques et d’analyses de sentiment.
  4. Les algorithmes d’apprentissage automatique optimisent les paramètres pour améliorer l’adaptabilité et la stabilité des stratégies.

Résumer

La stratégie multi-capital Bitcoin VWMA-ADX est capable de capturer des opportunités de hausse dans le marché Bitcoin en tenant compte de plusieurs indicateurs techniques tels que la tendance des prix, la dynamique et le volume des transactions. En même temps, les mesures de contrôle des risques strictes et les conditions de placement claires permettent de mieux contrôler les risques de la stratégie. Cependant, la stratégie présente également certaines limites, telles que l’insuffisance d’adaptation aux changements de l’environnement du marché et la stratégie d’arrêt des pertes à optimiser.

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