Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 145

 
Alexey Burnakov:

Isto é um grande problema. É algo que é quase impossível de resolver sem prejudicar a aprendizagem.
A questão aqui é que quanto mais você olha para o passado, mais dependente você está das observações vizinhas.

Se você alimentar a máquina com observações não especificadas, você perde o mais importante - o requisito de independência das observações. Depois disso, a aprendizagem será drasticamente inadequada. E as estatísticas não funcionam.

E para evitar isso, você tem que afinar as observações de modo que o atraso do olhar para trás seja menor ou igual ao passo das observações de afinamento. E isto levaria a quê? Redução de cem vezes o tamanho da amostra de treinamento.

Há um compromisso a ser feito aqui. Profundidade do olhar vs. número de exemplos na amostra.

Concordo que é um problema, há semanas que ando a agarrá-lo...

o que significa que quanto mais se olha para trás, mais dependentes são as observações vizinhas. ...não faz sentido...

E quanto ao corte, por favor, também não percebo...

 
mytarmailS:

Concordo que é um problema, há algumas semanas que ando a passar por cima dele...

o que significa que quanto mais você olha para o passado, mais dependente você está das observações vizinhas . ? não está claro...

E o corte por favor clarifique... Eu também não percebo...

Está bem. Usando o seu próprio exemplo.

Para duas barras adjacentes no tempo você vai desenhar histogramas quase 100% idênticos de preços passados. Ou seja, os dois exemplos de treino serão muito semelhantes só porque são adjacentes no tempo. Isto contradiz a propriedade básica dos processos estatísticos onde as observações são independentes. A máquina não aprenderá padrões cronologicamente invariantes, mas sim padrões repetitivos (quase os mesmos). Imagine que você entrevistou Vasya 200 vezes em uma pesquisa de opinião e tentando disseminar o conhecimento que você encontra para 1000 pessoas diferentes.
 
Alexey Burnakov:
Está bem. Pelo seu exemplo.

Para duas barras adjacentes no tempo, você vai desenhar histogramas quase 100% idênticos de preços passados. Ou seja, os dois exemplos de treino serão muito semelhantes só porque são adjacentes no tempo. Isto contradiz a propriedade básica dos processos estatísticos onde as observações são independentes. A máquina não aprenderá padrões cronologicamente invariantes, mas sim padrões repetitivos (quase os mesmos). Imagine que você entrevistou Vasya 200 vezes em uma pesquisa de opinião e tentando estender o conhecimento que você encontrou a 1000 pessoas diferentes.

Ooh!!! isso é diferente, agora tudo está cristalino :)

1) Você pode reduzir o tamanho da janela várias vezes, então as seções serão menos similares em cada fatia

2) Você pode aumentar ao máximo aspausas, o que também eliminaria um pouco desuavização

PRICE <- cumsum(rnorm(300))+1000
layout(1:2)
plot(PRICE,t="l",ylab = "цена" , xlab = "индексы",lwd=2)
Max <- max(PRICE)
Min <- min(PRICE)
range.vector <- seq(Min, Max, length.out=200)
H <- hist(PRICE, breaks = range.vector)
          

 
mytarmailS:

Ooh!!! Isso é diferente, agora tudo faz todo o sentido :)

1) Você pode reduzir o tamanho da janela em várias vezes, então as seções serão menos similares em cada fatia

2) Você poderia maximizar asquebras, o que também eliminaria um pouco desuavização

Eu faço-o desta maneira. Pseudocódigo:

Exemplo1 = p[0]
degrau = 720
aleatório = [0;50]
Exemplo 2 = p[passo+random]

onde max lag to past = 720

Significa que estou a cortar de tal forma para garantir que as observações não se sobrepõem.

O mesmo princípio é necessário para evitar a dependência do alvo de olhar para o futuro.
 

A primeira coisa a determinar é: que tipo de horizonte de previsão você precisa. Isto vai determinar a profundidade da história que você precisa investigar.

Veja gráficos de tendências com uma profundidade histórica de 3000, 1000, 300 e 150 barras (AUDUSD/H1).

> library("PolyTrend", lib.loc="K:/RRO/R-3.3.1/library")
> trend3000 <- PolyTrend(price[ ,4], alpha = 0.05)
> require(magrittr)
Loading required package: magrittr
> trend1000 <- PolyTrend(price[ ,4] %>% tail(., 1000), alpha = 0.05)
> trend300 <- PolyTrend(price[ ,4] %>% tail(., 300), alpha = 0.05)
> trend150 <- PolyTrend(price[ ,4] %>% tail(., 150), alpha = 0.05)
> plot(trend3000, t="l")
> plot(trend1000, t="l")
> plot(trend300, t="l")
> plot(trend150, t="l")


