
La estrategia de inversión de señales P es una estrategia de negociación cuantitativa de señales de espacio de probabilidad construida sobre parámetros estadísticos y funciones de error. Se obtiene dinámicamente la señal de negociación para capturar el punto de inflexión del mercado, siguiendo los parámetros de la distribución de los valores máximos de una serie de líneas K.
El indicador central de la estrategia es la señal P, que combina los parámetros estadísticos de las medias móviles y la diferencia estándar para formar un indicador de juicio cuantitativo, mapeado entre -1 y 1 a través de la función de error de Gauss. La lógica de la estrategia de reversión se forma cuando la señal P hace un vacío cuando se invierte de positivo a negativo y hace más cuando se invierte de negativo a positivo.
Los parámetros de la estrategia incluyen cardinalidad, ΔErf y tiempo de observación. La cardinalidad controla el número de muestras, ΔErf controla la zona muerta de la función de error, reduce la frecuencia de las transacciones. El tiempo de observación controla el comienzo de la estrategia.
La mayor ventaja de la estrategia de inversión de señales P es que se basa en la distribución de probabilidades de los parámetros estadísticos para juzgar eficazmente las características del mercado y capturar oportunidades de reversión. En comparación con un solo indicador técnico, combina más información del mercado y un juicio más completo y confiable.
Además, la especificación de diseño de la política de parametrización permite a los usuarios ajustar el espacio de parámetros según sus necesidades y buscar la combinación óptima. Esto garantiza la adaptabilidad y la flexibilidad de la política.
El principal riesgo de la estrategia de inversión de señales P es que depende demasiado de los parámetros de la distribución de probabilidad y es susceptible a errores de juicio por el efecto de los datos anormales. Además, las estrategias de inversión de señales P generalmente tienen un bajo índice de pérdidas y ganancias individuales limitadas.
Se puede reducir el impacto de las anomalías en los datos aumentando el tamaño de la muestra con el aumento de los parámetros de cardinalidad. Se debe ampliar adecuadamente el rango de ΔErf y reducir la frecuencia de transacción para controlar el riesgo.
La estrategia de inversión de la señal P puede ser optimizada en los siguientes aspectos:
En combinación con otros indicadores, filtra las señales de anomalías, como el aumento repentino en el volumen de transacciones.
Verificar las señales en varios marcos de tiempo para mejorar la estabilidad de los juicios.
Aumentar las estrategias de stop loss y reducir las pérdidas individuales.
Optimizar los parámetros para encontrar la combinación óptima y aumentar la rentabilidad.
Ajuste dinámico de los parámetros de juicio combinado con aprendizaje automático.
La estrategia de inversión de señales P-Signal, basada en la distribución de probabilidades, construye un marco de comercio cuantitativo, el diseño de los parámetros es flexible y fácil de usar. Es eficaz para juzgar las características estadísticas del mercado y capturar oportunidades de inversión. La estrategia puede aumentar aún más la estabilidad y la rentabilidad a través de medios como la verificación de múltiples indicadores y la optimización de los estancamientos.
/*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.