Esta estratégia projeta uma tendência simples seguindo o sistema de negociação baseado na linha de regressão linear e na linha média móvel. Ela vai longa quando a linha de regressão linear cruza acima da média móvel e vai curta quando a linha de regressão linear cruza abaixo. Enquanto isso, ela usa a inclinação da linha de regressão para filtrar alguns sinais de negociação e só entra quando a direção da tendência coincide.
Tendência na sequência da estratégia de negociação de regressão
Os principais componentes desta estratégia incluem:
A linha de regressão linear pode se encaixar bem na direção da tendência nos períodos recentes. Ela pode ajudar a julgar a direção geral da tendência. Quando o preço quebra a linha SMA, precisamos determinar se a direção da linha de regressão linear é consistente com essa quebra. Somente quando as duas direções são consistentes, um sinal de negociação é gerado. Isso pode filtrar algumas falhas.
Além disso, a estratégia também define um mecanismo de stop loss. Quando o preço atinge a linha de stop loss, feche as posições para parar a perda.
A estratégia apresenta as seguintes vantagens:
A estratégia apresenta também alguns riscos:
Em relação a estes riscos, podemos otimizar a partir dos seguintes aspectos:
Os principais aspectos para otimizar a estratégia incluem:
Esta estratégia integra a função de tendência após as médias móveis e a capacidade de julgamento da tendência da regressão linear, formando um sistema de negociação relativamente simples. Pode alcançar bons resultados em mercados de forte tendência. Ainda precisamos de um extenso backtesting e otimização nos parâmetros e regras, e controle de risco adequado. Então esta estratégia deve ser capaz de obter retornos de investimento estáveis.
/*backtest start: 2023-11-17 00:00:00 end: 2023-12-05 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Regression Trading Strategy", shorttitle="RTS", overlay=true) // Input parameters n = input(14, title="SMA Period") stop_loss_percentage = input(2, title="Stop Loss Percentage") take_profit_percentage = input(2, title="Take Profit Percentage") // Calculate the SMA sma = sma(close, n) // Linear regression function linear_regression(src, length) => sumX = 0.0 sumY = 0.0 sumXY = 0.0 sumX2 = 0.0 for i = 0 to length - 1 sumX := sumX + i sumY := sumY + src[i] sumXY := sumXY + i * src[i] sumX2 := sumX2 + i * i slope = (length * sumXY - sumX * sumY) / (length * sumX2 - sumX * sumX) intercept = (sumY - slope * sumX) / length line = slope * length + intercept line // Calculate the linear regression regression_line = linear_regression(close, n) // Plot the SMA and regression line plot(sma, title="SMA", color=color.blue) plot(regression_line, title="Regression Line", color=color.red) // Trading strategy conditions long_condition = crossover(close, sma) and close > regression_line short_condition = crossunder(close, sma) and close < regression_line // Exit conditions stop_loss_price = close * (1 - stop_loss_percentage / 100) take_profit_price = close * (1 + take_profit_percentage / 100) // Plot entry and exit points on the chart plotshape(series=long_condition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) plotshape(series=short_condition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) plotshape(series=crossunder(close, stop_loss_price), title="Stop Loss", location=location.abovebar, color=color.red, style=shape.labeldown, text="SL") plotshape(series=crossover(close, take_profit_price), title="Take Profit", location=location.belowbar, color=color.green, style=shape.labelup, text="TP") // Strategy orders strategy.entry("Long", strategy.long, when = long_condition) strategy.entry("Short", strategy.short, when = short_condition) strategy.exit("Exit", from_entry = "Long", when = crossover(close, stop_loss_price) or crossover(close, take_profit_price)) strategy.exit("Exit", from_entry = "Short", when = crossunder(close, stop_loss_price) or crossunder(close, take_profit_price))