English Русский 中文 Español Deutsch 日本語
preview
Usando a API de Dados JSON em seus projetos MQL

Usando a API de Dados JSON em seus projetos MQL

MetaTrader 5Sistemas de negociação | 3 dezembro 2024, 10:11
337 0
Sara Sabaghi
Sara Sabaghi

Introdução e Contexto

Misturar dados externos pode melhorar a tomada de decisões no trading algorítmico. As APIs permitem a transferência de dados entre diferentes sistemas e ajudam os traders a acessar diferentes fontes de dados, como dados de mercado em tempo real de outros corretores e bancos, acesso a indicadores econômicos, não apenas calendários econômicos, feeds de notícias ou análise de sentimentos sociais, ferramentas de inteligência artificial online, sistemas de previsão online ou qualquer outra coisa que você possa imaginar disponível em serviços API. Neste artigo, mostraremos como usar esta ferramenta da melhor forma.

Usar dados de APIs em Expert Advisors (EA) pode fornecer novos insights sobre o mercado de negociação, ajudando a tomar decisões informadas, criar estratégias de negociação mais dinâmicas e gerenciar riscos de forma mais eficaz. Usando dados de APIs, os traders podem melhorar a precisão dos sinais de negociação usando indicadores técnicos avançados e ferramentas de gráficos sofisticadas. Essa integração amplia as capacidades de plataformas como MetaTrader e oferece acesso a valiosa inteligência de mercado, como processamento de linguagem natural (NLP) para análise de sentimento de mercado e acesso a dados fundamentais e notícias.


Introdução à API Ziwox

Ziwox é um sistema de análise de dados no Forex que contém serviços de API gratuitos. Essa API fornece aos traders dados abrangentes de mercado, incluindo preços, indicadores técnicos, análise de sentimento e dados fundamentais. Ela suporta pares de moedas principais e menores e fornece métricas importantes, como viés fundamental de moeda, previsões baseadas em IA, estatísticas de traders de varejo, relatórios COT, suporte e resistência técnica, sentimento de mercado (risco-on e risco-off), rendimentos de títulos e índice VIX. Esse conjunto de dados rico permite uma análise multifacetada do mercado, combinando insights técnicos, fundamentais e de Sentimento para criar ferramentas revolucionárias.

A parte interessante desses dados é que, além dos dados de preço e técnicos, teremos acesso a dados gerados por inteligência artificial ou analistas reais. Alguns desses dados incluem: análise fundamental para pares de forex por uma equipe de analistas, saídas do sistema NLP (Processamento de Linguagem Natural) como sentimento de notícias do forex, previsões de preços geradas por IA.

A API é fácil de usar, exigindo um simples cadastro para gerar uma chave de API e acessar os dados em formato JSON ou texto. Essa acessibilidade, junto com sua extensa cobertura de dados, torna-a uma ferramenta inestimável para aprimorar estratégias de negociação e desenvolver indicadores personalizados ou sistemas de negociação automatizados.

O que é uma API?


Vamos nos familiarizar um pouco mais: O que é uma API?

APIs são mecanismos que permitem que dois componentes de software se comuniquem entre si usando um conjunto de definições e protocolos. Por exemplo, o sistema de software do serviço meteorológico contém dados climáticos diários. O aplicativo de clima no seu celular "conversa" com esse sistema por meio de uma API e mostra a atualização diária do clima no seu celular.

API significa Interface de Programação de Aplicações. Uma interface pode ser pensada como um contrato de serviço entre dois aplicativos. Esse contrato define como os dois se comunicam, usando solicitações e respostas. A documentação da API contém informações sobre como os desenvolvedores estruturam essas solicitações e respostas.

A arquitetura da API é geralmente descrita em termos de cliente e servidor. O programa que envia a solicitação é chamado de cliente, e o programa que envia a resposta é chamado de servidor. Então, no exemplo do clima, o banco de dados de clima do escritório é o servidor e o aplicativo móvel é o cliente.


Formatos de respostas de API:

