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

 
Dr. Trader:

Eu uso indicadores padrão como base para a criação de preditores. Ainda estou a experimentar eu próprio, a experimentar ideias deste tópico do fórum.

Estou fazendo isso nas últimas semanas, agora o melhor resultado é o seguinte: (muitos cálculos, estou tentando usar o tempo D1 para melhor velocidade, então vou usar um tempo menor)

1) exportação do mt5 para csv: ohlc, tempo, indicadores, tudo para as últimas 10 barras. Comecei recentemente a tirar tempo apenas do bar mais recente, acredito que o tempo dos outros bares é calculável e, portanto, não traz nenhuma informação nova. Várias centenas de preditores "primários" estão saindo. O resultado necessário da aprendizagem é "1" ou "0" - subida ou descida do preço na barra seguinte. O meu método com ziguezagues não é estável e complexo, agora sou melhor a trabalhar com preços próximos. Quando eu trabalhar com um algoritmo completo para treinamento de modelos a partir do zero, posso começar a trabalhar em ziguezagues e previsão de tendências.

2) Em R I estou fazendo diferentes operações matemáticas com dados disponíveis - adição, deltas, min, max, etc. Já sai mais de mil preditores.

3) Obviamente há mais lixo após o segundo passo do que o necessário. Eu estou peneirando pelo método do artigo sobre componentes básicoshttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych escreveu sobre isso antes. Eu não estou ensinando o modelo PCR em si e me acomodei à função de pré-triagem dos preditores por enquanto:

srcTable é uma tabela com preditores, a última coluna deve ser o resultado do treinamento necessário.pruneSig é melhor deixar -1.

Como resultado, a função retornará uma lista com os nomes das colunas da tabela que contêm algumas informações úteis. Ou uma lista vazia se nada de útil for encontrado. Este método é mencionado no artigo como não sendo muito significativo, mas acaba por ser bastante adequado, ele peneia muito bem o lixo. Além disso, a lista de resultados será ordenada por relevância, de mais útil para menos útil.

4) Se a função retorna lista vazia - executo o segundo passo novamente, gerando novamente diferentes combinações matemáticas sobre os dados disponíveis, então o terceiro passo para peneirar. Tenho de repetir isto 3-4 vezes. O volume de dados cresce a cada repetição, por isso é melhor limitar de alguma forma o volume de novos dados gerados. Podemos alterar esta função para peneirar, de modo que se a lista sair vazia, ela retorne uma centena ou dois melhores resultados e gere novos preditores apenas a partir deles.

5) Em seguida, de acordo com o artigo, precisamos treinar o modelo componente principal em si. Tenho problemas com isso - até agora o melhor r-quadrado para o modelo treinado é 0,1, não é suficiente, o artigo diz que eu preciso de pelo menos 0,95. Mas eu posso treinar algum outro modelo R sobre os preditores obtidos e isso dará um resultado melhor. Eu tenho mais experiência com a neurônica, o melhor resultado na frente com ele sai com um erro de cerca de 37%. O modelo PCE é suposto ser mais estável, sem reconversão, etc., mas até agora não consegui obter nenhum prognóstico para ele.


Parabéns, obrigado por ter lançado o resultado.

Espero que este seu posto seja apreciado -você tem, se não resolveu o problema básico da negociação, é sem exagero.

Tudo o resto virá com ele.

Parabéns mais uma vez, boa sorte!

 
Dr. Trader:

Eu uso indicadores padrão como base para a criação de preditores. Ainda estou a experimentar eu próprio, a experimentar ideias deste tópico do fórum.

Estou fazendo isso nas últimas semanas, agora o melhor resultado é o seguinte: (muitos cálculos, estou tentando usar o tempo D1 para melhor velocidade, então vou usar um tempo menor)

1) exportação do mt5 para csv: ohlc, tempo, indicadores, tudo para as últimas 10 barras. Comecei recentemente a tirar tempo apenas do bar mais recente, acredito que o tempo dos outros bares é calculável e, portanto, não traz nenhuma informação nova. Várias centenas de preditores "primários" estão saindo. O resultado necessário da aprendizagem é "1" ou "0" - subida ou descida do preço na barra seguinte. O meu método com ziguezagues não é estável e complexo, agora sou melhor a trabalhar com preços próximos. Quando eu trabalhar com um algoritmo completo para treinamento de modelos a partir do zero, posso começar a trabalhar em ziguezagues e previsão de tendências.

