Estrategia de negociación de seguimiento inteligente de media móvil doble

El autor:¿ Qué pasa?, Fecha: 2024-02-18 15:58:08
Las etiquetas:

img

Resumen general

La estrategia de trading de seguimiento inteligente de promedios móviles es una estrategia de seguimiento de tendencias basada en promedios móviles e indicadores específicos. La estrategia utiliza dos promedios móviles con diferentes configuraciones de parámetros para construir un canal y combina el indicador OTT para establecer los límites superior e inferior del canal para realizar un seguimiento inteligente de las tendencias de precios.

Principio de la estrategia

La metodología central de esta estrategia consiste en construir un canal adaptativo utilizando dos promedios móviles y el indicador OTT, concretamente:

  1. Calcular la línea rápida MAvg utilizando como entrada la media móvil CLOSE y la media móvil personalizada, con una duración de 5 períodos;

  2. Calcular la posición de línea larga LongStop y la posición de línea corta ShortStop para el canal basándose en el MAvg y en el porcentaje preestablecido;

  3. Calcular la MT de pérdida de parada del canal en el indicador OTT y el precio del canal OTT basado en la dirección larga/corta;

  4. Generar señales comerciales cuando el precio se rompe a través de OTT.

El proceso anterior permite realizar un seguimiento en tiempo real de los cambios de tendencia de los precios, generando señales comerciales.

Ventajas estratégicas

Las ventajas de esta estrategia incluyen:

  1. La estructura de canal de la media móvil dual captura eficazmente las tendencias de los precios;
  2. el indicador OTT establece la pérdida de parada del canal para controlar los riesgos;
  3. La estructura del canal adaptativo responde rápidamente a los cambios de precios;
  4. Ajuste flexible de parámetros para diferentes productos y plazos.

Riesgos estratégicos

También hay algunos riesgos:

  1. Las medias móviles dobles pueden formar divergencias que dan lugar a señales falsas;
  2. Los parámetros de OTT pueden ser demasiado agresivos o conservadores si no se establecen correctamente.
  3. La estrategia se basa únicamente en indicadores técnicos sin tener en cuenta los elementos fundamentales.

Los riesgos pueden abordarse mediante la optimización de parámetros, la integración de otros indicadores y filtros de fundamentos.

Direcciones de optimización

La estrategia se puede optimizar en varios aspectos:

  1. Optimizar los parámetros de la media móvil para los productos y los plazos adecuados;
  2. Optimizar los parámetros de anchura del canal para equilibrar la sensibilidad y la estabilidad;
  3. Añadir filtros basados en el volumen de operaciones;
  4. Establezca filtros de dirección basados en los fundamentos.

Resumen de las actividades

En resumen, esta es una estrategia de seguimiento de tendencia basada en un canal de media móvil dual e indicador OTT. La idea central es construir un canal adaptativo y generar señales cuando los precios se rompen. La estrategia tiene méritos, pero también margen para mejoras. Con el ajuste de parámetros y la optimización lógica, tiene el potencial de convertirse en una estrategia de comercio cuantitativa eficiente que vale la pena implementar.


/*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")


Más.