Estrategia cuantitativa de seguimiento de tendencias basada en el impulso


Fecha de creación: 2024-01-19 15:29:35 Última modificación: 2024-01-19 15:29:35
Copiar: 2 Número de Visitas: 618
1
Seguir
1617
Seguidores

Estrategia cuantitativa de seguimiento de tendencias basada en el impulso

Descripción general

Esta estrategia se basa en la línea de K de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la línea de la

Principio de estrategia

  1. Calcula el precio de cierre de la línea K de la tormenta en diferentes niveles de ciclo. Esta es la base para el cálculo de la energía dinámica posterior.

  2. Se calcula la fluctuación de los precios de apertura y cierre de los diferentes períodos históricos en la línea lunar y la línea solar, respectivamente. Esto refleja la intensidad de la dinámica de los precios actuales de las acciones en relación con los precios históricos.

  3. Se toma el promedio de la caída de la energía dinámica de la línea lunar y la línea solar, se filtra parte del ruido y se obtiene un indicador de energía dinámica de la línea lunar y la línea solar estable.

  4. De acuerdo con el movimiento de la energía dinámica promedio, se puede calcular la fuerza de apoyo del mercado que refleja el precio actual de la acción, es decir, el precio que elimina la influencia de la fluctuación del mercado. Este precio puede verse como el umbral de la energía dinámica del precio real de la acción actual.

  5. Cuando el precio de cierre está por encima del umbral de energía dinámica, se realiza una acumulación mensual. Cuando el precio de cierre está por debajo del umbral de energía dinámica, se detiene la pérdida de la posición.

Análisis de las ventajas

La mayor ventaja de esta estrategia es que no se trata simplemente de seguir el precio de las acciones, sino de construir posiciones y detener pérdidas basadas en el cálculo de la fuerza de soporte real basado en la dinámica detrás de las acciones. Esto puede filtrar eficazmente el ruido de las situaciones de volatilidad y bloquear las oportunidades de una subida estable.

Además, los datos en los que se basa la estrategia provienen todos de la línea K de Axios de la playa. Esta línea K especial por sí misma puede reducir el problema de la dependencia excesiva de los ciclos de vinculación. Por lo tanto, la estrategia tiene una mejor estabilidad que otras estrategias de línea K.

Análisis de riesgos

El mayor riesgo de esta estrategia es que el cálculo de la energía dinámica se basa en los precios históricos. Si los fundamentos de la compañía y la situación cambian significativamente, la representatividad de los precios históricos disminuye, lo que lleva a un sesgo en la toma de posiciones y el juicio de stop loss.

Además, la estrategia utiliza ciclos mensuales y diarios. Esto significa que la estrategia no es muy realista y no puede reaccionar rápidamente a los cambios bruscos en la situación. Esto conlleva un riesgo de pérdidas si la situación cambia.

Para reducir estos riesgos, se puede considerar la introducción de datos de mayor frecuencia, así como la retroalimentación en tiempo real de los fundamentos de la empresa. O en combinación con otras señales de transacción más subjetivas para su aceptación y optimización.

Dirección de optimización

La estrategia puede seguir optimizándose en los siguientes aspectos:

  1. La propia línea K de la Bahia también puede optimizarse aún más, como ajustar la distribución de pesos, etc.

  2. Aumentar los datos de diferentes períodos, construir un mecanismo de calificación de energía dinámica de promedio de índice, mejorar la estabilidad.

  3. La introducción de datos de mayor frecuencia, como las líneas de minutos por día, para mejorar la actualidad de las estrategias.

  4. Combinando información como anuncios de resultados, rumores de reorganización, etc., CoA calcula la retroalimentación de los fundamentos de la compañía.

  5. Se puede considerar la creación de un almacén a base mensual, aumentando la cantidad de días o semanas de suspensión y el mecanismo de acumulación de almacén.

Resumir

Esta estrategia es muy estable en general y controla el riesgo de manera efectiva mediante el seguimiento de la dinámica. Su mayor ventaja es que utiliza la dinámica detrás del precio de las acciones para determinar la realidad, en lugar de seguir simplemente el precio de las acciones.

