Japan Bank Holiday and Gotobi Library (MT5/MT4): Manual do usuário, funções e exemplos

Japan Bank Holiday and Gotobi Library (MT5/MT4): Manual do usuário, funções e exemplos

14 outubro 2026, 01:22
Mikoto Hamazono
0
3

Japan Bank Holiday and Gotobi Library é uma biblioteca gratuita para MetaTrader 5 e MetaTrader 4. Ela responde às perguntas de calendário do mercado do iene dentro do seu próprio Expert Advisor, indicador ou script. Este manual é para desenvolvedores e vale para a versão 1.00 nas duas plataformas.

O que ela responde

  • Os feriados nacionais japoneses, incluindo os feriados substitutos, os feriados dos cidadãos e os feriados únicos, com o nome em inglês de cada um.
  • Os feriados bancários japoneses: sábados, domingos, feriados nacionais e de 31 de dezembro a 3 de janeiro. Todos os outros dias são dias úteis em Tóquio.
  • Os dias gotobi: os dias 5, 10, 15, 20, 25 e o último dia do mês. Em um feriado bancário, o gotobi passa para o dia útil anterior do mesmo mês.
  • O horário do fixing de Tóquio, 09:55, horário do Japão, e a conversão do horário do servidor para o horário do Japão e vice-versa. O Japão não tem horário de verão (JST = UTC+9).

Anos de 1980 a 2099. As regras são calculadas, portanto não há tabela de feriados para atualizar. Sem DLL, sem requisições web, sem arquivos, sem funções de negociação.

Gráfico USDJPY H4 com os fixings gotobi e os feriados bancários japoneses marcados por um script que chama a biblioteca

Instalação

  1. Na página do produto, clique no botão de download gratuito (Free Download; isso abre o MetaTrader) ou encontre-a em Toolbox > Market (no MT4 essa janela se chama Terminal). MT5 e MT4 são produtos separados.
  2. O Market instala a biblioteca como MQL5\Libraries\Market\Japan Bank Holiday and Gotobi Library.ex5 (MT5) ou MQL4\Libraries\Market\Japan Bank Holiday and Gotobi Library MT4.ex4 (MT4). File > Open Data Folder mostra essas pastas.
  3. Os produtos instalados e as atualizações deles ficam em Toolbox > Market > Purchased.
  4. Uma biblioteca não é colocada em um gráfico. O seu próprio programa a carrega pelo bloco de importação.

Como importar

Salve o arquivo de cabeçalho da sua plataforma na pasta Include e adicione uma linha no início do seu programa:

#include <JpMarketCalendar_Market.mqh>       // MT5
#include <JpMarketCalendar_Market_MT4.mqh>   // MT4

Cada cabeçalho importa as 17 funções e define as regras de horário de verão JP_DST_NONE (0), JP_DST_US (1) e JP_DST_EU (2). Se você mesmo colar o bloco de importação, a primeira linha dele precisa corresponder exatamente ao arquivo instalado (com duas barras invertidas): #import "Market\\Japan Bank Holiday and Gotobi Library.ex5" (MT5) ou #import "Market\\Japan Bank Holiday and Gotobi Library MT4.ex4" (MT4).

Dois programas para começar, ambos sem ordens:

Os seis arquivos compilam com 0 erros e 0 avisos. Abaixo está a saída do script de demonstração em um servidor demo do MT5; a versão MT4 imprime as mesmas linhas.

Saída do script de demonstração: horário do servidor e do Japão, próximos fixings, feriados de 2026

Referência das funções

