Estratégia de reversão do sinal P


Data de criação: 2024-01-29 14:44:56 última modificação: 2024-01-29 14:44:56
cópia: 0 Cliques: 663
1
focar em
1617
Seguidores

Estratégia de reversão do sinal P

Visão geral

A estratégia de inversão de sinal P é uma estratégia de negociação quantitativa de sinais de espaço de probabilidade baseada em parâmetros estatísticos e funções de erro. Ela capta dinamicamente os sinais de negociação para capturar os pontos de inversão do mercado, rastreando parâmetros de distribuição de extremos em uma série de linhas K.

Princípio da estratégia

O indicador central da estratégia é o P-signal, que combina os parâmetros estatísticos de média móvel e de diferença padrão para formar um indicador de julgamento quantitativo mapeado entre -1 e 1 por meio da função de erro de Gauss. Quando o P-signal inverte de positivo para negativo, faça zero e quando inverte de negativo para positivo, faça mais, formando a lógica da estratégia de reversão.

Os parâmetros da estratégia incluem Cardinality, ΔErf e tempo de observação. A cardinalidade controla o número de amostras, o ΔErf controla a zona morta da função de erro, reduzindo a frequência de negociação. O tempo de observação controla o início da estratégia.

Análise de vantagens

A maior vantagem da estratégia de inversão de sinais P é que ela se baseia na distribuição de probabilidade dos parâmetros estatísticos, permitindo uma avaliação eficaz das características do mercado e capturando oportunidades de inversão. Em comparação com um único indicador técnico, ela combina mais informações do mercado, sendo o julgamento mais abrangente e confiável.

Além disso, a estratégia de especificações de design de parametrização, o usuário pode ajustar o espaço de parâmetros de acordo com suas necessidades para encontrar a melhor combinação. Isso garante a adaptabilidade e flexibilidade da estratégia.

Análise de Riscos

O principal risco da estratégia de reversão de sinal P é que ela depende demais dos parâmetros da distribuição de probabilidade, sendo suscetível a erros de julgamento devido à influência de dados anormais. Além disso, as estratégias de reversão de sinal P geralmente apresentam baixas taxas de perdas e lucros limitados.

Pode-se reduzir o impacto de anomalias de dados aumentando o tamanho da amostra com o aumento do parâmetro de cardinalidade. Aumente o alcance de ΔErf de forma apropriada e reduza a frequência de transação para controlar o risco.

Direção de otimização

A estratégia de reversão do sinal P pode ser otimizada em vários aspectos:

  1. Em combinação com outros indicadores, filtra os sinais de anomalias, como o aumento do volume de transações.

  2. Verificar sinais em múltiplos períodos de tempo, reforçando a estabilidade do julgamento.

  3. Aumentar as estratégias de stop loss e reduzir as perdas individuais.

  4. Parâmetros de otimização para encontrar a melhor combinação para aumentar a taxa de ganho.

  5. Ajuste dinâmico de parâmetros de julgamento em combinação com aprendizado de máquina.

Resumir

A estratégia de reversão de sinal P-Signal baseia-se na distribuição de probabilidade de construção de uma estrutura de negociação quantitativa, com design de parâmetros flexível e amigável para o usuário. Ela é eficaz em julgar as características estatísticas do mercado e capturar oportunidades de reversão. A estratégia pode aumentar ainda mais a estabilidade e a lucratividade por meio de verificação de múltiplos indicadores, otimização de stop loss, etc.

Código-fonte da estratégia
/*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.