Existem vários formatos para as respostas ou troca de dados de uma API. Dependendo do propósito para o qual a API foi criada, com quais outros Aplicações está conectada, o formato pode variar.

Essas respostas podem estar em formato JSON, HTML, TEXT, XML ou CSV.

Para uma breve introdução a esse modelo padrão:

1. JSON: JSON é um formato de intercâmbio de dados leve e legível por humanos, usado em respostas de API devido à sua simplicidade e flexibilidade. Ele representa os dados como pares chave-valor, tornando fácil de analisar e manipular em várias linguagens de programação.

Um exemplo de resposta JSON:

{
  "id": 5687,
  "source": "oanda",
  "symbol": "EURUSD",
  "price": "1.08562",
  "high": "1.09211",
  "low": "1.08154"
}


2. XML: XML ou "eXtensible Markup Language" é outro formato amplamente aceito para representar dados estruturados em respostas de API. Ao contrário do JSON, o XML usa tags para definir estruturas hierárquicas de dados, fornecendo uma representação mais precisa, mas estruturada. É como as tags HTML no design de sites e estruturas web. Enquanto o JSON é preferido por sua simplicidade e legibilidade, o XML permanece relevante em algumas áreas, como sistemas corporativos e integrações legadas.

Exemplo de XML na API de Notícias do Forex Factory:

<event>
<title>German Trade Balance</title>
<country>EUR</country>
<date>
<![CDATA[ 07-07-2024 ]]>     </date>
<time>
<![CDATA[ 8:30am ]]>
</time>
<impact><![CDATA[ Low ]]></impact>

