Esta estratégia é usada principalmente para o investimento automatizado de longo prazo em BTC. Ele usa o cruzamento de EMA dupla e LSMA para determinar a direção da tendência e usa o indicador ATR para calcular um stop loss dinâmico para rastrear efetivamente a tendência de alta do BTC.
A EMA de 25 períodos e a LSMA de 100 períodos são usadas para formar uma média móvel dupla.
Quando a EMA rápida cruza acima da LSMA lenta, determina-se que a tendência de alta ainda está intacta e as posições longas são tomadas.
Após a tomada de posições longas, o stop loss dinâmico calculado usando o indicador ATR continua ajustando-se para rastrear efetivamente a tendência de alta do BTC. Especificamente, o ponto inicial da linha de stop loss é o preço de entrada.
A linha de stop loss pode efetivamente bloquear o lucro flutuante trazido pela tendência de alta do BTC, impedindo que o ponto de stop loss se aproxime demais do último preço para evitar frequentes stop loss.
A utilização de médias móveis duplas para determinar a tendência é mais fiável e pode prevenir eficazmente falsos sinais.
O sistema ATR pode bloquear a maioria dos lucros, evitando frequentes pequenas perdas de stop.
Não importa se a tendência de alta termina ou não, desde que a média móvel emita um sinal de saída, a posição será interrompida para controlar os riscos.
A estratégia possui um alto grau de automação sem intervenção manual, tornando-a adequada para negociações ao vivo de longo prazo.
Ainda preciso prestar atenção a notícias importantes repentinas para evitar perdas enormes.
Embora a combinação de médias móveis duplas possa reduzir os falsos sinais, é ainda difícil evitá-los completamente em mercados de intervalo.
A configuração incorreta dos parâmetros do ATR também pode afetar o efeito stop loss.
Os períodos de média móvel não razoáveis ou a falta de atualização a tempo podem levar ao atraso do sinal.
Garantir a estabilidade do servidor para evitar falhas anormais que interrompam a negociação automatizada.
Mais indicadores, como Bandas de Bollinger, podem ser adicionados para determinar a tendência.
O método de cálculo da perda de parada dinâmica ATR pode também ser ajustado e otimizado para tornar a perda de parada mais suave.
Podem ser adicionados mecanismos de alerta baseados no volume de negociação e recursos de rotação intradiária para proteger contra os impactos das principais notícias.
Os parâmetros variam para diferentes moedas. Mais dados históricos podem ser utilizados para treinar parâmetros personalizados.
Em geral, este é um programa de investimento automatizado de BTC muito prático. Usando EMAs duplas para determinar a tendência principal é muito confiável. Com o ATR seguindo o stop loss, ele pode alcançar lucros decentes e o período de validade pode ser muito longo. Como os parâmetros continuam sendo otimizados, ainda há muito espaço para melhoria no desempenho desta estratégia. Vale a pena verificar a negociação ao vivo.
// 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")