TradingVMA Estratégia de negociação de média móvel variável

Autora:ChaoZhang, Data: 2024-02-21 11:47:43
Tags:

img

Resumo

A estratégia TradingVMA é uma estratégia quantitativa de negociação baseada em linhas de média móvel variáveis.

Estratégia lógica

O núcleo da estratégia TradingVMA é o cálculo de médias móveis de comprimento variável (Variable Moving Average, VMA).

Especificamente, a estratégia primeiro calcula uma série de quantidades intermediárias, como o indicador de movimento direcional de preços (PDM, MDIM), dados suavizados (PDMs, MDMs). Estes dados são eventualmente usados para obter a força do indicador (iS).

A estratégia TradingVMA ajusta dinamicamente o período da média móvel com base na força do indicador.

Por fim, a estratégia compara o preço atual com o VMA para gerar sinais de negociação.

Análise das vantagens

A estratégia TradingVMA tem as seguintes principais vantagens:

  1. O período de média móvel variável adapta-se às alterações do mercado para filtrar o ruído e sinais de tendência mais estáveis.

  2. Uma resposta mais rápida às alterações de preços melhora a capacidade de resposta A média móvel variável pode responder rapidamente às alterações de preços e capturar pontos de inversão de tendência.

  3. Redução da frequência de negociação Redução do excesso de negociação - Em comparação com os indicadores de período fixo, o TradingVMA pode reduzir as negociações desnecessárias.

  4. Flexibilidade dos parâmetros personalizáveis - A estratégia permite que os utilizadores selecionem parâmetros com base nas suas preferências para se adequarem aos diferentes ambientes de mercado.

Análise de riscos

A estratégia TradingVMA apresenta igualmente os seguintes riscos principais:

  1. Ausência de reversões rápidas Quando as tendências se invertem rapidamente, a média móvel em constante ajustamento pode atrasar a resposta.

  2. Viés de atraso Todas as estratégias de média móvel têm algum grau de viés de atraso, seja longo ou curto.

  3. Sinais errados TradingVMA pode gerar sinais longos/cortos incorretos em mercados laterais de intervalo.

  4. Difícil otimização de parâmetros Encontrar a combinação ideal de parâmetros pode ser um desafio.

Estes riscos podem ser controlados através de métodos como stop losses, ajuste de combinações de parâmetros, etc.

Orientações de otimização

A estratégia da TradingVMA pode também ser reforçada nos seguintes aspectos:

  1. Combinar Outros Indicadores Usando com outros indicadores de tendência, os indicadores de contra-tendência podem melhorar a qualidade do sinal.

  2. Optimização de parâmetros Descubra parâmetros ótimos através de backtesting e otimização.

  3. Regras de negociação adaptativas Empregar regras de entrada diferentes, parar perdas por regime de mercado.

  4. Sistemização Algoritmizar e sistematizar a estratégia para uma otimização mais fácil.

Conclusão

O TradingVMA é uma estratégia quantitativa adaptativa. Captura as tendências do mercado usando um indicador VMA especialmente projetado, com a vantagem de ser responsivo e filtrar o ruído. A estratégia pode ser atualizada de várias maneiras para um melhor desempenho.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 23:59:59
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/
// © laptevmaxim92

//@version=4
strategy("Variable Moving Average Strategy", overlay=true)

src=close
l =input(5, title="VMA Length") 
std=input(true, title="Show Trend Direction Colors")

utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2019, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

k = 1.0/l
pdm = 0.0
pdm := max((src - src[1]), 0)
mdm = 0.0
mdm := max((src[1] - src), 0)
pdmS = 0.0
pdmS := ((1 - k)*nz(pdmS[1]) + k*pdm)
mdmS = 0.0
mdmS := ((1 - k)*nz(mdmS[1]) + k*mdm)
s = pdmS + mdmS
pdi = pdmS/s
mdi = mdmS/s
pdiS = 0.0
pdiS := ((1 - k)*nz(pdiS[1]) + k*pdi)
mdiS = 0.0
mdiS := ((1 - k)*nz(mdiS[1]) + k*mdi)
d = abs(pdiS - mdiS)
s1 = pdiS + mdiS
iS = 0.0
iS := ((1 - k)*nz(iS[1]) + k*d/s1)
hhv = highest(iS, l) 
llv = lowest(iS, l) 
d1 = hhv - llv
vI = (iS - llv)/d1
vma = 0.0
vma := (1 - k*vI)*nz(vma[1]) + k*vI*src
vmaC=(vma > vma[1]) ? color.lime : (vma<vma[1]) ? color.red : (vma==vma[1]) ? color.yellow : na 
plot(vma, color=std?vmaC:color.white, linewidth=3, title="VMA")

longCondition = vma > vma[1]
if (longCondition)
    strategy.entry("BUY", strategy.long and use_date)

shortCondition = vma < vma[1]
if (shortCondition)
    strategy.entry("SELL", strategy.short and use_date)

if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)

Mais.