
Esta estratégia combina o indicador aleatório RSI, a média móvel SMA e a média móvel ponderada WMA para encontrar um sinal de compra e venda. Ela julga simultaneamente a direção da tendência em 5 minutos e 1 hora. Em uma tendência estável, um sinal de negociação é gerado quando a linha rápida RSI atravessa a linha lenta acima ou abaixo.
A estratégia primeiro calcula a média móvel ponderada de 144 ciclos WMA e a média móvel simples de 5 ciclos SMA em dois períodos de tempo de 1 hora e 5 minutos, respectivamente. Só quando a SMA de 5 minutos está acima da WMA, ela é considerada um mercado de múltiplos. A estratégia então calcula o indicador de múltiplos espaços do RSI, bem como as correspondentes linhas K e D. Quando a linha K atravessa a linha D abaixo da área de sobrecompra, gera um sinal de venda; quando a linha K atravessa a linha D acima da área de sobrecompra, gera um sinal de compra.
Esta é uma estratégia de acompanhamento de tendências muito eficaz. Combina simultaneamente duas tendências de julgamento de quadros de tempo, reduzindo os sinais errados de forma muito eficaz. Além disso, ele combina filtros de vários indicadores, incluindo RSI, SMA e WMA, tornando os sinais mais confiáveis.
O maior risco desta estratégia é o erro de julgamento de tendências. Em momentos de mudança de tendência, as médias de curto e longo prazo podem subir ou descer simultaneamente, gerando um sinal errado. Além disso, em situações de turbulência, o RSI também pode produzir mais sinais de negociação confusos. No entanto, esses riscos podem ser mitigados por um ajuste adequado dos períodos SMA e WMA e dos parâmetros do RSI.
A estratégia pode ser melhorada em vários aspectos: 1) Teste diferentes comprimentos de SMA, WMA e RSI para encontrar a melhor combinação de parâmetros 2) Adicionar outros indicadores de julgamento, como MACD, linhas de Brin para verificar a confiabilidade do sinal 3) Otimizar a estratégia de stop loss, testar métodos como stop loss em proporção fixa, stop loss em ponto de deslizamento de saldo e stop loss de rastreamento 4) Adesão ao módulo de gestão de fundos, controle do tamanho do investimento individual e do risco geral 5) Aumentar os algoritmos de aprendizagem de máquina para encontrar os parâmetros de melhor desempenho através de um grande número de testes de retorno
A estratégia aproveita as vantagens das médias móveis e dos indicadores aleatórios para criar um sistema de acompanhamento de tendências mais confiável. Através da verificação de vários períodos de tempo e indicadores, ela consegue capturar com sucesso a direção das tendências de linha média e longa.
/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 00:00:00
period: 1h
basePeriod: 15m
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/
// © bufirolas
// Works well with a wide stop with 20 bars lookback
// for the SL level and a 2:1 reward ratio Take Profit .
// These parameters can be modified in the Inputs section of the strategy panel.
// "an entry signal it's a cross down or up on
// the stochastics. if you're in a downtrend
// on the hourly time frame you
// must also be in a downtrend on the five
// minute so the five period has to be below the 144
// as long as the five period is still trading below
// the 144 period on both the hourly and the five minutes
// we are looking for these short signals crosses down
// in the overbought region of the stochastic. Viceversa for longs"
//@version=4
strategy("Stoch + WMA + SMA strat", overlay=true)
//SL & TP Inputs
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=10, step=1, title="SL Expander")
i_TPExpander=input(defval=30, step=1, title="TP Expander")
i_reverse=input(false, title="Reverse Trades")
i_TStop =input(false, title="Use Trailing Stop")
//Strategy Inputs
src4 = input(close, title="RSI Source")
stochOS=input(defval=20, step=5, title="Stochastics Oversold Level")
stochOB=input(defval=80, step=5, title="Stochastics Overbought Level")
//Stoch rsi Calculations
smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
rsi1 = rsi(src4, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
h0 = hline(80, linestyle=hline.style_dotted)
h1 = hline(20, linestyle=hline.style_dotted)
//MA
wmalen=input(defval=144, title="WMA Length")
WMA = security(syminfo.tickerid, "60", wma(close, wmalen))
SMA = security(syminfo.tickerid, "60", sma(close, 5))
minWMA = wma(close, wmalen)
minSMA = sma(close, 5)
//Entry Logic
stobuy = crossover(k, d) and k < stochOS
stosell = crossunder(k, d) and k > stochOB
mabuy = minSMA > minWMA
daymabuy = SMA > WMA
//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
lTP=(strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0)))+((valuewhen(bought, atr(14), 0)/5)*i_TPExpander))
sTP=(strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price))-((valuewhen(bought, atr(14), 0)/5)*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
//TrailingStop
dif=(valuewhen(strategy.position_size>0 and strategy.position_size[1]<=0, high,0))
-strategy.position_avg_price
trailOffset = strategy.position_avg_price - LSL
var tstop = float(na)
if strategy.position_size > 0
tstop := high- trailOffset - dif
if tstop<tstop[1]
tstop:=tstop[1]
else
tstop := na
StrailOffset = SSL - strategy.position_avg_price
var Ststop = float(na)
Sdif=strategy.position_avg_price-(valuewhen(strategy.position_size<0
and strategy.position_size[1]>=0, low,0))
if strategy.position_size < 0
Ststop := low+ StrailOffset + Sdif
if Ststop>Ststop[1]
Ststop:=Ststop[1]
else
Ststop := na
//Stop Selector
SL= islong ? LSL : isshort ? SSL : na
if i_TStop
SL:= islong ? tstop : isshort ? Ststop : na
TP= islong ? lTP : isshort ? sTP : na
//Entries
if stobuy and mabuy and daymabuy
strategy.entry("long", long=not i_reverse?true:false)
if stosell and not mabuy and not daymabuy
strategy.entry("short", long=not i_reverse?false:true)
//Exit
if i_SL
strategy.exit("longexit", "long", stop=SL, limit=TP)
strategy.exit("shortexit", "short", stop=SL, limit=TP)
//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross)
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross)
plot(minWMA)
plot(minSMA, color=color.green)