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

 
Renat Fatkhullin:

R é um sistema incrível que me abriu pessoalmente os olhos para o quão longe estávamos no MetaTrader/MQL das necessidades reais de "fazer cálculos complexos simples e agora mesmo".

Nós (desenvolvedores C++) temos a abordagem "você mesmo pode fazer tudo e nós lhe damos a base de baixo nível e a velocidade dos cálculos" em nosso sangue. Somos fanáticos por desempenho e somos bons nisso - MQL5 é ótimo em 64 bits.

Quando comecei a trabalhar em R eu mesmo percebi que precisava do maior número possível de funções poderosas numa só linha e de ser capaz de fazer investigação em geral.

Então, demos uma volta brusca e começámos a actualizar o MetaTrader 5:

  • incluiu as bibliotecas matemáticas Alglib e Fuzzy, previamente reescritas, no fornecimento padrão, coberto com testes unitários
  • desenvolveu um análogo de funções estatísticas de R, realizou testes e os cobriu com testes. o trabalho ainda está em andamento e a biblioteca está se expandindo
  • desenvolveu a primeira versão beta da biblioteca de gráficos como um análogo de gráficos em R. adicionou funções de linha única para uma saída rápida
  • começaram a mudar as interfaces nas janelas de saída do terminal, para que pudéssemos operar com dados tabulares. Eles mudaram a direção da saída, adicionaram desativação de colunas desnecessárias, mudaram a fonte para monospaced na janela de saída do Expert Advisor
  • uma poderosa função ArrayPrint para impressão automática de matrizes, incluindo estruturas, foi adicionada.
  • adicionadas as funções FileLoad e FileSave para carregamento/descarregamento rápido de matrizes em disco.


É claro que estamos no início do caminho, mas o vetor certo dos esforços já está claro.

Sua motivação é ótima! Se for exatamente como você diz, você vai morder rapidamente o ninja até o osso c multichart))))

No entanto, IMHO, aqui temos que criar algo radicalmente novo, ou seja, além do que você escreveu, Sr. Reshetov, você precisa apenas de um estúdio de pesquisa, para trabalhar com conjuntos de dados arbitrários, não apenas descarregáveis do mercado, porque muitas coisas precisam tentar exemplos muito triviais e sintéticos para entender o que acontece, bem, você deve me entender como um programador programador) Eu precisaria de desenhar gráficos diferentes, gráficos de dispersão, mapas de distribuição e assim por diante. Em geral, seria muito legal se tal conjunto de ferramentas estivesse disponível diretamente no MetaEditor, mas francamente falando, eu não tenho esperança...

Mas em geral, é claro, eu gosto da tendência dos seus pensamentos))

 
Renat Fatkhullin:

Foi uma resposta educada, sem detalhes ou verificação. E a resposta não correspondeu a Wolfram Alpha e Matlab, o que é um problema.

Não há necessidade de contornar - a questão da raiz foi claramente afirmada.

Como assim, a resposta dele não coincidiu com a Wolfram? Não correspondeu na medida em que a resposta da pessoa não era "zero"? O homem respondeu que não pensava que no ponto zero, onde integral = 0, a densidade deve necessariamente ser zero (coloquei-lhe a questão dessa forma). Ele disse-o explicitamente. E acrescentou que o valor da densidade em qualquer ponto é irrelevante (eu li "irrelevante" como irrelevante para a pergunta em questão). Esta é uma afirmação matemática bastante clara.

Na pergunta em questão, a matemática é importante.

Nós temos a integral da função mais ou menos (função de densidade de probabilidade de distribuição gama). Todos estão habituados a que possa dar a equação de Wolfram com parâmetros: especifique parâmetros de área de integração e de função, e ela irá integrar e dar a resposta. Mas você já pensou que se você mesmo se sentasse e calculasse esse integral em um determinado domínio, você obteria 0 a zero e 1 sobre todo o domínio, e algum valor [0,1] sobre alguma sub-área. Simplesmente resolvendo a equação!

O fato de que o limite da função de densidade de probabilidade da distribuição gama vai para algum lugar na região positiva é uma propriedade dessa função. Não tem nada a ver com o que se obtém ao integrar essa função. Foi sobre isso que o homem escreveu.

Não estou a esquivar-me aos problemas de raiz. Vou reiterar que o nosso ponto foi confirmado por uma pessoa fora do nosso controle - que densidade a zero é irrelevante (irrelevante).

 
Zhenya:

Sua motivação é ótima! Se tudo for exatamente como você diz, você vai morder rapidamente até o osso ninja c multichart))))

No entanto, IMHO, aqui temos que criar algo radicalmente novo, ou seja, além do que você escreveu, Sr. Reshetov, você precisa de um estúdio de pesquisa para trabalhar com conjuntos de dados arbitrários, não apenas descarregáveis do mercado, porque muitas coisas precisam tentar exemplos muito triviais e sintéticos para entender o que acontece, bem, você deve me entender como um programador programador) Eu precisaria de desenhar gráficos diferentes, gráficos de dispersão, mapas de distribuição e assim por diante. Em geral, seria muito legal se tal conjunto de ferramentas estivesse disponível diretamente no MetaEditor, mas francamente falando, eu não tenho esperança...

