Dinâmica de lucro seguindo a estratégia de tendência

Autora:ChaoZhang, Data: 2023-12-29 16:06:54
Tags:

img

Resumo

A estratégia Dynamic Take Profit Following Trend detecta tendências de longo prazo e retrações de curto prazo para alcançar compras baixas e vendas altas, com o objetivo de perseguir tendências de alta.

Estratégia lógica

A lógica de compra desta estratégia é: quando uma tendência de alta de longo prazo aparece (EMA de 200 dias sobe, RSI de 200 dias é maior que 51) e ocorre um retrocesso de curto prazo (os últimos 2 velas mostram preços de fechamento reduzidos), as posições longas são abertas.

A lógica de venda é: tirar lucro quando o preço aumenta mais de 1 unidade de volatilidade; parar a perda quando o preço diminui mais de 2 unidades de volatilidade.

A unidade de volatilidade é calculada como: 2 vezes o desvio padrão dos preços de fechamento nos últimos 50 dias.

Análise das vantagens

A maior vantagem desta estratégia é que pode detectar dinamicamente os tamanhos de volatilidade de diferentes moedas e definir os níveis de stop loss/take profit em conformidade.

Outra vantagem é que a combinação de julgamentos de longo prazo e de curto prazo pode efetivamente filtrar falhas.

Análise de riscos

O maior risco desta estratégia é a configuração da unidade de stop loss/take profit. Se a volatilidade for muito alta, as distâncias de take profit podem ser muito próximas para continuar a perseguir a tendência de alta; se a volatilidade for muito baixa, a stop loss pode ser acionada muito rapidamente. Isso requer EMAs de período mais longo como uma ajuda para evitar erros nos julgamentos da unidade de volatilidade.

A estratégia de retorno de curto prazo é uma estratégia de retorno de curto prazo, cujo objetivo consiste em reduzir o risco de retorno de curto prazo, reduzindo o risco de retorno de curto prazo.

Orientações de otimização

A estratégia pode ser otimizada nas seguintes direcções:

  1. Adicionar juízos da EMA de período mais longo para evitar erros unitários de volatilidade

  2. Adicionar indicadores como volumes de negociação para julgar tendências, reduzir a dependência de velas de curto prazo

  3. Otimizar as condições de entrada e saída, estabelecer regras de entrada mais rigorosas

  4. Combinar algoritmos de aprendizagem de máquina para determinar a direção da tendência, alcançar maior taxa de vitória

Conclusão

A Estratégia Dinâmica de Obtenção de Lucro Seguindo a Tendência tem uma lógica clara em seu núcleoestabelecendo dinamicamente as unidades de stop loss/take profit. Esta estratégia pode adaptar automaticamente as configurações em todas as moedas sem precisar de entradas de porcentagem manuais. Enquanto isso, combinando a confirmação dupla de tendências de longo prazo e de curto prazo pode efetivamente filtrar sinais falsos. Com mais otimizações, esta estratégia pode se tornar uma estratégia de busca de tendências altamente eficiente.


/*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)


Mais.