O recurso está a ser carregado... Carregamento...

Dual Trend Lines Inteligente Tracking BTC Estratégia de Investimento

Autora:ChaoZhang, Data: 2023-11-22 15:18:53
Tags:

img

Resumo

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.

Estratégia lógica

  1. A EMA de 25 períodos e a LSMA de 100 períodos são usadas para formar uma média móvel dupla.

  2. 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.

  3. 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.

  4. 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.

Análise das vantagens

  1. A utilização de médias móveis duplas para determinar a tendência é mais fiável e pode prevenir eficazmente falsos sinais.

  2. O sistema ATR pode bloquear a maioria dos lucros, evitando frequentes pequenas perdas de stop.

  3. 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.

  4. 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.

Análise de riscos

  1. Ainda preciso prestar atenção a notícias importantes repentinas para evitar perdas enormes.

  2. 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.

  3. A configuração incorreta dos parâmetros do ATR também pode afetar o efeito stop loss.

  4. 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.

  5. Garantir a estabilidade do servidor para evitar falhas anormais que interrompam a negociação automatizada.

Orientações de otimização

  1. Mais indicadores, como Bandas de Bollinger, podem ser adicionados para determinar a tendência.

  2. 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.

  3. 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.

  4. Os parâmetros variam para diferentes moedas. Mais dados históricos podem ser utilizados para treinar parâmetros personalizados.

Resumo

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")

Mais.