2) Em R I estou fazendo diferentes operações matemáticas com dados disponíveis - adição, deltas, min, max, etc. Já sai mais de mil preditores.

3) Obviamente há mais lixo após o segundo passo do que o necessário. Eu estou peneirando pelo método do artigo sobre componentes básicoshttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych escreveu sobre isso antes. Eu não estou ensinando o modelo PCR em si e me acomodei à função de pré-triagem dos preditores por enquanto:

srcTable é uma tabela com preditores, a última coluna deve ser o resultado do treinamento necessário.pruneSig é melhor deixar -1.

Como resultado, a função retornará uma lista com os nomes das colunas da tabela que contêm algumas informações úteis. Ou uma lista vazia se nada de útil for encontrado. Este método é mencionado no artigo como não sendo muito significativo, mas acaba por ser bastante adequado, ele peneia muito bem o lixo. Além disso, a lista de resultados será ordenada por relevância, de mais útil para menos útil.

4) Se a função retorna a lista vazia - eu executo a segunda etapa novamente, gerar novamente combinações matemáticas diferentes nos dados disponíveis, então a terceira etapa para peneirar para fora. Tenho de repetir isto 3-4 vezes. O volume de dados cresce a cada repetição, por isso é melhor limitar de alguma forma o volume de novos dados gerados. Podemos alterar esta função para peneirar, de modo que se a lista sair vazia, ela retorne uma centena ou dois melhores resultados e gere novos preditores apenas a partir deles.

5) Em seguida, de acordo com o artigo, precisamos treinar o modelo componente principal em si. Tenho problemas com isso - até agora o melhor r-quadrado para o modelo treinado é 0,1, não é suficiente, o artigo diz que eu preciso de pelo menos 0,95. Mas eu posso treinar algum outro modelo R sobre os preditores obtidos e isso dará um resultado melhor. Eu tenho mais experiência com a neurônica, o melhor resultado na frente com ele sai com um erro de cerca de 37%. O modelo PCE é suposto ser mais estável, sem reconversão, etc., mas até agora não consegui obter nenhum prognóstico para ele.

Se você tiver um erro de 30% na frente já é um modelo bastante rentável, faça o Expert Advisor para mt5 e confira-o no testador de estratégia.

Vá lá! Você vai melhorar com o tempo.
 
Dr. Trader:
Comecei a assistir a este curso e ele foca muito na estrutura de Pandas em Python. As primeiras lições parecem mais um tutorial sobre a estrutura do que sobre a análise de dados. Mas o tutorial parece adequado, sem o típico "Eu sou um guru Forex, eu vou abrir seus olhos e você vai ganhar milhões", como em muitos outros treinamentos inúteis, dá esperança de que eles vão contar coisas adequadas até o fim. Mas deve ser levado em conta que este curso é projetado para negociação de ações, não para Forex, eu não sei se o processo de ensino de modelos nestas duas áreas é semelhante.
O princípio é o mesmo. Há algumas nuances de negociação. Por exemplo, não há muitos terminais próximos da realidade que permitam testar a troca (deslizamento, execução parcial, atrasos). Mas existem tais. Mas o MT5 não lhes pertence, como eu o entendo.
 
Dr. Trader:

Eu uso indicadores padrão como base para a criação de preditores.

...

2) Eu faço diferentes operações matemáticas com os dados disponíveis em R - adição, deltas, min, max, etc. Já sai mais de mil preditores.

3) Obviamente há mais lixo após o segundo passo do que o necessário. Eu peneio-o usando o método descrito no artigo sobre componentes básicoshttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych escreveu anteriormente sobre ele.

...

Como resultado, a função retornará uma lista com nomes de colunas da tabela que contém algumas informações úteis. Ou uma lista vazia se nada de útil for encontrado. Este método é mencionado no artigo como não sendo muito significativo, mas acaba por ser bastante adequado, ele peneirar muito bem o lixo. Além disso, a lista com resultados será ordenada por relevância, de mais útil para menos útil.

Não se pode deixar de sentir que o cálculo é inteiramente ao acaso! Os preditores não são mais do que lixo. Pode haver um diamante no meio deles, porque a vida pode surgir da "sopa"!

Acontece que esta abordagem é uma optimização inteligente da computação. Quando não há algoritmos bruteforcing, mas sim algoritmos mais inteligentes. Mas a entrada continua a ser a mesma porcaria.

Acontece que se tivéssemos uma máquina informática tão poderosa que pudesse fazer qualquer cálculo num segundo, não precisaríamos de nenhum treino. Mas, ao mesmo tempo, não veríamos nenhuma mudança qualitativa no recebimento de um TS rentável. Infelizmente.

 
Alexey Volchanskiy:

