Cette stratégie est principalement utilisée pour l'investissement automatisé à long terme en BTC. Elle utilise le croisement de la double EMA et de la LSMA pour déterminer la direction de la tendance et utilise l'indicateur ATR pour calculer un stop loss dynamique pour suivre efficacement la tendance haussière de BTC.
Utilisez l'EMA à 25 périodes et le LSMA à 100 périodes pour former une moyenne mobile double. Leur croisement est utilisé pour déterminer la tendance du marché.
Lorsque l'EMA rapide franchit le niveau supérieur de la LSMA lente, il est déterminé que la tendance haussière est toujours intacte et des positions longues sont prises.
Après avoir pris des positions longues, le stop loss dynamique calculé à l'aide de l'indicateur ATR continue de s'ajuster pour suivre efficacement la tendance haussière de BTC. Plus précisément, le point de départ de la ligne de stop loss est le prix d'entrée. Après cela, chaque ajustement glissera à la hausse d'un pourcentage fixe de l'amplitude ATR.
La ligne de stop loss peut effectivement verrouiller les bénéfices flottants apportés par la tendance haussière du BTC, tout en empêchant le point de stop loss de se rapprocher trop du dernier prix pour éviter des stop loss fréquents.
L'utilisation de moyennes mobiles doubles pour déterminer la tendance est plus fiable et peut prévenir efficacement les faux signaux.
L'ATR dynamique trailing stop loss peut bloquer la plupart des bénéfices tout en évitant les petites pertes de stop fréquentes.
Peu importe que la tendance haussière se termine ou non, tant que la moyenne mobile émet un signal de sortie, la position sera arrêtée pour contrôler les risques.
La stratégie a un haut degré d'automatisation sans intervention manuelle, ce qui la rend adaptée au trading en direct à long terme.
Il faut toujours être attentif aux nouvelles soudaines pour éviter de grosses pertes.
Bien que la combinaison de deux moyennes mobiles puisse réduire les faux signaux, il est encore difficile de les éviter complètement sur les marchés à plage.
Des réglages de paramètres incorrects de l'ATR peuvent également affecter l'effet stop loss.
Des périodes de moyennes mobiles déraisonnables ou leur non mise à jour dans le temps peuvent entraîner un décalage du signal.
Assurer la stabilité du serveur afin d'éviter les pannes anormales qui interrompent le trading automatisé.
Plus d'indicateurs tels que les bandes de Bollinger peuvent être ajoutés pour déterminer la tendance.
La méthode de calcul du stop loss dynamique ATR peut également être ajustée et optimisée pour rendre le stop loss plus fluide.
Des mécanismes d'alerte basés sur le volume de négociation et des fonctionnalités de rotation intraday peuvent être ajoutés pour se prémunir contre les effets des grandes nouvelles.
Les paramètres varient pour les différentes pièces. Des données plus historiques peuvent être utilisées pour former des paramètres personnalisés.
Dans l'ensemble, il s'agit d'un programme d'investissement BTC automatisé très pratique. Utiliser des EMA doubles pour déterminer la tendance majeure est très fiable. Avec ATR trailing stop loss, il peut réaliser des bénéfices décents et la période de validité peut être très longue. Comme les paramètres continuent d'être optimisés, il y a encore beaucoup de marge d'amélioration dans la performance de cette 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")