<forecast><![CDATA[ 19.9B ]]></forecast>
<previous><![CDATA[ 22.1B ]]></previous>
<url>
<![CDATA[ https://www.forexfactory.com/calendar/125-eur-german-trade-balance ]]>
</url>

</event>


3. Outros formatos: Além de JSON e XML, APIs podem usar outros formatos de resposta, como texto simples, HTML, buffers de protocolo ou arquivos CSV, dependendo dos requisitos específicos de domínio e convenções. Cada formato tem suas próprias vantagens e usos, desde eficiência e desempenho até legibilidade humana e adaptabilidade.

O formato JSON se tornou uma escolha popular no desenvolvimento web devido à sua simplicidade, legibilidade e facilidade de uso. Felizmente, o serviço em questão também usa esse modelo para troca de dados.



Configuração do seu ambiente e desenvolvimento

Para configurar um ambiente em MQL5 para usar APIs JSON, você precisará seguir alguns passos.

MQL5 é uma linguagem de programação para criar robôs de negociação, indicadores técnicos, scripts e bibliotecas de funções para a plataforma de negociação MetaTrader 5.

Aqui está um guia geral sobre como configurar um ambiente para trabalhar com APIs JSON em MQL5:

  1. Entenda o básico de MQL5: Certifique-se de ter um bom entendimento dos conceitos básicos da linguagem de programação MQL5, bem como dos conceitos básicos relacionados à negociação e aos mercados financeiros. Familiarize-se com a documentação MQL4 e Referência MQL5 para entender a sintaxe e as funções da linguagem.
  2. Escolha uma biblioteca JSON: O MQL5 não possui suporte nativo para análise de JSON, então você precisará usar uma biblioteca de terceiros. Você pode encontrar essas bibliotecas em fóruns como a comunidade MQL5 ou no GitHub. JSON Serialization e JSON Parser.
  3. Baixe e instale a biblioteca JSON: Baixe a biblioteca JSON escolhida e siga as instruções de instalação fornecidas pela biblioteca. Isso normalmente envolve colocar o arquivo da biblioteca (mqh ou mq5) na pasta Include da sua instalação MetaTrader.
  4. Inclua a biblioteca no seu código: No início do seu script MQL ou EA (Expert Advisor), inclua a biblioteca JSON usando a diretiva #include:
  5. //Use this type of file include if the file is in MQL include follder
    #include <JAson.mqh>
    
    // Use this type of file include If this file is next to your EA file/follder
    #include "JAson.mqh" 
  6. Faça requisições HTTP: Para interagir com APIs JSON, você precisará fazer requisições HTTP. As opções populares incluem WinHTTP ou WebRequest. Se precisar de outro tipo de uso HTTP, baixe e inclua uma biblioteca HTTP que atenda às suas necessidades.
  7. Salve a resposta HTTP em um arquivo: Como a maioria dessas APIs tem limitações no número de requisições, e você está preocupado com o limite de requisições da API, é melhor salvar os dados solicitados em um arquivo e usar nosso arquivo salvo em vez de fazer requisições repetidas e desnecessárias.
  8. Analise as respostas JSON: Depois de receber uma resposta da API, use a biblioteca JSON para analisar os dados JSON. A sintaxe específica dependerá da biblioteca que você está usando.
  9. Mixagem: Após classificar os dados JSON, você pode agora combinar os dados desejados com seu programa, de acordo com o modelo, estratégia ou tipo.


Exemplo de código de funções API

O MQL5 oferece a função WebRequest para requisições HTTP, permitindo interação com APIs.

Você pode ler mais sobre a documentação de Webrequest > Webrequest e Troca de dados HTTP

Abaixo está um exemplo de código MQL para solicitar dados JSON de um endereço de API usando o método GET:

// Required variables
string cookie=NULL, headers="", apikey="your api key",
value1="value 1", value2="value 2";
char post[],result[];
int res;
string URL   =  "https://www.example.com/API?apikey="+apikey+"&data1=value1&data2="+value2; // Rest API address

ResetLastError(); // Reset ast error
// HTTP request via MQL Webrequest, GET method with apikey, value1, and value2 and 2000 millisecond timeout 
res=WebRequest("GET", URL, cookie, NULL, 2000, post, 0, result, headers);
if(res==-1) // WebRequest error handling
 {
    int error =  GetLastError();
    if(error==4060) Print("Webrequest Error ",error);
    else if(error==5203) Print("HTTP request failed!");
    else Print("Unknow HTTP request error("+string(error)+")! ");
    LastHTTPError=error;
 }
else if (res==200) // The HTTP 200 status response code indicates that the request has succeeded
 {
    Print("HTTP request successful!");

    // Use CharArrayToString to convert HTTP result array to a string
    string HTTP_Result = CharArrayToString(result, 0, 0, CP_UTF8); 
    Print(HTTP_Result);      

 }

Este código envia uma solicitação GET para a URL da API especificada, demonstrando a simplicidade de integrar chamadas de API no MQL4.



Estudo de Caso: Expert Advisor MQL4 bem-sucedido com acesso a dados API

Como usar a API de Dados Ziwox para criar um sistema de negociação automático usando dados fundamentais e previsões de IA em tempo real

Neste artigo, exploraremos como usar a API de Dados Ziwox para construir ferramentas baseadas em dados fundamentais e em tempo real na Linguagem MetaQuotes (MQL). Há muitas informações na API deles, mas escolhemos Previsões de IA para o nosso projeto.

O sistema de previsões de IA no terminal Ziwox, segundo suas informações, é baseado na agregação de dados como notícias, dados do calendário econômico, taxas de juros e suas mudanças, políticas monetárias e econômicas dos bancos centrais, sentimento de mercado, força das moedas forex, dados COT e dados dos traders de varejo. Como resultado, todo o mercado é analisado para que essa previsão possa ser usada como um dado valioso.

Vamos percorrer o processo de obtenção dos dados da API, salvamento dos dados JSON em um arquivo, análise das respostas JSON e uso dessas informações para criar um Expert Advisor automatizado (EA).

Nosso plano é criar um Expert Advisor, usar uma estratégia simples de MA como nosso sinal técnico, e negociar se a previsão de IA estiver na nossa direção como um filtro de IA.

Vamos fazer o nosso melhor.


Passo 1: Cadastro e Geração de uma Chave API

Para começar a usar a API de Dados Ziwox, siga esses passos:

1. Cadastre-se no Terminal Ziwox AQUI

Cadastro no Ziwox 

2. Preencha o formulário com suas informações, leia os termos e políticas, aceite-os, clique em "Não sou um robô", depois clique em "Criar uma nova conta".

3. Um e-mail de verificação será enviado para sua caixa de entrada, verifique seu e-mail.

3. Faça login na sua conta aqui, navegue até a página de perfil, aba API aqui, e gere sua chave de API clicando no botão verde Gerar

Gerar API Ziwox

4. Ao gerar uma chave de API, você agora tem acesso aos dados da API Ziwox. Copie a chave de API gerada para usá-la em nosso projeto.

Chave de API Ziwox


Passo 2: Entendendo a Estrutura da API

A estrutura do link da API é a seguinte:

https://ziwox.com/terminal/services/API/V1/fulldata.php?expn=ziwoxuser&apikey={API_KEY}&apitype={REQUEST_TYPE}&pair={PAIR}

  • API_KEY}: Sua chave de API única do passo anterior
  • {REQUEST_TYPE}: O formato da resposta, seja JSON ou texto.
  • {PAIR}: O par forex desejado no formato padrão, sem prefixo ou sufixo, como EURUSD, USDJPY, GBPUSD, XAUUSD, WTI...


Passo 3: Testar sua estrutura de API

Agora queremos verificar a estrutura do link da API e solicitar um exemplo da API Ziwox. Simplesmente, use o link da API do Passo 2, edite os parâmetros com seus próprios parâmetros, abra seu navegador, insira o link da API na barra de endereços e pressione enter.

Se você editar corretamente o link da API, o que teremos na resposta HTTP será algo como isto:

Resposta da API Ziwox


Se a chave da API estiver incorreta, você terá uma resposta de erro como esta:

{
"status": "erro",
"desc": "chave api inválida"
}

Ou se você digitar o nome do ativo incorretamente, pode ver essa resposta:

{
"status": "erro",
"desc": "nome do ativo inválido!!"
}


Passo 4: Implementar uma requisição API HTTP função 

Se você teve sucesso no passo 3, agora estamos prontos para implementar uma função para automatizar esta parte. Confira este código:

datetime LastWebRequest = 0; // use this datetime var for limit failed request API

bool GetAPI(string symbolname, string apikey, string filename)

  {
   Print("Get API Update");
   bool NeedToUpdate =   false;

   // Check if the API data file available
   if(FileGetInteger(filename,FILE_EXISTS,true)>=0)
     {
      // Check the latest update time from file modify date time
      if(TimeLocal()-(datetime)FileGetInteger(filename,FILE_MODIFY_DATE,true)>900) // update data every 15 min becasue of API call rate limitation
         NeedToUpdate  = true;
     }
   else
      NeedToUpdate  =  true;


   if(NeedToUpdate && TimeLocal()-LastWebRequest>300)   // retry failed API request every 5 min to avoid firewall IP block
     {
      string   cookie=NULL,headers;
      char     post[],result[];
      int      res;
      string   URL   =  "https://www.ziwox.com/terminal/services/API/V1/fulldata.php?expn=ziwoxuser&apikey="+apikey+"&apitype=json&pair="+symbolname;
      ResetLastError();
      int timeout=5000;
      res=WebRequest("GET", URL, cookie, NULL, timeout, post, 0, result, headers);
      if(res==-1)
        {
         LastWebRequest    =  TimeLocal();
         int error         =  GetLastError();
         if(error==4060)
            Print("API data Webrequest Error ",error, " Check your webrequest on Metatrader Expert option.");
         else  if(error==5203)
               Print("HTTP request for "+symbolname+" Data failed!");
            else
               Print("Unknow HTTP request error("+string(error)+")! "+symbolname+" Data");
         return(false);
        }
      else
         if(res==200)
           {
            LastWebRequest =  TimeLocal();
            string HTTPString = CharArrayToString(result, 0, 0, CP_UTF8);
            Print("HTTP request for "+symbolname+" Data successful!");
            Print(HTTPString);
	    
            if (StringFind(HTTPString,"invalid api key",0)!=-1) {
               Alert("invalid api key");
               return(false);
            }
            // Store the API data into a common folder file
            int filehandle=FileOpen(filename,FILE_READ|FILE_SHARE_READ|FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN|FILE_COMMON);
            if(filehandle!=INVALID_HANDLE)
              {
               FileWriteArray(filehandle,result,0,ArraySize(result));
               FileClose(filehandle);
              }
           }
     }
   return(true);
  }

Esta função recebe uma chave de autenticação da API (apikey), o nome do ativo (symbolname) e o nome de um arquivo (filename) como entradas de sua parte. Ela incorpora "apikey" e "symbolname" na URL para preparar o link da requisição API.

Em seguida, ela usa a função Webrequest para fazer uma requisição HTTP, semelhante ao que você fez no passo anterior, e finalmente obtém uma resposta do servidor e coloca as informações relacionadas em um arquivo com o nome "filename".

Chamamos a função da API assim:

string APIfilename =  symbolname+"_API_Data.json"; // API store file name
string APIKey = "76thfd67a6f867df7"; // Our unic API Key, change it with your API Key
string SymbolRequest = "EURUSD"; // Symbol request, without prefix or suffix
string APIJSON[];
bool APIGET = GetAPI(SymbolRequest, APIKey,  APIfilename);


Passo 5: Analisando Dados JSON

Como você se lembra do Passo 3, os dados recebidos da API contêm um array de dados. Você pode ver a explicação completa desses dados na tabela abaixo.

Nome do Objeto JSON Tipo de dados Descrição
Símbolo string Retorna o mesmo nome de ativo/símbolo
Último Preço Número Último preço do ativo
Dígitos Número Dígitos do preço do ativo
Base string Nome da moeda base do par
Citação string Nome da moeda cotada do par
Tendência Fundamental da Base string Tendência fundamental da moeda base ou perspectiva fundamental. Pode ser Altista ou Baixista
Força Fundamental da Base string Força da tendência fundamental da moeda base. Pode ser Fraca, Moderada ou Forte
Tendência Fundamental da Citação string Tendência fundamental da moeda cotada ou perspectiva fundamental. Pode ser Altista ou Baixista
Força Fundamental da Citação string Força da tendência fundamental da moeda cotada. Pode ser Fraca, Moderada ou Forte
Tendência Fundamental string Tendência fundamental do ativo, ou perspectiva fundamental de longo prazo dos ativos. Altista ou Baixista
Força Fundamental string Força fundamental do ativo. Fraca, Moderada ou Forte
Motor Fundamental string Mesmo que a tendência fundamental do ativo, é um número, 50 = Neutro, maior que 50 é Altista e menor que 50 é Baixista
Previsão Altista pela IA Porcentagem Previsão de movimento altista do preço do ativo, quanto maior o número, mais Altista
Previsão Baixista pela IA Porcentagem Previsão de movimento baixista do preço do ativo, quanto maior o número, mais Baixista
Proporção de Longo do Varejo Porcentagem Porcentagem de traders varejistas em posições Longas
Lote Longo do Varejo Número Lote de posições Longas dos traders varejistas (volume de ordens)
Posição Longa do Varejo Número Número de posições Longas dos traders varejistas
Proporção de Curto do Varejo Porcentagem Porcentagem de traders varejistas em posições Curtas
Lote Curto do Varejo Número Lote de posições Curtas dos traders varejistas (volume de ordens)
Posição Curta do Varejo Número Número de posições Curtas dos traders varejistas
Base COT NET Número Posição líquida COT da moeda base
Mudança COT Base Número Mudança da posição líquida COT (semanal) da moeda base
COT NET Quote Número Posição líquida COT da moeda cotada
Mudança COT Quote Número Mudança da posição líquida COT (semanal) da moeda cotada
Mudança do COT Ratio Número Mudança da posição líquida dos grandes especuladores, número positivo = Sentimento Longo, número negativo = Sentimento Curto
Sentimento de Risco string Sentimento de risco do mercado, pode ser Risk-ON, Risk-OFF ou MIX
Tendência D1 string Dados técnicos, Tendência Diária, Tendência de Compra ou Venda
RSI D1 Número Dados do indicador, valor do RSI diário
Estocástico D1 Número Dados do indicador, valor do Estocástico diário
cci Números Valores do indicador CCI e
Sinal CCI string Sinal do indicador CCI
Suportes Números Níveis de suporte do ativo
Resistência Números Níveis de resistência do ativo
Pivô Números Pontos/pivôs do ativo
Valor VIX Número Valor do índice de volatilidade VIX
Direção do VIX Número Direção do sentimento do VIX, para cima = Medo e mercado arriscado, para baixo = mercado ganancioso
Motor de Compra do VIX Número Número positivo = mercado ganancioso 
Motor de Venda do VIX Número Número negativo = mercado de Medo e arriscado
Base do Título Número Valor do rendimento do título da moeda base
Mudança do Título Base Número Mudança do valor do rendimento do título da moeda base
Título Cotado Número Valor do rendimento do título da moeda cotada
Mudança do Título Cotado Número Mudança do valor do rendimento do título da moeda cotada
US10Y Número Valor do rendimento dos títulos de 10 anos dos Estados UnidosMudança do US10Y
Mudança do US10Y Número Mudança do valor do US10Y (semanal)
Motor de Rendimento Número Número positivo favorece a base, número negativo favorece a cotada   
Permitir Negociar Booleano Sugestão do Ziwox, negociar ou parar de negociar
Razão para Parar String Se sugerir não negociar, você pode ver o motivo aqui.
Reversão de Risco Número Valor da Reversão de Risco para este ativo. Determina o valor PUT/CALL
cesi Número Valor CESI
Diferença de Rendimento Número Valor do rendimento da moeda base - valor do rendimento da moeda cotada 
Posição dos Bancos Número Proporção da posição das instituições bancárias
Fundamental Macroeconômico Número Valor macroeconômico, um número positivo é um impulsionador altista, um número negativo é um impulsionador baixista para o ativo
Sentimento de Longo Prazo Número Sentimento de longo prazo do ativo, baseado em Economia, Política...
Sazonal Porcentagem A possibilidade de crescimento ou queda do ativo em termos de dados sazonais


Neste estudo de caso/exemplo, gostaríamos de usar a previsão de IA Altista/Baixista. Agora, para projetar essa função, lemos os dados armazenados no arquivo (passo 4) pela biblioteca JSON e extraímos o que precisamos.

A função seria assim:

#include "JAson.mqh"  // include the JSON librery in our project
CJAVal JsonValue;


void JsonDataParse(string filename, string &_APIJSON[])

  {
   bool     UpdateData =   false;
   for (int arraIn=0; arraIn<ArraySize(APIJSON); arraIn++) APIJSON[arraIn]="";


   if(FileGetInteger(filename,FILE_EXISTS,true)>=0)
     {
      int   FileHandle =FileOpen(filename,FILE_READ|FILE_SHARE_READ|FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN|FILE_COMMON);
      char  jsonarray[];
      FileReadArray(FileHandle,jsonarray);
      FileClose(FileHandle);

      JsonValue.Clear();
      JsonValue.Deserialize(CharArrayToString(jsonarray, 0, 0, CP_UTF8));


      _APIJSON[0]   =   JsonValue[0]["Symbol"].ToStr();
      _APIJSON[1]   =   JsonValue[0]["Fundamental Bias"].ToStr();
      _APIJSON[2]   =   JsonValue[0]["Fundamental Power"].ToStr();
      _APIJSON[3]   =   JsonValue[0]["AI Bullish Forecast"].ToStr();
      _APIJSON[4]   =   JsonValue[0]["AI Bearish Forecast"].ToStr();
      _APIJSON[5]   =   JsonValue[0]["Retail Long Ratio"].ToStr();
      _APIJSON[6]   =   JsonValue[0]["Retail Short Ratio"].ToStr();
      _APIJSON[7]   =   JsonValue[0]["Retail Short Lot"].ToStr();
      _APIJSON[8]   =   JsonValue[0]["Retail Short pos"].ToStr();
      _APIJSON[9]   =   JsonValue[0]["Base COT NET"].ToStr();
      _APIJSON[10]  =   JsonValue[0]["Base COT change"].ToStr();
      _APIJSON[11]  =   JsonValue[0]["Quote COT NET"].ToStr();
      _APIJSON[12]  =   JsonValue[0]["Quote COT change"].ToStr();
      _APIJSON[13]  =   JsonValue[0]["COT chng Ratio"].ToStr();
      _APIJSON[14]  =   JsonValue[0]["Risk Sentiment"].ToStr();
     }
  }

E chamamos a função JSON assim:

string APIfilename =  symbolname+"_API_Data.json"; // API store file name
string API_DATA[]; // define an array variable to store API details

JsonDataParse( APIfilename,API_DATA);


Passo 6: Criando uma Estratégia Simples de Cruzamento de Médias Móveis

Usando os dados extraídos, armazenados na variável “APIJSON”, agora podemos criar estratégias de negociação automatizadas e combinar nossa estratégia com um sistema de previsão de IA. Aqui está um exemplo básico de como usar os dados em um EA:

Você pode escolher qualquer estratégia que desejar, mas neste artigo, tentamos escolher uma estratégia simples, porque nosso objetivo aqui é orientá-lo e ensinar como usar uma ferramenta dessas em seus projetos, para que você possa melhorar sua abordagem.

Uma estratégia de Cruzamento de Médias Móveis é uma técnica popular usada pelos traders para identificar possíveis sinais de compra e venda.

Esta estratégia usa duas médias móveis. Uma de curto prazo e uma de longo prazo para determinar a tendência do mercado.

Quando a MA de curto prazo cruza acima da MA de longo prazo, sinaliza uma compra, e quando cruza abaixo, sinaliza uma venda.

Vamos fazer isso:

shortMA  = iMA(Symbol(), 0, shortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
longMA   = iMA(Symbol(), 0, longMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);


// Check for crossover signals
if ( int(APIJSON[3])>=60 ) // if bullish forecast is higher than 60%
   if (shortMA > longMA)   // BUY trend 
   { 
      if (OrdersTotal() == 0) {
         ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy Order", 0, 0, Green);
         if (ticket < 0) Print("Error opening buy order: ", GetLastError());
      }
   }

if ( int(APIJSON[4])>=60 ) // if bearish forecast is higher than 60%
   if (shortMA < longMA)   // Sell trend
   {
      if (OrdersTotal() == 0) 
      {
         ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell Order", 0, 0, Red);
         if (ticket < 0) Print("Error opening sell order: ", GetLastError());
      }
   }


Passo 7: Usando Dados JSON para Filtragem de Sinais

Para melhorar a estratégia de cruzamento de médias móveis, usamos os dados JSON e a razão de previsão de IA da API Ziwox para filtrar os sinais.

Por exemplo, se o cruzamento da MA mostrar uma tendência de compra e se a previsão da IA estiver acima de 50%, sinalizando um movimento altista/para cima, é uma boa ideia entrar em uma compra. Pelo contrário, se a análise técnica (MA) tiver um sinal de venda, venderemos apenas quando os dados analíticos e a previsão estiverem na mesma direção da venda. Dessa forma, o risco de entrada pode ser reduzido e a taxa de acerto pode ser aumentada

Com base na organização dos dados JSON no passo 4, a previsão da IA, a porcentagem altista está no terceiro/terceiro elemento de nosso array e a previsão baixista está no quarto elemento.

O código pode ser assim:

void OnTick()
  {
   if (!APIOK) return;
   double   shortMA, longMA;
   long     ticket = -1;

   if(IsNewCandle())
     {
      shortMA  = iMA(Symbol(), 0, shortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
      longMA   = iMA(Symbol(), 0, longMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
      
      // Check for crossover signals
      if ( int(APIJSON[3])>=60 ) // if bullish forecast is higher than 60%
         if (shortMA > longMA)   // BUY trend 
         { 
            if (OrdersTotal() == 0) {
               ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy Order", 0, 0, Green);
               if (ticket < 0) Print("Error opening buy order: ", GetLastError());
            }
         }
      if ( int(APIJSON[4])>=60 ) // if bearish forecast is higher than 60%
         if (shortMA < longMA)   // Sell trend
         {
            if (OrdersTotal() == 0) 
            {
               ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell Order", 0, 0, Red);
               if (ticket < 0) Print("Error opening sell order: ", GetLastError());
            }
         } 
     }
  }


Conclusão

Integrando os dados da API com o MQL4 capacita os traders a criar Expert Advisors mais adaptáveis e baseados em dados. Ao aproveitar informações em tempo real de fontes externas, os traders podem aprimorar suas estratégias e tomar decisões de negociação mais informadas em condições de mercado dinâmicas. Você pode acessar dados além dos preços de mercado brutos. Essa abordagem permite combinar análise técnica e fundamental, aumentando a eficácia de suas estratégias de negociação.

O código final está pronto para ser baixado abaixo.

Estou aqui, pronto para responder a qualquer pergunta, sugestão ou crítica.

Atenciosamente e boas negociações.

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

Arquivos anexados |
APIExpert.mq4 (18.77 KB)
JAson.mqh (30.59 KB)
Desenvolvendo um EA multimoeda (Parte 18): Automação da seleção de grupos considerando o período forward Desenvolvendo um EA multimoeda (Parte 18): Automação da seleção de grupos considerando o período forward
Continuaremos automatizando etapas que anteriormente realizávamos manualmente. Desta vez, voltaremos à automação da segunda etapa, ou seja, a escolha do grupo ideal de instâncias individuais de estratégias de negociação, complementada pela capacidade de considerar os resultados dessas instâncias no período forward.
Técnicas do MQL5 Wizard que você deve conhecer (Parte 26): Médias Móveis e o Exponente de Hurst Técnicas do MQL5 Wizard que você deve conhecer (Parte 26): Médias Móveis e o Exponente de Hurst
O Exponente de Hurst é uma medida de quanto uma série temporal se autocorrela ao longo do tempo. Entende-se que ele captura as propriedades de longo prazo de uma série temporal e, portanto, tem um peso significativo na análise de séries temporais, mesmo fora do contexto econômico/financeiro. No entanto, focamos em seu potencial benefício para os traders ao analisar como essa métrica poderia ser combinada com médias móveis para construir um sinal potencialmente robusto.
Técnicas do MQL5 Wizard que você deve conhecer (Parte 27): Médias Móveis e o Ângulo de Ataque Técnicas do MQL5 Wizard que você deve conhecer (Parte 27): Médias Móveis e o Ângulo de Ataque
O Ângulo de Ataque é uma métrica frequentemente citada, cuja inclinação é entendida como tendo uma forte correlação com a força de uma tendência predominante. Vamos analisar como ele é comumente usado e compreendido e examinar se há mudanças que poderiam ser introduzidas na forma como é medido, para benefício de um sistema de negociação que o utilize.
Usando o Algoritmo de Aprendizado de Máquina PatchTST para Prever a Ação do Preço nas Próximas 24 Horas Usando o Algoritmo de Aprendizado de Máquina PatchTST para Prever a Ação do Preço nas Próximas 24 Horas
Neste artigo, aplicamos um algoritmo relativamente complexo de rede neural chamado PatchTST, lançado em 2023, para prever a ação do preço nas próximas 24 horas. Usaremos o repositório oficial, faremos algumas modificações, treinaremos um modelo para EURUSD e o aplicaremos para fazer previsões futuras, tanto em Python quanto em MQL5.