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

 

Obrigado, olhei para as colunas, em princípio já fiz isso também - deltas, min, max, tempo, etc.

A maneira de criar um modelo de negociação forex para mim só fica mais complicada, maneiras simples não dão resultados estáveis. O que eu vejo agora é o seguinte:

1) descarregar dados do MT5: ohlc, tempo, indicadores. Nesta fase, não vou acrescentar deltas.

2) carregar dados em R, adicionar um grande número de novas colunas adicionando, subtraindo, min, max, etc. dos dados iniciais. É mais fácil de o fazer em R do que em mt5.

3) selecionar de alguma forma subconjuntos de dados de entrada (por colunas). Posso seguir o exemplo do Alexey usando GenSA ou apenas otimização genética usando o pacote GA. Como eu só preciso de um resultado binário por entrada (on/off), GA tem uma vantagem na minha opinião, tem um modo de operação binário. Mas eu preciso de tentar comparar os dois pacotes.

4) Análise de subconjuntos de entradas. Isto também está no exemplo do Alexei. Mas arrisco-me a treinar o modelo num subconjunto de inputs imediatamente, e utilizarei o erro dos dados de validação como resultado. Desde que o tempo de aprendizagem do modelo não seja superior a alguns segundos.

5) Voltar ao passo 2, adicionar novas entradas contadas, executar outros passos, passar por tais ciclos até que o resultado pare de melhorar.

Eu também experimentei um pouco o artigo sobre Método dos componentes principais. Há uma nuança no exemplo do artigo que diz que o resultado pode ser exatamente calculado a partir dos dados de entrada. No meu caso, quando os dados introduzidos não são obviamente suficientes, este método começa a utilizar o ruído para a aprendizagem. Acontece que se este método puder alcançar um resultado (r-quadrado) de 0,95 com apenas um par de componentes - então os preditores utilizados no modelo estão muito provavelmente correctos. Se mesmo usando todos os componentes, o r-quadrado ainda é inferior a 0,95, o modelo inclui ruído em seus cálculos. No entanto, é digno de nota que, à medida que se adicionam mais preditores de ruído - o r-quadrado vai diminuindo pouco a pouco. Acho que desta forma é possível comparar sub-conjuntos de preditores uns com os outros - se r-quadrado é maior, então o sub-conjunto é melhor.

 
Dr.Trader:


Eu também experimentei um pouco mais com o artigo do Método dos Componentes Principais. No exemplo do artigo há uma nuance de que o resultado pode ser calculado com precisão a partir dos dados de entrada. No meu caso, quando os dados de entrada não são obviamente suficientes, este método começa a usar o ruído para a aprendizagem. Acontece que se este método puder alcançar um resultado (r-quadrado) de 0,95 com apenas um par de componentes - então os preditores utilizados no modelo estão muito provavelmente correctos. Se mesmo usando todos os componentes, o r-quadrado ainda é inferior a 0,95, o modelo inclui ruído em seus cálculos. No entanto, é digno de nota que, à medida que se adicionam mais preditores de ruído - o r-quadrado vai diminuindo pouco a pouco. Eu acho que esta é uma maneira de comparar sub-conjuntos de preditores uns com os outros - se r-quadrado é maior, então o sub-conjunto é melhor.

Até agora, o que parece que temos em termos de pré-seleção de preditores que são "relevantes" para a variável alvo: Alexey tem algum conjunto de técnicas e eu tenho. Não seria uma má ideia ter outra. O PCA é muito atractivo como é amplamente conhecido, muita literatura.... Note, no entanto, que há um grande número de algoritmos que calculam a "importância" do preditor, mas eu não consegui usá-los. Mas em combinação com o meu algoritmo, quase todos estes algoritmos padrão dão bons resultados - o erro é reduzido em 5-7%.

E o número de preditores iniciais, penso eu, deve ser de algumas dezenas com vários milhares de observações. Nas estatísticas, se algo não é suficiente, então não há estatísticas.

 
Dr. Trader:

Obrigado, olhei para as colunas, em princípio já fiz isso também - deltas, min, max, tempo, etc.



De nada. Podes praticar no meu kit também. Há um desenho de qualidade da experiência. Os dados são bons. E obter um resultado positivo na validação não é nada fácil.

1) Descarregar dados do MT5: ohlc, tempo, indicadores. Não vou acrescentar deltas nesta fase.

2) carregando dados em R, acrescente a eles um número enorme de novas colunas adicionando, subtraindo, min, max, etc. as originais. É mais fácil de o fazer em R do que em mt5.

3) selecionar de alguma forma subconjuntos de dados de entrada (por colunas). Posso seguir o exemplo do Alexey usando GenSA ou apenas otimização genética usando o pacote GA. Como eu só preciso de um resultado binário por entrada (on/off), GA tem uma vantagem na minha opinião, tem um modo de operação binário. Mas você precisa de tentar comparar os dois pacotes.

Aqui aconselho a manter dois pontos: primeiro - as entradas devem ser allvdostationary em relação à sua média. Segundo - sobre o mecanismo de enumeração de colunas; sim, a GA tem modo binário. GenSA não, mas eu simulei a seleção binária.

4) Análise de subconjuntos de entradas. Isto também está no exemplo do Alexei. Mas arrisco-me a treinar o modelo numa subamostra de inputs imediatamente, e usarei como resultado o erro dos dados de validação. Desde que o tempo de aprendizagem do modelo não seja superior a um par de segundos.

Boa ideia! Mas tenha em mente que todo o processo ainda pode levar muito tempo, já que você normalmente precisa de milhares de iterações. Esta função de adequação é a mais complexa, pois calcula o modelo completo. Eu, por outro lado, aplico a chamada função de filtragem, onde não há aprendizado como tal, mas há um heurístico que determina o quanto os inputs afetam o output em um sentido mais amplo. O cálculo pode ser mais rápido do que dois segundos. Mas não por uma ordem de grandeza.

A maneira de criar um modelo de negociação forex para mim só fica mais complicado, maneiras simples não produzem resultados consistentes. Neste momento, vejo as coisas assim:

Até agora desisti de acrescentar novos preditores e todo o tipo de pequenos melhoramentos ao desenho da experiência.

Tenho uma ideia a flutuar à volta da qual ainda não implementei. A questão é que nós, você e todos normalmente prevemos uma certa condição de fechamento do negócio, por exemplo, 3 horas antes ou quando o preço atinge um nível de take ou stop.

E você tem péssimos resultados. E quando entro em várias condições simultâneas no MT4 para fechar um negócio, que são trabalhadas através do operador OR, consigo obter um OM positivo mesmo fora da amostra.

Então eu estava me perguntando como eu poderia simular em R prevendo o resultado de uma negociação com base em várias condições ao mesmo tempo. Por exemplo, se o preço atingir o TP dentro de 3 horas, então feche-o. Mas o parâmetro de 3 horas não deve ser ajustado rigidamente, porque deve ser escolhido de forma ideal. E se também acrescentarmos a condição de que se o preço for positivo dentro de 3 horas, mas não tiver atingido o TP, devemos puxar o STOP para o Breakeven.

Neste caso, a entrada de uma posição também é prevista pela máquina.

Essa é a tarefa em mente.

 
Alexey Burnakov:

Então eu estava me perguntando como eu poderia simular em R prevendo o resultado de uma negociação com base em várias condições ao mesmo tempo. Por exemplo, se o preço atingir o TP dentro de 3 horas, então feche-o. Mas o parâmetro de 3 horas não deve ser ajustado rigidamente, porque deve ser escolhido de forma ideal. E se também adicionarmos a condição de que se o preço estiver ganhando dentro de 3 horas, mas não tiver alcançado o TP, precisamos sortear o STOP para o Breakeven.