Um colega enviou-me um link para um curso sobre aprendizagem de máquinas, gostaria de dar uma vista de olhos? É grátis, mas está em Python por alguma razão ((

https://www.udacity.com/course/machine-learning-for-trading--ud501

Tudo é melhor mostradoaqui.

Boa sorte.

 
Anton Zverev:

Eu não posso deixar de sentir que o cálculo é totalmente baseado no acaso! Os palpiteiros são todos lixo. Talvez haja um diamante no meio deles - afinal, a vida poderia nascer da "sopa"!

.... Isso é triste.

Você está absolutamente errado!

Deixe-me explicar usando um exemplo.

Toma uma kodobase. Tudo nele é lixo, ou há algo que vale a pena nele. O mais provável é que haja, afinal de contas, a experiência de tantas pessoas.

Agora vamos assumir, com certeza, que vamos comercializar tendências. Qual dos indicadores disponíveis na kodobase será útil para a negociação de tendências? Devemos julgar pelo nome ou intuitivamente? E quantos podemos praticamente escolher para tentar? 10, 20, 100? Eu acho que 100 é através de um testador para toda a vida, considerando a combinação.

Mas o mais importante não é apenas o número de indicadores a tentar. O principal é se o Expert Advisor irá trabalhar no futuro. E o Expert Advisor trabalhará no futuro apenas em um caso - se não tiver sido requalificado (não excessivamente treinado). O principal problema na construção de sistemas comerciais mecânicos é o problema do sobretreinamento (superfitting). Será que muitas pessoas conseguiram superar este problema?

Eu acho queo Dr.Trader não construiu seus preditores a partir de uma tocha, mas teve alguma idéia - no momento a idéia de gerar tantos preditores não é interessante.

O que é interessante é algo completamente diferente.

O que é interessante é aquilo a que não prestaste atenção.

Entre seus milhares de preditores, oDr.Trader pode selecionar aqueles que não causarão sobretreinamento (superfitting) de Expert Advisors.

Ele não só sabe como selecionar os preditores que não causarão o desenvolvimento de EAs super-confeccionados, mas também mostrou o código que o faz.

 
SanSanych Fomenko:

Você está completamente errado!

Deixe-me explicar com um exemplo.

Toma uma kodobase. Tudo nele é lixo, ou há algo que vale a pena nele. O mais provável é que haja, depois de toda a experiência de tantas pessoas.

Lixo, é claro! Bem, tomem a kodobase inteira como preditores...

De seus milhares de preditores, oDr.Trader pode selecionar aqueles que não causarão sobretreinamento (superfitting) de Expert Advisors.

Ele não só sabe como selecionar os preditores que não causarão o desenvolvimento de EAs super-confeccionados, mas também mostrou o código que o faz.

E descobriu-se que nem uma única gema, quanto mais um diamante, foi encontrada fora da enorme pilha de lixo. Estou a dizer-te, é um tiro no escuro.

Ou alguém aqui é capaz de comprovar que tal e tal indicador não é lixo? E mostrar em números a importância relativa deste preditor?

 

Sim, eu tenho muita acção aleatória, concordo. Mas você não pode simplesmente pegar um indicador e fazer um EA com base nele, você irá rapidamente descer com ele. Os indicadores não são 100% lixo, mas só eles não fornecem informações suficientes para prever a movimentação de preços. Mas descobri na minha pesquisa que a combinação de indicadores pode aumentar o seu poder de previsão, ou seja, pode-se realmente fazer um diamante com o lixo. O problema é que existem milhares de combinações possíveis e apenas dezenas delas são úteis e não sei que indicadores são inicialmente melhores do que outros. Até agora este problema foi resolvido como eu escrevi anteriormente, agindo com força bruta e longos cálculos. Com o passar do tempo, vou obter estatísticas sobre quais indicadores entram mais vezes nos preditores finais e só poderei trabalhar com eles, tudo irá mais rápido.

Comecei a fazer um Expert Advisor com base nos preditores obtidos, o resultado será realmente visível no testador. Dizem que mesmo com 60% das barras corretamente previstas você ainda perderá dinheiro, pois o preço viajou menos distância com barras corretamente previstas do que com barras incorretas. Se assim for, você deve fazer sua própria função de adequação para treinar os neurônios para estimar não a porcentagem de barras, mas a rentabilidade do modelo.

 
Dr. Trader:

Sim, eu tenho muita acção ao acaso, concordo. Mas você não pode pegar apenas um indicador e usá-lo para criar um Expert Advisor, você vai perder rapidamente com ele. Os indicadores não são 100% lixo, mas só eles não fornecem informações suficientes para prever a movimentação de preços. Mas descobri na minha pesquisa que a combinação de indicadores pode aumentar o seu poder de previsão, ou seja, pode-se realmente fazer um diamante com o lixo. O problema é que existem milhares de combinações possíveis e apenas dezenas delas são úteis e não sei que indicadores são inicialmente melhores do que outros. Até agora este problema foi resolvido como eu escrevi anteriormente, com força bruta e longos cálculos. Com o passar do tempo vou formando algumas estatísticas sobre indicadores que cheguem mais vezes aos preditores finais, poderei trabalhar apenas com eles e tudo irá muito mais rápido.

Você quer encontrar correlações em um único PB. E você quer encontrar inter-relações que devem estar sempre presentes nessa BP.

Estas duas circunstâncias (em negrito) parecem, no mínimo, estranhas.

Os métodos de aprendizagem de máquinas aprenderam a reconhecer objectos (um cão, um laranja, etc.) a partir de imagens. Ou seja, aprenderam a reconhecer coisas que os humanos ou certos tipos de animais podem reconhecer. Quando uma Pessoa ou um animal vê um preço BP, não está ciente de nada. Ou seja, eles não são capazes de fazer comparações no seu NS. No entanto, quando um Homem olha para várias PA ao mesmo tempo, ele vê semelhanças mesmo a olho nu. E estas semelhanças, de facto, são realizadas. Portanto, é a consciência de um objeto que é o foco lógico das técnicas de aprendizagem de máquinas.

Primeiro percebemos isso nós mesmos, depois tentamos os algoritmos. Acho que sabes o que quero dizer.

Era uma vez o EURGBP durante a noite era muito fixe (rentável). O seu NS não o teria reconhecido. Os lucros foram tirados por aqueles que compreenderam as razões da inclinação nocturna. E depois aplicaram algoritmos a estes pedaços de história do EURGBP para encontrar a data em que subitamente se tornou íngreme. Para não estragar o status com os dados que estavam antes do declive. Eles começaram a investigar. E muitos ganharam bom dinheiro com isso - basta ler os fóruns.

Agora imagine que GOLD/SILVER é fixe agora. Não existe tal par, mas você pode trocá-lo. Mas você se limitou a uma única PA. E é lógico procurar interconexões entre diferentes BPs. Neste caso, podem aparecer pares como o GOLD/SILVER. E os intervalos de uma semana, dia ou noite, etc., também desempenham um papel enorme. O comportamento das pessoas depende da hora do dia e do dia da semana. São dados conscientes, por isso é aí que tens de cavar, IMHO.

 
Anton Zverev:

Você quer encontrar correlações em um único PB. E você quer encontrar inter-relações que devem estar sempre presentes nessa BP.

...

Primeiro percebemos isso nós mesmos, depois tentamos os algoritmos. Acho que sabes o que quero dizer.

...

Mas você se limitou a uma única PA. E é lógico procurar interconexões entre diferentes BPs. Neste caso, você pode obter estes "OURO/ PRATA". Além disso, os intervalos de uma semana, dia ou noite, etc. também desempenham um enorme papel. O comportamento das pessoas depende da hora do dia e do dia da semana. Estes são dados conscientes, então você tem que cavar lá, IMHO.

Até agora, estamos a tentar encontrar a dependência do "futuro" condicional do "passado" na mesma linha temporal. Mas isso não significa que não vamos tentar fazer isso para uma combinação de séries.

Sobre o reconhecimento. Para as laranjas, o seu raciocínio é aplicável. Até talvez um especialista distinga várias variedades de laranja.

Para o BP financeiro, você precisa distinguir um padrão - ou seja, o comportamento monótono do BP ao longo de todo o intervalo de tempo disponível. Sim, às vezes parece haver algo à vista. Mas este conhecimento é muito vago, e os parâmetros de dependência não são definidos com precisão nenhuma. Aqui não se pode passar sem a ajuda do computador. Embora eu não esteja afirmando que não há ninguém que possa encontrar o vício pelos olhos e codificá-lo.

Concordo com o Dr.Trader em tentar recolher muito lixo e, em seguida, extrair dele insumos valiosos. O valor dessas entradas é verificado através do treinamento do modelo e da validação do mesmo. Se não for ruído, haverá uma vantagem na validação. Esse é o curso completo de aprendizagem de máquinas. )

Já experimentei tais insumos crus:

> names(sampleA)

  [1] "lag_diff_2"        "lag_diff_3"        "lag_diff_4"        "lag_diff_6"        "lag_diff_8"        "lag_diff_11"       "lag_diff_16"     

  [8] "lag_diff_23"       "lag_diff_32"       "lag_diff_45"       "lag_diff_64"       "lag_diff_91"       "lag_diff_128"      "lag_diff_181"    

 [15] "lag_diff_256"      "lag_diff_362"      "lag_diff_512"      "lag_diff_724"      "lag_mean_diff_2"   "lag_mean_diff_3"   "lag_mean_diff_4" 

 [22] "lag_mean_diff_6"   "lag_mean_diff_8"   "lag_mean_diff_11"  "lag_mean_diff_16"  "lag_mean_diff_23"  "lag_mean_diff_32"  "lag_mean_diff_45"

 [29] "lag_mean_diff_64"  "lag_mean_diff_91"  "lag_mean_diff_128" "lag_mean_diff_181" "lag_mean_diff_256" "lag_mean_diff_362" "lag_mean_diff_512"

[36] "lag_mean_diff_724" "lag_max_diff_2"    "lag_max_diff_3"    "lag_max_diff_4"    "lag_max_diff_6"    "lag_max_diff_8"    "lag_max_diff_11" 

 [43] "lag_max_diff_16"   "lag_max_diff_23"   "lag_max_diff_32"   "lag_max_diff_45"   "lag_max_diff_64"   "lag_max_diff_91"   "lag_max_diff_128"

 [50] "lag_max_diff_181"  "lag_max_diff_256"  "lag_max_diff_362"  "lag_max_diff_512"  "lag_max_diff_724"  "lag_min_diff_2"    "lag_min_diff_3"  

 [57] "lag_min_diff_4"    "lag_min_diff_6"    "lag_min_diff_8"    "lag_min_diff_11"   "lag_min_diff_16"   "lag_min_diff_23"   "lag_min_diff_32" 

 [64] "lag_min_diff_45"   "lag_min_diff_64"   "lag_min_diff_91"   "lag_min_diff_128"  "lag_min_diff_181"  "lag_min_diff_256"  "lag_min_diff_362"

 [71] "lag_min_diff_512"  "lag_min_diff_724"  "lag_sd_2"          "lag_sd_3"          "lag_sd_4"          "lag_sd_6"          "lag_sd_8"        

 [78] "lag_sd_11"         "lag_sd_16"         "lag_sd_23"         "lag_sd_32"         "lag_sd_45"         "lag_sd_64"         "lag_sd_91"       

 [85] "lag_sd_128"        "lag_sd_181"        "lag_sd_256"        "lag_sd_362"        "lag_sd_512"        "lag_sd_724"        "lag_range_2"     

 [92] "lag_range_3"       "lag_range_4"       "lag_range_6"       "lag_range_8"       "lag_range_11"      "lag_range_16"      "lag_range_23"    

 [99] "lag_range_32"      "lag_range_45"      "lag_range_64"      "lag_range_91"      "lag_range_128"     "lag_range_181"     "lag_range_256"   

[106] "lag_range_362"     "lag_range_512"     "lag_range_724"     "symbol"            "month"             "day"               "week_day"        

[113] "hour"              "minute"            "future_lag_2"      "future_lag_3"      "future_lag_4"      "future_lag_6"      "future_lag_8"    

[120] "future_lag_11"     "future_lag_16"     "future_lag_23"     "future_lag_32"     "future_lag_45"     "future_lag_64"     "future_lag_91"   

[127] "future_lag_128"    "future_lag_181"    "future_lag_256"    "future_lag_362"    "future_lag_512"    "future_lag_724"

Há tempo e todo o tipo de métricas para a movimentação de preços. Depois também os peneirei. Toma, vê o que eu tenho.

Esta é a parte do Expert Advisor que recebe sinais da máquina treinada em R. As entradas selecionadas são mostradas lá. E em primeiro lugar, já agora, é a hora em que uma troca é aberta. Isto é, o tempo é importante!

Este é um teste do Conselheiro Especialista sobre toda a história de 1999.02 a 2016.06:

É um pouco torto, mas a máquina ainda aprende NÃO o ruído, mas as dependências das entradas indicadas.

Portanto, estamos no lado positivo. Pelo menos, nós melhoramos os resultados das experiências.

Arquivos anexados: