Download MetaTrader 5

Florestas Aleatórias na Previsão das Tendências

23 julho 2015, 10:39
СанСаныч Фоменко
0
2 627

Introdução

O objetivo inicial da construção de qualquer sistema de negociação é prever o comportamento de um instrumento do mercado, por exemplo, um par de moedas. Os objetivos das previsões podem ser diferentes. Vamos nos limitar apenas com a previsão de tendências, ou para ser mais preciso, prever o crescimento (posições compradas) ou o declínio (posições curtas) das cotações dos pares de moedas.

Para prever o comportamento da moeda, um trader atribui um par de indicadores a um gráfico do par de moeda e tenta encontrar um padrão que possui um poder preditivo.

Este artigo considera a seleção automática dos padrões e a sua avaliação preliminar utilizando o pacote Rattle, que é uma biblioteca do sistema de análise estatística R.


1. Sobre o Rattle

Nós vamos usar o R para prever o comportamento dos pares de moedas, que é ideal para a previsão de mercados financeiros. No entanto, o R é essencialmente uma linguagem de programação para estatísticos qualificados, estando além da compreensão de muitos traders. A complexidade de R é agravada pelo fato de que as ferramentas de previsão são numerosas e espalhadas por vários pacotes que formam a funcionalidade básica do R.

O Rattle (A ferramenta Analítica de R para aprender facilmente) reúne um conjunto de pacotes de R, que são importantes para o desenvolvimento de sistemas de negociação, mas ele não é fácil de se usar separadamente por novatos. Não é necessário saber e entender a linguagem R para começar a trabalhar com o Rattle. O resultado do trabalho com o Rattle será um código em R, que é possível ser utilizado para o desenvolvimento de um sistema real de negociação. No entanto, nesta fase será necessário ter conhecimento de R.

Em qualquer caso, o Rattle é uma ferramenta insubstituível na fase de concepção de um sistema de negociação. Ele permite que até os iniciantes possam ver e avaliar rapidamente os resultados de várias idéias.

Rattle (Williams, 2009) é um software livre com código open source criado como um pacote, que é uma parte do R (R Developing working group, 2011). Uma vez que ele é um software livre, o código fonte de Rattle e R estão disponíveis sem quaisquer limitações. O código fonte de Rattle é escrito em С e os usuários possuem permissão e são encorajados a estudar o código, testá-lo e estendê-lo.


2. Descrição dos Dados de Origem

Os cálculos realizados neste artigo são baseadas em um conjunto de dados contendo as cotações de seis pares de moedas EURUSD, GBPUSD, USDCHF, USDJPY, EURGBP, USDCAD com os preços de fechamento no período Н1 para o intervalo de 10.01.2011 a 24.12.2013. Os dados compreendem mais de 18000 barras, o que torna o cálculo confiável. O conjunto de dados com base nos pares de moedas acima foi usado para procurar padrões prevendo as posições compradas e vendidas.

O conjunto com as cotações iniciais de dados podem ser encontrados no arquivo em anexo chamado kot60_110101_131231_UA.txt.


2.1. Criando uma variável de Destino

Na primeira fase, temos de definir exatamente o que nós estamos querendo prever. Apesar de parecer simples, é fundamental selecionar o objetivo correto para a previsão e os dados, como um conjunto de números, que farão parte deste objetivo.

Quanto à ideia de prever uma tendência, ela se baseia no desejo de negociar em uma tendência.

De acordo com a definição de um "tendência", "uma tendência de alta é caracterizada quando cada um dos preços é sucessivamente maior que o seu anterior" e o oposto é para uma tendência de baixa. Assim, a necessidade de prever o preço de um par de moedas decorre da definição dada acima. Se a taxa inicial para o EURUSD é de 1.3500 e o previsto é de 1.3550, então a tendência é de alta e ele alerta para uma compra.

No entanto, as ordens básicas são de "comprar" e "vender" ao passo que a previsão é para o nível de preços. Por exemplo, o nível de preço é usado em sistemas de negociação para prever um nível de rompimento. Para implementar a idéia de negociação em tendências, uma comparação adicional ao preço tem que ser levado em consideração. Aparentemente, nós estamos prevendo uma coisa diferente da qual nós estávamos fazendo para a negociação!

Portanto, se o sistema de negociação é por padrão um seguidor de tendências, então, o modelo precisa prever as tendências. O modelo tem que ser treinado para reconhecer tendências, a variável objetivo tem que assumir apenas dois valores - "comprar" e "vender". Na forma de código (categoricamente) a variável objetivo assumirá os valores "1" e "-1".

Há uma diferença fundamental entre os modelos que usam a população da fonte de dados para o cálculo do preço de um instrumento financeiro e os modelos que filiam uma população da fonte de dados para uma classe. Os modelos do primeiro tipo pertencem aos modelos de regressão e os modelos do segundo tipo pertencem àqueles de classificação.

Modelos preditivos do tipo de regressão são utilizados para calcular algum valor no futuro. Quando esse futuro chega, nós teremos o valor factual para comparar com a previsão.

Modelos preditivos do tipo de classificação são usados ​​para o calcular a classe que será afiliada uma população da fonte de dados recebida no momento da previsão. Serão duas classes, uma para a posição "comprada" e outra para "vendida". Como em qualquer outro modelo do tipo de classificação, essas duas classes não possui tamanho específico. Assim, a classe "comprada" não poderá ser comparada com a "vendida". Apesar que, por conveniência nós codificaremos "comprado" como "1" e "vendido" como "0", isso não significa que "comprado" é maior que "vendido". Para enfatizar isso, tais variáveis ​​qualitativas de R e, consequentemente, de Rattle apresentam um tipo especializado de variáveis ​​categóricas (nominais).

As posições comprada e vendida como variáveis objetivo não existem e essa é a principal diferença em relação às variáveis ​​independentes descritas abaixo. Este aspecto concorda com o fato de que nós estamos prevendo um futuro que não existe no presente momento do tempo. Nós podemos assim desenhar as tendências nos dados históricos já que sabemos o futuro em relação ao passado.

Para distinguir as tendências nos dados históricos, vamos usar o ZigZag. Este é um indicador brilhante para os dados históricos e inútil para os dados atuais já que o o último topo/fundo e às vezes o anterior é redesenhado. Como não há dinâmica nos dados históricos, nós podemos desenhar muitas tendências bonitas com este indicador.

O indicador ZigZag com o parâmetro "distância entre os pontos de reversão" igual a 0.0035 dólares foi utilizado para o cálculo da variável objetivo. Fig. 1 representa o resultado.

Fig.1. O indicador ZigZag

Fig. 1. O indicador ZigZag

Agora, os valores do indicador serão convertidos para um valor categórico onde "comprado" = 1 e "vendido" = 0. 

O resultado é mostrado na Fig. 2.

Fig.2. O indicador ZigZag na forma categórica

Fig. 2. O indicador ZigZag na forma categórica

Vamos realizar a última operação com a variável objetivo Se deslocarmos o indicador ZigZag para a esquerda, a barra atual irá corresponder ao valor futuro do indicador ZigZag. Neste artigo, o deslocamento é feito por uma barra, que é igual a previsão de um passo à frente para os dados utilizados com uma hora de antecedência.

O deslocamento pode ser feito por um número maior de barras e ela irá correlacionar a previsão para um número maior de barras. Esta abordagem difere de outras abordagens de previsão pois o valor anterior pode ser utilizado para prever vários valores futuros que conduzem a uma soma dos erros de predição.

Os modelos em destaque neste artigo, bem como os modelos de classificação, em geral, não acumulam erros. Nos modelos de classificação, a predição para duas barras a frente tem o seu próprio erro de previsão, não estando ligado de forma alguma com o erro de predição para uma barra a frente.


2.2. Criando Variáveis ​​Independentes

As variáveis ​​independentes ou preditoras são chamadas assim porque elas vêm com um modelo externo. Elas são externas, variáveis ​​mensuráveis ou calculadas com base nessas variáveis ​​externas. Todos os dados econômicos e financeiros, incluindo as cotações dos pares de moedas são variáveis ​​independentes já que seus valores são o resultado da atividade dos agentes do mercado. Os dados recebidos a partir dos indicadores técnicos pertencem à mesma categoria já que eles são calculados com base nas cotações.

A seleção das variáveis ​​independentes é tão importante como a escolha da variável alvo. De fato, é a seleção das variáveis ​​independentes que define o sucesso da modelagem. A maior parte do tempo despendido no desenvolvimento do modelo é dedicado à análise e seleção do conjunto de variáveis ​​independentes.

As variáveis ​​do arquivo fonte kot60_110101_131231_UA contendo seis cotações de pares de moedas, hora e data, pode ser definido como preditores.

A hora e a data são muito interessantes do ponto de vista deste método. Sempre houve tentativas de se usar a data e hora em sistemas de negociação. Em nossos modelos, tendo em conta alguns dados ocultos sobre a dependência da cotações na hora do dia e no dia da semana, ela pode ser revelada pelos modelos de classificação automaticamente. A única coisa a fazer aqui é converter essas duas variáveis ​​na forma categórica. A hora se tornará uma categoria com 24 níveis e a data uma variável categórica com cinco níveis para coincidir com o número de dias da semana.

Além dos preditores de origem, nós vamos criar preditores adicionais, o que, na minha opinião revelam a existência de tendências nas cotações de origem. Nós vamos usar alguns indicadores bem conhecidos para criar os preditores adicionais.

Os seguintes indicadores serão utilizados: 5,10 e 15; MACD (12,26,9), o RSI com os períodos 14,21,28. Em cima deles, nós vamos usar incrementos de cotações e médias móveis. Todas estas conversões é para ser aplicada a todos as seis cotações dos pares de moedas.

O indicador ZigZag será incluído no número de variáveis ​​independentes para fins de apoio. Ele não vai ser utilizado para o desenvolvimento de modelos uma vez que o seu valor na barra mais à direita é desconhecido.

Então, nós temos 88 variáveis ​​independentes, uma variável objetivo e uma variável de serviço (ZigZag). A quantidade de dados para cada uma das variáveis ​​é de 18083 barras.

Este conjunto de dados tem a forma do espaço de trabalho de R e pode ser encontrado em anexo neste artigo com o nome de TC.RData. Este conjunto de dados pode ser usado como se segue:

  • carregue o R;
  • carregue a biblioteca Rattle;
  • guia File/Workspace;
  • encontre o arquivo TC.RData no disco e carregue-o.

3. Análise Inteligente dos Dados de Origem

O pacote Rattle oferec um conjunto de ferramentas para o processamento inteligente o preliminar dos dados - mineração de dados.

3.1. Entrada e Visualização

Vamos considerar algumas oportunidades que se tornam disponíveis depois de executar as ações mencionadas na seção acima.

O resultado pode ser visto na imagem representada na fig. 3.

Fig. 3. Tela inicial do Rattle

Fig. 3. Tela inicial do Rattle

O desenvolvimento de um modelo em Rattle ocorre à medida que avançamos a partir da guia de Data para a guia Log.

A primeira aba do Rattle é a Data. Em conformidade com o seu nome, esta guia permite que os dados de carregamento possam ser trabalhados no futuro.

Os dois botões Spreadsheets e R Dataset são de particular interesse para nós.

O botão Spreadsheets permite o upload de arquivos do Excel. Se o leitor quer testar as suas ideias, é possível preparar o seu próprio arquivo do Excel e, em seguida, tentar no Rattle.

Para repetir as ações descritas neste artigo ou executar algumas ações adicionais com um arquivo contendo os dados brutos em anexo a este artigo, utilize o botão R Dataset. Este botão carrega o arquivo no formato R. O arquivo é chamado de "Diretório de Trabalho" ou "Arquivo de Trabalho". Eles têm uma extensão do tipo .Rdata no disco. Este arquivo pode ser carregado para o R e se tornará disponível após clicar neste botão.

Carregue o nosso arquivo preparado e obtenha a parte superior da imagem na Fig. 4 e a parte inferior da imagem na Fig. 5.

Fig. 4. Parte superior do arquivo de origem

Fig. 4. Parte superior do arquivo de origem

Fig. 5. Parte inferior do arquivo de origem

Fig. 5. Parte inferior do arquivo de origem



3.2. Correlação da variável Objetivo com as Variáveis ​​Independentes

Nota. O botão "Run" desempenha um papel crucial. A ação começa a ser preparada, mas não executada. Para realizar qualquer ação, pressione o botão "Run". Ele tem de ser feito em cada tempo repetindo as ações descritas neste artigo.

Fig. 4 mostra uma lista de variáveis, as suas características e o papel dessas variáveis. Já que não vamos usar o indicador ZigZag nos modelos pois é impossível de fazê-lo de qualquer maneira, nós vamos marcá-lo como o único a ignorar, ou seja, definido como Ignorar.

Outras variáveis ​​são utilizadas como as de entrada, exceto para o último, que é usado como a variável de interesse.

O botão Partition desempenha um papel importante para a comprovação do nível de confiança para os resultados da modelagem. Usando este botão, o conjunto de dados pode ser dividido em três partes, se necessário. As proporções do conjunto de dados que são usados ​​para treinamento, validação e teste do modelo são especificados nesta fase.

No campo seguinte, a semente para o sensor de números pseudo-aleatórios é especificada. Por exemplo, 70% dos dados de base recolhidos para o conjunto de dados de treinamento é selecionado a partir dos dados de origem definidos aleatoriamente. Como resultado, as outras duas partes de 15% (como em nosso caso) também são sequências aleatórias das barras.

Portanto, alterar a semente a partir do conjunto de dados de origem, é possível obter uma quantidade indefinida de vários treinamentos e outros conjuntos de dados.

Fig. 6. Correlação de variáveis

Fig. 6. Correlação de variáveis

Encontre uma coluna com o nome ZZ.35 na tabela recebida. O exemplo mostrado na tabela abaixo foi feita a partir dessa coluna.

Variável
ZZ.35
 RSI_cad.14
 -0.0104122177
 JPY.dif2
 -0.0088412685
 EUR.dif3
 -0.0052379279
 CHF.dif3
 -0.0049692265
 GBP.dif3
 -0.0047409208
 GBP.dif1
  0.0044691430
 MA_cad.15.dif1
 -0.0039004722
 JPY.dif1
 -0.0023831247
 GBP.dif2
 -0.0015356091
 EUR.dif2
 -0.0013759749
 CHF.dif2
 -0.0012447101
 EUR.dif1
 0.0005863149
 MA_cad.10.dif1
 0.0023981433
 CHF.dif1
 0.0024543973
 MA_gbp.5.dif1
 0.0043757197
 MA_cad.5.dif1
 0.0075424397
 MA_gbp.10.dif1
 0.0094964069
 EURGBP.dif1
 0.0095990416
 CAD.dif1
 0.0110571043

Tabela 1. Correlação de variáveis

Como podemos ver, há uma longa lista de variáveis ​​que têm uma correlação com ZZ.35 inferior a 0.01. O nível de correlação, inferior a 0.1 não permite chegar a qualquer conclusão sobre a influência das variáveis ​​independentes na variável objetivo.

Nesta fase, nós vamos observar este fato e usá-lo adequadamente, após os modelos serem avaliados.

Nos modelos de classificação, o grau de influência dos preditores da variável objetivo desempenham um papel muito importante. A um nível baixo de correlação, acredita-se que o preditor correspondente seja o ruído no modelo, o que leva ao seu retreinamento. O retreinamento do modelo acontece quando o modelo começa a levar em conta detalhes e preditores insignificantes para a variável objetivo.

Não há recomendações sobre o nível de correlação. Normalmente, eles usam o número mágico da estatística - 5%. Isto é incorreto em sua essência. Remover os preditores, que são o ruídos no modelo, leva a uma redução no erro da predição. A remoção de um preditor que não é o ruído no modelo, leva a um aumento no erro da predição. Portanto, a lista mínima de preditores úteis para o modelo são estabelecidas através de experimentos.


3.3. Escalabilidade

Alguns modelos, como as máquinas de vetores de suporte (SVM), são muito sensíveis a diferentes escalas dos preditores, significando o seguinte. Por exemplo, os dados sobre o par de moeda EURUSD possui uma variabilidade dentro do limite de 0.5, enquanto que o par USDJPY possui dentro de algumas dezenas de unidades. Para evitar diferentes escalas dos preditores, estes são transformados em um só escala na aba Transform. É preferível que as flutuações dos preditores aconteçam dentro do limite de [0-1].

Para realizar o escalamento, selecione Transform/Rescale/Scale [0-1]. Em seguida nós marcamos todas as variáveis ​​e pressionamos o botão "Run".


3.4. Conversão para a Forma Categórica

A conversão para a forma categórica permite converter o valor de uma variável numérica para um fator de vários níveis. O indicador RSI é o primeiro a ser convertido em um fator de níveis múltiplos. Acredita-se que para apresentar uma inversão de tendência os seus valores devem ser próximos de zero ou 100.

Para converter os valores do indicador RSI na forma categórica, selecione: Transform/Recode/KMeans. Fazendo isso, defina o número de níveis do fator para 8. Assinale todos os indicadores RSI e pressione "Run".

Em seguida defina a variável ZZ.35 para Ignore, assim, nós podemos passar para os modelos de desenvolvimento.


4. Algoritmo Geral do Modelo de Classificação

Os seguintes modelos estão disponíveis em Rattle:

  • modelo de classificação em forma de árvore (Tree);
  • modelo de floresta aleatório (Forest);
  • modelo de árvores de decisão (ADA);
  • modelo de máquinas de vetores de suporte (SVM);
  • modelo linear generalizado (GLM);
  • modelo de rede neural (NNET).

Apesar da diferença fundamental entre os modelos de classificação, (nós não estamos falando apenas daqueles disponíveis em Rattle), todos eles têm algumas características em comum, que são descritos abaixo.

Tomemos um conjunto de treinamento composto por strings (no nosso caso o número é 18030), que contém os valores dos preditores (88 no nosso caso) e o valor da variável de destino ("comprado" e "vendido").

Qualquer um dos algoritmos de classificação abordam o problema de separar as combinações dos valores do preditor correspondente a "comprado" a partir das combinações dos valores do preditor correspondente a "vendido". Esta é uma fase de treinamento de um modelo.

Em seguida, segue a fase de verificação do modelo.

Como dividimos o conjunto de dados de origem em três partes, nós tomamos outro conjunto de dados e consideramos as combinações dos preditores que estão sendo comparados com aqueles recebidos na fase de treinamento. Toda combinação de preditores será estabelecida, quando ela pertencer ao "vendido" ou "comprado". Uma vez que o conjunto de dados de verificação contém os valores conhecidos, o resultado é comparado com os dados factuais. A relação factual das posições comprada e vendida para aqueles previstos é um erro de predição.

Se o resultado não nos convém, nós podemos voltar à fase da análise inteligente dos dados para melhorar o resultado. Infelizmente, a qualidade desta fase é completamente definida pela experiência do trader. As alterações são feitas no conjunto de dados de origem e, em seguida, um modelo é desenvolvido novamente.

Se encontrarmos resultados satisfatórios obtidos no treinamento e na verificação dos conjuntos de dados, então nós verificamos o modelo sobre o conjunto de dados do teste, que é o único que ainda não foi utilizado.

A qualidade do modelo é definida não apenas por um pequeno erro de previsão, mas também pela pequena diferença entre os valores deste erro sobre os diferentes conjuntos de dados. Isso mostra a robustez do modelo e a ausência de retreinamento ou de um ultra ajuste como os traders costumam dizer.

Neste artigo apenas o modelo de floresta aleatória será analisado em detalhes.


5. Modelo de Floresta Aleatória

5.1. Resumo

O algoritmo do trabalho de um trader é o seguinte. Um conjunto de indicadores é adicionado a uma cotação de um par de moedas e uma decisão de negociação é tomada de acordo com o total das cotações atuais e os dados dos indicadores.

Em um sistema de negociação mais simples como a de "Média Móvel", eles compram se o preço atual for maior que a média móvel e vendem se ela estiver abaixo dela. Eles podem adicionar condições adicionais, como os dados recebidos do indicador RSI. Como resultado, o trader recebe uma árvore de decisão. Nas folhas da árvore existem as cotações do par de moedas, os valores da média móvel e o indicador RSI. A raiz da árvore contém apenas dois valores - "comprar" e "vender".

O processo descrito de construção de uma árvore foi automatizado no modelo de árvores de classificação. Como resultado, há apenas uma árvore, ou, na gíria dos traders, um padrão.

O algoritmo de uma única árvore é incapaz de construir modelos precisos já que a diversidade leva à instabilidade, o que pode ser visto na construção de árvores de decisão distintas.

O leitor pode verificar desta afirmação, utilizando o modelo de árvore no Rattle. Este modelo implementa o algoritmo descrito para a construção de uma árvore.

A idéia do modelo de floresta aleatória está incluída em muitos modelos de árvores de classificação (padrões), não apenas um. Assim, a floresta aleatória tende a ter uma maior resistência às mudanças de dados e ao ruído (que são variáveis ​​que têm pouca influência sobre a variável objetivo).

A aleatoriedade utilizada pelo algoritmo floresta aleatória se manifesta tanto na escolha das linhas da tabela (observações) e preditores. Esta aleatoriedade define a resistência significativa ao ruído, aos valores atípicos e ao retreinamento se comparado com outros classificadores autônomos na forma de árvore.

A probabilidade também define a eficiência computacional significativa. Par Construir uma árvore de decisão independente, o desenvolvedor do modelo pode selecionar um subconjunto aleatório de observações disponíveis no conjunto de dados de treinamento. Além disso, em cada nó do processo de construção de uma árvore, eles consideram apenas uma pequena parte de todas as variáveis ​​disponíveis no estabelecimento da melhor proporção de divisão de um conjunto de dados. Isso leva a um relaxamento significativo dos requisitos para o desempenho computacional.

Assim, o modelo de floresta aleatória é uma boa escolha para o desenvolvimento de modelos por inúmeras razões. Muitas vezes um pequeno processamento preliminar dos dados é necessário já que os dados não estão supostamente normalizados e a abordagem é elástica para os valores atípicos. A necessidade de selecionar as variáveis ​​pode ser evitada já que o algoritmo escolhe de forma eficiente seu próprio conjunto de variáveis. Como um monte de árvores estão sendo construídos usando dois níveis de aleatoriedade (observações e preditores), cada árvore é um modelo independente eficiente. Esta modelo não está propenso ao retreinamento no conjunto de dados de treinamento.

Algoritmos de florestas aleatórias, muitas vezes geram de 100-500 árvores. Quando o modelo final é desenvolvido, as decisões tomadas por cada árvore são integrados para processar as árvores como iguais. A decisão final sobre um conjunto de árvores será a decisão sobre a maior parte das árvores constituintes. Se 51 árvores de 100 pontos esta para "compra", então o valor "comprado" será aceito, porém, com menos confiança.


5.2. Algoritmo

5.2.1. Formando um Exemplo a Partir do Conjunto de Dados

O algoritmo de formação de uma árvore aleatória gera muitas árvores de decisão usando agregação de bootstrap (ou bagging) para a introdução de aleatoriedade no processo de formação da amostra. A Agregação Bootstrap é uma idéia de reunir uma amostra aleatória de observações em uma bolsa. Muitas bolsas formadas em uma ordem aleatória consistem de observações selecionadas recebidas a partir das observações de origem no conjunto de dados do treinamento.

O Agrupamento para das bolsas é realizado com a substituição. Isso significa que toda observação tem a chance de múltiplas aparições em uma determinada bolsa. O tamanho da amostra é muitas vezes o mesmo que o conjunto de dados completo. A prática mostra que dois terços das observações serão incluídas em uma bolsa (com repetições) e um terço não será levado em consideração. Cada bolsa de observações é usada como um conjunto de treinamento para a construção de uma árvore de decisão. As observações desaparecidas podem ser usadas como uma amostra independente para avaliar o resultado.


5.2.2. Formação do Conjunto de Preditores

O segundo elemento básico da aleatoriedade diz respeito à escolha dos preditores para dividir um conjunto de dados. A cada passo da criação de um nó de decisão separado, ou seja, em cada ponto da divisão de uma árvore, um conjunto aleatório e geralmente pequeno de preditores é selecionado. Apenas os preditores selecionados no ponto de divisão serão considerados. Para cada nó na construção de uma árvore, eles consideram um conjunto aleatório diferente de preditores.


5.2.3. Aleatoriedade

Na formação de conjuntos aleatórios de dados e variáveis, eles recebem as árvores de decisão com vários resultados dependendo do subconjunto de dados. Esta alteração permite que o tratamento deste conjunto de árvores como uma equipe colaborativa de especialistas com diferentes níveis de competência façam uma previsão mais confiável.

A formação da amostra também tem outra vantagem significativa - a eficiência computacional. Considerando apenas uma pequena parte do número total de preditores ao dividir um conjunto de dados reduz significativamente o volume de cálculos necessários.

Na criação de cada árvore de decisão, o algoritmo de formação de uma árvore aleatória geralmente não cortam as árvores de decisão. Uma floresta com árvores aleatórias ultra-ajustadas podem desenvolver um modelo muito bom, que funciona bem em novos dados.


5.2.4. Cálculo em Conjunto

Ao tratar muitas árvores de decisão como um modelo, toda a árvore é igualmente importante na tomada de decisão final. A maioria simplesmente determina o resultado. Isto significa que 51% da divisões e 99% da divisões irão produzir a mesma classe, por exemplo, "comprado".

Os cálculos pelo Rattle são parciais já que o usuário obtém o resultado sob a forma de uma classe. Se o modelo é usado em R, os resultados na forma de uma classe de probabilidade se tornarão disponíveis.


5.3. Desenvolvimento de um Modelo de Floresta Aleatório

Para construir um modelo, selecione Model/Forest. O Início do cálculo do modelo irá levar alguns minutos para os nossos dados de origem.

Vou dividir o resultado do cálculo em várias partes e comentar sobre cada uma delas.

Vamos analisar os resultados trazidos na Fig. 7.

Fig. 7. A parte superior dos resultados do ajuste do modelo da floresta aleatória

Fig. 7. A parte superior dos resultados do ajuste do modelo da floresta aleatória

Algumas informações sobre esta figura devem ser realçados.

TREND é uma variável objetivo.

500 árvores foram geradas na construção deste modelo. Na divisão em cada nó da árvore, foram utilizados nove preditores (variáveis). Além disso, os botões Errors e OOB ROC são de especial interesse para nós.

Em seguida, segue os erros de previsão:

Estimativa OOB da taxa de erro: 15,97%

Matriz de confusão:


01class.error
0496011630.1899396
18585677 0.1312930

Tabela 2. Tabela de Contingência da Matriz de Erro para o Conjunto de Treinamento

Ela deve ser interpretada como "O erro fora da amostra é de 15,97%".

O erro de previsão obtido é significativo. É importante descobrir como ele foi obtido, ou para ser mais preciso, se ele foi obtido "fora de bolsa". Apenas uma parte do conjunto de dados de treinamento foi usado para desenvolver este modelo. Este modelo, por sua vez, fez 70% do conjunto de dados de origem. Cerca de 60% do conjunto de dados de treinamento foi usado para a construção desse modelo e 40% não foi utilizado. Estes 40% dos dados é chamado de "Fora da bolsa". O erro de predição de 15.97% foi recebido sobre estes dados.

Continuando.

A tabela de contingência ou matriz de erro é interpretado da seguinte maneira. 

A primeira linha contém as posições compradas e vendidas previstas. A coluna do lado esquerdo é uma coluna com posições reais compra e venda, recebidas do indicador ZigZag para os dados históricos.

O valor de 4960 com coordenadas (0,0) é um número de posições de compra e venda previstas corretamente. O próximo valor de 1163 é o número de posições de venda previstas como de compra.

O valor de 858 com coordenadas (1,0) é o número de posições de compra previstas como de venda. O valor de 5677 é o número de posições compra previstas corretamente.

Em seguida, passamos para os resultados da modelagem.

Abaixo estão algumas linhas da grande tabela que compreendem todas as variáveis ​​do modelo. Esta é uma tabela ​​da importância das variáveis.


01MeanDecreaseAccuracyMeanDecreaseGini
MA_eur.5.dif142.9741.8554.86 321.86
EUR.dif337.2146.3851.80177.34
RSI_eur.14 37.7040.1150.75254.61
EUR.dif2 24.6631.6438.24110.83
MA_eur.10.dif122.9425.3931.48193.08
CHF.dif3  22.9123.4230.1573.36
MA_chf.5.dif1  21.8123.2429.56135.34

Tabela 3. Importância da variáveis ​​do modelo Floresta Aleatória

Existem várias avaliações da importância das variáveis. A palavra "importância" aqui reflete o grau de influência de uma certa variável sobre a variável de interesse. Quanto maior o valor, mais "importante" será a variável.

Esta tabela fornece os dados para a exclusão de valores menos significativos do modelo. Em estatística e em particular na classificação, quanto mais simples for um modelo melhor, enquanto que a precisão do modelo não é sacrificada.

O botão de erros é a última coisa importante na aba Model. Pressionando ele nós receberemos a Fig.8.

Fig. 8. Dependência do erro de modelagem no número de árvores

Fig. 8. Dependência do erro de modelagem no número de árvores

6. Eficiência do Modelo

A avaliação da eficiência do modelo é realizada na guia Evaluate, onde o Rattle dá acesso ao conjunto de opções para isso.

Usaremos a Error Matrix (Matriz de Erro), como ela foi anteriormente chamada na Tabela de Contingência, na lista de opções disponíveis na avaliação da eficiência do modelo.

Quando você se move a partir da guia Model para a guia Evaluate, o último dos modelos criados serão sinalizadas automaticamente. Ele corresponde ao princípio geral de funcionamento em Rattle: nós criamos e configuramos um modelo e, em seguida, exploramos a sua eficiência na guia Evaluate.

Para a avaliação de um modelo, o conjunto de dados para realizar a verificação tem de ser especificado. A próxima linha de opções na interface Rattle é um conjunto de fontes alternativas de dados.

As primeiras quatro opções para Data correspondem à divisão do conjunto de dados especificado na guia Data. As opções são Training, Validation, Test e Full (todo o conjunto). A divisão do conjunto de dados em conjuntos de treinamento, validação e teste já foram discutidos.

A primeira opção é supostamente para validar o modelo sobre o conjunto de dados de treinamento. Geralmente não é uma boa idéia. O problema com o modelo de avaliação sobre o conjunto de dados de treinamento é que o modelo foi construído sobre este conjunto de dados. Lá, o modelo vai dar um bom resultado, uma vez que inicialmente era o que estávamos tentando alcançar. O modelo foi desenvolvido para ser utilizado em dados anteriormente desconhecidos.

É necessária uma abordagem para garantir um bom desempenho do modelo em novos dados. Ao mesmo tempo, obtém-se uma classificação efetiva dos erros do modelo, o que reflete a diferença entre a previsão para o modelo e os dados de fato. Esta classificação de erro em um conjunto de dados desconhecido, não o treinamento, é a melhor maneira de avaliar a eficiência do modelo.

Nós usamos o conjunto de dados de Validation (validação) para a verificação da eficiência do modelo em sua criação e configuração. Logo após o modelo ter sido criado, sua eficiência será verificada neste conjunto de dados de verificação. Algumas opções de configuração acima para a criação de um modelo poderá ser alterado. Nós comparamos o novo modelo com o antigo com a sua eficiência com base no conjunto de dados de verificação. Neste sentido, o conjunto de dados de verificação é utilizado na modelagem para desenvolver o modelo final. Nós, portanto, ainda temos uma estimativa deslocada da nossa eficiência do modelo, se contarmos com o conjunto de dados de verificação.

O conjunto de dados de Test (teste) foi o único que não foi usado na criação do modelo. Assim que identificarmos "o melhor" modelo baseado no conjunto de dados de Treinamento e de Verificação, podemos estimar a eficiência do modelo no conjunto de dados de Teste. Esta é a avaliação da eficiência esperada para quaisquer novos dados. A quarta opção usa a avaliação do modelo de dados Full (completa). O conjunto de dados completo é Treina, Testa e Verifica o conjunto de dados tudo junto. Isto não nada, apenas a curiosidade e certamente não uma tentativa de obter os dados precisos.

Outra oportunidade disponível como fonte de dados enviadas é através da entrada de exemplo. Elea está disponível se a opção Score for selecionada como o tipo de avaliação. Neste caso, uma janela para a introdução de dados adicionais irá abrir.

A matriz de erro será utilizada para prever a variável objetivo categórica.

A matriz de erro mostra os resultados factuais contra aqueles que foram preditos. Existem duas tabelas. A primeiro mostra os resultados quantitativos e o segundo mostra os resultados em percentagem.

A matriz de erro pode ser encontrada na guia Evaluate no Rattle. Pressionando "Run" irá implementar o modelo selecionado nos dados especificados definidos para prever o resultado para cada observação neste conjunto de dados. Em seguida, as previsões são comparadas com as observações factuais.

Fig. 9 representa a matriz de erro para o modelo de floresta aleatória calculado anteriormente.

Fig. 9. Resultado da avaliação do modelo de floresta aleatória

Fig. 9. Resultado da avaliação do modelo de floresta aleatória

A figura mostra que o erro de média é de 0.167, ou seja, 16.7%. Na fase de formação de predição de erro era de 15.97%. Podemos considerar esses valores iguais.

Vamos realizar um cálculo para o conjunto de dados de teste. O resultado é o seguinte:

A Matriz de erro para o modelo Floresta Aleatória em TC [teste] (contagem):


Predicted
Predicted
Actual  01
01016256
11931248

 Tabela 4. Matriz de erro para o modelo de floresta aleatória em termos absolutos (conjunto de dados de teste)


Matriz de erro para o modelo Floresta aleatória em TC [teste] (proporções):


Predicted
Predicted

Actual01Error
00.370.090.20
10.070.460.13

Tabela 5. Matriz de erro para o modelo de floresta aleatória em termos relativos (conjunto de dados de teste)


Erro global: 0.1654994, Média do erro de classe: 0.1649244

Erro de predição é de 16.4%.

Todas as três figuras são aproximadamente iguais, o que é um sinal de um resultado razoável de modelagem.

Por favor, note que a eficiência dos modelos calculados pelo Rattle devem ser verificados no Strategy Tester do МetaТrader 4 ou MetaTrader 5. Em seguida, ele deve ser testado em uma conta demo e uma conta real com pequenos lotes. Só depois de todas as execuções de testes, nós podemos chegar a conclusões finais sobre o modelo.


7. Melhorando o Modelo

Quando nós exploramos a correlação da pseudo variável ZZ.35 com preditores, nós descobrimos que um número significativo de preditores teve uma fraca correlação com a variável objetivo.

Vamos eliminar os preditores que possuem o coeficiente de correlação inferior a 0.01. Para isso, defina os preditores relevantes para Ignore na guia Data e repita o cálculo do modelo de floresta aleatória na guia Model.

Ficamos com o seguinte resultado:

  • erro de previsão fora da bolsa = 15.77%;
  • erro de previsão para o conjunto de dados de Validation = 15.67%;
  • erro de previsão para o conjunto de dados de Test = 15.77%.