As fotos foram inseridas na ordem inversa.

E para 3000 barras a direcção é "Para cima".

Trend type: 3 (cubic)
Slope: 0.0000
Direction: 1 (positive)
Significance: 1 (statistically significant)
Polynomial degree: 3 (cubic)

Para mais curtos

#  trend1000
PolyTrend classification:

Trend type: 2 (quadratic)
Slope: -0.0000
Direction: -1 (negative)
Significance: 1 (statistically significant)
Polynomial degree: 2 (quadratic)
#  trend300
PolyTrend classification:

Trend type: 2 (quadratic)
Slope: 0.0000
Direction: 1 (positive)
Significance: 1 (statistically significant)
Polynomial degree: 2 (quadratic)
#trend150
 PolyTrend classification:

Trend type: 3 (cubic)
Slope: -0.0000
Direction: -1 (negative)
Significance: 1 (statistically significant)
Polynomial degree: 3 (cubic)

Se eu estiver interessado no horizonte de previsão de 24 barras (um dia) não preciso olhar para 3000 barras ao contrário. 300 barras seria suficiente.

Boa sorte.






 

Eu acho questionável a ideia de prever 24 passos à frente.

Tanto na classificação como na regressão você deve sempre prever exatamente UM passo à frente, mas por exemplo em H1, H4 e D1. Ao negociarmos no H1 teremos 4 e 24 passos à frente nas previsões para o H1.

O ideal seria que a TF fosse feita artificialmente a partir do quociente subjacente. No meu exemplo carregamos H1 e não tiramos outros do terminal. Usando esta abordagem não vamos obter D1 ligado a 00:00, mas estritamente 24 horas antes da hora atual.

 
SanSanych Fomenko:

Eu acho questionável a ideia de prever 24 passos à frente.

Tanto na classificação como na regressão devemos sempre prever exactamente UM passo à frente, mas por exemplo em H1, H4 e D1. Ao negociarmos no H1 teremos 4 e 24 passos à frente nas previsões para o H1.

O ideal seria que a TF fosse feita artificialmente a partir do quociente subjacente. No meu exemplo carregamos H1 e não tiramos outros do terminal. Usando esta abordagem não vamos obter D1 ligado a 00:00, mas estritamente 24 horas antes da hora atual.

Depende do que estamos a prever. Por exemplo, uma previsão de tendência de 24 horas é bastante satisfatória (a curva é muito suave). Isto é, quando você precisa ver o FORMULÁRIO da curva sem nenhum requisito especial de precisão.

Caso contrário, o seu exemplo é absolutamente correcto (como princípio). E a opção de janela deslizante (24 horas) também é muito funcional. Muita coisa depende dos detalhes.

Boa sorte.

 

Pergunta rápida...

Tenho feito uma distribuição de preços, ou seja, um vector regular, e recebo uma espécie de perfil de mercado, mas posso construir um perfil de volume real, ou seja, ligar o preço ao volume na distribuição?

 
mytarmailS:

Pergunta rápida...

Tenho feito uma distribuição de preços, ou seja, um vector regular, e tenho uma espécie de perfil de mercado, mas será possível construir um perfil de volume real, ou seja, ligar o preço ao volume na distribuição?

Há indicadores que pegam no preço e no volume e constroem um gráfico geral. E a distribuição pode ser calculada para isso. Por exemplo, Chaikin Oscillator ou alguns outros indicadores na pasta Indicador/Volumes. Mas em forex serão os volumes de tick, não os reais. Embora eles se correlacionem, ainda é ruim, é melhor procurar por volumes reais na bolsa de valores.

 
Dr. Trader:

Existem indicadores que pegam o preço e o volume e constroem um gráfico geral. E você pode ler a distribuição para ele. Por exemplo, Chaikin Oscillator ou alguns outros indicadores na pasta Indicador/Volumes. Mas em forex, serão os volumes de tick em vez de reais. Embora eles se correlacionem, ainda é ruim, é melhor procurar por volumes reais da bolsa de valores.

Eu não negoceio forex, nem estou familiarizado com Metatrader :)

Eu gostaria de experimentar com perfis diferentes em P, eu simplesmente não entendo como construir uma distribuição de dois vetores

Não tem que ser os volumes, é um começo, você pode colocar qualquer coisa no perfil, mas tem que estar ligado ao preço e isso significa dois vetores