Usando a Análise Discriminante para Desenvolver Sistemas de Negociação

ArtemGaleev | 19 fevereiro, 2014

Introdução

Uma das principais tarefas da análise técnica é determinar a direção em que o mercado vai se mover em um futuro próximo. Do ponto de vista estatístico, o mesmo se resume a seleção de indicadores e determinação de seus valores com base no qual seria possível dividir a situação futura do mercado em duas categorias: 1) movimento ascendente 2) movimento descendente.

A análise discriminante oferece uma das maneiras de decidir o tipo de indicadores e quais valores permitem melhor discriminação entre essas categorias. Em outras palavras, a análise discriminante permite construir um modelo que preverá a direção do mercado com base nos dados recebidos dos indicadores.

Tal análise é no entanto bastante complicada exigindo uma grande quantidade de dados na entrada. Portanto, é bastante demorado usá-lo manualmente para análise da situação do mercado. Felizmente, o surgimento da linguagem MQL5 e do software estatístico nos permitiu automatizar a seleção de dados, elaboração e aplicação da análise discriminante.

Este artigo fornece um exemplo de desenvolvimento de um EA para a coleta de dados de mercado. Ele serve como um tutorial para aplicação da análise discriminante para a construção do modelo de prognóstico para o mercado FOREX no software Statistica


1. Etapas da Análise Discriminante

A análise discriminante (daqui em diante "AD") é um dos métodos de reconhecimento de padrões. As redes neurais podem ser consideradas um caso especial de AD. AD é utilizado na maioria dos sistemas de defesa bem sucedidas que são baseadas no reconhecimento de padrões.

Permite determinar quais variáveis ​​dividir (discriminar) o fluxo de dados de entrada em grupos e ver o mecanismo de tal discriminação.

Vamos dar uma olhada em um exemplo simplificado de uso da AD para o mercado FOREX. Temos valores de dados dos indicadores índice de Força Relativa (IFR), MACD índice de Vigor Relativo (IVR) e precisamos prever a direção dos preços. Como resultado da AD, podemos obter o seguinte.

O indicador IVR não contribui para a previsão. Então vamos excluí-lo da análise.

b. AD produziu duas equações discriminantes:

  1. G1 = a1*RSI+b1*MACD+с1, a equação para os casos em que o preço subir;
  2. G2 = a2*RSI+b2*MACD+с2, a equação para os casos em que o preço baixar;

Calculando G1 e G2, no início de cada barra, nós prevemos que se G1 > G2, então o preço vai subir; E se G1 < G2, o preço baixará.

AD pode revelar-se útil para conhecimento inicial com redes neurais. Ao utilizar AD, obtemos equações semelhantes a aquelas calculadas para a operação de redes neurais. Isso ajuda a entender melhor a sua estrutura e preliminarmente determinar se vale a pena usar redes neurais em suas estratégias.


2. Etapas da Análise Discriminante

A análise pode ser dividida em várias etapas.

  1. Preparação dos dados;
  2. Seleção das melhores variáveis dos dados preparados;
  3. Análise e teste do modelo resultante usando dados de teste;
  4. Construção do modelo com base nas equações discriminantes.

A análise discriminante é uma parte de quase todos os pacotes de software modernos projetados para a análise de dados estatísticos. Os mais conhecidos são Statistica (StatSoft Inc.) e SPSS (IBM Corporation). Vamos considerar mais a aplicação da análise discriminante utilizando o software Statistica. As imagens fornecidas são obtidas do Statistica versão 8.0. Essas pareceriam mais ou menos as mesmas nas versões anteriores do software. Deve-se notar que Statistica oferece muitas outras ferramentas úteis para o comerciante, incluindo redes neurais.


2,1. Preparação dos dados

A coleta de dados depende de uma determinada tarefa em mãos. Vamos definir a tarefa da seguinte forma: por meio de indicadores, para prever a direção da tabela de preços na barra seguindo a barra com os valores conhecidos de indicadores. Uma EA será desenvolvida para coleta de dados para salvar valores dos indicadores e dados de preços em um arquivo.

Este deve ser um arquivo CSV com uma seguinte estrutura. Variáveis ​​devem ser organizados em colunas, onde cada coluna corresponde a um determinado indicador. As linhas devem conter medidas consecutivas (casos), ou seja, valores dos indicadores para determinadas barras. Em outras palavras, os cabeçalhos da tabela horizontal contêm indicadores, os cabeçalhos da tabela vertical contêm barras consecutivas.

