Estratégia de negociação de rastreamento inteligente baseada em média móvel dupla


Data de criação: 2024-02-18 15:58:08 última modificação: 2024-02-18 15:58:08
cópia: 2 Cliques: 505
1
focar em
1617
Seguidores

Estratégia de negociação de rastreamento inteligente baseada em média móvel dupla

Visão geral

A estratégia de negociação de rastreamento inteligente de dupla linha de equilíbrio é uma estratégia de rastreamento de tendências baseada na linha de equilíbrio e em um indicador específico. A estratégia utiliza um canal de construção de linha de equilíbrio com duas configurações diferentes de parâmetros e, em combinação com o indicador OTT, define o limite superior e inferior do canal, permitindo o rastreamento inteligente da tendência de preços.

Princípio da estratégia

A estratégia utiliza principalmente duas médias móveis e indicadores OTT para construir um canal de adaptação. Os princípios são os seguintes:

  1. Calcule a linha rápida MAvg, com o preço de fechamento CLOSE e a linha média personalizada como entrada, com um comprimento de 5;

  2. Baseado em MAvg e percentual de configuração, calcula-se o limite inferior do canal para a posição da linha longa Stop e a posição da linha curta Stop;

  3. Calcular o MT de stop loss móvel do canal no indicador OTT, calculado o preço do canal OTT de acordo com o estado de vazio;

  4. Quando o preço ultrapassa o OTT, gera um sinal de transação.

O processo de construção do canal de adaptação acima permite que a estratégia acompanhe a tendência de mudança de preço em tempo real e, em seguida, gere um sinal de negociação.

Vantagens estratégicas

A estratégia tem as seguintes vantagens:

  1. Uma estrutura de canais duplos e uniformes que permite capturar de forma eficaz as tendências dos preços;
  2. O indicador OTT define o canal de perda móvel e controla o risco;
  3. A estrutura do canal é adaptável e pode responder rapidamente às mudanças de preços;
  4. A configuração dos parâmetros da estratégia é flexível e pode ser otimizada para diferentes variedades e ciclos.

Risco estratégico

A estratégia também apresenta alguns riscos:

  1. A dupla linha de equilíbrio pode se desviar facilmente e gerar sinais errados.
  2. A configuração inadequada dos parâmetros OTT pode ser excessivamente radical ou conservadora, afetando o desempenho da estratégia;
  3. A estratégia baseia-se apenas em indicadores técnicos e não em fatores fundamentais.

Os riscos acima mencionados podem ser melhorados e otimizados por meio de otimização de parâmetros, em combinação com outros indicadores ou sinais de filtragem básicos.

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

A estratégia pode ser otimizada em várias direções:

  1. Optimizar os parâmetros da linha média, selecionando a combinação de parâmetros apropriada para a variedade e o período;
  2. Otimizar os parâmetros de banda larga do canal, equilibrando a sensibilidade e a estabilidade do rastreamento;
  3. Filtragem de sinais com base no volume de transações;
  4. O filtro de direção do negócio é definido em função do cenário.

Resumir

A estratégia é, em geral, uma estratégia de acompanhamento de tendências baseada em canais de dupla linha e indicadores OTT, com a ideia central de construir canais de adaptação e gerar sinais de negociação com uma ruptura. A estratégia tem certas vantagens, mas também há espaço para melhorias possíveis.

Código-fonte da estratégia
/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="BugRA_Trade_Strategy", shorttitle="BugRA_Trade_Strategy", overlay=true)

// Kullanıcı Girdileri
length = input(5, title="Period", minval=1)
percent = input(1, title="Sihirli Yüzde", type=input.float, step=0.1, minval=0)
mav = input(title="Hareketli Ortalama Türü", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
wt_n1 = input(10, title="Kanal Periyodu")
wt_n2 = input(21, title="Averaj Uzunluğu")
src = close

// Tarih Aralığı Girdileri
startDate = input(20200101, title="Başlangıç Tarihi (YYYYMMDD)")
endDate = input(20201231, title="Bitiş Tarihi (YYYYMMDD)")

// Tarih Filtresi Fonksiyonu
isDateInRange() => true

// Özel Fonksiyonlar
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = sum(vud1, length)
    vDD = sum(vdd1, length)
    vCMO = (vUD - vDD) / (vUD + vDD)
    varResult = 0.0
    varResult := nz(valpha * abs(vCMO) * src + (1 - valpha * abs(vCMO)) * nz(varResult[1]))
    varResult

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    wwma = 0.0
    wwma := wwalpha * src + (1 - wwalpha) * nz(wwma[1])
    wwma

Zlema_Func(src, length) =>
    zxLag = floor(length / 2)
    zxEMAData = src + (src - src[zxLag])
    zlema = ema(zxEMAData, length)
    zlema

Tsf_Func(src, length) =>
    lrc = linreg(src, length, 0)
    lrs = lrc - linreg(src, length, 1)
    tsf = lrc + lrs
    tsf

getMA(src, length) =>
    ma = mav == "SMA" ? sma(src, length) :
         mav == "EMA" ? ema(src, length) :
         mav == "WMA" ? wma(src, length) :
         mav == "TMA" ? sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) :
         mav == "VAR" ? Var_Func(src, length) :
         mav == "WWMA" ? Wwma_Func(src, length) :
         mav == "ZLEMA" ? Zlema_Func(src, length) :
         mav == "TSF" ? Tsf_Func(src, length) : na

// Strateji Hesaplamaları
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT = MAvg > MT ? MT*(200+percent)/200 : MT*(200-percent)/200

plot(OTT, title="BugRA", color=color.rgb(251, 126, 9))

// Alım ve Satım Koşulları
longCondition = crossover(src, OTT) and isDateInRange()
shortCondition = crossunder(src, OTT) and isDateInRange()

// Strateji Giriş ve Çıkış Emirleri
if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.close("Long")