
Strategi ini menggunakan kemerosotan linear dan indikator kadar turun naik untuk mengenal pasti keadaan pasaran yang berbeza, dan apabila syarat membeli atau menjual dipenuhi, strategi ini akan mewujudkan kedudukan overhead atau kosong yang sesuai. Pada masa yang sama, strategi ini membolehkan parameter dioptimumkan dan disesuaikan mengikut keadaan pasaran untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.
Strategi ini mengenal pasti keadaan pasaran melalui pulangan linear dan indikator kadar turun naik, dan menggunakan EMA sebagai indikator pengesahan, untuk membina strategi perdagangan yang kuat dan logik yang jelas. Kelebihan strategi ini adalah menggabungkan trend dan turun naik, sambil membenarkan pengoptimuman parameter, sesuai untuk persekitaran pasaran yang berbeza. Tetapi strategi ini juga mempunyai risiko seperti pilihan parameter, pasaran goyah dan peristiwa black swan, yang perlu terus dioptimumkan dan disempurnakan pada masa depan dalam aplikasi sebenar.
/*backtest
start: 2023-05-22 00:00:00
end: 2024-05-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tmalvao
//@version=5
strategy("Regime de Mercado com Regressão e Volatilidade Otimizado", overlay=true)
// Parâmetros para otimização
upperThreshold = input.float(1.0, title="Upper Threshold")
lowerThreshold = input.float(-1.0, title="Lower Threshold")
length = input.int(50, title="Length", minval=1)
// Indicadores de volatilidade
atrLength = input.int(14, title="ATR Length")
atrMult = input.float(2.0, title="ATR Multiplier")
atr = ta.atr(atrLength)
volatility = atr * atrMult
// Calculando a regressão linear usando função incorporada
intercept = ta.linreg(close, length, 0)
slope = ta.linreg(close, length, 1) - ta.linreg(close, length, 0)
// Sinal de compra e venda
buySignal = slope > upperThreshold and close > intercept + volatility
sellSignal = slope < lowerThreshold and close < intercept - volatility
// Entrando e saindo das posições
if (buySignal)
strategy.entry("Buy", strategy.long)
if (sellSignal)
strategy.entry("Sell", strategy.short)
// Indicadores adicionais para confirmação
emaFastLength = input.int(10, title="EMA Fast Length")
emaSlowLength = input.int(50, title="EMA Slow Length")
emaFast = ta.ema(close, emaFastLength)
emaSlow = ta.ema(close, emaSlowLength)
// Confirmando sinais com EMAs
if (buySignal and emaFast > emaSlow)
strategy.entry("Buy Confirmed", strategy.long)
if (sellSignal and emaFast < emaSlow)
strategy.entry("Sell Confirmed", strategy.short)
// Exibindo informações no gráfico
plot(slope, title="Slope", color=color.blue)
plot(intercept, title="Intercept", color=color.red)
plot(volatility, title="Volatility", color=color.green)
hline(upperThreshold, "Upper Threshold", color=color.green, linestyle=hline.style_dotted)
hline(lowerThreshold, "Lower Threshold", color=color.red, linestyle=hline.style_dotted)