A tabela deve ter uma variável com base em qual agrupamento será feito (a variável de agrupamento). No nosso caso, tal variável será baseada na variação de preços na barra seguindo a barra cujo indicador de valores foram obtidos. A variável de agrupamento deve conter o número do grupo cujos dados são exibidos na mesma linha. Por exemplo, número 1 para os casos em que o preço subiu e número 2 para os casos em que o preço baixou.

Vamos precisar dos valores dos seguintes indicadores:

A função OnInit() cria os indicadores (obtém o nome indicator) e o arquivo MasterData.csv onde salva o cabeçalho de dados da coluna:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- initialization of the indicators
   h_AC=iAC(Symbol(),Period());
   h_BearsPower=iBearsPower(Symbol(),Period(),BearsPower_PeriodBears);
   h_BullsPower=iBullsPower(Symbol(),Period(),BullsPower_PeriodBulls);
   h_AO=iAO(Symbol(),Period());
   h_CCI=iCCI(Symbol(),Period(),CCI_PeriodCCI,CCI_Applied);
   h_DeMarker=iDeMarker(Symbol(),Period(),DeM_PeriodDeM);
   h_FrAMA=iFrAMA(Symbol(),Period(),FraMA_PeriodMA,FraMA_Shift,FraMA_Applied);
   h_MACD=iMACD(Symbol(),Period(),MACD_PeriodFast,MACD_PeriodSlow,MACD_PeriodSignal,MACD_Applied);
   h_RSI=iRSI(Symbol(),Period(),RSI_PeriodRSI,RSI_Applied);
   h_RVI=iRVI(Symbol(),Period(),RVI_PeriodRVI);
   h_Stoch=iStochastic(Symbol(),Period(),Stoch_PeriodK,Stoch_PeriodD,Stoch_PeriodSlow,MODE_SMA,Stoch_Applied);
   h_WPR=iWPR(Symbol(),Period(),WPR_PeriodWPR);

   if(h_AC==INVALID_HANDLE || h_BearsPower==INVALID_HANDLE || 
      h_BullsPower==INVALID_HANDLE || h_AO==INVALID_HANDLE || 
      h_CCI==INVALID_HANDLE || h_DeMarker==INVALID_HANDLE || 
      h_FrAMA==INVALID_HANDLE || h_MACD==INVALID_HANDLE || 
      h_RSI==INVALID_HANDLE || h_RVI==INVALID_HANDLE || 
      h_Stoch==INVALID_HANDLE || h_WPR==INVALID_HANDLE)
     {
      Print("Error creating indicators");
      return(1);
     }

   ArraySetAsSeries(buf_AC,true);
   ArraySetAsSeries(buf_BearsPower,true);
   ArraySetAsSeries(buf_BullsPower,true);
   ArraySetAsSeries(buf_AO,true);
   ArraySetAsSeries(buf_CCI,true);
   ArraySetAsSeries(buf_DeMarker,true);
   ArraySetAsSeries(buf_FrAMA,true);
   ArraySetAsSeries(buf_MACD_m,true);
   ArraySetAsSeries(buf_MACD_s,true);
   ArraySetAsSeries(buf_RSI,true);
   ArraySetAsSeries(buf_RVI_m,true);
   ArraySetAsSeries(buf_RVI_s,true);
   ArraySetAsSeries(buf_Stoch_m,true);
   ArraySetAsSeries(buf_Stoch_s,true);
   ArraySetAsSeries(buf_WPR,true);


   FileHandle=FileOpen("MasterData2.csv",FILE_ANSI|FILE_WRITE|FILE_CSV|FILE_SHARE_READ,';');
   if(FileHandle!=INVALID_HANDLE)
     {
      Print("FileOpen OK");
      //--- saving names of the variables in the first line of the file for convenience of working with it
      FileWrite(FileHandle,"Time","Hour","Price","AC","dAC","Bears","dBears","Bulls","dBulls",
                "AO","dAO","CCI","dCCI","DeMarker","dDeMarker","FrAMA","dFrAMA","MACDm","dMACDm",
                "MACDs","dMACDs","MACDms","dMACDms","RSI","dRSI","RVIm","dRVIm","RVIs","dRVIs",
                "RVIms","dRVIms","Stoch_m","dStoch_m","Stoch_s","dStoch_s","Stoch_ms","dStoch_ms",
                "WPR","dWPR");
     }
   else
     {
      Print("FileOpen action failed. Error",GetLastError());
      ExpertRemove();
     }
