Estrategia de contratrend de media móvil doble

El autor:¿ Qué pasa?, Fecha: 2024-01-08 11:01:11
Las etiquetas:

img

Resumen general

La estrategia de contratrend de media móvil doble está diseñada principalmente para el swing trading aplicado al mercado FOREX. Esta estrategia genera señales comerciales utilizando dos medias móviles de diferentes marcos de tiempo. Cuando el promedio móvil rápido cruza por encima del promedio móvil lento, se toma una posición corta para buscar la reversión; cuando el promedio móvil rápido cruza por debajo del promedio móvil lento, se toma una posición larga para buscar la reversión.

Principio de la estrategia

Esta estrategia utiliza promedios móviles de marcos de tiempo de 1 hora y 1 día. El promedio móvil de 1 hora refleja los cambios de precios de manera más sensible y puede servir como promedio móvil rápido; el promedio móvil de 1 día responde a los cambios de precios más lentamente y puede servir como promedio móvil lento. Cuando el promedio móvil rápido cruza por encima del promedio móvil lento, se considera que el mercado actual es alcista y se generará una señal corta; cuando el promedio móvil rápido cruza por debajo del promedio móvil lento, se considera que el mercado actual es bajista y se generará una señal larga.

El principio de entrar en largo o corto para buscar la reversión cuando los promedios móviles rápidos y lentos tienen cruces dorados o cruces muertos es que cuando los promedios móviles rápidos y lentos se cruzan, indica que el mercado puede haberse invertido, y los cruces de la línea rápida y la línea lenta son el momento de generar señales de reversión.

Esta estrategia también establece condiciones de selección de hora y fecha de negociación, y solo opera dentro del rango de fecha y horas de negociación establecidos para evitar negociación durante períodos inadecuados.

Análisis de ventajas

La estrategia de contratrend de media móvil doble tiene las siguientes ventajas:

  1. Las estrategias de reversión tienen la ventaja de un gran espacio de ganancias.

  2. El uso de combinaciones de promedios móviles dobles filtra las señales y evita señales falsas.

  3. El establecimiento de las horas de negociación y las condiciones de fecha evita los períodos de mercado inactivos y evita quedar atrapado.

  4. Las estrategias de inversión son adecuadas para el comercio a mediano plazo.

  5. El control máximo de la utilización es beneficioso para la gestión del capital, ya que el establecimiento de la tasa máxima de utilización puede controlar eficazmente el riesgo de la noche a la mañana y evitar grandes pérdidas de fondos.

Análisis de riesgos

La estrategia de contratrend de la media móvil doble también presenta los siguientes riesgos:

  1. Las señales de reversión pueden fallar y conducir a pérdidas. Las señales de reversión de precios no siempre son confiables. Existe un riesgo de pérdida cuando los precios continúan la tendencia sin reversión. Las pérdidas se pueden controlar estableciendo un stop loss.

  2. La desviación de la tendencia conduce a pérdidas. Cuando los dos promedios móviles se han separado significativamente antes de la inversión, puede haber un riesgo de pérdida.

  3. Si el horario de negociación es demasiado estricto, algunas oportunidades de negociación pueden perderse.

  4. Si no se detiene la pérdida inmediatamente después de la reversión, las pérdidas se expanden.

Direcciones de optimización

La estrategia de contratrend de la media móvil doble también puede optimizarse en los siguientes aspectos:

  1. Los indicadores como MACD, KDJ pueden ser probados en combinación con promedios móviles dobles para mejorar la precisión de la señal.

  2. Optimizar los parámetros del ciclo de media móvil para encontrar parámetros óptimos.

  3. Extensión o reducción de las horas de negociación para encontrar las horas de negociación óptimas.

  4. Se pueden añadir indicadores como ADX para juzgar la fuerza de la tendencia y evitar la inversión cuando no hay una tendencia obvia.

  5. Añadir modelos de aprendizaje automático para la verificación de señales. Los modelos pueden ser entrenados para juzgar la confiabilidad de las señales de inversión y filtrar algunas señales de baja calidad.

Resumen de las actividades

La estrategia de contratrend de media móvil doble es adecuada para el comercio a mediano plazo en el mercado de divisas. Utiliza cruces doradas y cruces muertas entre medias móviles rápidas y lentas para generar señales de reversión, haciendo operaciones de contrarreloj en puntos clave del mercado, lo que tiene la ventaja de un gran espacio de ganancia. Al mismo tiempo, también utiliza configuraciones como horas de negociación y extracción máxima para controlar los riesgos. Este es un sistema de reversión relativamente estable que puede generar altos rendimientos mientras controla los riesgos.


/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 00:00:00
period: 2h
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/
// © SoftKill21

//@version=4
strategy("gbpnzd 1h", overlay=true)

src = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above", type=input.resolution, defval="60")
len = input(28, title="Moving Average Length - LookBack Period")
//periodT3 = input(defval=7, title="Tilson T3 Period", minval=1) 
factorT3 = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0) 
atype = input(2,minval=1,maxval=8,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3")

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

res = useCurrentRes ? timeframe.period : resCustom
resCustom2 = input(title="plm", type=input.resolution, defval="D")
res2 = resCustom2
//hull ma definition
hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
//TEMA definition
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
tema = 3 * (ema1 - ema2) + ema3

//Tilson T3
factor = factorT3 *.10
gd(src, len, factor) => ema(src, len) * (1 + factor) - ema(ema(src, len), len) * factor 
t3(src, len, factor) => gd(gd(gd(src, len, factor), len, factor), len, factor) 
tilT3 = t3(src, len, factor) 
 

avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : atype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3

out = avg 

ema20 = security(syminfo.tickerid, res, out)



plot3 = security(syminfo.tickerid, res2, ema20)

plot33 = security(syminfo.tickerid, res, ema20)

plot(plot3,linewidth=2,color=color.red) 
plot(plot33,linewidth=2,color=color.white) 

// longC = crossover(close[2], plot3) and close[1] > close[2] and close > close[1]
// shortc = crossunder(close[2],plot3)  and close[1] < close[2] and close < close[1]

volumeMA=input(24)
ema_1 = ema(volume, volumeMA)

timeinrange(res, sess) => time(res, sess) != 0
//entrytime = timeinrange(timeframe.period, "0900-0915")

myspecifictradingtimes = input('0900-2300', type=input.session, title="My Defined Hours")


entrytime = time(timeframe.period, myspecifictradingtimes) != 0

longC = crossover(plot33,plot3)  and time_cond and entrytime
shortc = crossunder(plot33,plot3) and time_cond and entrytime

// exitlong = crossunder(plot33,plot3)
// exitshort = crossover(plot33,plot3)

distanta=input(1.0025)
exitshort = plot33/plot3 > distanta
exitlong  = plot3/plot33 > distanta

inverse = input(true)
exit = input(false)
if(inverse==false)

    strategy.entry("long",1,when=longC)
    strategy.entry("short",0,when=shortc)
if(inverse)
    strategy.entry("long",1,when=shortc)
    strategy.entry("short",0,when=longC)

if(exit)
    strategy.close("long",when=exitlong)
    strategy.close("short",when=exitshort)

// if(dayofweek==dayofweek.friday)
//     strategy.close_all()

// risk = input(25)
// strategy.risk.max_intraday_loss(risk, strategy.percent_of_equity)

Más.