En la carga de los recursos... Cargando...

Estrategia de inversión de la señal P

El autor:¿ Qué pasa?, Fecha: 2024-01-29 14:44:56
Las etiquetas:

img

Resumen general

La estrategia de reversión de la señal P es una estrategia de negociación cuantitativa construida sobre la base de parámetros estadísticos y funciones de error para construir un espacio de señal probabilística.

Principios de estrategia

El indicador central de esta estrategia es la señal P, que combina los parámetros estadísticos de medias móviles y desviaciones estándar y los asigna al rango de -1 a 1 a través de la función de error de Gauss para formar un indicador de juicio cuantificado.

Los parámetros de la estrategia incluyen Cardinalidad, ΔErf y Tiempo de observación. La cardinalidad controla el tamaño de la muestra, ΔErf controla la banda muerta de la función de error para reducir la frecuencia de negociación. El tiempo de observación controla la hora de inicio de la estrategia.

Análisis de ventajas

La mayor ventaja de la estrategia de reversión de la señal P es que se basa en las distribuciones de probabilidad de los parámetros estadísticos, que pueden juzgar eficazmente los puntos característicos del mercado y capturar las oportunidades de reversión.

Además, el diseño parametrizado de la estrategia está bien regulado, lo que permite a los usuarios ajustar el espacio de parámetros de acuerdo con sus propias necesidades para encontrar la combinación óptima.

Análisis de riesgos

El principal riesgo de la estrategia de reversión de la señal P es que depende demasiado de los parámetros de la distribución de probabilidades, que se ve fácilmente afectada por datos anormales que resultan en juicios erróneos.

Aumentar el parámetro de cardinalidad para aumentar el tamaño de la muestra puede reducir el impacto de las anomalías de los datos.

Direcciones de optimización

La estrategia de inversión de la señal P puede optimizarse en los siguientes aspectos:

  1. Incorpore otros indicadores para filtrar señales anormales, como un fuerte aumento del volumen.

  2. Valida las señales en múltiples marcos de tiempo para mejorar la estabilidad del juicio.

  3. Aumentar las estrategias de stop loss para reducir las pérdidas individuales.

  4. Optimizar los parámetros para encontrar la mejor combinación y mejorar la rentabilidad.

  5. Incorporar aprendizaje automático para ajuste de parámetros dinámicos.

Resumen de las actividades

La estrategia de inversión de señales P establece un marco de negociación cuantitativo basado en distribuciones de probabilidad con diseños de parámetros flexibles y facilidad de uso. Juzga eficazmente las características estadísticas de los mercados y captura oportunidades de inversión. La estrategia puede mejorarse aún más en estabilidad y rentabilidad a través de validación de múltiples indicadores, optimización de pérdidas y otros medios. Proporciona un paradigma eficiente y confiable para el comercio algorítmico utilizando técnicas cuantitativas.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// **********************************************************************************************************
// 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 RVS © Kharevsky
// **********************************************************************************************************
strategy('P-Signal Strategy RVS.', precision=3, process_orders_on_close=true, pyramiding=0, 
     commission_type=strategy.commission.percent,
     commission_value=0.2)
// Parameters and const of P-Signal.
nPoints = input.int(title='Cardinality:', defval=4, minval=4, maxval=200, group='Parameters of strategy.')
ndErf = input.float(title='|ΔErf|:', defval=0, minval=0, maxval=1, step=0.01, group='Parameters of strategy.')
tStartDate = input(title='Start date:', defval=timestamp('30 Dec 1957 00:00 +0300'), group='Observation time.')
int nIntr = nPoints - 1
// Horner's method for the error (Gauss) & P-Signal functions.
fErf(x) =>
    nT = 1.0 / (1.0 + 0.5 * math.abs(x))
    nAns = 1.0 - nT * math.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 = ta.stdev(ser, int)
    nSma = ta.sma(ser, int)
    nStDev > 0 ? fErf(nSma / nStDev / math.sqrt(2)) : math.sign(nSma)
// Data.
float nPSignal = ta.sma(fPSignal(ta.change(ohlc4), nIntr), nIntr)
float ndPSignal = math.sign(nPSignal[0] - nPSignal[1])
bool isStartDate = true
// Reversal Strategy.
strategy.entry('short', strategy.short, when=isStartDate and nPSignal > ndErf and ndPSignal < 0)
strategy.entry('long', strategy.long, when=isStartDate and nPSignal < -ndErf and ndPSignal > 0)
// Plotting. 
hline(+1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
plot(nPSignal, color=color.new(color.blue, 0), style=plot.style_line)
// Table of state.
if barstate.isconfirmed
    var Table = table.new(position=position.bottom_right, columns=3, rows=1, 
     frame_color=color.new(color.orange, 70), frame_width=1, 
     border_color=color.new(color.orange, 70), border_width=1)
    table.cell(table_id=Table, column=0, row=0, 
     text=strategy.position_size > 0 ? 'Long: ' + str.tostring(strategy.position_size) : 'Short: ' + str.tostring(strategy.position_size), 
     text_color=strategy.position_size > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=1, row=0, 
     text='Net P/L: ' + str.tostring(strategy.netprofit, '#.#'), 
     text_color=strategy.netprofit > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=2, row=0, 
     text='Open P/L: ' + str.tostring(strategy.openprofit, '#.#'), 
     text_color=strategy.openprofit > 0 ? color.green : color.red)
// The end.



Más.