Mas em geral, é claro, eu gosto da tendência dos seus pensamentos)))

Está a referir-se a este "tiro" de Reshetov?

"Este R é uma espécie de bicicleta podre com rodas quadradas. O que dizer de alguns dos seus pacotes, quando a base, ou seja, o núcleo em R está torto e precisa de ser afinado seriamente com um "arquivo de lápis"? Que credibilidade podem ter aqueles que há tantos anos nem sequer se preocupam em verificar se as funções básicas em R estão correctas? Qual pode ser a "força" na fraqueza do R - a incorrecção dos cálculos através dele?

É bom que a MetaQuotes tenha aberto os olhos de alguns usuários para o fato e testes com código aberto, para que todos pudessem checar e ter certeza, de forma independente, de que não seriam infundados. Nem todos de código aberto, claro, porque alguns fanáticos religiosos da seita destrutiva de R continuarão a acreditar cegamente na "infalibilidade" dos cálculos na sua linguagem e pacotes tortuosos, em vez de se voltarem para os testes apresentados e verificá-los de forma independente, em vez de fazerem besteiras fanaticamente, defendendo a tortuosidade de R como "padrão geralmente aceite".

Agora é bastante óbvio que seria melhor usar a funcionalidade MQL para criar estratégias de negociação, pois o resultado será mais correto, ao invés de tentar fazê-lo via curva e inclinação R.

Agradecimentos especiais aos desenvolvedores da MetaQuotes por sua abordagem construtiva, testes e suas fontes, bem como por revelar o "rei nu - R"!

 
Vladimir Perervenko:

É a isto que se refere o "remate" Reshetov?

Não, esta é a mensagem:

Yury Reshetov:

R, assim como muitos outros idiomas, é até agora mais conveniente para a aprendizagem da máquina do que o MQL porque tem uma funcionalidade inerente para processar dados em arrays. O problema é que uma amostra para aprendizagem da máquina é, na maioria das vezes, uma matriz de dados bidimensional, por isso precisa de uma funcionalidade para trabalhar com arrays:

  1. Inserir linhas e colunas como matrizes de menor dimensão em outra matriz
  2. Substituição de linhas e colunas em um array como matrizes de tamanho menor
  3. Eliminação de linhas e colunas de um array (por exemplo, para remover preditores sem importância ou exemplos com "outliers" óbvios de uma amostra)
  4. Divisão das matrizes em partes, resultando em duas ou mais matrizes que são partes da matriz original (necessárias para dividir uma amostra em partes de treinamento e teste, ou em mais partes, por exemplo, para Walling Forward).
  5. Baralhamento aleatório de linhas e colunas em um array com distribuição uniforme (é necessário que certos exemplos de uma amostra caiam em partes diferentes, de preferência distribuídas uniformemente sobre essas partes).
  6. Várias funções para processamento de dados por linha ou coluna (por exemplo, cálculo da média aritmética por linha ou por coluna, variância ou encontrar valor máximo ou mínimo em uma linha para posterior normalização).
  7. E por aí fora e assim por diante.

Até que a MQL tenha implementado a funcionalidade acima mencionada necessária para o manuseio de amostras em arrays, a maioria dos desenvolvedores de algoritmos de aprendizagem de máquinas preferirá outras linguagens de programação que já tenham tudo isso disponível. Ou usarão o MLP (algoritmo dos anos 60) não pretensioso da biblioteca AlgLib onde, se bem me lembro, por conveniência, as matrizes bidimensionais são representadas como unidimensionais.

Naturalmente, as funções para densidades de distribuições aleatórias também são uma funcionalidade necessária. Mas tais funções nem sempre são necessárias em tarefas de aprendizagem de máquinas, e em algumas tarefas não são utilizadas de todo. Mas operações com amostras como arrays multidimensionais são o que a implementação de algoritmos de aprendizagem de máquinas é sempre necessária para qualquer tarefa, a menos, claro, que seja uma tarefa de ensinar uma grelha a aprender dados obviamente normalizados a partir de CWR triviais.

 
Vladimir Perervenko:

É a isto que se refere o "remate" Reshetov?

"Este R é podre - uma bicicleta com rodas quadradas. O que dizer de alguns de seus pacotes, quando a base, ou seja, o núcleo em R está torto e precisa de melhorias sérias "com um arquivo de lápis"? Que credibilidade podem ter aqueles que há tantos anos nem sequer se preocupam em verificar se as funções básicas em R estão correctas? Qual pode ser a "força" na fraqueza do R - a incorrecção dos cálculos através dele?

É bom que a MetaQuotes tenha aberto os olhos de alguns usuários para o fato e testes com código aberto, para que todos pudessem checar e ter certeza, de forma independente, de que não seriam infundados. Nem todos de código aberto, claro, porque alguns fanáticos religiosos da seita destrutiva de R continuarão a acreditar cegamente na "infalibilidade" dos cálculos na sua linguagem e pacotes tortuosos, em vez de se voltarem para os testes apresentados e verificá-los de forma independente, em vez de fazerem besteiras fanaticamente, defendendo a tortuosidade de R como "padrão geralmente aceite".

