Tendencia siguiendo la estrategia basada en el cruce de TEMA de varios plazos

El autor:¿ Qué pasa?, Fecha: 2023-12-25 14:20:36
Las etiquetas:

img

Resumen general

Esta estrategia identifica la dirección de la tendencia del mercado basada en el cruce del indicador TEMA en múltiples marcos de tiempo, y utiliza el cruce de TEMA en marcos de tiempo más bajos para encontrar puntos de entrada y salida específicos.

Estrategia lógica

La estrategia emplea dos indicadores TEMA, uno con línea rápida y lenta basada en 5 y 15 períodos, el otro basado en un marco de tiempo más alto definido por el usuario, como diario o semanal.

Cuando la línea rápida TEMA del marco de tiempo superior cruza por encima de la línea lenta, se puede activar una entrada larga cuando la línea rápida TEMA del marco de tiempo inferior cruza por encima de la línea lenta; Se da una señal de salida cuando la línea rápida cruza por debajo de la línea lenta.

Ventajas

  1. Basado en el cruce TEMA, evita las interferencias acústicas
  2. Diseño de marcos de tiempo múltiples combina ciclos altos y bajos, mejorando la precisión
  3. Configuración flexible sólo para largo, sólo para corto o para ambas direcciones
  4. Reglas sencillas, fáciles de entender y aplicar

Análisis de riesgos

  1. TEMA tiene un efecto de retraso, puede perder el cambio de precio inicial
  2. Las correcciones a corto plazo en las operaciones con un TF más alto pueden provocar inversiones innecesarias.
  3. El ajuste incorrecto de la TF superior no refleja la tendencia real
  4. La configuración incorrecta de la TF inferior aumenta el riesgo de pérdida de detención

Soluciones de riesgos:

  1. Parámetros TEMA de ajuste fino para el balance
  2. Relajar el margen de stop loss moderadamente
  3. Optimiza las configuraciones de ciclo alto y bajo
  4. Robustez de los parámetros de ensayo en todos los productos

Oportunidades de mejora

  1. Ajuste dinámico de los parámetros TEMA para optimizar la sensibilidad
  2. Añadir filtro de impulso para evitar tendencias perdidas
  3. Adición del índice de volatilidad para el dimensionamiento dinámico de las pérdidas de detención
  4. Aprendizaje automático para la optimización de parámetros

Resumen de las actividades

La estrategia en general es simple y clara en lógica, identificando el sesgo de tendencia a través del cruce de TEMA en múltiples marcos de tiempo, y confiando en un cruce adicional en entradas de tiempo inferiores a TF. Tiene ciertos méritos y también tiene cierto margen de mejora. En general, proporciona una referencia valiosa para las prácticas de comercio de cantidades.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © Seltzer_

//@version=4
strategy(title="TEMA Cross +HTF Backtest", shorttitle="TEMA_X_+HTF_BT", overlay=true)

orderType = input("Longs+Shorts",title="What type of Orders", options=["Longs+Shorts","LongsOnly","ShortsOnly"])
isLong   = (orderType != "ShortsOnly")
isShort  = (orderType != "LongsOnly")

// Backtest Section {

// Backtest inputs
FromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
FromDay = input(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input(defval=2020, title="From Year", minval=2010)
ToMonth = input(defval=1, title="To Month", minval=1, maxval=12)
ToDay = input(defval=1, title="To Day", minval=1, maxval=31)
ToYear = input(defval=9999, title="To Year", minval=2017)

// Define backtest timewindow
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() => true

// }

//TEMA Section {

//LTF Section
xLength = input(20, minval=1, title="Fast Length")
xPrice = close
xEMA1 = ema(xPrice, xLength)
xEMA2 = ema(xEMA1, xLength)
xEMA3 = ema(xEMA2, xLength)
xnRes = (3 * xEMA1) - (3 * xEMA2) + xEMA3
xnResP = plot(xnRes, color=color.green, linewidth=2, title="TEMA1")

yLength = input(60, minval=1, title="Slow Length")
yPrice = close
yEMA1 = ema(yPrice, yLength)
yEMA2 = ema(yEMA1, yLength)
yEMA3 = ema(yEMA2, yLength)
ynRes = (3 * yEMA1) - (3 * yEMA2) + yEMA3
ynResP = plot(ynRes, color=color.red, linewidth=2, title="TEMA2")

fill(xnResP, ynResP, color=xnRes > ynRes ? color.green : color.red, transp=65, editable=true)

//HTF Section
HTFres = input(defval="D", type=input.resolution, title="HTF Resolution")

HTFxLength = input(5, minval=1, title="HTF Fast Length")
HTFxPrice = close
HTFxEMA1 = security(syminfo.tickerid, HTFres, ema(HTFxPrice, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA2 = security(syminfo.tickerid, HTFres, ema(HTFxEMA1, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxEMA3 = security(syminfo.tickerid, HTFres, ema(HTFxEMA2, HTFxLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFxnRes = (3 * HTFxEMA1) - (3 * HTFxEMA2) + HTFxEMA3
HTFxnResP = plot(HTFxnRes, color=color.yellow, linewidth=1,transp=30, title="TEMA1")

HTFyLength = input(15, minval=1, title="HTF Slow Length")
HTFyPrice = close
HTFyEMA1 = security(syminfo.tickerid, HTFres, ema(HTFyPrice, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA2 = security(syminfo.tickerid, HTFres, ema(HTFyEMA1, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFyEMA3 = security(syminfo.tickerid, HTFres, ema(HTFyEMA2, HTFyLength), barmerge.gaps_off, barmerge.lookahead_on)
HTFynRes = (3 * HTFyEMA1) - (3 * HTFyEMA2) + HTFyEMA3
HTFynResP = plot(HTFynRes, color=color.purple, linewidth=1, transp=30, title="TEMA2")

fill(HTFxnResP, HTFynResP, color=HTFxnRes > HTFynRes ? color.yellow : color.purple, transp=90, editable=true)
bgcolor(HTFxnRes > HTFynRes ? color.yellow : na, transp=90, editable=true)
bgcolor(HTFxnRes < HTFynRes ? color.purple : na, transp=90, editable=true)

// }

// Buy and Sell Triggers
LongEntryAlert = xnRes > ynRes and HTFxnRes > HTFynRes and window()
LongCloseAlert = xnRes < ynRes and window()
ShortEntryAlert = xnRes < ynRes and HTFxnRes < HTFynRes and window()
ShortCloseAlert = xnRes > ynRes

// Entry & Exit signals
if isLong
    strategy.entry("Long", strategy.long, when = LongEntryAlert)
    strategy.close("Long", when = LongCloseAlert)

if isShort
    strategy.entry("Short", strategy.short, when = ShortEntryAlert)
    strategy.close("Short", when = ShortCloseAlert)

Más.