//---
   return(0);
  }

O gerenciador de eventos OnTick() identifica novas barras e salva os dados no arquivo.

O comportamento do preço será determinado pela última barra completa e os valores dos indicadores serão obtidos a partir da barra que precede a última barra completa. Além do valor do indicador absoluto, é preciso salvar a diferença entre o absoluto e o valor anterior, a fim de ver a direção da mudança. Os nomes dessas variáveis ​​no exemplo fornecido terá prefixo "d".

Para os indicadores de sinal de linha, é necessário salvar a diferença entre a linha principal e de sinal, bem como a sua dinâmica. Em adição a isso, salve o tempo da nova barra e o valor da hora relevante. Isso pode ser útil para filtrar os dados por tempo.

Assim, vamos levar em conta 37 indicadores para construir um modelo de previsão para estimar o movimento dos preços.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//| Monitoring the market situation and saving values                |
//| of the indicators into the file at the beginning of every new bar|
//+------------------------------------------------------------------+
void OnTick()
  {
//--- declaring a static variable of datetime type
   static datetime Prev_time;

//--- it will be used to store prices, volumes and spread of each bar
   MqlRates mrate[];
   MqlTick tickdata;

   ArraySetAsSeries(mrate,true);    
   
//--- obtaining the recent quotes
   if(!SymbolInfoTick(_Symbol,tickdata))
     {
      Alert("Quote update error - error: ",GetLastError(),"!!");
      return;
     }
///--- copying data of the last 4 bars
   if(CopyRates(_Symbol,_Period,0,4,mrate)<0)
     {
      Alert("Historical quote copy error - error: ",GetLastError(),"!!");
      return;
     }
//--- if both time values are equal, there is no new bar
   if(Prev_time==mrate[0].time) return;
//--- saving the time in the static variable 
   Prev_time=mrate[0].time;
 
//--- filling the arrays with values of the indicators
   bool copy_result=true;
   copy_result=copy_result && FillArrayFromBuffer1(buf_AC,h_AC,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_BearsPower,h_BearsPower,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_BullsPower,h_BullsPower,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_AO,h_AO,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_CCI,h_CCI,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_DeMarker,h_DeMarker,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_FrAMA,h_FrAMA,4);
   copy_result=copy_result && FillArraysFromBuffers2(buf_MACD_m,buf_MACD_s,h_MACD,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_RSI,h_RSI,4);
   copy_result=copy_result && FillArraysFromBuffers2(buf_RVI_m,buf_RVI_s,h_RVI,4);
   copy_result=copy_result && FillArraysFromBuffers2(buf_Stoch_m,buf_Stoch_s,h_Stoch,4);
   copy_result=copy_result && FillArrayFromBuffer1(buf_WPR,h_WPR,4);

//--- checking the accuracy of copying the data
   if(!copy_result==true)
     {
      Print("Data copy error");
      return;
     }

//--- saving to the file the price movement within the last two bars 
//--- and the preceding values of the indicators 
   if(FileHandle!=INVALID_HANDLE)
     {
      MqlDateTime tm;
      TimeCurrent(tm);
      uint Result=0;
      Result=FileWrite(FileHandle,TimeToString(TimeCurrent()),tm.hour, // time of the bar
                       (mrate[1].close-mrate[2].close)/_Point,       // difference between the closing prices of the last two bars 
                       buf_AC[2],buf_AC[2]-buf_AC[3],                // value of the indicator on the preceding bar and its dynamics
                       buf_BearsPower[2],buf_BearsPower[2]-buf_BearsPower[3],
                       buf_BullsPower[2],buf_BullsPower[2]-buf_BullsPower[3],
                       buf_AO[2],buf_AO[2]-buf_AO[3],
                       buf_CCI[2],buf_CCI[2]-buf_CCI[3],
                       buf_DeMarker[2],buf_DeMarker[2]-buf_DeMarker[3],
                       buf_FrAMA[2],buf_FrAMA[2]-buf_FrAMA[3],
                       buf_MACD_m[2],buf_MACD_m[2]-buf_MACD_m[3],
                       buf_MACD_s[2],buf_MACD_s[2]-buf_MACD_s[3],
                       buf_MACD_m[2]-buf_MACD_s[2],buf_MACD_m[2]-buf_MACD_s[2]-buf_MACD_m[3]+buf_MACD_s[3],
                       buf_RSI[2],buf_RSI[2]-buf_RSI[3],
                       buf_RVI_m[2],buf_RVI_m[2]-buf_RVI_m[3],
                       buf_RVI_s[2],buf_RVI_s[2]-buf_RVI_s[3],
                       buf_RVI_m[2]-buf_RVI_s[2],buf_RVI_m[2]-buf_RVI_s[2]-buf_RVI_m[3]+buf_RVI_s[3],
                       buf_Stoch_m[2],buf_Stoch_m[2]-buf_Stoch_m[3],
                       buf_Stoch_s[2],buf_Stoch_s[2]-buf_Stoch_s[3],
                       buf_Stoch_m[2]-buf_Stoch_s[2],buf_Stoch_m[2]-buf_Stoch_s[2]-buf_Stoch_m[3]+buf_Stoch_s[3],
                       buf_WPR[2],buf_WPR[2]-buf_WPR[3]);

      if(Result==0)
        {
         Print("FileWrite action error ",GetLastError());
         ExpertRemove();
        }
     }

  }

Após iniciar o EA, o arquivo MasterData.CSV será criado no terminal_data_directory/MQL5/Files. Ao iniciar o EA no testador, esse estará localizado no terminal_data_directory/tester/Agent-127.0.0.1-3000/MQL5/Files. O arquivo obtido já pode ser usado em Statistica.

Um exemplo desse arquivo pode ser encontrado em MasterData.CSV. Os dados foram coletados por EURUSD H1 de 1 de Agosto de 2011 a 01 de outubro de 2011.

Para abrir o arquivo no Statistica, faça o seguinte.

Fig. 1. Importando o arquivo para dentro do Statistica

Fig. 1. Importando o arquivo para dentro do Statistica

Clique em OK e a tabela contendo nossos dados está pronta.

Fig. 2. Banco de dados no Statistica

Fig. 2. Banco de dados no Statistica

Agora, crie a variável de agrupamento com base na variável preço.

Nós vamos separar quatro grupos dependendo do comportamento dos preços:

  1. Mais de 200 pontos para baixo;
  2. Menos de 200 pontos para baixo;
  3. Menos de 200 pontos para cima;
  4. Mais de 200 pontos para cima.

Para adicionar uma nova variável, clique com o botão direito do mouse no cabeçalho da coluna AC e selecione a opção Adicionar Variável.

Fig. 3. Adicionando uma nova variável

Fig. 3. Adicionando uma nova variável

Especifique o nome "grupo" para a nova variável na janela aberta e adicione a fórmula para a conversão da variável de preço para o número de grupos.

A formula é como segue:

=iif(v3<=-200;1;0)+iif(v3-200;2;0)+iif(v3>0 e v3=200;4;0)


Fig. 4. Descrição da variável

Fig. 4. Descrição da variável

O arquivo está pronto para a análise discriminante. Um exemplo desse arquivo pode ser encontrado em MasterData.STA.


2,2. Seleção das Melhores Variáveis

Execute a análise discriminante ( Estatísticas->Técnicas Exploratórias Multivariadas->Análise Discriminante).

Fig. 5. Executando a análise discriminante

Fig. 5. Executando a análise discriminante

Clique em Variáveis na janela aberta.

Selecione a variável de agrupamento no primeiro campo e todas as variáveis com base no qual o agrupamento vai ser feito - no segundo campo.

No nosso caso, a variável grupo é especificada no primeiro campo e todas as variáveis ​​obtidas a partir dos indicadores, bem como a variável adicional Hora (a hora de recebimento dos dados) - no segundo campo.

Fig. 6. Seleção das variáveis

Fig. 6. Seleção das variáveis

Clique no botão Selecionar Casos (Figura 8). Uma janela será aberta para a seleção dos casos (linhas de dados) que serão utilizados na análise discriminante. Ativar itens como mostrado na imagem abaixo (Figura 7).

Somente os primeiros 700 casos serão usados para a análise. Os restantes serão posteriormente usados ​​para testes do modelo prognóstico resultante. Os números de casos são definidos através da variável V0. Ao especificar os casos dessa forma, definimos uma amostra dos dados de treinamento para AD.

