Estratégia de negociação multi-timeframe P-Signal


Data de criação: 2023-11-28 16:32:36 última modificação: 2023-11-28 16:32:36
cópia: 1 Cliques: 641
1
focar em
1619
Seguidores

Estratégia de negociação multi-timeframe P-Signal

Visão geral

A estratégia de negociação P-Signal multi-marco de tempo é uma estratégia de negociação de algoritmos de moeda digital baseada em princípios estatísticos, combinados com a análise de múltiplos marcos de tempo. A estratégia usa a função de erro de Gauss e o indicador P-Signal para fazer um modelo de ajuste de linha do dia, da circunferência e da linha lunar do Bitcoin, para realizar negociações de taxa de flutuação de acordo com o indicador Gold Forks Plus e Dead Forks Zero.

Princípio da estratégia

O indicador central da estratégia P-Signal é o P-Signal, que combina a diferença estatística padrão e a média móvel simples, mapeada para o intervalo de -1 a 1 por meio da função de erro de Gauss, para detectar se o mercado está em conformidade com a distribuição normal. A fórmula de cálculo específica é a seguinte:

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指标

A estratégia calcula os indicadores P-Signal em horários de sol, circunferência e linha lunar, fazendo uma posição alta quando o indicador atravessa o eixo 0 e uma posição baixa quando o indicador atravessa o eixo 0 . Ao mesmo tempo, configure o controle de valvação do valor do indicador para abrir a posição repetidamente.

Análise de vantagens

A maior vantagem da estratégia de P-Signal é o uso de vários quadros temporais para aumentar a estabilidade da estratégia. A linha solar capta a flutuação de curto prazo do mercado, enquanto a linha semanal filtra as rupturas de falência.

Em comparação com um único período de tempo, um período de tempo múltiplo permite o uso de um ponto de parada de linha de sol em retiros e reduz a frequência de negociação com o uso de um período de tempo avançado em situações de turbulência. No geral, essa combinação permite minimizar a retirada absoluta e relativa, garantindo lucro.

Análise de Riscos

O maior risco da estratégia P-Signal é que o indicador em si é uma caixa preta para os comerciantes de quantificação. É muito difícil determinar a adequação do indicador para um determinado mercado, e não podemos determinar a gama de otimização de seus parâmetros. Isso pode levar ao fraco desempenho da estratégia no mercado real.

Além disso, a estratégia em si também possui algumas limitações. Por exemplo, a incapacidade de lidar com situações agudas, o valor do indicador pode ser atrasado como sinal de negociação.

Para resolver esses problemas, podemos ajustar os parâmetros do indicador, otimizar o modo de parar os prejuízos, introduzir mais indicadores auxiliares, etc. Mas com a condição de verificar a estabilidade da estratégia em uma faixa de retorno suficientemente grande.

Direção de otimização

A estratégia do P-Signal tem várias direções de otimização:

  1. Substitua os parâmetros do indicador P-Signal: nIntr_D, nIntr_W e nIntr_M, para encontrar a combinação de parâmetros ideal

  2. Aumentar o modo de parar: rastrear o parar, o tempo parar, o ATR parar, etc., para encontrar o melhor modo de parar

  3. Introdução de indicadores auxiliares: estratégias para aumentar a capacidade de julgamento de situações específicas, como a introdução de tendências de julgamento MACD

  4. Gestão de posições de otimização: configuração de posições dinâmicas, otimização da eficiência do uso de fundos

  5. Parâmetros de otimização de aprendizagem de máquina: busca de parâmetros globais ótimos usando redes neurais, algoritmos genéticos, etc.

Resumir

A estratégia de negociação P-Signal Multi-Frames de Tempo é uma estratégia de grande potencial. Combina princípios estatísticos com indicadores técnicos para aumentar a estabilidade usando a análise Multi-Frames de Tempo. Se pudermos resolver algumas das limitações com um grande número de feedback e otimização, é totalmente possível transformá-lo em uma estratégia de negociação de algoritmos de moeda digital realmente utilizável.

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