Agora é bastante óbvio que seria melhor usar a funcionalidade MQL para criar estratégias de negociação, pois o resultado será mais correto, ao invés de tentar fazê-lo via curva e inclinação R.

Agradecimentos especiais aos desenvolvedores da MetaQuotes pela sua abordagem construtiva, testes e suas fontes, bem como pela identificação do "Rei Nu - R"!

Já apagou o seu post sobre o "MQL minky"? Estão a esfregar os vossos postos da mesma forma que as figuras radovianas esfregam os seus livros de rosto depois de Trump ter sido eleito.

 

Aqui está um exemplo de uma distribuição gama na Wolfram Alpha por diversão.

É-lhe dada uma função, uma função de densidade de distribuição gama ligeiramente simplificada.

A questão está no denominador x. O limite à direita, como você pode ver, em x->0 Wolfram estima corretamente: inf.

Ou seja, no limite à direita a densidade a zero está no infinito (esta é exatamente a resposta para dgamma).

Vamos integrar esta função no grande saport:

O integral é 1 (arredondado, é claro, porque não é tomado o sapport completo).

Conclusão, apesar de a função ir ao infinito no ponto extremo, a integral desta função conta bem como deveria.

 
Alexey Burnakov:

Aqui está um exemplo da distribuição gama na Wolfram Alpha, só por diversão.

A conclusão é que mesmo que a função vá ao infinito no ponto extremo, a integral dessa função conta bem como deveria.

Obrigado pelo exemplo, você está certo. Esta integral é convergente.

O extremo no ponto x=0 também pode ser usado para determinar a densidade e não levará à divergência.

 
Quantum:

Obrigado pelo exemplo, você está certo. Essa integral é convergente.

Os valores limite em x=0 também podem ser usados para determinar a densidade e isso não levará a divergências.


Obrigado! Respeito.

 

Exemplo de R com pacotes de processamento rápido.

library(data.table)

library(ggplot2)


start <- Sys.time()


set.seed(1)

dummy_coef <- 1:9


x <- as.data.table(matrix(rnorm(9000000, 0, 1), ncol = 9))

x[, (paste0('coef', c(1:9))):= lapply(1:9, function(x) rnorm(.N, x, 1))]


print(colMeans(x[, c(10:18), with = F]))


x[, output:= Reduce(`+`, Map(function(x, y) (x * y), .SD[, (1:9), with = FALSE], .SD[, (10:18), with = FALSE])), .SDcols = c(1:18)]


x[, sampling:= sample(1000, nrow(x), replace = T)]


lm_models <- x[, 

{

lm(data = .SD[, c(1:9, 19), with = F], formula = output ~ . -1)$coefficients

}, 

by = sampling]


lm_models[, coefs:= rep(1:9, times = 1000)]


avg_coefs <- lm_models[, mean(V1), by = coefs]

plot(dummy_coef, avg_coefs$V1)


lm_models[, 

  print(shapiro.test(V1)$p.value)

  , by = coefs]


ggplot(data = lm_models, aes(x = V1)) +

geom_histogram(binwidth = 0.05) +

facet_wrap(~ coefs, ncol = 3)


Sys.time() - start

Tempo de duração: 5 segundos. Foram construídos 1.000 modelos lineares. Cada uma em 1000 observações.

[1] 0.8908975

[1] 0.9146406

[1] 0.3111422

[1] 0.02741917

[1] 0.9824953

[1] 0.3194611

[1] 0.606778

[1] 0.08360257

[1] 0.4843107

Todos os coeficientes são normalmente distribuídos.

E ggplot-ic para visualização.

 

E outro exemplo. Também está relacionado com a grande rotação de amostras para simulação estatística.

########## simulate diffference between mean density with different sample size


library(data.table)

library(ggplot2)


rm(list=ls());gc()


start <- Sys.time()


x <- rnorm(10000000, 0, 1)

y <- rnorm(10000000, 0, 1)


dat <- as.data.table(cbind(x, y))

dat[, (paste0('sampling_', c(100, 1000, 10000))):= lapply(c(100, 1000, 10000), function(x) sample(x, nrow(dat), replace = T))]


dat_melted <- melt(dat, measure.vars = paste0('sampling_', c(100, 1000, 10000)))


critical_t <- dat_melted[, 

   {

    mean(x) - mean(y)

   }

   , by = .(variable, value)]


ggplot(critical_t, aes(x = V1, group = variable, fill = variable)) + 

stat_density(alpha = 0.5)


Sys.time() - start


gc()

Tempo de funcionamento 3,4 segundos.

Normalmente são criadas amostras distribuídas centradas a zero:

1.000 por 10.000 pares de valores

10 000 sobre 1 000 pares de valores

100.000 de 100 pares de valores

A diferença entre as médias (MO == 0) para cada amostra é contada.

As densidades de distribuição das médias de amostragem para amostras de diferentes tamanhos são derivadas.

Somente aqui a amostragem_100 significa que você precisa de 10.000.000 / 100 para obter o tamanho da amostra. Ou seja, para amostras menores, o erro padrão é maior...