Da experiência de negociação de EAs não gosto de TP e SL. Se o sistema de negociação for construído corretamente, então suas próprias saídas das negociações serão mais eficazes do que as saídas baseadas em TP e SL.

Os valores ótimos de SL e TP mudam com o tempo, não há um valor constante estável. Podemos encontrar alguns valores que irão melhorar a eficiência do sistema de trading em algum período determinado, mas neste caso a eficiência da estratégia irá diminuir para além deste período. É melhor não mover o SL, mas mantê-lo à distância de "algo deu errado" e geralmente parar de negociar se o preço atingir o SL, para análise de erros e otimização da estratégia de negociação.

Mas há alguns EAs inteligentes que usam o TP. Eu entendo que já devemos introduzir um TP constante no conjunto de treinamento. Por exemplo, no meu caso o resultado do treinamento TP é 0/1 - o preço aumentou/diminuiu na próxima barra. Mas se o preço aumentou e atingiu o nível do TP, então no final da barra caiu abaixo do nível inicial - no conjunto de treinamento o resultado "1", não "0" (porque o negócio será fechado com lucro no TP, e não haverá mais negócios até o final da barra). TP é geralmente pequeno, menos de 50 pontos (5 pips nos quatro dígitos). SL é dezenas de vezes maior, só para o caso de "tudo correr mal". TP para fronttest ou trade não pode ser otimizado, apenas o utilizado na criação de uma amostra de treinamento. Já vi estratégias tão bem sucedidas, acho que vale a pena cavar esta direcção.

 
Dr. Trader:

De experiência comercial especializada eu não gosto de TP e SL. Se o sistema de trading for construído correctamente, as suas próprias saídas de trades serão mais eficazes do que as saídas baseadas em TPs e SLs.


E como são formuladas as suas próprias saídas? Só pelo tempo?

Se você disser para fechar em uma hora, mas se dentro de uma hora o TP for violado, então esse seria o resultado 1, então já estão sendo usadas condições complexas de fechamento.

Sobre TP de 5 pts e SL de dezenas de vezes mais - como uma opção, mas tal TP vai comer o lucro.

 

Estou contigo esta semana e na semana passada separada por fusos horários, para não ter uma marcação ao vivo. Estou na Califórnia para trabalhar, por isso...

De qualquer forma, acho que eu (talvez você também) já posso planejar bem a experiência, treinar e validar os resultados. Você também pode recrutar preditores redundantemente.

Eu acho que o senão é que prever uma troca baseada em um alvo fixo, como fechar em uma hora, não é ótimo, e os resultados são fracos.

No MT tester eu otimizo com base no equilíbrio e no fator de recuperação. Em R I otimizo a precisão de adivinhar direções ou prever diferenças de preço. Estas são coisas diferentes, não importa como você olhe para elas.

Talvez tente escrever a sua própria função de perdas em R para o método de aprendizagem, onde o lucro é maximizado, por exemplo. Esta função pode ser substituída em alguns métodos de aprendizagem.

 
Alexey Burnakov:

Estou contigo esta semana e na semana passada separada por fusos horários, para não ter uma marcação ao vivo. Estou na Califórnia para trabalhar, por isso...

De qualquer forma, acho que eu (talvez você também) já posso planejar bem a experiência, treinar e validar os resultados. Você também pode recrutar preditores redundantemente.

Eu acho que o senão é que prever uma troca baseada em um alvo fixo, como fechar em uma hora, não é ótimo, e os resultados são fracos.

No MT tester eu otimizo com base no equilíbrio e no fator de recuperação. Em R I otimizo a precisão de adivinhar direções ou prever diferenças de preço. Estas são coisas diferentes, não importa como você olhe para elas.

Talvez tente escrever a sua própria função de perdas em R para o método de aprendizagem, onde o lucro é maximizado, por exemplo. Esta função pode ser substituída por alguns métodos de aprendizagem.

