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

 
mytarmailS:

Aqui está até este miúdo sem sentido a falar, observa desde o minuto 10

https://www.youtube.com/watch?v=KUdWTnyeBxo&list=PLDCR37g8W9nFO5bPnL91WF28V5L9F-lJL&index=3

No vídeo, o objetivo não é aplicar exatamente uma série de Fourier, mas usar alguma função para processar os dados para transferi-los para outro espaço (kernel transform). Sugere-se que as imagens sejam convertidas para a paleta de cores HSL, som para um histograma de frequências. Tudo isto irá alterar os dados, mas pode ser facilmente restaurado pela função inversa, se necessário. Esta conversão deve, de alguma forma, fazer sentido lógico, para que as classes, após a conversão, sejam mais facilmente agrupadas umas às outras no espaço multidimensional, para simplificar a classificação. Se depois de alguma transformação as classes forem ainda mais espaçadas espacialmente do que antes - não há nada de bom nesta ação, só será pior.

Não é necessário usar exatamente Fourier, pois não é aconselhável. Alexey, por exemplo, sugere tomar deltas entre barras, não valores brutos. Yury na libVMR usou diferentes transformações matemáticas, é interessante também, veja as suas fontes em java. Você pode decompor os dados usando o método de componentes principais, e alimentá-los com componentes neurônicos, sobre este SanSanych e eu já compartilhei alguns artigos e exemplos. O que você quer fazer tem centenas de soluções, Fourier é apenas uma delas.

Ou você pode simplesmente usar a neurônica com dezenas de camadas, e ela vai funcionar por si só nos dados brutos, sem nenhuma transformação do kernel. Mas haverá muitos problemas com a regulamentação, validação cruzada, etc.

Além disso, nenhum destes métodos vai se livrar do problema do lixo de entrada. Lixo de entrada -> lixo pós-conversão -> lixo de saída -> ameixa de fachada.

 
mytarmailS:

Uma pergunta: é possível medir as semelhanças entre as funções através da amplitude, fase e frequência?

É ISTO!!! Não estou interessado em mais nada...

Todo o resto escrito sobre Fourier é uma consequência da resposta do CC e não é relevante para a minha pergunta.

Se as funções são periódicas, você pode. Se não for periódico, haverá erros na comparação dos limites (no início - valor 0 do argumento, e no final do período - valor 2*PI do argumento) das duas funções.
 
Dr. Trader:

No vídeo o objetivo não é aplicar exatamente a série Fourier, mas processar os dados em alguma função para transferi-los para outro espaço (transformação do kernel).

Ou você pode simplesmente usar a neurônica com dezenas de camadas e ela vai funcionar por si só em dados brutos sem nenhuma transformação do kernel.

As transformações do kernel neste vídeo são selecionadas manualmente através da visualização de pares de preditores. Ou seja, você precisa de um especialista humano que visualmente encontre pares apropriados e selecione transformações de kernel adequadas para eles.

Dr. Trader:


Ou você pode simplesmente pegar uma neurônica com dezenas de camadas, ela vai funcionar por si só nos dados brutos sem nenhuma transformação do kernel.

O vídeo diz que não só não vai funcionar, como vai ficar ainda mais confuso. Além disso, os métodos de propagação de erro inverso não ajustam praticamente os pesos em camadas remotas da camada de saída - o sinal não chega lá, e se chega lá, é muito fraco.


Dr. Trader:


Yuri usou na libVMR diferentes transformações matemáticas, é interessante também, veja o seu código fonte em java


Não vários, mas algoritmos compilados pelo método de A.G. Ivakhnenko de factorização de grupo de argumentos (GMDH). Se você pegar ao acaso, ou seja, sem nenhuma estrutura, você vai pegar besteira.


 
Yury Reshetov:
Se as funções são periódicas, você pode. Se não for periódico, haverá erros ao comparar bordas (no início - valor 0 do argumento, e no final do período - valor 2*PI do argumento) de duas funções.

