Estratégia de Martingale de Momentum de Média Móvel Dupla


Data de criação: 2023-12-25 17:01:28 última modificação: 2023-12-25 17:01:28
cópia: 0 Cliques: 564
1
focar em
1623
Seguidores

Estratégia de Martingale de Momentum de Média Móvel Dupla

Visão geral

A estratégia combina três indicadores técnicos diferentes, gerando sinais de negociação com um sistema de dupla linha uniforme e usando a cor e a entidade da linha K como condições de filtragem adicionais, para construir uma estratégia de negociação de linha curta mais estável e eficaz.

Princípio da estratégia

Toda a estratégia usa uma combinação de bandas de Boolean e canais KC para identificar os estágios de compressão e expansão do mercado. Concretamente, quando a banda de Boolean está dentro do canal de KC é considerada como compressão e quando a banda de Boolean atravessa o canal de KC é considerada como expansão. A compressão representa a possibilidade de intensificação da oscilação e uma reversão de tendência, quando a regressão linear é usada como principal indicador de sinal de negociação.

Se o histograma de regressão linear for positivo (representando uma tendência ascendente) e a barra for a linha K vermelha (representando uma tendência negativa) e a entidade da linha K for maior que 13 da média das entidades das últimas 30 linhas K, o sinal combinado é maior; ao contrário, se o histograma de regressão linear for negativo, a barra é a linha K verde e a entidade também é maior, o sinal é vazio.

A estratégia fornece simultaneamente um contexto de compressão e expansão visível, auxiliando a julgar o estágio do mercado.

Análise de vantagens estratégicas

  • Combinação de vários indicadores para filtragem eficaz de falsos sinais
  • A compressão representa um possível ponto de inflexão para aumentar a eficácia da estratégia.
  • O filtro de entidade evita ser enganado por falsas brechas de pequenas ondas
  • É fácil obter melhores resultados através da otimização de parâmetros

Análise de risco estratégico

  • A regressão linear é propensa a emitir sinais errados e pode causar prejuízos
  • A banda de Brin e o canal KC julgaram que a compressão não estava funcionando adequadamente.
  • As condições de filtragem são muito rigorosas, podendo perder melhores pontos de entrada.
  • A retirada pode ser grande e requer um certo grau de tolerância.

Pode-se reduzir o risco por meio de ajustes nos parâmetros dos indicadores, otimização das condições de filtragem, etc.

Direção de otimização da estratégia

A estratégia pode ser melhorada em vários aspectos:

  1. Tente diferentes combinações e comprimentos de parâmetros para encontrar o melhor parâmetro
  2. Aumentar ou diminuir as condições de filtragem para encontrar o melhor nível de filtragem
  3. A busca automática de parâmetros ótimos usando métodos de aprendizagem de máquina
  4. Teste em variedades específicas, ajuste de parâmetros para variedades diferentes
  5. Aumentar as estratégias de stop loss para controlar as perdas individuais

Resumir

Esta estratégia integra vários indicadores, aumentando as condições de filtragem ao mesmo tempo em que identifica oportunidades de compressão, formando uma estratégia de linha curta mais robusta e eficiente. Melhores resultados podem ser obtidos com a otimização de parâmetros e condições de filtragem.

Código-fonte da estratégia
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2017

//@version=2
strategy(shorttitle = "Squeeze str 1.0", title="Noro's Squeeze Momentum Strategy v1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = true
usecolor = input(true, defval = true, title = "Use color of candle")
usebody = input(true, defval = true, title = "Use EMA Body")
needbg = input(false, defval = false, title = "Show trend background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)

bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray 

trend = val > 0 ? 1 : val < 0 ? -1 : 0

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//EMA Body
body = abs(close - open)
emabody = ema(body, 30) / 3

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = trend == 1 and (bar == -1 or usecolor == false) and (body > emabody or usebody == false)
dn = trend == -1 and (bar == 1 or usecolor == false) and (body > emabody or usebody == false)

if up
    strategy.entry("Long", strategy.long)

if dn
    strategy.entry("Short", strategy.short)