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.
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.
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.
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.
A estratégia pode ser otimizada nas seguintes direcções:
Adicionar juízos da EMA de período mais longo para evitar erros unitários de volatilidade
Adicionar indicadores como volumes de negociação para julgar tendências, reduzir a dependência de velas de curto prazo
Otimizar as condições de entrada e saída, estabelecer regras de entrada mais rigorosas
Combinar algoritmos de aprendizagem de máquina para determinar a direção da tendência, alcançar maior taxa de vitória
A Estratégia Dinâmica de Obtenção de Lucro Seguindo a Tendência tem uma lógica clara em seu núcleo
/*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)