English Русский 中文 Español Deutsch 日本語
Diagramas tridimensionais - uma ferramenta profissional de análise de mercado

Diagramas tridimensionais - uma ferramenta profissional de análise de mercado

MetaTrader 4Exemplos | 18 fevereiro 2016, 15:38
902 0
Antoniuk Oleg
Antoniuk Oleg

Introdução

Todo trader opera com preços e cotas em constante mudança. Todos procuram por correspondências e regularidades. Nós analisamos volumes, valores de indicadores diferentes, e muitos outros parâmetros. Eu não considero necessário lhe persuadir sobre os benefícios do MQL4 em termos de análise de mercado. Você pode simplesmente escrever um script e chegar a conclusões com base nos resultados. Geralmente a análise é conduzida com base em gráficos e diagramas que refletem certas correspondências de duas variáveis. Não há problema algum nisso, é claro, mas às vezes nós precisamos encontrar as correspondências de três variáveis e visualizá-las. Os diagramas 3D e as suas análises são usadas para este fim em todo o mundo. Este tipo de abordagem economiza tempo e dinheiro.

Neste artigo nós iremos escrever uma biblioteca simples para a construção de diagramas 3D e sua exibição posterior no Microsoft Excel. Nós usaremos as opções padrão do MQL4 para preparar e exportar os dados ao arquivo *.csv


O que é o formato de arquivo *.csv?

Trata-se de um arquivo de texto que armazena a sequência de valores, separados por um separador pré-definido, no nosso caso o ponto-e-vírgula - ";". Para desenhar uma tabela nós precisamos apenas escrever várias sequências de código. A vantagem deste formato é que ele é facilmente reconhecido e interpretado sob a forma de uma tabela pelo Microsoft Excel. E neste programa nós podemos facilmente criar um diagrama 3D com base nos dados adquiridos e analisá-lo.


Biblioteca generateCsv.

Para a inserção de dados rápida e simples, nós vamos criar uma biblioteca. Crie uma nova biblioteca e insira o código abaixo, em seguida salve-a com o nome generateCsv.mq4 na pasta "...MetaTrader\experts\bibliotecas". Então compile a biblioteca.

//+------------------------------------------------------------------+
//|                                                  generateCsv.mq4 |
//|         Copyright © 2006, Antonio Banderass. All rights reserved |
//|                                               banderassa@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Antonio Banderass. All rights reserved"
#property link      "banderassa@ukr.net"
#property library
 
//+------------------------------------------------------------------+
//| PrepareString                                                    |
//+------------------------------------------------------------------+
 
string PrepareString(string s)
  {
   bool exit = false;
   int index = 0;
   string str = s;
   
   while(!exit)
     {
       index = StringFind(str, ".", index);
      
       if(index > -1)
           str = StringSetChar(str, index, ',');
       else
           exit = true;
     }
   return(str);
  }
 
 
//+------------------------------------------------------------------+
//| GenerateCsv                                                      |
//+------------------------------------------------------------------+
int GenerateCsv(string fileName, int arraySizeX, int arraySizeY,
                double arrayIndexX[], double arrayIndexY[], double arrayZ[][])
  {
   int handle = FileOpen(fileName, FILE_CSV|FILE_WRITE, ' '), x, y;
   string str;
   
   if(handle1)
     {
       Print("Error:", GetLastError());
       return(handle);
     }
   else
     {
       str = ";";
       for(x = 0; x < arraySizeX; x++)
         {
           str = str + arrayIndexX[x];
           str = str + ";";         
         }
       FileWrite(handle,PrepareString(str));
      
       for(y = 0; y < arraySizeY; y++)
         {
           str = "";   
           str = str + arrayIndexY[y] + ";";
         
           for(x = 0; x < arraySizeX; x++)
             {
               str = str + arrayZ[x,y];
               str = str + ";";         
             }
           FileWrite(handle, PrepareString(str));
         }
     }
      
   FileClose(handle);   
   return(handle);
  }

Agora crie um novo arquivo de cabeçalho para o acesso às funções da biblioteca, chamado generateCsv.mqh, insira o código abaixo e salve-o na pasta "...MetaTrader\experts\include".

//+------------------------------------------------------------------+
//|                                                  generateCsv.mqh |
//|         Copyright © 2006, Antonio Banderass. All rights reserved |
//|                                               banderassa@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Antonio Banderass. All rights reserved"
#property link "banderassa@ukr.net"
 
#import "generateCsv.ex4"
 
string PrepareString(string s);
int GenerateCsv(string fileName, int arraySizeX, int arraySizeY,
double arrayIndexX[], double arrayIndexY[],double arrayZ[][]);

Esta biblioteca simples consiste em duas funções. Vamos primeiro examinar o significado de cada função. A primeira função, PrepareString, tem como objetivo substituir os pontos de uma string por vírgulas. A questão é que, quando se escreve dados em um arquivo através do uso da função padrão FileWrite, os números inteiros e as frações são separadas por um ponto. E isso é inaceitável para nós, pois o Microsoft Excel reconhece os decimais apenas se as partes estiverem separadas por uma vírgula. É por isso que, quando vamos colocar dados no arquivo *.csv, nós chamamos esta função no corpo da função GenerateCsv. O único parâmetro da função é uma string, na qual nós precisamos substituir os pontos por vírgulas. Devolva o valor - uma nova string sem pontos. Note, por favor, que você não precisa chamar esta função, isto é feito pela segunda função de modo automático, quando necessário.

