Estrategia de negociación de marcos temporales múltiples P-Signal


Fecha de creación: 2023-11-28 16:32:36 Última modificación: 2023-11-28 16:32:36
Copiar: 1 Número de Visitas: 641
1
Seguir
1619
Seguidores

Estrategia de negociación de marcos temporales múltiples P-Signal

Descripción general

P-Signal es una estrategia de comercio de monedas digitales basada en principios estadísticos, combinada con análisis de múltiples marcos de tiempo. La estrategia utiliza la función de error de Gauss y el indicador P-Signal para ajustar el modelo a la línea de sol, la línea de la semana y la línea de la luna de Bitcoin, para realizar operaciones de fluctuación de acuerdo con el indicador Gold Forks y Dead Forks.

Principio de estrategia

El indicador central de la estrategia P-Signal es P-Signal, que combina el diferencial estadístico estándar y el promedio móvil simple, mapeado en el intervalo de -1 a 1 por la función de error de Gauss, para detectar si el mercado está en la distribución normal. La fórmula de cálculo específica es la siguiente:

fErf(x) = 1.0 - 1.0/(1.0 + 0.5*abs(x)) * exp(-x*x - 1.26551223 + ...)  # 高斯误差函数

fPSignal(ser, n) = fErf((stdev(ser, n) > 0 ? sma(ser, n)/stdev(ser, n)/sqrt(2) : 1)) # P-Signal指标

La estrategia calcula los indicadores de P-Signal en los marcos de tiempo de la línea solar, la línea de la circunferencia y la línea lunar, respectivamente, haciendo más cuando el indicador cruza el eje 0 y la posición plana cuando cruza el eje 0 . Al mismo tiempo, configure el control de la válvula de valor del indicador para abrir la posición repetidamente .

Análisis de las ventajas

La mayor ventaja de la estrategia de P-Signal es la utilización de múltiples marcos de tiempo para mejorar la estabilidad de la estrategia. La línea diurna captura las fluctuaciones a corto plazo del mercado, y la línea semanal filtra las rupturas de brecha. Al mismo tiempo, el indicador de P-Signal tiene cierta capacidad de predicción en sí mismo, que puede amplificar las fluctuaciones de la tendencia.

En comparación con un solo marco de tiempo, un marco de tiempo múltiple permite aprovechar la pérdida de la línea de sol en el momento de la retirada, mientras que el uso de un marco de tiempo superior reduce la frecuencia de las operaciones en situaciones de crisis. En general, esta combinación permite minimizar las retiradas absolutas y relativas, al tiempo que garantiza la ganancia.

Análisis de riesgos

El mayor riesgo de la estrategia P-Signal es que el indicador en sí mismo es una caja negra para los operadores cuantitativos. Es difícil determinar la adecuación del indicador a un mercado específico, ni determinar el rango óptimo de sus parámetros. Esto puede conducir a un mal desempeño de la estrategia en el mercado real.

Además, la estrategia en sí misma también tiene ciertas limitaciones. Por ejemplo, la incapacidad de manejar situaciones extremas, la diferencia de los indicadores como señal de negociación puede retrasarse, etc. Estos problemas pueden ser riesgos ocultos en el tiempo real.

Para resolver estos problemas, podemos ajustar los parámetros de los indicadores, optimizar el método de detener los pérdidas, introducir más indicadores auxiliares, etc. Pero siempre y cuando se verifique la estabilidad de la estrategia en un rango de retroalimentación lo suficientemente grande.

Dirección de optimización

La estrategia de P-Signal tiene varias opciones de optimización:

  1. Sustituye los parámetros de los indicadores P-Signal: nIntr_D, nIntr_W y nIntr_M, para encontrar la combinación óptima de parámetros

  2. Aumentar la pérdida: rastrear la pérdida, la pérdida de tiempo, la pérdida de ATR, etc., para encontrar la mejor manera de detener la pérdida

  3. Introducción de indicadores auxiliares: estrategias para mejorar la capacidad de juicio sobre situaciones específicas, como la introducción de tendencias de juicio MACD

  4. Optimización de la gestión de posiciones: configuración de posiciones dinámicas, optimización de la eficiencia en el uso de los fondos

  5. Parámetros de optimización de aprendizaje automático: búsqueda de parámetros globales óptimos mediante redes neuronales, algoritmos genéticos, etc.

Resumir

P-Signal es una estrategia de comercio de marcos de tiempo múltiple con un gran potencial en general. Combina principios estadísticos con indicadores técnicos para mejorar la estabilidad utilizando análisis de marcos de tiempo múltiple. Si podemos resolver algunas de las limitaciones con una gran cantidad de retroalimentación y optimización, es posible que se convierta en una estrategia de comercio de algoritmos de moneda digital de uso real.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 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
// A good strategy should be able to handle backtesting.
// @version=4
// **********************************************************************************************************
strategy("P-Signal Strategy:", precision = 3, pyramiding = 3)
//
// Parameters and const of P-Signal.
//
nPoints_D = input(title = "Number of D Bars", type = input.integer, defval = 9, minval = 4, maxval = 100, group = "Parameters of observation.")
nPoints_W = input(title = "Number of W Bars", type = input.integer, defval = 4, minval = 4, maxval = 100, group = "Parameters of observation.")
nPoints_M = input(title = "Number of M Bars", type = input.integer, defval = 6, minval = 4, maxval = 100, group = "Parameters of observation.")
int nIntr_D = nPoints_D - 1
int nIntr_W = nPoints_W - 1
int nIntr_M = nPoints_M - 1
bool bDValveOpen = true
bool bWValveOpen = true
bool bMValveOpen = true
// 
// 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)
//
// Signals for the strategy.
//
float nPSignal_D = sma(fPSignal(change(ohlc4), nIntr_D), nIntr_D)
float ndPSignal_D = sign(nPSignal_D[0] - nPSignal_D[1])
//
float nPSignal_W = sma(security(syminfo.tickerid, "W",fPSignal(change(ohlc4), nIntr_W)), nIntr_W)
float ndPSignal_W = sign(nPSignal_W[0] - nPSignal_W[1])
//
float nPSignal_M = sma(security(syminfo.tickerid, "M",fPSignal(change(ohlc4), nIntr_M)), nIntr_M)
float ndPSignal_M = sign(nPSignal_M[0] - nPSignal_M[1])
//
// P-Signal 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_D, color = color.blue, style = plot.style_line)
//
// Multi Frame Strategy 
// ... Day
if(nPSignal_D < 0 and ndPSignal_D > 0 and bDValveOpen)
    strategy.entry("long_D", strategy.long, 1) 
    bDValveOpen := false
if(nPSignal_D > 0 and ndPSignal_D < 0)
    strategy.close("long_D")
    bDValveOpen := true
// ... Week
if(nPSignal_W < 0 and ndPSignal_W > 0 and bWValveOpen)
    strategy.entry("long_W", strategy.long, 1) 
    bWValveOpen := false
if(nPSignal_W > 0 and ndPSignal_W < 0)
    strategy.close("long_W")
    bWValveOpen := true
// ... Month
if(nPSignal_M < 0 and ndPSignal_M > 0 and bMValveOpen)
    strategy.entry("long_M", strategy.long, 1) 
    bMValveOpen := false
if(nPSignal_M > 0 and ndPSignal_M < 0)
    strategy.close("long_M")
    bMValveOpen := true
// The end.