Então clique OK.

Fig. 7. Definição da amostra de treinamento

Fig. 7. Definição da amostra de treinamento

Agora vamos selecionar os grupos para os quais o nosso modelo de prognóstico serão construído.

Há uma questão que necessita da nossa atenção. Um dos pontos fracos da AD é a sensibilidade a valores atípicos de dados. Eventos raros, mas poderosos - no nosso caso, os picos de preços pode distorcer o modelo. Por exemplo, após a notícia inesperada, o mercado respondeu com movimentos substanciais com duração de algumas horas. Os valores dos indicadores técnicos foram, neste caso, de pouca importância na previsão, mas serão considerados altamente significativo na AD como houve uma mudança de preço marcado. Por isso, é aconselhável verificar os dados para valores atípicos antes de executar a AD.

A fim de excluir valores atípicos de nosso exemplo vamos apenas analisar os grupos 2 e 3. Uma vez que haja uma mudança de preço substancial nos grupos 1 e 4, pode haver valores atípicos nos valores do indicador.

Então, clique em Códigos para agrupar variáveis ​​(Figura 8). E especificar o número de grupos para a análise.

Fig. 8. Seleção de grupos para a análise

Fig. 8. Seleção de grupos para a análise


Ativar opções avançadas. Isso vai permitir a análise passo a passo que será requerida numa etapa posterior.

Para executar AD, clique em OK.

Uma mensagem como abaixo pode aparecer. Isto significa que uma das variáveis ​​selecionadas é excessiva e é substancialmente condicionada a outras variáveis​​, por exemplo, que é a soma de duas outras variáveis​​.

Isso é perfeitamente possível para o fluxo de dados obtidos a partir dos indicadores. A presença de tais variáveis ​​afeta a qualidade da análise. E essas devem ser removidas. A fim de fazer isso, volte para a janela de seleção de variáveis ​​para AD e identifique as variáveis ​​excessivas, adicionando-as uma por uma e executando a AD repetidamente.


Fig. 9. Mensagem de valor de tolerância baixa

Fig. 9. Mensagem de valor de tolerância baixa


Então, uma janela para a seleção do método AD abrirá (Figura 10). Selecione Encaminhar Passo a Passo na Lista Suspensa. Uma vez que os valores dos indicadores têm pouca importância de prognóstico, o uso da análise passo a passo é preferida. E o modelo de discriminação de grupo será automaticamente construída passo a passo.

Especificamente, a cada passo todas as variáveis ​​serão analisadas e avaliadas para determinar qual delas contribuirá mais para a discriminação entre os grupos. Essas variáveis então serão inclusas no modelo e o processo começará novamente. Todas as variáveis ​​que melhor discriminam entre a amostra de dados serão selecionadas de maneira específica passo a passo.


Fig. 10. Seleção de método

Fig. 10. Seleção de método

Clique em OK e uma janela abrirá informando que a AD foi concluída com êxito.

Fig. 11. Janela de resultados da AD

Fig. 11. Janela de resultados da AD


Clique em Sumário: Variáveis no modelo para ver a lista de variáveis inclusas no modelo seguindo a análise passo a passo. Estas variáveis ​​melhor discriminam entre nossos grupos. Note que as variáveis ​​que produzem a exatidão da discriminação de 95% (p <0,05) são mostradas em vermelho. A exatidão da discriminação em relação a outras variáveis ​​é menor. O modelo deve incluir apenas as variáveis ​​que produzem a exatidão da discriminação de pelo menos 95%.

No entanto de acordo com a "regra de ouro" das estatísticas, devem ser utilizadas apenas as variáveis ​​que produzem a exatidão de mais de 95%. Vamos, portanto, excluir da análise todas as variáveis ​​que não são exibidas em vermelho. Essas são dBulls, Bulls, FrAMA, Hour. Para excluir essas variáveis​​, volte para a janela onde a análise passo a passo foi selecionada e as especifique na janela que abrirá após clicar em Variáveis.

Repita a análise. Ao clicar no Sumário: Variáveis ​​no modelo, vamos ver novamente que ainda outras três variáveis ​​aparecem agora como insignificante. Estas são DeMarker, Stoch_s, AO. E também vamos exclui-las da análise.