Embora o erro reduzido seja insignificante, a diferença entre os erros de previsão para os diferentes conjunto de dados diminuíram. É um sinal de estabilidade do modelo.

Você pode manter a remoção de preditores seguinte a tabela de correlação. A eficácia do modelo pode ser melhorada, ou seja, redução do erro de predição, utilizando os dados da tabela de importância dos preditores que foi obtido no cálculo do modelo.

Em qualquer caso, a remoção dos preditores pode ser feito até que a remoção de um outro preditor leve a deterioração da eficiência do modelo. Você pode parar nesse ponto se você tiver um modelo mínimo e mais eficiente para um determinado número de preditores.


8. Usando o modelo no MetaTrader 4

Em teoria, a negociação usando o Rattle pode ser organizada da seguinte maneira. Os dados de entrada para o Rattle em Excel estão sendo preparados por algumas ferramentas externas para o período do dia e da noite. Após o fechamento da bolsa, um trader obtém os preços exigidos e coloca-os no arquivo de origem. Poucos minutos depois, a previsão para o dia seguinte estará pronta e poderá ser usada diretamente a partir da abertura.

É necessário o terminal МetaТrader 4 ou seu análogo para a negociação no intraday.

Para organizar uma negociação automatizada ou semi-automatizada usando o Rattle, são necessários os seguintes componentes:

  • um modelo previamente treinado, que foi salvo como o espaço de trabalho do R;
  • uma biblioteca de cooperação entro o terminal e o R;
  • código em R, que passa em cada novo bloco de dados para o modelo, obtendo o resultado e enviando o resultado da modelagem de volta para o terminal.

Treinamento por um dos seis modelos disponíveis em Rattle, que foram considerados acima. O número de modelos de classificação disponíveis em R está chegando perto de 150, mas para o Rattle eles não possuem serventia.

A biblioteca de interação de R e o terminal МetaТrader 4 pode ser encontrado na Base de Código: mt4R for new MQL4.

O código em R, que corresponde ao modelo treinado está no Diário (a guia Log). Todas as ações tomadas no desenvolvimento do modelo ficam registradas sob a forma de código em R. Isto é o que deve ser usado para a negociação real.


Conclusão

Ambos os novatos e os profissionais experientes irão encontrar este artigo útil para a avaliação preliminar e seleção de um sistema de negociação.

Usando o Rattle, o principal desafio intelectual ao desenvolver um sistema de negociação é a escolha certa da variável objetivo e os preditores necessário para isso. Os traders experientes já têm conhecimento nesta esfera e os novatos terão a prática necessária para com o Rattle.


Traduzido do russo por MetaQuotes Software Corp.
Artigo original: https://www.mql5.com/ru/articles/1165

Arquivos anexados |
Article.zip (6598.05 KB)
Programando os Modos do EA Usando a Abordagem Orientada a Objetos Programando os Modos do EA Usando a Abordagem Orientada a Objetos

Este artigo explica a idéia da programação multi-modo de um robô de negociação em MQL5. Cada modalidade é implementada com a abordagem orientada a objetos. São fornecidos as instâncias de ambos os modos de hierarquias de classe e das classes para testes. A programação multi-modo de robôs de negociação presumi-se levar em conta todas as peculiaridades de cada modo operacional de um EA escrito em MQL5. Funções e enumerações são criadas para identificar o modo.

Dicas para Escolher um Sinal de Negociação para Assinar. Guia Passo-a-Passo Dicas para Escolher um Sinal de Negociação para Assinar. Guia Passo-a-Passo

Este guia passo-a-passo é dedicado ao serviço de Sinais, examinação dos sinais de negociação, uma abordagem de sistema para a busca de um sinal desejado, que satisfaça os critérios de rentabilidade, risco, ambições de negociação, trabalhando em vários tipos de contas e instrumentos financeiros.

Redes Neurais de Terceira Geração: Redes Profundas Redes Neurais de Terceira Geração: Redes Profundas

Este artigo é dedicado a uma nova perspectiva na direção da aprendizagem de máquina - o aprendizado profundo ou, para ser mais preciso, redes neurais profundas. Esta é uma breve revisão das redes neurais de segunda geração, a arquitetura de suas conexões e tipos principais, os métodos e regras de aprendizagem e suas principais desvantagens seguido pela história do desenvolvimento da rede neural de terceira geração, os seus principais tipos, peculiaridades e métodos de treinamento. Conduzida por experimentos práticos sobre a construção e treinamento de uma rede neural profunda, iniciada pelos pesos de uma pilha de autoencoders (Stacked Autoencoders) contendo dados reais. Todas as etapas, desde a seleção dos dados de entrada até a derivação métrica, serão discutidas em detalhe. A última parte do artigo contém uma implementação de um programa de rede neural profunda em um Expert Advisor com um indicador embutido, baseado em MQL4/R.

Desenhando Medidores com Mostrador usando a classe CCanvas Desenhando Medidores com Mostrador usando a classe CCanvas

Podemos encontrar medidores com mostrador em carros e aviões, na produção industrial e na vida cotidiana. Eles são utilizados em todos os domínios que requerem uma resposta rápida a um comportamento de valor controlado. Este artigo descreve a biblioteca de medidores com mostrador para o MetaTrader 5.