Stratégie d'investissement intelligente de suivi de la moyenne mobile à double tendance


Date de création: 2023-11-22 15:18:53 Dernière modification: 2023-11-22 15:18:53
Copier: 0 Nombre de clics: 621
1
Suivre
1617
Abonnés

Stratégie d’investissement intelligente de suivi de la moyenne mobile à double tendance

Aperçu

Cette stratégie est principalement utilisée pour automatiser les investissements en longues lignes de BTC. La direction de la tendance est déterminée par la croisée des deux EMA et LSMA, et le stop loss dynamique est calculé à l’aide de l’indicateur ATR, permettant un suivi efficace des tendances à plusieurs têtes de BTC.

Principe de stratégie

  1. Les EMA de 25 et les LSMA de 100 jours forment des lignes doubles, leur croisement est utilisé pour déterminer la tendance du marché. Les EMA réagissent rapidement aux variations de prix, les LSMA filtrent les fausses ruptures.

  2. Lorsque l’EMA rapide traverse la LSMA lente et est jugée comme étant toujours dans une tendance à la hausse, faites plus; à l’inverse, lorsque l’EMA rapide traverse la LSMA lente et est jugée comme entrant en position vide, alors la position est levée.

  3. Après l’entrée, le stop-loss dynamique calculé à l’aide de l’indicateur ATR est constamment ajusté, permettant un suivi efficace de la tendance haussière de la BTC. Plus précisément, la ligne de stop-loss commence par le prix d’entrée, après quoi chaque ajustement se déplace à la hausse de l’ATR à proportion fixe.

  4. La ligne de stop-loss permet de bloquer efficacement les fluctuations causées par la hausse de la valeur de la BTC, tout en empêchant les points de stop-loss trop proches du prix le plus récent de provoquer des stop-loss fréquents. En outre, la stratégie définit deux stop-loss mobiles de différentes proportions pour bloquer plus de bénéfices.

Analyse des avantages

  1. L’utilisation d’une double ligne d’équilibre est plus fiable et permet de prévenir efficacement la production de faux signaux.

  2. L’ATR est un système de suivi dynamique des arrêts qui permet de bloquer la plupart des bénéfices et d’éviter les petits arrêts fréquents.

  3. Peu importe si la transaction est terminée ou non, le risque est maîtrisé dès que le signal de sortie est émis.

  4. Il est hautement automatisé et ne nécessite aucune intervention humaine, ce qui facilite le fonctionnement du disque dur.

Analyse des risques

  1. Il faut rester vigilant face aux nouvelles importantes, pour éviter de perdre de gros points.

  2. Bien que la combinaison de deux lignes égales réduise le nombre de fausses signaux, il est difficile de l’éviter complètement en cas de tremblement de terre.

  3. Une mauvaise configuration des paramètres ATR peut également affecter l’effet de stop-loss et doit être ajustée en fonction des variétés.

  4. Un retard de signal peut également être causé par des cycles de ligne moyenne déraisonnables ou par une mise à jour tardive.

  5. Garantir la stabilité du serveur et éviter les pannes anormales qui entraînent des interruptions automatiques des transactions.

Direction d’optimisation

  1. Vous pouvez essayer d’ajouter plus d’indicateurs pour juger de la tendance, comme les bandes de Brin. Ou utiliser des modèles d’apprentissage machine pour prédire les prix.

  2. La méthode de calcul de l’arrêt dynamique de l’ATR peut également être ajustée et optimisée pour rendre l’arrêt plus fluide.

  3. Un système d’alerte basé sur le volume des transactions et le mouvement de la FEATURE par jour peut être ajouté pour prévenir les chocs majeurs.

  4. Les paramètres varient d’une monnaie à l’autre et peuvent être personnalisés en utilisant plus de données historiques.

Résumer

Cette stratégie est un programme d’investissement automatique très pratique. L’utilisation de deux EMA pour déterminer la grande tendance est très fiable, avec l’ATR pour suivre les arrêts de perte, il est possible d’obtenir de bons bénéfices, mais la durée de validité peut être très longue.

Code source de la stratégie
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Wunderbit Trading

//@version=4
strategy("Automated Bitcoin (BTC) Investment Strategy", overlay=true, initial_capital=5000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100,  commission_type=strategy.commission.percent,commission_value=0.1)

////////////  Functions

Atr(p) =>
    atr = 0.
    Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1])))
    atr := nz(atr[1] + (Tr - atr[1])/p,Tr)

//TEMA
TEMA(series, length) =>
    if (length > 0)
        ema1 = ema(series, length)
        ema2 = ema(ema1, length)
        ema3 = ema(ema2, length)
        (3 * ema1) - (3 * ema2) + ema3
    else
        na
tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])

///////////////////////////////////////////////////
/// INDICATORS
source=close

/// TREND
trend_type1 = input("TEMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"])
trend_type2 = input("LSMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"])

trend_type1_length=input(25, "Length of the First Trend Line")
trend_type2_length=input(100, "Length of the Second Trend Line")

leadLine1 = if trend_type1=="LSMA"
    linreg(close, trend_type1_length, 0)
else if trend_type1=="TEMA"
    TEMA(close,trend_type1_length)
else if trend_type1 =="EMA"
    ema(close,trend_type1_length)
else
    sma(close,trend_type1_length)

leadLine2 = if trend_type2=="LSMA"
    linreg(close, trend_type2_length, 0)
else if trend_type2=="TEMA"
    TEMA(close,trend_type2_length)
else if trend_type2 =="EMA"
    ema(close,trend_type2_length)
else
    sma(close,trend_type2_length)

p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)

//Upward Trend
UT=crossover(leadLine1,leadLine2)
DT=crossunder(leadLine1,leadLine2)

// TP/ SL/  FOR LONG
// TAKE PROFIT AND STOP LOSS
long_tp1_inp = input(15, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(20, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(30, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(20, title="Long Take Profit 2 Qty", step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)

long_sl_input = input(5, title='stop loss in %', step=0.1)/100
long_sl_input_level = strategy.position_avg_price * (1 - long_sl_input)

// Stop Loss
multiplier = input(3.5, "SL Mutiplier", minval=1, step=0.1)
ATR_period=input(8,"ATR period", minval=1, step=1)

// Strategy
//LONG STRATEGY CONDITION

SC = input(close, "Source", input.source)
SL1 = multiplier * Atr(ATR_period)  // Stop Loss
Trail1 = 0.0
Trail1 :=  iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1))
Trail1_high=highest(Trail1,50)

// iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1),

entry_long=crossover(leadLine1,leadLine2) and Trail1_high < close
exit_long = close < Trail1_high or crossover(leadLine2,leadLine1) or close < long_sl_input_level

///// BACKTEST PERIOD ///////
testStartYear = input(2016, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

if testPeriod()
    if tradeType=="LONG" or tradeType=="BOTH"
        if strategy.position_size == 0 or strategy.position_size > 0
            strategy.entry("long", strategy.long, comment="b8f60da7_ENTER-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H", when=entry_long)
            strategy.exit("TP1", "long", qty_percent=long_tp1_qty, limit=long_take_level_1)
            strategy.exit("TP2", "long", qty_percent=long_tp2_qty, limit=long_take_level_2)
            strategy.close("long", when=exit_long, comment="b8f60da7_EXIT-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H" )


// LONG POSITION

plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? Trail1_high : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")