Ultimamente tenho estado a implementar o seguinte plano.

Eu implementei o meu antigo indicador de tendência baseado no EA. É um Expert Advisor sólido que negoceia em conta real.

A seguir.

Eu procuro os seus inconvenientes e tento melhorá-los usando o R.

Por exemplo.

Eu tomo a direcção geral a partir da barra alta. No entanto, se eu olhar atentamente para o tempo, há um tremendo atraso em termos de barras mais baixas, especialmente. Então, se é D1 e eu troco no M5, acontece que eu levo quase os dados de anteontem para a direção. Mesmo a previsão de um passo à frente para D1 com 30% de erro melhorou radicalmente a rentabilidade da EA e, o que é mais importante, aumentou a confiança de que ela não se esgotará.

Que tal desta forma - prever em R alguns elementos de uma EA pronta, mesmo má, a fim de atualizá-la?

Como é que se encontra uma ideia dessas?

 

Escreveu recentemente um artigo para o smart-lab. Uma comunidade fraca, mas tem algo útil:

http://smart-lab.ru/search/topics/?q=%D0%B4%D0%BB%D1%8F+%D0%BB%D1%8E%D0%B1%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9+fx

 
SanSanych Fomenko:

Tenho implementado o seguinte plano ultimamente.

Eu levei o meu antigo conselheiro de tendências em indicadores. É um Expert Advisor de pleno direito que negoceia em conta real.

Agora estou à procura dos seus inconvenientes e a tentar reduzi-los usando o R.

Eu procuro os seus inconvenientes e tento melhorá-los usando o R.

Por exemplo.

Eu tomo a direcção geral a partir da barra alta. No entanto, se eu olhar atentamente para o tempo, há um grande atraso em termos de barras mais baixas, especialmente em termos de barras. Então, se é D1, e eu troco no M5, acontece que eu levo quase os dados de anteontem para a direção. Mesmo a previsão de um passo à frente para D1 com 30% de erro melhorou radicalmente a rentabilidade da EA e, mais importante ainda, aumentou a confiança de que ela não se esgotará.

Que tal desta forma - prever em R alguns elementos de uma EA pronta, mesmo má, a fim de atualizá-la?

Como é que se encontra uma ideia dessas?

A ideia é interessante. Eu também tenho alguns EAs a funcionar. Talvez eu pense em como melhorá-los. Mas eu não entendo o que exactamente precisa de ser melhorado? O que é que a máquina precisa de aprender?

O Expert Advisor tem uma lógica rígida de abertura e fechamento de posições. Na aprendizagem mecânica, a decisão é tomada de uma forma ligeiramente diferente.

Então, não é exactamente claro o que vais fazer.

 
Alexey Burnakov:

É uma ideia interessante. Eu também tenho EAs a funcionar. Talvez eu pense em como melhorá-los. Mas não está claro para mim o que exactamente precisa de ser melhorado? O que você precisa ensinar à máquina?

O Expert Advisor tem uma lógica rígida de abertura e fechamento de posições. Na aprendizagem mecânica, a decisão é tomada de uma forma ligeiramente diferente.

Então, não está muito claro o que exatamente você vai fazer.

O que você vai fazer é claro. O que não está claro é porque precisamos dele. Primeiro, se existe um sistema que analisa a correcção do outro sistema e/ou parâmetros de controlo, então o sistema controlado torna-se desnecessário, porque se os utilizarmos em conjunto, a eficiência total de ambos irá diminuir de uma só vez e será menor do que se os utilizarmos separadamente. Por exemplo, se existe um sistema que dá 70% de decisões corretas, e existe um sistema que pode controlar um ou mais parâmetros com 99% de precisão, então a eficiência final será igual:

0,7*0,99=0,693

que é mais baixo que os sistemas sozinho.

Ámen. É melhor tentar melhorar o sistema original sem "controladores".