FunçãoRetornoObservações
JpIsBankHoliday(datetime date_jst) booltrue aos sábados, domingos, feriados nacionais e de 31 de dezembro a 3 de janeiro.
JpIsBusinessDay(datetime date_jst) booltrue nos dias úteis de Tóquio. Fora de 1980-2099, esta função e JpIsBankHoliday() retornam false.
JpIsNationalHoliday(datetime date_jst) booltrue nos feriados nacionais, incluindo os substitutos, os dos cidadãos e os únicos.
JpHolidayName(datetime date_jst) stringO nome em inglês, por exemplo "Marine Day"; "Bank Holiday" em 31 de dezembro, 2 de janeiro e 3 de janeiro, a menos que sejam feriados nacionais; "" nos demais dias, inclusive nos fins de semana comuns.
JpIsGotobi(datetime date_jst) booltrue nos dias gotobi, que são sempre dias úteis.
JpGotobiDaysOfMonth(int year, int month, datetime &out[]) intPreenche um array dinâmico com os dias gotobi do mês (00:00 JST, do mais antigo para o mais recente) e retorna a quantidade; -1 para um array estático, um ano fora de 1980-2099 ou um mês fora de 1-12.
JpNextGotobi(datetime from_jst) datetimeO primeiro gotobi na data ou depois dela (00:00 JST). O próprio dia conta, mesmo depois das 09:55. 0 se não houver.
JpPrevGotobi(datetime from_jst) datetimeO último gotobi na data ou antes dela (00:00 JST). 0 se não houver.
JpTokyoFixing(datetime date_jst) datetime09:55 JST daquele dia, para qualquer dia; o fixing só é publicado em dias úteis.
JpNowJst() datetimeO horário atual do Japão (a partir do horário do servidor; veja abaixo).
JpServerToJst(datetime server_time) datetimeHorário do servidor para horário do Japão, com o deslocamento em uso. 0 para um horário inválido.
JpJstToServer(datetime jst) datetimeHorário do Japão para horário do servidor. 0 para um horário inválido.
JpServerGmtOffsetSeconds() intO deslocamento GMT atual do servidor, em segundos.
JpSetServerGmtOffset(int seconds) boolUm único deslocamento para o ano todo, por exemplo 7200 para GMT+2.
JpSetServerTimeZone(int standard_offset_seconds, int dst_rule) boolO deslocamento fora do horário de verão e a regra: 0 nenhuma, 1 EUA, 2 UE (+1 hora no horário de verão).
JpSetServerGmtOffsetAuto() voidVolta ao deslocamento automático (o padrão).
JpLibraryVersion() string"1.00"

Os argumentos de data estão no horário do Japão; qualquer hora do dia pode ser passada. Fora de 1980-2099, as funções retornam false, 0, "" ou -1. As duas funções de configuração aceitam um múltiplo de 900 segundos de -43200 a 50400; para qualquer outro valor, elas imprimem o motivo, retornam false e mantêm a configuração anterior.

Exemplos

Hoje no Japão:

datetime jst = JpNowJst();                       // Japan time now
if(JpIsBankHoliday(jst))
   Print("Tokyo banks are closed: ", JpHolidayName(jst));   // "" on a plain weekend
else if(JpIsGotobi(jst) && jst < JpTokyoFixing(jst))
   Print("Gotobi morning, fixing at ", TimeToString(JpJstToServer(JpTokyoFixing(jst))), " server time");

O próximo fixing gotobi que ainda não passou:

datetime jst = JpNowJst();
datetime g   = JpNextGotobi(jst);                // today counts all day
if(g != 0 && JpTokyoFixing(g) < jst)             // today's fixing has passed
   g = JpNextGotobi(g + 86400);
Print("Next gotobi fixing: ", TimeToString(JpJstToServer(JpTokyoFixing(g))), " server time");

Os dias gotobi de um mês:

datetime days[];                                 // must be a dynamic array
int n = JpGotobiDaysOfMonth(2027, 5, days);      // 5 days: 10, 14, 20, 25 and 31
for(int i = 0; i < n; i++)
   Print(TimeToString(days[i], TIME_DATE));

Fusos horários e o Strategy Tester

  • O horário do servidor não é o horário do Japão: na demonstração acima, o servidor mostra 21:43 de 13 de outubro, enquanto no Japão já são 03:43 de 14 de outubro. Converta com JpServerToJst() antes de perguntar sobre um dia, ou use JpNowJst().
  • O deslocamento padrão é automático: TimeTradeServer() - TimeGMT() no MT5, arredondado a 15 minutos e lido novamente a cada chamada. Logo após o terminal iniciar, ele pode valer 0 por alguns segundos.
  • O MT4 não tem TimeTradeServer() e usa TimeCurrent(), o horário da última cotação, que pode estar errado logo após a inicialização ou enquanto o mercado está fechado. No MT4, defina você mesmo o deslocamento.
  • No Strategy Tester, TimeGMT() retorna o horário do servidor, então o deslocamento automático é 0. A biblioteca escreve um aviso no diário do testador. Defina o deslocamento em OnInit().
  • O deslocamento automático é o deslocamento de hoje. Para barras passadas que atravessam uma mudança de horário de verão, defina a regra do servidor com JpSetServerTimeZone().
  • As configurações valem para o programa que as chama: chame-as em OnInit() de cada Expert Advisor ou indicador.
