Estrategia de negociación de media móvil gaussiana


Fecha de creación: 2024-01-03 16:06:45 Última modificación: 2024-01-03 16:06:45
Copiar: 0 Número de Visitas: 1104
1
Seguir
1621
Seguidores

Estrategia de negociación de media móvil gaussiana

Descripción general

La estrategia utiliza el pensamiento de la distribución de Gauss para calcular el valor de Z de un promedio móvil de 10 periodos del índice de Heckel, y luego establecer un umbral para ese valor de Z de un promedio móvil de 20 periodos del índice de Heckel, y determinar la posición de salida y la posición de salida en función de la travesía de la curva.

Principio de estrategia

  1. Calcula el promedio móvil del índice de 10 períodos del cierre del precio de Helix.

  2. Basándose en los datos de las medias móviles mencionadas anteriormente, se calcula el valor de Z en 25 periodos. El valor de Z refleja la diferencia estándar entre los datos y el promedio, lo que permite determinar si los datos son normales o anormales.

  3. El promedio móvil del índice de 20 periodos de los valores de Z se calcula de nuevo y se obtiene la curva emaScore. Esta curva refleja la tendencia a largo plazo de los valores de Z.

  4. De acuerdo con la distribución de los datos de emaScore, se establece un umbral ascendente y descendente. Teniendo en cuenta que la curva puede tener cierta fluctuación, se elige el 90% y el 10% de los datos de la distribución como umbral.

  5. Haga más cuando el emaScore atraviesa la línea media o el umbral inferior; haga un hueco cuando el emaScore atraviesa el umbral inferior, el umbral inferior o el máximo en 100 ciclos.

Análisis de las ventajas

  1. Aplicación de la teoría de la distribución de Gauss para juzgar la normalidad por valores Z y filtrar las falsas rupturas.

  2. Filtro de doble capa, ejecutan la curva exeScore para determinar tendencias a largo plazo EXTENSIVE511.

  3. Establecer un umbral razonable para reducir la probabilidad de transacciones erróneas.

  4. La combinación de los puntos más altos y más bajos de los ciclos de la centena permite aprovechar la oportunidad de revertir.

Análisis de riesgos

  1. Los valores Z se usan en combinación con las medias móviles, son sensibles a los parámetros y necesitan optimización.

  2. El establecimiento de un umbral razonablemente grande o demasiado ancho o demasiado estrecho no es válido.

  3. Los puntos más altos y más bajos de los cien ciclos son propensos a generar señales erróneas, por lo que se pueden relajar adecuadamente las condiciones de activación.

  4. Hay un cierto retraso en el proyecto de Helicopters, y se debe evaluar si es adecuado para la estrategia.

Dirección de optimización

  1. Prueba de promedios móviles de diferentes períodos, parámetros de valor Z.

  2. Utiliza el método de análisis de marcha hacia adelante para optimizar automáticamente los parámetros.

  3. Prueba diferentes métodos para establecer el umbral, como el múltiplo de la diferencia estándar.

  4. Mejora de la lógica de los puntos más altos y más bajos para evitar señales erróneas.

  5. Prueba otros tipos de alfombras o alternativas a las típicas alfombras de Heckley.

Resumir

La estrategia se basa en la idea de la distribución de Gauss, mediante el establecimiento de promedios móviles y umbrales dinámicos de doble índice, para juzgar eficazmente las anomalías de precios y generar señales de negociación. La principal ventaja es que se pueden filtrar brechas falsas y capturar reveses. Sin embargo, la configuración de los parámetros y el uso de combinaciones tienen un gran impacto en los resultados, y aún se deben seguir probando y optimizando para encontrar la mejor manera de usar los parámetros y las combinaciones.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
basePeriod: 1m
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/
// © jensenvilhelm

// Here is an attempt to create a robust strategy for BTCUSD on a 5 minute chart
// I can't seem to get this code to work the way i want.... if you want to give it a try, please let me know -
// how it goes in comment section. 

//@version=5
// Define the strategy settings
strategy("The Z-score", shorttitle="TZS", overlay=true)

// User can set the start date for the strategy
startDate = timestamp("2023 06 01")

// Heikin-Ashi Open, Close, High and Low calculation
haClose = ohlc4
var float haOpen = na
haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2
haHigh = math.max(nz(haOpen, high), nz(haClose, high), high)
haLow = math.min(nz(haOpen, low), nz(haClose, low), low)

// Function to calculate the Z-Score
z_score(_series, _length) =>
    _mean = ta.sma(_series, _length)
    _stddev = ta.stdev(_series, _length)
    (_series - _mean) / _stddev

// Compute the score and its EMA
score = z_score(ta.ema(haClose, 10), 25)
emaScore = ta.ema(score, 20)

// Calculate lower and upper thresholds using percentiles of EMA
lowerBlue = ta.percentile_linear_interpolation(emaScore, 50, 10)
upperBlue = ta.percentile_linear_interpolation(emaScore, 50, 90)

// Calculate the middle line as 50th percentile
middleLine = ta.percentile_linear_interpolation(emaScore, 50, 50) 

// Plot the EMA of the score and the thresholds
plot(emaScore,"The White Line", color=color.white, linewidth=2)
plot(lowerBlue,"Lower Blue Line", linewidth=2)
plot(upperBlue, "Upper Blue Line", linewidth=2)
plot(middleLine, "Middle Yellow Line", linewidth=2, color=color.yellow)
plot(score,"The Z-Score Mixed With EMA 10", color=color.green)

// Calculate highest and lowest EMA score over 100 bars period
highest = ta.highest(emaScore, 100)
lowest = ta.lowest(emaScore, 100)

// Plot highest and lowest EMA score lines 
plot(highest, "Highest of emaScore", color=color.red, linewidth=2)
plot(lowest, "Lowest of emaScore", color=color.red, linewidth=2)

// Define entry and exit conditions for long and short positions
longCon = ta.crossover(score, lowerBlue) or ta.crossover(emaScore, middleLine)
addOn = ta.crossover(score, highest)
shortCon = ta.crossunder(emaScore, upperBlue) or ta.crossunder(emaScore, lowerBlue) or ta.crossunder(emaScore, highest)

// Execute trading logic based on conditions and after the start date
if (time >= startDate)
    if longCon
        strategy.entry("Long", strategy.long)
        if shortCon
            strategy.close("Long")
    if addOn
        strategy.entry("LongNR2", strategy.long)
        if shortCon
            strategy.close("LongNR2")
    
    if shortCon
        strategy.entry("Short", strategy.short)
        if longCon
            strategy.close("Short")