Vejo que ainda haverá distorção nas extremidades e quanto mais perto da borda mais forte, desculpe, não cabe....

Dr. Trader.

Como é treinada a sua rede neural?

 

Encontrei isto num site, mas já não está a funcionar por alguma razão.

Talvez alguém estivesse interessado:

".... Seguindo suas recomendações eu construí vários modelos de robôs, os robôs estão aprendendo e reconhecendo algumas coisas com novos dados, mas os resultados, infelizmente, ainda estão longe do que eu esperava.

.... Primeiro eu apliquei a aproximação polinomial-harmônica aos filtros lowpass para obter o primeiro conjunto de características secundárias, um filtro para a tendência de curto prazo e o segundo para a tendência de longo prazo. Tomou como características secundárias frequências, amplitudes de cos e pecados e coeficientes P. ... A rede aprendeu, mas não teve generalização.

...O passo seguinte foi um novo modelo: aplicamos um filtro low pass (utilizei filtro Butterworth de 2ª ordem) ao preço de fecho, aplicamos aproximação polinomial-harmónica, transformamos A*cos(wx)+B*sin(wx) na forma M*sin(wx+f) e tomamos M e f como atributos secundários.

.... E com este modelo consegui construir uma rede que tinha muito boas propriedades de generalização: reconhecia quase todos os novos dados correctamente.

A aproximação polinomial-harmônica é demorada, então decidi fazer outro modelo: um conjunto de filtros passa-banda com igual distribuição de freqüência, aplicá-los ao filtro LF de preços de fechamento e depois aplicar Hilbert Transform a eles. Eu também consegui fazer uma rede para o modelo de mercado artificial que reconheceu com sucesso novos dados.

Depois disso, eu apliquei este modelo a citações reais:

- nós filtramos o preço de fecho com um filtro LF adaptável .

- construir um conjunto de filtros passa-banda para detectar ondas de mercado.

- aplicar a Transformada Hilbert.

- primeiro conjunto de atributos secundários: valores do filtro passa-banda, amplitude instantânea e valores de fase.

- nós construímos um filtro de baixa passagem a partir de um preço próximo.

- o segundo conjunto de atributos secundários - desvio relativo dos preços próximos e baixos da última vela, suporte e níveis de resistência em relação ao valor do filtro LF, volume relativo em barra (em relação ao valor médio).

- criar uma amostra de treinamento.

O resultado é o seguinte: a rede é treinada, mas trabalha mal com novos dados. Em algum lugar ele prevê mínimos com precisão, e em algum lugar ele esquece o que fazer. Comparado com o que eu estava fazendo antes, o resultado parece ser de um nível qualitativamente diferente. Sim. Mais uma coisa para esclarecer, eu segui as regras básicas: número de características da rede de entrada (características secundárias neste caso) < tamanho da amostra de treinamento/10, número de neurônios em uma camada oculta não excedendo o número de entradas de rede...". Espero que estes excertos da carta lhe dêem uma ideia de possíveis abordagens para a recuperação de características.

 
mytarmailS:

Vejo que ainda haverá distorção nas extremidades e quanto mais perto da borda, mais forte, pena que não caiba....

A questão de caber ou não é muito trivial. Primeiro, decomponha a função na série Fourier, depois restaure-a a partir da série por transformação inversa. E comparar a função inicial antes da decomposição e a função restaurada. Se a função reconstruída é fundamentalmente diferente da função original, torna-se bastante óbvio que este método não vai funcionar.

Para funções não periódicas é recomendado o uso de transformadores wavelet. Eu próprio ainda não tentei. Mas a julgar pela forma como uma imagem é primeiro comprimida por wavelets e depois restaurada com algumas distorções, mas não perceptíveis visualmente em comparação com as distorções das transformadas de Fourier, é bastante óbvio que as wavelets são mais adequadas para séries não periódicas em comparação com as transformadas de Fourier. Uma vez que não tenho experiência prática na aplicação de wavelets a BPs citadas, não posso compartilhar informações úteis sobre quais wavelets são mais adequadas aqui. E há uma carroça e um pequeno carrinho cheio deles.