input int ServerGmtWinter = 2;   // server GMT offset outside summer time, in hours
input int ServerDstRule   = 1;   // summer time rule: 0 none, 1 US, 2 EU

int OnInit()
  {
   if(!JpSetServerTimeZone(ServerGmtWinter * 3600, ServerDstRule))
      return(INIT_PARAMETERS_INCORRECT);         // the library printed the reason
   return(INIT_SUCCEEDED);
  }

Regra dos EUA: do segundo domingo de março ao primeiro domingo de novembro (antes de 2007, valiam outras datas nos EUA). Regra da UE: do último domingo de março ao último domingo de outubro (setembro antes de 1996). Um servidor em GMT+2 no inverno e em GMT+3 no horário de verão dos EUA é 7200 com a regra 1. O script de demonstração mostra o deslocamento atual do seu servidor; a sua corretora pode dizer qual horário de verão ela segue. Para manter o deslocamento automático ao vivo no MT5, chame a função de configuração somente quando MQLInfoInteger(MQL_TESTER) for true, como faz o EA de exemplo.

Regras usadas e como foram conferidas

  • Lei dos Feriados Nacionais, com as alterações: datas fixas, feriados às segundas-feiras (Dia da Maioridade e Dia da Saúde e do Esporte desde 2000, Dia do Mar e Dia do Respeito aos Idosos desde 2003), Dia da Montanha desde 2016, o Aniversário do Imperador conforme a era e os dias transferidos de 2020 e 2021.
  • Feriado substituto: quando um feriado nacional cai em um domingo, o próximo dia que não seja feriado nacional é feriado (desde 2007; antes disso, apenas o dia seguinte).
  • Feriado dos cidadãos: um dia entre dois feriados nacionais (desde 1986), por exemplo 22 de setembro de 2026.
  • Feriados únicos: 1989-02-24, 1990-11-12, 1993-06-09, 2019-05-01 e 2019-10-22.
  • Dias de equinócio: a fórmula de aproximação padrão, válida para 1980-2099. O governo anuncia cada dia de equinócio em fevereiro do ano anterior.
  • Feriados bancários: sábados, domingos, feriados nacionais e de 31 de dezembro a 3 de janeiro (Lei Bancária); a regra atual é aplicada a todos os anos.
  • Gotobi: se o dia 5 tivesse de passar para o mês anterior, esse dia já é o gotobi de fim de mês do mês anterior e aparece apenas lá. Por isso, maio de 2027 tem 5 dias gotobi.
  • Estas são as regras em vigor quando a versão 1.00 foi feita (outubro de 2026).

Dias gotobi de 2026 e 2027 pelo script de demonstração; * = transferido para o dia útil anterior

Verificações antes do lançamento: as duas versões compilam com 0 erros e 0 avisos; a versão MT4 é feita a partir do mesmo código-fonte (só a função de horário é diferente). Todos os 789 feriados nacionais de 1980 a 2027 coincidem, dia a dia, com a lista do Gabinete do Japão; atualmente essa lista termina em 2027. A fórmula do equinócio dá a data oficial em todos os anos até 2027 e concorda com um cálculo astronômico em todos os anos até 2099. A importação pelo caminho do Market também carrega no Strategy Tester.

Perguntas frequentes dos desenvolvedores

  • Meu programa para com um erro sobre a biblioteca. Verifique se a biblioteca está instalada e se a linha #import corresponde exatamente ao nome do arquivo. O nome do arquivo do MT4 termina com MT4.
  • A data japonesa fica um dia errada à noite. Você passou o horário do servidor. Converta-o primeiro com JpServerToJst().
  • JpGotobiDaysOfMonth() retorna -1. Passe um array dinâmico ( datetime days[]; ), um ano de 1980 a 2099 e um mês de 1 a 12.
  • Ela é rápida o suficiente para OnTick()? Sim. Os resultados ficam em cache por ano. O cache guarda 2 anos, então um loop que salta entre muitos anos fica mais lento.

Páginas dos produtos: Japan Bank Holiday and Gotobi Library (MT5) e Japan Bank Holiday and Gotobi Library MT4. Se algo não estiver claro, envie-me uma mensagem privada no MQL5 com o código que você usa e as últimas linhas da aba Experts.

Download Japan Bank Holiday and Gotobi Library from MQL5 Market