
Esta estratégia é uma estratégia de acompanhamento de tendências, que combina a regressão de Nadaraya-Watson e o canal ATR para identificar a direção da tendência e os pontos de entrada. Quando o preço quebra o caminho abaixo, faça mais; quando o preço quebra o caminho acima, feche a posição.
Primeiro, a estratégia usa a regressão de Nadaraya-Watson para calcular a curva de regressão de dois períodos de atraso diferentes e, em seguida, compara a interseção das duas curvas de regressão para determinar a direção da tendência. Concretamente, a curva de regressão de h e h-lag é calculada separadamente e é julgada favorável quando a curva de h passa pela curva de h; e é julgada favorável quando a curva de h passa pela curva de h.
Em segundo lugar, a estratégia usa o canal ATR para determinar o ponto de entrada. A trajetória ascendente é a curva de regressão, acrescentando o ATR de n-fase e a trajetória descendente é a curva de regressão, subtraindo o ATR de n-fase. Quando o preço entra na trajetória ascendente, olha para cima e entra, e quando entra na trajetória descendente, olha para cima e entra.
Finalmente, um mecanismo de parada de perda é configurado. Se o preço for continuamente stopLossBars raiz K abaixo do preço de entrada, a parada de perda é executada.
Esta estratégia, combinada com a análise de regressão e o canal de ruptura, permite uma compreensão mais precisa da direção e da intensidade das tendências do mercado. Comparado ao uso de indicadores como a média móvel para identificar tendências, este método reduz os falsos sinais e, portanto, aumenta a estabilidade da estratégia.
Além disso, o canal ATR estabelece pontos de entrada razoáveis para evitar entradas erradas perto do ponto de reversão da tendência. O mecanismo de stop loss também controla efetivamente os perdas individuais.
Portanto, essa estratégia tem vantagens como uma forte capacidade de identificar tendências, uma saída mais precisa e um risco de parada controlado.
O maior risco dessa estratégia é que, ao romper o canal ATR, o preço pode estar fazendo uma reversão ou um rescaldo, o que pode levar a uma entrada inadequada ou a uma saída de perda logo após a entrada.
Além disso, a curva de regressão e o canal ATR precisam de alguma otimização de parâmetros. Se os parâmetros forem configurados incorretamente, a análise de regressão não será eficaz, ou a amplitude do ATR será muito grande ou pequena, o que afetará a eficácia da estratégia.
Pode-se considerar a combinação de outros indicadores para determinar tendências e sinais de reversão, como VOLUME, MACD, etc., para aumentar a estabilidade e a precisão da estratégia.
A função de núcleo na análise de regressão também pode ser ajustada, por exemplo, considerando o núcleo de Epanechnikov, para ver se pode obter um melhor efeito de encaixe.
O ciclo e a multiplicação do ATR do canal ATR também precisam de testes repetidos e otimização para encontrar a melhor combinação de parâmetros.
Esta estratégia utiliza a análise de regressão e a abordagem de ruptura de canal para identificar a direção e a intensidade da tendência, entrar em ações em pontos razoáveis e definir um stop loss para obter uma estratégia de acompanhamento de tendência estável. Há muito espaço para otimização de subestratégias e vale a pena testar e melhorar ainda mais.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Custom Strategy with Stop Loss and EMA", overlay=true)
src = input(close, title='Source')
h = input(10, title='Lookback Window', tooltip='The number of bars used for the estimation.')
r = input(10, title='Relative Weighting', tooltip='Relative weighting of time frames.')
x_0 = input(50, title='Start Regression at Bar', tooltip='Bar index on which to start regression.')
lag = input(2, title='Lag', tooltip='Lag for crossover detection.')
stopLossBars = input(3, title='Stop Loss Bars', tooltip='Number of bars to check for stop loss condition.')
emaPeriod = input(46, title='EMA Period', tooltip='Period for Exponential Moving Averages.')
lenjeje = input(32, title='ATR Period', tooltip='Period to calculate upper and lower band')
coef = input(2.7, title='Multiplier', tooltip='Multiplier to calculate upper and lower band')
// Function for Nadaraya-Watson Kernel Regression
kernel_regression1(_src, _size, _h) =>
_currentWeight = 0.0
_cumulativeWeight = 0.0
for i = 0 to _size + x_0
y = _src[i]
w = math.pow(1 + (math.pow(i, 2) / ((math.pow(_h, 2) * 2 * r))), -r)
_currentWeight += y * w
_cumulativeWeight += w
[_currentWeight, _cumulativeWeight]
// Calculate Nadaraya-Watson Regression
[currentWeight1, cumulativeWeight1] = kernel_regression1(src, h, h)
yhat1 = currentWeight1 / cumulativeWeight1
[currentWeight2, cumulativeWeight2] = kernel_regression1(src, h-lag, h-lag)
yhat2 = currentWeight2 / cumulativeWeight2
// Calculate Upper and Lower Bands
upperjeje = yhat1 + coef * ta.atr(lenjeje)
lowerjeje = yhat1 - coef * ta.atr(lenjeje)
// Plot Upper and Lower Bands
plot(upperjeje, color=color.rgb(0, 247, 8), title="Upper Band", linewidth=2)
plot(lowerjeje, color=color.rgb(255, 0, 0), title="Lower Band", linewidth=2)
// Calculate EMAs
emaLow = ta.ema(low, emaPeriod)
emaHigh = ta.ema(high, emaPeriod)
// Plot EMAs
plot(emaLow, color=color.rgb(33, 149, 243, 47), title="EMA (Low)", linewidth=2)
plot(emaHigh, color=color.rgb(255, 153, 0, 45), title="EMA (High)", linewidth=2)
// Long Entry Condition
longCondition = low < lowerjeje
strategy.entry("Long", strategy.long, when=longCondition)
// Stop Loss Condition
stopLossCondition = close[1] < strategy.position_avg_price and close[2] < strategy.position_avg_price and close[3] < strategy.position_avg_price
strategy.close("Long", when=stopLossCondition)
// Close and Reverse (Short) Condition
shortCondition = high > upperjeje
strategy.close("Long", when=shortCondition)
strategy.entry("Short", strategy.short, when=shortCondition)