
Esta estrategia se basa en la intersección de los precios con las medias móviles para generar señales de compra y venta. Ofrece varios tipos de medias móviles y un parámetro de tolerancia para filtrar falsas rupturas. La estrategia busca capturar los puntos de inflexión de la tendencia de los precios y realizar un seguimiento de la tendencia.
La estrategia se basa en el precio de cierre y calcula un promedio móvil de longitud N. Los típicos tipos de promedio móvil incluyen el promedio móvil simple (SMA), el promedio móvil indexado (EMA), el promedio móvil ponderado (WMA), etc. Luego se establece un nivel de tolerancia, por ejemplo, el 5%, y se calcula el promedio móvil en trayectoria (en trayectoria 1.05 veces mayor que el promedio móvil) y el promedio móvil en trayectoria (en trayectoria 0.95 veces mayor que el promedio móvil). Cuando el precio de cierre está en trayectoria, se genera una señal de compra; cuando el precio de cierre está en trayectoria, se genera una señal de venta.
La estrategia en general es una estrategia de seguimiento de tendencias más típica. Utiliza la relación de los precios con las medias móviles para juzgar las tendencias y ofrece cierta flexibilidad. Con la optimización de los parámetros y el filtrado de la señal adecuada, puede ser una estrategia cuantitativa de buen efecto.
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
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/
// © RafaelPiccolo
//@version=4
strategy("Price X MA Cross", overlay=true)
typ = input("HMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len = input(100, minval=1, title="Length")
src = input(close, "Source", type=input.source)
tol = input(0, minval=0, title="Tolerance (%)", type=input.float)
shortOnly = input(false, "Short only")
tema(src, len)=>
ema1 = ema(src, len)
ema2 = ema(ema1, len)
ema3 = ema(ema2, len)
return = 3 * (ema1 - ema2) + ema3
getMAPoint(type, len, src)=>
return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)
ma = getMAPoint(typ, len, src)
upperTol = ma * (1 + tol/100)
lowerTol = ma * (1 - tol/100)
longCondition = crossover(close, upperTol)
shortCondition = crossunder(close, lowerTol)
if (shortCondition)
strategy.entry("Short", strategy.short)
if (longCondition)
if (shortOnly)
strategy.close("Short")
else
strategy.entry("Long", strategy.long)
plot(ma, "Moving Average", close > ma ? color.green : color.red, linewidth = 2)
t1 = plot(tol > 0 ? upperTol : na, transp = 70)
t2 = plot(tol > 0 ? lowerTol : na, transp = 70)
fill(t1, t2, color = tol > 0 ? color.blue : na)