
A estratégia de stop-loss segue a tendência ascendente através da detecção de tendências de longo prazo e de reversão de curto prazo, com o objetivo de alcançar um preço baixo e um preço alto, seguindo a tendência ascendente. A estratégia também usa unidades de flutuação para detectar o tamanho dos ganhos e perdas, o que a torna aplicável a todas as moedas sem se preocupar com a variação percentual.
A lógica de compra desta estratégia é: comprar e abrir posições quando há uma tendência de alta de longo prazo (uma alta da EMA de 200 dias, um RSI de 200 dias maior que 51) e uma correção de baixa de curto prazo (uma queda no preço de fechamento das últimas 2 linhas K).
A lógica do selling é: parar quando o preço sobe mais de 1 unidade de flutuação; parar quando o preço cai mais de 2 unidades de flutuação.
A unidade de flutuação é calculada como: 2 vezes a diferença padrão do preço de fechamento em 50 dias como a unidade de flutuação básica. Assim, é possível detectar a própria flutuação de diferentes moedas, sem a necessidade de definir uma porcentagem.
A maior vantagem da estratégia é que pode ser detectado dinamicamente o tamanho de flutuação de diferentes moedas, de acordo com a própria moeda de flutuação de configuração de stop loss unit. Isso evita o problema de configuração de parâmetros de parâmetros fixos por cento, pode ser automaticamente adaptado para mais moedas.
Outra vantagem é a combinação de julgamentos de curto e longo prazo, que pode filtrar efetivamente a falsa ruptura. Utilizando a tendência de longo prazo para determinar a moeda que pode subir no futuro, em combinação com o sinal de retorno de curto prazo, pode evitar efetivamente os falsos sinais, como o squeeze de Brin.
O maior risco desta estratégia reside na configuração de um stop loss unit. Se a oscilação for muito grande, a distância de parada pode ser muito próxima e não pode ser acompanhada continuamente; se a oscilação for pequena, a perda pode ser interrompida muito rapidamente. Isso precisa ser auxiliado por EMAs de períodos mais longos para evitar erros de julgamento de unidades de oscilação.
Outro risco é a dependência da estratégia de julgar a tendência a curto prazo. Se houver um aumento a longo prazo, mas não houver uma correção a curto prazo, a oportunidade de entrada será perdida. Isso pode exigir a adição de outros indicadores de julgamento auxiliares.
A estratégia pode ser otimizada em várias direções:
Aumentar o julgamento de EMA de períodos mais longos, evitando erros de unidade de flutuação
Aumentar os indicadores de volume de transação para avaliar tendências e reduzir a dependência de linhas k de curto prazo
Optimizar as condições de abertura e paz de posição, estabelecendo regras de entrada mais rigorosas
Algoritmos de aprendizagem de máquina para determinar a direção da tendência e obter uma maior taxa de vitória
A estratégia de rastreamento de tendências de stop-loss dinâmico tem uma visão geral clara, cujo núcleo reside na definição de unidades de flutuação dinâmica. A estratégia pode ser adaptada automaticamente para diferentes unidades de lucro e perda de moeda, sem a necessidade de definir manualmente a porcentagem. Ao mesmo tempo, combinada com o julgamento duplo de longo prazo, pode ser eficaz na eliminação de falsos sinais.
/*backtest
start: 2022-12-22 00:00:00
end: 2023-12-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BHD_Trade_Bot
strategy(shorttitle='Take Profit On Trend',
title='Take Profit On Trend (by BHD_Trade_Bot)',
overlay=true,
initial_capital = 15,
default_qty_type = strategy.cash,
default_qty_value = 15,
commission_type=strategy.commission.percent,
commission_value=0.1)
//Backtest Time
start_day = 1
start_month = 1
start_year = 2021
end_day = 1
end_month = 1
end_year = 2050
start_time = timestamp(start_year, start_month, start_day, 00, 00)
end_time = timestamp(end_year, end_month, end_day, 23, 59)
is_back_test_time() =>
time >= start_time and time <= end_time ? true : false
// Last bar
h1_last_bar = (timenow - time)/1000/60/60 < 2
// EMA
ema50 = ema(close, 50)
ema200 = ema(close, 200)
// RSI length 200
rsi200 = rsi(close, 200)
// Bollinger Bands length 50
bb50 = 2 * stdev(close, 50)
// BHD Unit
bhd_unit = sma(bb50, 100)
bb50_upper = ema50 + bhd_unit
bb50_lower = ema50 - bhd_unit
// All n candles is going down
all_body_decrease(n) =>
isValid = true
for i = 0 to (n - 1)
if (close[i] > close[i + 1])
isValid := false
break
isValid
// ENTRY
// Long-term uptrend
entry_condition1 = rsi200 > 51
// Short-term downtrend
entry_condition2 = all_body_decrease(2)
ENTRY_CONDITION = entry_condition1 and entry_condition2
if (ENTRY_CONDITION and is_back_test_time())
strategy.entry("entry", strategy.long)
// CLOSE CONDITIONS
// Price increase 1 BHD unit
TAKE_PROFIT = close > strategy.position_avg_price + bhd_unit
// Price decrease 2 BHD unit
STOP_LOSS = close < strategy.position_avg_price - bhd_unit * 2
CLOSE_CONDITION = TAKE_PROFIT or STOP_LOSS
if (CLOSE_CONDITION or h1_last_bar)
strategy.close("entry")
// Draw
plot(ema50)
plot(ema200, color=color.yellow)
plot(bb50_upper)
plot(bb50_lower)