Un análisis de la estrategia de negociación cuantitativa basada en la función de error de Gauss

El autor:¿ Qué pasa?, Fecha: 2024-01-19 14:28:03
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de negociación cuantitativa basada en el indicador P-Signal calculado por función de error de Gauss para medir los cambios de precios.

Estrategia lógica

El indicador central de esta estrategia es la señal P. La fórmula de cálculo de la señal P es:

fPSignal(ser, int) =>
    nStDev = stdev(ser, int) 
    nSma = sma(ser, int)
    fErf(nStDev > 0 ? nSma/nStDev/sqrt(2) : 1.0)

Aquí ser representa la serie de precios, int representa el parámetro nPoints, que es el número de barras para mirar hacia atrás.

  1. nStDev es la desviación estándar del precio;
  2. nSma es la media móvil simple del precio;
  3. fErf es la función de error de Gauss.

El significado de toda la fórmula es tomar el promedio móvil del precio dividido por la desviación estándar del precio, luego dividido por sqrt (((2) para la estandarización, y finalmente mapeado al rango (-1, 1) por la función de error de Gauss. Es decir, si la fluctuación del precio es mayor que el promedio, la señal P está cerca de 1; si la fluctuación del precio es menor que el promedio, la señal P está cerca de -1.

La estrategia utiliza el valor de la señal P y el signo de su cambio para determinar entradas y salidas:

strategy.entry("long", strategy.long, 1, when = nPSignal < 0 and ndPSignal > 0)

strategy.close("long", when = nPSignal > 0 and ndPSignal < 0)  

Se hace largo cuando la señal P es menor que 0 y cambia a positivo. Cierra la posición cuando la señal P es mayor que 0 y cambia a negativa.

Ventajas

Las ventajas de esta estrategia incluyen:

  1. Utilizando la función de error de Gauss para adaptarse a la distribución de precios.
  2. Ajuste automático de los parámetros por desviación estándar del precio. Esto hace que la estrategia sea más robusta en diferentes condiciones de mercado.
  3. P-Signal combina las ventajas de la tendencia de seguimiento y la inversión media.

Los riesgos

También hay algunos riesgos con esta estrategia:

  1. Riesgo de negociación de alta frecuencia: como una estrategia típica de negociación de alta frecuencia, puede generar más operaciones, lo que conlleva mayores costos de transacción y riesgos de deslizamiento.
  2. P-Signal puede producir muchas señales falsas cuando el precio no tiene una tendencia o patrón claro.
  3. La relación compleja entre múltiples parámetros hace que la optimización de parámetros sea difícil.

Para reducir esos riesgos, se pueden tomar en consideración algunas medidas: añadir filtros para reducir la frecuencia de las operaciones; optimizar la combinación de parámetros y establecer los costes de transacción; realizar pruebas en vivo y elegir productos adecuados.

Mejoramiento

Hay margen de mejora:

  1. Añadir filtros para evitar señales falsas, por ejemplo, Y/O con otros indicadores para filtrar algo de ruido.
  2. Optimización de la combinación de parámetros. Ajuste del tamaño de nPoints en diferentes productos y marcos de tiempo para mejorar la estabilidad.
  3. Considerando los parámetros dinámicos, el ajuste adaptativo de los nPoints de acuerdo con la volatilidad del mercado puede mejorar la robustez.
  4. Incorporando métodos de aprendizaje automático, utilizando algoritmos de IA en parámetros, filtros y optimización de tiempo entre productos.

Conclusión

En conclusión, la idea central de esta estrategia es innovadora, la distribución de precios adecuada con función de Gauss y el ajuste automático de parámetros.


/*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 source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// P-Signal Strategy © Kharevsky
// @version=4
// **********************************************************************************************************
strategy("P-Signal Strategy", precision = 3)
// Parameters and const of P-Signal.
nPoints = input(title = "Number of Bars", type = input.integer, defval = 9, minval = 4, maxval = 100, group = "Parameters of observation.")
int nIntr = nPoints - 1
// Horner's method for the error (Gauss) & P-Signal functions.
fErf(x) =>
    nT = 1.0/(1.0 + 0.5*abs(x))
    nAns = 1.0 - nT*exp(-x*x - 1.26551223 + 
     nT*( 1.00002368 + nT*( 0.37409196 + nT*( 0.09678418 + 
     nT*(-0.18628806 + nT*( 0.27886807 + nT*(-1.13520398 + 
     nT*( 1.48851587 + nT*(-0.82215223 + nT*( 0.17087277 ))))))))))
    x >= 0 ? nAns : -nAns
fPSignal(ser, int) => 
    nStDev = stdev(ser, int)
    nSma = sma(ser, int)
    fErf(nStDev > 0 ? nSma/nStDev/sqrt(2) : 1.0)
// Strat.
float nPSignal = sma(fPSignal(change(ohlc4), nIntr), nIntr)
float ndPSignal = sign(nPSignal[0] - nPSignal[1])
strategy.entry("long", strategy.long, 1, when = nPSignal < 0 and ndPSignal > 0)
strategy.close("long", when = nPSignal > 0 and ndPSignal < 0)
// Plotting. 
hline(+1.0, color = color.new(color.orange,70), linestyle = hline.style_dotted)
hline(-1.0, color = color.new(color.orange,70), linestyle = hline.style_dotted)
plot(nPSignal, color = color.blue, style = plot.style_line)
plot(strategy.position_size, color = color.white, style = plot.style_cross)
// Alerts.
if(strategy.position_size[0] > strategy.position_size[1])
    alert("P-Signal strategy opened the long position: " + syminfo.tickerid + " " + timeframe.period, alert.freq_once_per_bar)
if(strategy.position_size[0] < strategy.position_size[1])
    alert("P-Signal strategy closed the long position: " + syminfo.tickerid + " " + timeframe.period, alert.freq_once_per_bar)
// The end.

Más.