A estratégia Bilinear Regression Trend Following usa a diferença entre regressão linear rápida e lenta para determinar as tendências de preços e usa-a como sinal de entrada. Ela fica longa quando a regressão linear rápida cruza acima do limiar e sai quando cruza abaixo.
A estratégia primeiro calcula duas linhas de regressão linear com períodos diferentes, uma rápida com período mais curto e uma lenta com período mais longo. Em seguida, calcula a diferença entre os dois, quando a regressão rápida está acima da regressão lenta, a diferença é positiva, indicando uma tendência de alta. Quando a rápida está abaixo da lenta, a diferença é negativa, indicando uma tendência de queda.
A estratégia entra em longo quando a linha de diferença cruza acima do limiar e sai quando cruza abaixo.
A regressão linear dupla pode capturar bem as tendências de preços.
O filtro EMA elimina alguns sinais falsos de movimentos não-trending.
Lógica simples e clara, fácil de entender e implementar.
Períodos de LR inadequados podem gerar ruído excessivo.
O filtro EMA pode perder oportunidades em tendências fortes.
Propenso a falhas e perdas em mercados variados.
Soluções:
Otimizar os períodos LR para reduzir o ruído.
Ajustar dinamicamente o período da EMA com base nas condições de mercado.
Adicionar stop loss às perdas de controlo.
A estratégia pode ser otimizada nos seguintes aspectos:
Otimizar os períodos LR rápidos e lentos para encontrar a melhor combinação.
Tente outros filtros como Bandas de Bollinger, KDJ em vez de EMA.
Adicionar stop loss dinâmico ao controlo dos riscos.
Combine com a seleção de ações para selecionar ações de tendência.
Desenvolver parâmetros adaptáveis com base nas condições do mercado.
A estratégia de regressão bilinear é simples e direta na captura de tendências com regressão linear dupla e filtro EMA. Mas também tem riscos que precisam ser abordados através de otimização de parâmetros, stop loss, etc. Quando ajustado corretamente, pode efetivamente negociar mercados de tendência.
/*backtest start: 2022-11-10 00:00:00 end: 2023-11-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © TradingAmmo //@version=4 strategy("Linear trend", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075, currency='USD') startP = timestamp(input(2017, "Start Year"), input(12, "Month"), input(17, "Day"), 0, 0) end = timestamp(input(9999, "End Year"), input(1, "Month"), input(1, "Day"), 0, 0) _testPeriod() => iff(time >= startP and time <= end, true, false) src = close len1 = input(defval=13, minval=1, title="Fast LR") len2 = input(defval=55, minval=1, title="Slow LR") lag1 = input(0, title="Lag for fast") lag2 = input(0, title="Lag for slow") threshold = input(0,step=0.5, title="Threshold") fast_lr = linreg(src, len1, lag1) slow_lr = linreg(src, len2, lag2) lr = fast_lr - slow_lr plot_fast = plot(lr, color = lr > 0 ? color.green : color.red) plot(threshold, color=color.purple) long_condition = crossover(lr, threshold) and close > ema(close, 200) and _testPeriod() strategy.entry('BUY', strategy.long, when=long_condition) short_condition = crossunder(lr, threshold) strategy.close('BUY', when=short_condition)