Código Fuente de la Estrategia
/*backtest
start: 2023-01-12 00:00:00
end: 2024-01-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FrancoPassuello

//@version=5
strategy("Heiken Ashi ADM", overlay=true)
haClose = (open + high + low + close) / 4
// prevHaOpen = line.new(na, na, na, na, width = 1)
haOpen = (open[1] + close[1]) / 2
// line.set_xy1(prevHaOpen, bar_index[1], nz(haOpen[1]))
// line.set_xy2(prevHaOpen, bar_index, haClose[1])


[monopen, _1monopen, _2monopen, _3monopen, _4monopen, _5monopen, _6monopen] = request.security(syminfo.tickerid, "M", [haOpen, haOpen[1], haOpen[2], haOpen[3], haOpen[4], haOpen[5], haOpen[6]] , barmerge.gaps_off, barmerge.lookahead_on)
[monclose, _1monclose, _3monclose, _6monclose] = request.security(syminfo.tickerid, "M", [haClose, haClose[1], haClose[3], haClose[6]] , barmerge.gaps_off, barmerge.lookahead_on)
[dayclose1, _21dayclose, _63dayclose, _126dayclose, dayclose] = request.security(syminfo.tickerid, "1D", [haClose[1], haClose[21], haClose[63], haClose[126], haClose], barmerge.gaps_off, barmerge.lookahead_on)
[dayopen1, _21dayopen, _63dayopen, _126dayopen] = request.security(syminfo.tickerid, "1D", [haOpen[1], haOpen[21], haOpen[63], haOpen[126]], barmerge.gaps_off, barmerge.lookahead_on)


get_rate_of_return(price1, price2) =>
    return_ = (price1/price2 -1)*100
    return_

m0 = get_rate_of_return(monclose, monopen)
m1 = get_rate_of_return(_1monclose, _1monopen)
m2 = get_rate_of_return(monclose, _2monopen)
m3 = get_rate_of_return(_1monclose, _3monopen)
m4 = get_rate_of_return(monclose, _4monopen)
m5 = get_rate_of_return(monclose, _5monopen)
m6 = get_rate_of_return(_1monclose, _6monopen)
MS = (m1 + m3 + m6)/100
CS = (m0 + m2 + m5)/100

d1 = get_rate_of_return(dayclose1, _21dayopen)
d2 = get_rate_of_return(dayclose1, _63dayopen)
d3 = get_rate_of_return(dayclose1, _126dayopen)
DS = (d1 + d2 + d3)/100

//Last (DAILY)
lastd_s_avg1 = DS/3

lastd_Approximate1 = dayclose1*(1-lastd_s_avg1)

last_approx1_d21 = lastd_Approximate1 / _21dayopen-1
last_approx1_d63 = lastd_Approximate1 / _63dayopen-1
last_approx1_d126 = lastd_Approximate1 / _126dayopen-1

lastd_s_avg2 = (last_approx1_d21 + last_approx1_d63 + last_approx1_d126) / 3
lastd_approximate2 = (dayclose1)*(1-(lastd_s_avg1 + lastd_s_avg2))
lastd_price = lastd_approximate2

//plot(lastd_price,color = color.rgb(255, 255, 255, 14), title = "Last momentum threshold")

//Last

last_s_avg1 = MS/3

last_Approximate1 = _1monclose*(1-last_s_avg1)

last_approx1_m1 = last_Approximate1 / _1monopen-1
last_approx1_m3 = last_Approximate1 / _3monopen-1
last_approx1_m6 = last_Approximate1 / _6monopen-1

last_s_avg2 = (last_approx1_m1 + last_approx1_m3 + last_approx1_m6) / 3
last_approximate2 = (_1monclose)*(1-(last_s_avg1 + last_s_avg2))
last_price = last_approximate2
Scoring_price = _1monclose*(1-CS)

plot(last_price,color = color.rgb(255, 255, 255, 14), title = "Last momentum threshold")
//plot(Scoring_price,color = color.rgb(234, 0, 255, 14), title = "Last momentum threshold")

//Long based on month close and being the first trade of the month.

var int lastClosedMonth = -1
limit_longCondition = _1monclose > last_approximate2 and (lastClosedMonth == -1 or month(time) != lastClosedMonth)

// Long based on day close and being the first trade of the month.
limit_Dlongcondition = dayclose1 > lastd_approximate2 and (lastClosedMonth == -1 or month(time) != lastClosedMonth)

// Close trade based on day close

DCloseLongCondition = dayclose1<lastd_approximate2

//Old standard Trading rules
longCondition = _1monclose > Scoring_price
MCloseLongCondition = _1monclose<Scoring_price
shortCondition = CS < 0

if (longCondition)
    strategy.entry("Long", strategy.long)


if (strategy.position_size > 0 and MCloseLongCondition)
    strategy.close("Long")
    lastClosedMonth := month(time)