Estratégia de filtro de tendência de média móvel dupla

Autora:ChaoZhang, Data: 2023-10-25 15:00:20
Tags:

img

Esta estratégia gera sinais de negociação baseados em Bandas de Bollinger e médias móveis duplas, com filtragem de tendências para atingir uma alta taxa de ganho e uma boa relação lucro-perda.

Estratégia lógica

  1. Use as faixas superior, média e inferior da banda de Bollinger para geração de sinal longo / curto.

  2. Utilize médias móveis de médio prazo de 20 períodos e médias móveis de longo prazo de 60 períodos para determinar a direção da tendência.

  3. Ajuste dinamicamente a posição de stop loss com base na largura da banda de Bollinger. Quando a largura for superior a 0,5%, stop loss na banda inferior. Quando for inferior a 0,5%, reduza a stop loss para metade do intervalo de banda inferior.

  4. Condições de entrada: quebra da faixa inferior como sinal de compra durante a tendência de alta. quebra da faixa superior como sinal de venda durante a tendência de baixa.

  5. Condições de saída: obter lucro ao tocar a faixa superior ou a MA curta em longs.

  6. Condições de stop loss: Stop out quando o preço ultrapassa o intervalo dinâmico da faixa inferior nos longs. Stop out quando o preço ultrapassa o intervalo dinâmico da faixa superior nos shorts.

Vantagens

  1. A utilização de MAs duplas para determinar a tendência ajuda a filtrar o ruído dos mercados não tendência ou de gama.

  2. A faixa média BB fornece suporte/resistência, as faixas superior/inferior servem como níveis dinâmicos de stop loss para controlar o risco.

  3. Ajustar o intervalo de stop loss com base na largura BB reduz a possibilidade de ser parado, mantendo o stop razoável.

  4. Negociar na direcção da tendência leva a uma maior taxa de ganhos.

Riscos

  1. Os MAs duplos podem gerar falsas rupturas com frequência, perdendo pontos de virada da tendência.

  2. Os BBs podem ser atacados em mercados agitados e não em tendência, podem reduzir a frequência de negociação.

  3. Possui um intervalo de stop loss mais amplo.

  4. Incapaz de capitalizar de forma eficaz em retrações de curto prazo, pode encurtar o período de detenção.

Oportunidades de melhoria

  1. Otimizar os períodos de autorização de importação para encontrar a melhor adaptação às condições de mercado.

  2. Otimizar o parâmetro do multiplicador BB para equilibrar a perda de parada.

  3. Adicionar outros indicadores de confirmação multifatorial para melhorar a qualidade do sinal.

  4. Incorporar volume/momento para confirmar a tendência, evitar divergências.

  5. Optimização da gestão do dinheiro, por exemplo, stop loss fracionário fixo e fixo para controlar o risco de negociação única.

  6. Gestão de choques de preços, por exemplo, grandes diferenças durante a noite.

Resumo

Esta é uma estratégia robusta em geral usando MAs duplos para a direção da tendência e BBs para suporte / resistência e paradas dinâmicas. Existem limitações como sinais de tendência falsos e paradas muito próximas. Outras otimizações podem ser feitas em todo o sistema MA, estratégia de stop loss, gerenciamento de dinheiro etc. para aumentar a robustez em várias condições de mercado.


/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="yuthavithi BB Scalper 2 strategy", overlay=true)

len = input(20, minval=1, title="Length")
multiplier = input(4, minval=1, title="multiplier")
trendTimeFrame = input(60, minval=1, title="Trend Time Frame")
useTrendFilter = input(true, type=bool, title = "Use Trend Filter")

src = input(close, title="Source")
out = sma(src, len)
//plot(out, title="SMA", color=blue)

stdOut = stdev(close, len)
bbUpper = out + stdOut * multiplier
bbLower = out - stdOut * multiplier
bbUpper2 = out + stdOut * (multiplier / 2)
bbLower2 = out - stdOut * (multiplier / 2)
bbUpperX2 = out + stdOut * multiplier * 2
bbLowerX2 = out - stdOut * multiplier * 2
bbWidth = (bbUpper - bbLower) / out


closeLongTerm = request.security(syminfo.tickerid, tostring(trendTimeFrame), close)
smaLongTerm = request.security(syminfo.tickerid, tostring(trendTimeFrame), sma(close,20))

//plot(smaLongTerm, color=red)

trendUp = useTrendFilter ? (closeLongTerm > smaLongTerm) : true
trendDown = useTrendFilter? (closeLongTerm < smaLongTerm) : true

bearish = ((cross(close,bbUpper2) == 1) or (cross(close,out) == 1)) and (close[1] > close) and trendDown
bullish = ((cross(close,bbLower2) == 1) or (cross(close,out) == 1)) and (close[1] < close) and trendUp


closeBuy = (high[1] > bbUpper[1]) and (close < bbUpper) and (close < open) and trendUp 
closeSell = (((low[1] < bbLower[1]) and (close > bbLower)) or ((low[2] < bbLower[2]) and (close[1] > bbLower[1]))) and (close > open) and trendDown


cutLossBuy = iff(bbWidth > 0.005, (low < bbLower) and (low[1] > bbLower[1]) and trendUp, (low < bbLowerX2) and (low[1] > bbLowerX2[1]) and trendUp)
cutLossSell = iff(bbWidth > 0.005, (high > bbUpper) and (high[1] < bbUpper[1]) and trendDown, (high > bbUpperX2) and (high[1] < bbUpperX2[1]) and trendDown)


if (bullish)
    strategy.entry("Buy", strategy.long, comment="Buy")

if (bearish)
    strategy.entry("Sell", strategy.short, comment="Sell")
    

strategy.close("Buy", closeBuy or cutLossBuy)
   
strategy.close("Sell", closeSell or cutLossSell)


Mais.