mytarmailS:

Como vai a sua rede neural?

Depende de que tipo de tarefa e dados? Se lhe deres uma amostra de números aleatórios, vai murmurar: "Lixo dentro, lixo fora". E se você lhe der uma amostra de preditores significativos, ele produzirá valores de generalização. Não leva muito tempo para treinar, pelo menos para uma amostra de uma dúzia de preditores e alguns milhares de exemplos.
 
Yury Reshetov:

A questão de saber se vai ou não funcionar é bastante trivial. Primeiro, decomponha a função em uma série de Fourier, depois reconstrua-a a partir da série resultante por transformação inversa. E comparar a função original antes da decomposição e a função reconstruída. Se a função reconstruída é fundamentalmente diferente da função original, é óbvio que este método não vai funcionar.

Provavelmente vou fazer isso.... Primeiro vou dizer-vos o que estou a fazer em geral e o que preciso de resolver e depois vão-me dar as vossas sugestões, porque acho que vos estou a confundir a todos...
 

Um pouco de pré-história....

Comecei procurando por padrões na história usando o seguinte princípio:

1) temos o preço actual - que sejam as últimas 20 velas

2) vamos à história e procuramos uma situação semelhante no passado (a proximidade foi verificada com a correlação de Pearson e Euclides)

3) quando encontramos tal situação, vemos como ela terminou - com crescimento ou declínio

4) quando encontramos muitos desses análogos é possível coletar as estatísticas com alguma prevalência, por exemplo, encontramos 10 análogos

8 dos quais terminaram em crescimento e 2 - em declínio, aqui está uma previsão do que acontecerá com o preço :)

Ouseja, eu fiz algo semelhante ao "método de compilação de análogos - previsão sem modelos" de Ivakhnenok,mas o meu método é muito mais primitivo.

Bem, esta abordagem acabou por não funcionar devido a uma série de razões

1) quanto mais castiçais no vector requerido, menos análogos podem ser encontrados na história, na prática se você tomar todos os preços OHLC e a precisão da correlação Pearson >0,93, um vector de 3 castiçais será o limite, enquanto uma previsão normal precisa de um vector muito maior

2) Na prática, praticamente não existem situações de preços idênticos no mercado....

3) Acontece que não podemos aumentar o vetor, pois perderíamos muita precisão. Mas mesmo que pudéssemos, não encontraríamos um análogo em um vetor maior, pois não há situações idênticas.

A solução foi encontrada.....

 
Yury Reshetov:

Depende de quais tarefas e dados? Se lhe deres uma amostra de números aleatórios, ele murmura: "Lixo dentro, lixo fora". E se você lhe der uma amostra de preditores significativos, ele produz valores de generalização. Não leva muito tempo para treinar, pelo menos para uma amostra de uma dúzia de preditores e alguns milhares de exemplos.

Saudações!!!! Eu uso a LibVMR mas parece ser uma versão antiga, porque ela continua recebendo erro de "Bad Data". Eu entendo que há uma nova versão. Onde posso fazer o download? Se for possível?
 
mytarmailS:

Um pouco de pré-história....

Comecei procurando por padrões na história usando o seguinte princípio:

1) temos o preço actual - que sejam as últimas 20 velas

2) Vamos à história como um loop e procuramos uma situação semelhante no passado (a proximidade era medida pela correlação de Pearson e Euclides)

Não está muito claro? Você está tomando os preços como OHLC para padrões ou algum tipo de transformação dos mesmos?

A questão é que se você tomar OHLC como está, um padrão similar mas 1.000 pips mais alto ou mais baixo do que o que está sendo comparado irá diferir em distância Euclidiana mais do que um padrão completamente diferente mas 10 pips mais alto ou mais baixo do que o que está sendo comparado. E a diferença será de duas ordens de grandeza, portanto o erro de comparação também será de duas ordens de grandeza.