
A estratégia utiliza principalmente a dupla média móvel como um sinal de compra e venda, ganhando quando a tendência se inverte. Fazer mais quando atravessado a média móvel de curto prazo acima da média móvel de curto prazo, e fechar mão quando atravessado a média móvel de longo prazo abaixo da média móvel de curto prazo, pertence a estratégia de tracking stop loss comum.
A estratégia começa com a criação de duas médias móveis, uma média de 20 dias de curto prazo e uma média de 60 dias de longo prazo. A entrada é determinada pelo cruzamento das médias de curto prazo e de longo prazo.
Especificamente, quando a média curta é atravessada pela média de longo prazo, significa que a tendência atual é ascendente, fazendo mais; quando a média curta é atravessada pela média de longo prazo, significa que a tendência atual é descendente, fazendo espaço.
A forma de trailing stop é trailing stop, ou seja, um trailing stop baseado no preço mais alto e no preço mais baixo, que permite travar o máximo de lucro.
A lógica principal do código é a seguinte:
A estratégia tem as seguintes vantagens:
A estratégia também apresenta alguns riscos:
Otimizar para o risco pode ser feito da seguinte forma:
A estratégia pode ser melhorada em alguns aspectos:
Adicionar filtragem de outros indicadores, formando um mecanismo de entrada de múltiplos requisitos, evitando falsas rupturas. Por exemplo, pode ser adicionado um indicador de determinação RSI.
Otimizar os parâmetros de ciclo da média móvel para encontrar a melhor combinação de parâmetros. Os diferentes parâmetros de ciclo podem ser testados por meio de passagens a passo.
Optimizar o limite de perda. O limite de perda ideal pode ser calculado a partir de dados de retrospectiva. O limite de perda dinâmico também pode ser definido.
Configuração de mecanismos de reentrada. Após a saída de stop loss, é possível configurar uma lógica de reentrada razoável, reduzindo o número de transações.
Combinando indicadores de tendência, suspender a negociação quando a tendência não é visível, para evitar negociações inválidas.
Adesão ao mecanismo de gerenciamento de posições, ajustando posições e limites de parada de acordo com a dinâmica do mercado.
A estratégia de inversão de média móvel dupla é simples e prática em geral, e é um método comum e eficaz para determinar os pontos de reversão de tendência através de duas linhas de equilíbrio. Mas há um certo risco, que requer testes de otimização de configuração de parâmetros e limites de parada, e combinação com outros indicadores de filtragem para maximizar a eficácia da estratégia. Se for cuidadosamente otimizada e com um rigoroso gerenciamento de risco, a estratégia pode ser uma estratégia de negociação de bandos de onda com ganhos estáveis.
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
needdb = input(true, defval = true, title = "Double Body")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close
//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2
//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2
//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]
//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Body
body = abs(close - open)
smabody = needdb == false ? ema(body, 30) : ema(body, 30) * 2
candle = high - low
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0
if up7 == 1 or up8 == 1
strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)
if dn7 == 1 or dn8 == 1
strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)