Como resultado, teremos um modelo que inclui as variáveis ​​que produzem a discriminação precisa entre os grupos (p <0,01).


Fig. 12. Variáveis inclusas no modelo

Fig. 12. Variáveis inclusas no modelo


Assim, somente sete das 37 variáveis ​​foram deixadas no nosso exemplo sendo as mais significativas para a previsão.

Esta abordagem permite selecionar os principais indicadores com base em análise técnica para o desenvolvimento de sistemas de negociação personalizada, incluindo os que utilizam redes neurais.


2,3. Análise e Teste do Modelo Resultante Usando Dados de Teste

Após a conclusão da AD, obtivemos o modelo prognóstico e os resultados da sua aplicação para os dados de treinamento.

Para ver o modelo e os resultados da discriminação do grupo, abra a aba Classificação.

Fig. 13. Aba classificação

Fig. 13. Aba classificação

Clique em Matriz de Classificação para ver a tabela contendo os resultados da aplicação do modelo de dados de treinamento.

As linhas mostram as classificações observadas. As colunas contêm as classificações previstas de acordo com o modelo calculado. As células que contêm previsões exatas estão marcados em verde e previsões inexatas aparecem em vermelho.

A primeira coluna mostra a exatidão da previsão em %.

Fig. 14. Classificação de dados de treinamento

Fig. 14. Classificação de dados de treinamento

A exatidão da previsão (Total), utilizando dados de treinamento acabou por ser 60%.

Vamos testar o modelo usando dados do teste. Para fazer isso, clique em Selecionar (Figura 13) e especifique v0> 700 após o qual o modelo será verificado dentro do intervalo de dados que não foi utilizado para a construção do modelo.

Nós vamos ter o seguinte:


Fig. 15. Classificação de dados de treinamento

Fig. 15. Classificação de dados de treinamento

A exatidão global da previsão usando a amostra de teste se tornou aproximadamente no mesmo nível atingindo 55%. Este é um nível bastante bom para o mercado FOREX.


2,4. Desenvolvendo um Sistema de Negociação

O modelo de prognóstico em AD baseia-se no sistema de equações lineares, de acordo com o qual os valores dos indicadores são classificados em um ou outro grupo.

Para ver as descrições destas funções, vá para a aba Classificação na janela de resultados da AD (Figura 13) e clique em funções de classificação. Você verá uma janela com uma tabela contendo os coeficientes de equações discriminantes.

Fig. 16. Equações Discriminantes

Fig. 16. Equações Discriminantes

Vamos desenvolver um sistema de duas equações com base nos dados da tabela:

Group2 = 157.17*AC - 465.64*Bears + 82.24*dBears - 0.006*dCCI + 761.06*dFrAMA + 2418.79*dMACDm + 0.01*dStoch_ms - 1.035
Group3 = 527.11*AC - 641.97*Bears + 271.21*dBears - 0.002*dCCI + 1483.47*dFrAMA - 726.16*dMACDm - 0.034*dStoch_ms - 1.353

Para utilizar este modelo, insira os valores do indicador nas equações e calcule o valor do Grupo.

A previsão incidirá sobre o grupo cujo valor Grupo é maior. De acordo com o nosso exemplo, se o valor Grupo2 é maior do que o valor Group3, prevê-se que dentro da próxima hora a tabela de preços provavelmente vai estar se movendo para baixo. A previsão vai passar a ser exatamente o contrário no caso em que o valor Group3 é maior do que o valor Grupo2.

Deve notar-se que os valores dos indicadores e o período de análise no nosso exemplo foram selecionados aleatoriamente. Mas, mesmo essa quantidade de dados foi suficiente para demonstrar o potencial e o poder da AD.


Conclusão

A análise discriminante é uma ferramenta útil quando aplicada ao mercado FOREX. Ela pode ser usada para pesquisar e verificar o melhor conjunto de variáveis ​​permitindo classificar os valores dos indicadores observados em previsões diferentes. Também pode ser utilizada para a construção de modelos de prognóstico.

Os modelos construídos como um resultado da análise discriminante pode ser facilmente integrado em EAs, o qual não requer uma experiência desenvolvida considerável. A análise discriminante por si mesma é também relativamente fácil de usar. O tutorial passo a passo acima seria suficiente para analisar seus próprios dados.

Mais informações sobre a análise discriminante pode ser encontrada na seção relevante do livro eletrônico.