Esta estrategia utiliza el promedio móvil adaptativo de Kaufman (KAMA) para determinar la dirección de la tendencia para capturar tendencias a mediano y largo plazo.
El indicador central de esta estrategia es la media móvil adaptativa de Kaufman (KAMA). KAMA ajusta dinámicamente su factor de ponderación en función de la magnitud de la volatilidad del mercado, mejorando así la sensibilidad de la curva.
La estrategia primero calcula el valor de KAMA. Luego determina el estado largo / corto de la línea KAMA: se genera una señal de compra cuando el precio de cierre cruza por encima de la línea KAMA, y se genera una señal de venta cuando el precio de cierre cruza por debajo de la línea KAMA. Las posiciones se abren en función de estas señales comerciales.
La mayor ventaja de esta estrategia es el uso del indicador KAMA para la determinación de tendencias. El indicador KAMA en sí tiene una capacidad de seguimiento de tendencias muy fuerte. Puede ajustar dinámicamente los parámetros para adaptarse a las condiciones del mercado, produciendo así señales comerciales más confiables en comparación con los promedios móviles simples y los promedios móviles exponenciales.
Además, la estrategia sólo utiliza el estado largo/corto de KAMA para determinar la dirección de la tendencia. No hay filtros adicionales, lo que simplifica la lógica de la estrategia y reduce el número de parámetros, reduciendo el riesgo de sobreajuste y mejorando la estabilidad y la adaptabilidad entre los mercados.
El principal riesgo de esta estrategia es que KAMA es un indicador rezagado, por lo que la tendencia del mercado ya puede haberse invertido en el momento en que se generan las señales de negociación, lo que conduce a riesgos de stop loss.
Para mitigar los riesgos, se pueden combinar otros indicadores para confirmar las señales de negociación, tales como indicadores de volatilidad, indicadores de volumen, etc. Los parámetros también se pueden ajustar para que la curva KAMA sea más suave.
La estrategia sigue teniendo un amplio margen de maniobra para su optimización, principalmente en los siguientes aspectos:
Combinar otros indicadores para el filtrado de señales, como el MACD, osciladores, etc., para mejorar la calidad de la señal.
Añadir estrategias de stop loss como movimiento de stop loss o paradas basadas en curva de equidad para controlar la pérdida de una sola operación.
Optimizar los parámetros para que KAMA sea más eficaz para detectar tendencias.
Añadir análisis de marcos de tiempo múltiples para determinar la dirección de la tendencia principal utilizando marcos de tiempo más largos.
Utilice métodos de aprendizaje automático para optimizar automáticamente los parámetros para adaptarse a los instrumentos.
La lógica general de esta estrategia es clara, utilizando el indicador KAMA para determinar la dirección de la tendencia. Tiene ventajas como una fuerte capacidad de seguimiento de tendencias, lógica simple y menos parámetros. Pero también tiene el riesgo de retrasarse en la identificación de inversiones de tendencia. La estrategia se puede mejorar de muchas maneras para que sea más efectiva y adaptable.
/*backtest start: 2022-12-06 00:00:00 end: 2023-12-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2019 //@version=3 strategy(title = "Noro's KAMA Strategy", shorttitle="KAMA str", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot") length = input(3, minval = 1) fast = input(2, minval = 1) slow = input(30, minval = 1) src = input(title = "Source", defval = close) type = input(defval = "Trend", options = ["Trend", "Crossing"], title = "Type") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //KAMA volatility = sum(abs(src-src[1]), length) change = abs(src[1]-src[length]) er = iff(volatility != 0, change/volatility, 0) fastSC = 2/(fast+1) slowSC = 2/(slow+1) sc = pow((er*(fastSC-slowSC))+slowSC, 2) bid = hl2 kama = 0.0 kama := nz(kama[1])+(sc*(bid-nz(kama[1]))) plot(kama, color = black, title = "KAMA", trackprice = false, style = line, linewidth = 3) //Signals up = false dn = false up := (type == "Crossing" and kama > kama[1]) or (type == "Trend" and close > kama) dn := (type == "Crossing" and kama < kama[1]) or (type == "Trend" and close < kama) //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))