A função GenerateCsv é usada para escrever dados no formato *.csv em um arquivo. Aqui estão os seus parâmetros:

int GenerateCsv(string fileName, int arraySizeX, int arraySizeY,
                double arrayIndexX[], double arrayIndexY[], double arrayZ[][]);
  • string fileName - nome de um arquivo a ser escrito, não esquecer de indicar o formato *.csv;
  • int arraySizeX - a largura da matriz com os dados;
  • int arraySizeY - a altura da matriz com os dados;
  • double arrayIndexX[] - matriz dos valores da primeira variável;
  • double arrayIndexY[] - matriz dos valores da segunda variável;
  • double arrayZ[][] - matriz bidimensional dos valores da terceira variável;

Para entender o propósito de cada parâmetro, observe a figura:


Portanto tudo o que você precisa para escrever estes dados são três matrizes de valores para cada variável. Agora vamos ver como isso funciona.


Uso da biblioteca generateCsv

Crie um novo script chamado 3dGraphicOut e insira o código abaixo nela.

//+------------------------------------------------------------------+
//|                                                 3dGraphicOut.mq4 |
//|         Copyright © 2006, Antonio Banderass. All rights reserved |
//|                                               banderassa@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Antonio Banderass. All rights reserved"
#property link      "banderassa@ukr.net"
 
#include <generateCsv.mqh>
 
#define ARRAY_SIZE_X 16
#define ARRAY_SIZE_Y 16
 
//+------------------------------------------------------------------+
//| start                                                            |
//+------------------------------------------------------------------+
int start()
  {
  
   int x,y;
   
   double arrayIndexX[ARRAY_SIZE_X];
   double arrayIndexY[ARRAY_SIZE_Y];
   double arrayZ[ARRAY_SIZE_X,ARRAY_SIZE_Y];
   
   
   for(x=0;x<ARRAY_SIZE_X;x++)
      arrayIndexX[x]=x/10.0; 
      
   for(y=0;y<ARRAY_SIZE_Y;y++)

      arrayIndexY[y]=y/10.0;
   
   for(x=0;x<ARRAY_SIZE_X;x++)
      for(y=0;y<ARRAY_SIZE_Y;y++)
         arrayZ[x,y]=MathSin(arrayIndexX[x]+arrayIndexY[y]);
 
   GenerateCsv("test.csv",ARRAY_SIZE_X,ARRAY_SIZE_Y,arrayIndexX,arrayIndexY,arrayZ); 
   return(0);
  }

Este é um modelo padrão, a partir do qual todo diagrama 3D deveria ser iniciado. Vamos examinar cada linha separadamente:

#include <generateCsv.mqh>

Inicie a biblioteca generateCsv.

#define ARRAY_SIZE_X 16
#define ARRAY_SIZE_Y 16

Aqui nós definimos as dimensões da tabela: ARRAY_SIZE_X - largura da tabela, ARRAY_SIZE_Y - altura.

int x,y;

Estes são dois índices da matriz. Como eles são usados muitas vezes, eu os coloquei no lado de fora do corpo do ciclo.

double arrayIndexX[ARRAY_SIZE_X];

Esta é uma matriz de valores da primeira variável. Suponha que você esteja analisando a influência de dois indicadores sobre o lucro. Neste caso os valores do primeiro indicador estarão localizados nesta matriz. Note, por favor, que você deveria começar com algum valor inicial, como zero, por exemplo, e então aumentá-lo a um determinado ritmo, como 0, por exemplo 5.

double arrayIndexY[ARRAY_SIZE_Y];

Os valores do segundo indicador são colocados nesta matriz. Também escolha o valor inicial e ritmo adequados.

double arrayZ[ARRAY_SIZE_X,ARRAY_SIZE_Y];

E esta deve conter o valor do lucro, dependendo dos valores do indicador. Novamente, observe a figura acima para entender os valores.

Preste atenção, o tipo da matriz é duplo. Isto as torna universais. Você também pode usar números inteiros (int) como os elementos das matrizes, pois o MQL4 tem uma transformação de tipo implícito.

for(x = 0; xARRAY_SIZE_X; x++)
  {
    // arrayIndexX[x]= ... ;
  }

Neste bloco nós preenchemos a matriz da primeira variável com valores. Não se esqueça: eles devem aumentar em um determinado ritmo.

 for(y = 0; y < ARRAY_SIZE_Y; y++)
   {
      // arrayIndexY[y]= ... ;
   }

O mesmo se aplica à segunda variável.

 for(x = 0; x < ARRAY_SIZE_X; x++)
   {
     for(y = 0; y < ARRAY_SIZE_Y; y++)
       {
         // arrayZ[x,y]= ... ;
       }
   }

E aqui está a parte mais interessante do modelo: nós preenchemos a matriz bidimensional com valores dependendo de duas outras variáveis.

GenerateCsv("test.csv",ARRAY_SIZE_X,ARRAY_SIZE_Y,arrayIndexX,arrayIndexY,arrayZ);

E, finalmente, escrevemos os dados no arquivo para a posterior análise no Microsoft Excel. Agora salve este modelo para uso futuro.


Um exemplo simples

Vamos examinar um exemplo bastante simples do uso da biblioteca. Eu intencionalmente não escrevi este exemplo com conexão a negociações, maximizando assim a sua simplicidade e disponibilidade.

//+------------------------------------------------------------------+
//|                                                 3dGraphicOut.mq4 |
//|         Copyright © 2006, Antonio Banderass. All rights reserved |
//|                                               banderassa@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Antonio Banderass. All rights reserved"
#property link      "banderassa@ukr.net"
 
#include <generateCsv.mqh>
 
#define ARRAY_SIZE_X 16
#define ARRAY_SIZE_Y 16
 
//+------------------------------------------------------------------+
//| start                                                            |
//+------------------------------------------------------------------+
int start()
  {
   int x,y;
 
   double arrayIndexX[ARRAY_SIZE_X];
   double arrayIndexY[ARRAY_SIZE_Y];
   double arrayZ[ARRAY_SIZE_X,ARRAY_SIZE_Y];
 
 
   for(x=0;x<ARRAY_SIZE_X;x++)
      arrayIndexX[x]=x/10.0;
 
   for(y=0;y<ARRAY_SIZE_Y;y++)
      arrayIndexY[y]=y/10.0;
 
   for(x=0;x<ARRAY_SIZE_X;x++)
      for(y=0;y<ARRAY_SIZE_Y;y++)
         arrayZ[x,y]=MathSin(arrayIndexX[x]+arrayIndexY[y]);
 
   GenerateCsv("test.csv",ARRAY_SIZE_X,ARRAY_SIZE_Y,arrayIndexX,arrayIndexY,arrayZ);
 
   return(0);
  }

Salve o script de texto, compile-o e inicie-o no terminal. Agora abra a pasta "...MetaTraider\experts\arquivos\", um novo arquivo, "test.csv", deve aparecer ali. Abra-o usando o Microsoft Excel. O arquivo será transformado em uma tabela bidimensional, como mostrado abaixo.


Agora selecione todas as células (CTRL+A) e pressione "inserir" -> "tabela" (ALT+I,H):


Então selecione "tipo de tabela" -> "superfície, sub-tipo de tabela" -> "superfície 3D" e clique em "finalizar":


Um diagrama 3D irá aparecer:


Conclusão

Está agora disponível para você uma ferramenta conveniente para exportar dados rapidamente do terminal de negociação MetaTrader ao programa Microsoft Excel, para uma construção rápida de diagramas 3D e sua posterior análise. Agora você pode analisar as correspondências e regularidades do Forex entre três variáveis simultaneamente. Tente analisar a dependência de histogramas de lucro 3D em relação a parâmetros como TakeProfit e StopLoss, ou examinar a dependência de um gráfico de volumes em relação ao dia da semana e a hora atual. Eu acho que você irá encontrar muitas correspondências interessantes e úteis.

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/1443

Arquivos anexados |
3dGraphicOut.mq4 (1.43 KB)
generateCsv.mq4 (2.24 KB)
generateCsv.mqh (0.77 KB)
Erros de iniciantes no trabalho com o terminal do cliente MetaTrader 4 Erros de iniciantes no trabalho com o terminal do cliente MetaTrader 4
Errar é humano. Todos cometem erros: com maior ou menor frequência, por ignorância ou acidente. Você perguntou e agora nós respondemos às suas perguntas sobre: horário do terminal, resultados de testes, impressão no diário, símbolos, histórico do provador, importação do histórico, alavancagem, tráfego, dicas, redimensionamento, cálculos errados, conta inválida, ausência de notícias, mudança de preço, falta de dinheiro, fechamento do mercado.
Modelagem de mudanças de cotação no provador e análise da estabilidade do expert advisor Modelagem de mudanças de cotação no provador e análise da estabilidade do expert advisor
A mudança de cotação é um grande problema para muitos expert advisors, especialmente para aqueles que possuem condições bastante sensíveis para a entrada/saída de uma negociação. Neste artigo, é oferecida uma forma de verificar a estabilidade de mudança de cotações de um EA.
Problemas de análise técnica revisitados Problemas de análise técnica revisitados
Atualmente, a análise técnica, em conjunto com a fundamental, é o mais importante método de análise do mercado de ações. Sendo um dos métodos de previsão das dinâmicas de preço do mercado de ações, a análise técnica tem uma grande quantidade de desvantagens que traz dúvidas em relação a sua aplicabilidade prática.
Filtragem de acordo com o histórico Filtragem de acordo com o histórico
O artigo descreve o uso de negociações virtuais como uma parte integral do filtro de abertura de negociações.