
La estrategia determina la dirección de la tendencia de los precios mediante el cálculo de dos promedios móviles con diferentes parámetros y su comparación entre sí, lo que permite realizar operaciones de seguimiento de tendencias. Cuando la media móvil rápida rompe la media móvil lenta desde abajo, se considera una señal alcista; cuando la media móvil rápida rompe la media móvil lenta desde arriba hacia abajo, se considera una señal bajista.
Esta estrategia compara las medias móviles con dos conjuntos de diferentes configuraciones de parámetros, la primera configuración de las medias móviles por len1 y type1, y la segunda configuración de las medias móviles por len2 y type2. Donde len1 y len2 representan la longitud de ciclo de las dos medias móviles, respectivamente, y type1 y type2 representan el tipo de algoritmo de la media móvil.
Cuando el promedio móvil rápido de abajo rompe el promedio móvil lento para formar un tenedor de oro, se considera una señal de alza; cuando el promedio móvil rápido de arriba abajo rompe el promedio móvil lento para formar un tenedor de muerte, se considera una señal de baja.
Ejecutar operaciones de plus o de short según la dirección de la señal de cruce. Cuando se activa la señal de ventaja, si el parámetro needlong es verdadero, se realiza un plus de acuerdo con la cantidad o porcentaje de posición de default_qty_value_of_equity; cuando se activa la señal de baja, si el parámetro needshort es verdadero, se realiza un rescate de acuerdo con la cantidad o porcentaje de posición de default_qty_value_of_equity.
Los promedios móviles son retrasados y pueden perder el punto de inflexión Solución: reducir adecuadamente el ciclo de las medias móviles o usarlas en combinación con otros indicadores
No se aplica a mercados con alta volatilidad y frecuentes reveses Solución: aumentar las condiciones de filtración y evitar el comercio en situaciones de crisis
Hay cierto riesgo de falsas señales. Solución: añadir otros parámetros de filtración en combinación para mejorar la fiabilidad de la señal
Esta estrategia determina la tendencia de los precios mediante la comparación de la intersección de dos medias móviles y realiza las operaciones de avance y descenso correspondientes para capturar y seguir la tendencia. La estrategia tiene la ventaja de que las reglas de la señal son simples y claras, los parámetros se pueden ajustar, son muy aplicables y se pueden ajustar de manera óptima a una variedad de entornos de mercado.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's MAs Cross Tests v1.0", shorttitle = "MAs Cross tests 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)
needlong = input(true, "long")
needshort = input(true, "short")
len2 = input(15, defval = 15, minval = 2, maxval = 1000, title = "Fast MA length")
type2 = input(1, defval = 1, minval = 1, maxval = 7, title = "Fast MA Type")
src2 = input(close, defval = close, title = "Fast MA Source")
len1 = input(30, defval = 30, minval = 2, maxval = 1000, title = "Slow MA length")
type1 = input(1, defval = 1, minval = 1, maxval = 7, title = "Slow MA Type")
src1 = input(close, defval = close, title = "Slow MA Source")
col = input(false, defval = false, title = "Color of bar")
o = input(false, title = "1 SMA, 2 EMA, 3 VWMA, 4 DEMA, 5 TEMA, 6 KAMA, 7 Price Channel")
//DEMA 1
dema1 = 2 * ema(src1, len1) - ema(ema(close, len1), len1)
//TEMA 1
xEMA1 = ema(src1, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
tema1 = 3 * xEMA1 - 3 * xEMA2 + xEMA3
//KAMA 1
xvnoise = abs(src1 - src1[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src1 - src1[len1])
nnoise = sum(xvnoise, len1)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama1 = nz(kama1[1]) + nsmooth * (src1 - nz(kama1[1]))
//PriceChannel 1
lasthigh1 = highest(src1, len1)
lastlow1 = lowest(src1, len1)
center1 = (lasthigh1 + lastlow1) / 2
//DEMA 2
dema2 = 2 * ema(src2, len2) - ema(ema(close, len2), len2)
//TEMA 2
xEMA12 = ema(src2, len2)
xEMA22 = ema(xEMA12, len2)
xEMA32 = ema(xEMA22, len2)
tema2 = 3 * xEMA12 - 3 * xEMA22 + xEMA32
//KAMA 2
xvnoise2 = abs(src2 - src2[1])
nfastend2 = 0.20
nslowend2 = 0.05
nsignal2 = abs(src2 - src2[len2])
nnoise2 = sum(xvnoise2, len2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2)
kama2 = nz(kama2[1]) + nsmooth2 * (src2 - nz(kama2[1]))
//PriceChannel 2
lasthigh2 = highest(src2, len2)
lastlow2 = lowest(src2, len2)
center2 = (lasthigh2 + lastlow2) / 2
//MAs
ma1 = type1 == 1 ? sma(src1, len1) : type1 == 2 ? ema(src1, len1) : type1 == 3 ? vwma(src1, len1) : type1 == 4 ? dema1 : type1 == 5 ? tema1 : type1 == 6 ? kama1 : type1 == 7 ? center1 : 0
ma2 = type2 == 1 ? sma(src2, len2) : type2 == 2 ? ema(src2, len2) : type2 == 3 ? vwma(src2, len2) : type2 == 4 ? dema2 : type2 == 5 ? tema2 : type2 == 6 ? kama2 : type2 == 7 ? center2 : 0
plot(ma1, color = blue, linewidth = 3, transp = 0)
plot(ma2, color = red, linewidth = 3, transp = 0)
//Signals
trend = ma2 > ma1 ? 1 : ma2 < ma1 ? -1 : trend[1]
up = trend == 1 and ((close < open and close[1] < open[1]) or col == false)
dn = trend == -1 and ((close > open and close[1] > open[1]) or col == false)
if up
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
if dn
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)