
Usando a API de Dados JSON em seus projetos MQL
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.
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:
<title>German Trade Balance</title>
<country>EUR</country>
<![CDATA[ 07-07-2024 ]]> </date>
<![CDATA[ 8:30am ]]>
</time>
<forecast><![CDATA[ 19.9B ]]></forecast>
<previous><![CDATA[ 22.1B ]]></previous>
<url>
<![CDATA[ https://www.forexfactory.com/calendar/125-eur-german-trade-balance ]]>
</url>
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:
- 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.
- 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.
- 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.
- 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:
- 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.
- 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.
- 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.
- 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.
//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"
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
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
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.
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:
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





- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso