
A estratégia é usada principalmente para automatizar o investimento em longas linhas de BTC. A direção da tendência é determinada pelo cruzamento de duplas EMAs e LSMAs, e o stop loss dinâmico é calculado usando o indicador ATR, permitindo um acompanhamento efetivo da tendência de várias cabeças de BTC.
A EMA de 25 e a LSMA de 100 são usadas para formar duas linhas de equilíbrio, cuja interseção é usada para determinar a tendência do mercado. A EMA responde rapidamente às mudanças de preço, a falsa ruptura da onda LSMA.
Quando a EMA rápida atravessa a LSMA lenta e é considerada ainda em alta, faz mais; ao contrário, quando a EMA rápida atravessa a LSMA lenta e é considerada como entrando em baixa, faz equilíbrio.
Depois de entrar em ações, o stop loss dinâmico calculado com o indicador ATR é ajustado continuamente, permitindo um acompanhamento efetivo da tendência ascendente do BTC. Concretamente, o ponto inicial da linha de stop loss é o preço de entrada, depois de cada ajuste, a amplitude do ATR de proporção fixa será deslocada para cima.
A linha de parada é capaz de bloquear efetivamente a flutuação causada pelo aumento do preço do BTC, além de evitar que o ponto de parada fique muito perto do preço mais recente, o que leva a uma parada frequente. Além disso, a estratégia também configura dois paradas móveis em diferentes proporções para bloquear mais lucros.
O uso de duas linhas de equilíbrio para determinar a tendência é mais confiável e pode efetivamente evitar a produção de falsos sinais.
O ATR pode ser usado para bloquear a maior parte dos lucros, mas também para evitar pequenos e frequentes paradas.
Independentemente do fim da operação, o risco é controlado quando a linha de equilíbrio emite um sinal de saída.
O nível de automação é alto, sem necessidade de intervenção humana, facilitando a operação do disco rígido por longos períodos de tempo.
O blogueiro ainda está em busca de uma resposta para a questão, mas não está pronto para responder a ela.
Embora a combinação de duas linhas equilíbrias possa reduzir os sinais falsos, é difícil evitá-los completamente em situações de tremores.
A configuração inadequada dos parâmetros ATR também afeta o efeito de parada de perdas, que precisa ser ajustado de acordo com as diferentes variedades.
O atraso de um sinal pode ser causado por um ciclo de média irracional ou por uma falha na atualização do sinal.
Garantir a estabilidade do servidor e evitar falhas anormais que causem interrupções automáticas nas transações.
Pode-se tentar adicionar mais indicadores para julgar tendências, como as bandas de Bryn. Ou usar modelos de aprendizado de máquina para prever preços.
O método de cálculo do ATR de perda dinâmica também pode ser ajustado e otimizado para tornar a perda mais suave.
Pode ser adicionado um mecanismo de alerta baseado no volume de transações e rotatividade diária da FEATURE para evitar o impacto de uma notícia importante.
Os parâmetros variam de acordo com a moeda, e os parâmetros personalizados podem ser treinados com mais dados históricos.
Em geral, esta estratégia é um programa de investimento automático de BTC muito prático. Usar o EMA duplo para determinar a grande tendência é muito confiável, complementado com o ATR para rastrear o stop loss, pode obter um bom lucro e um longo período de validade. Com o ajuste de parâmetros de otimização contínua, o efeito da estratégia ainda tem muito espaço para melhorar e vale a pena testar.
// 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")