Japan Bank Holiday and Gotobi Library
- Bibliotecas
-
Mikoto Hamazono
AI Trader Kyo | Desarrollador de MQL e Innovador en Forex
Como desarrollador de MQL y apasionado innovador en Forex, me dedico a crear soluciones de trading de vanguardia que aprovechan el poder de la inteligencia artificial. - Versión: 1.0
Japan Bank Holiday and Gotobi Library responde a las preguntas de calendario del mercado del yen dentro de su propio Asesor Experto, indicador o script: si hoy es festivo bancario en Japón, si es un día gotobi, cuándo es el próximo fixing de Tokio y qué hora es en Japón según el servidor de su bróker.
Todas las reglas se calculan, así que no hay ninguna tabla de festivos que actualizar. Para 1980-2027 los resultados coinciden día a día con la lista de festivos nacionales de la Oficina del Gabinete de Japón. Sin DLL, sin solicitudes web, sin archivos y sin funciones de trading.
Qué responde
- Los festivos nacionales de Japón, incluidos los festivos sustitutorios y los «festivos ciudadanos», con el nombre en inglés de cada festivo.
- Los festivos bancarios de Japón: sábados, domingos, festivos nacionales y del 31 de diciembre al 3 de enero. Todos los demás días son hábiles.
- Los días gotobi: el 5, 10, 15, 20, 25 y el último día del mes. Si ese día es festivo bancario, el gotobi pasa al día hábil anterior.
- La hora del fixing de Tokio: las 09:55, hora de Japón.
- Hora del servidor del bróker a hora de Japón y viceversa. Japón no tiene horario de verano (JST = UTC+9).
Funciones
- JpIsBankHoliday(date) - true los sábados, domingos, festivos nacionales y del 31 de diciembre al 3 de enero.
- JpIsBusinessDay(date) - true en los días hábiles de los bancos de Tokio.
- JpIsNationalHoliday(date) - true en los festivos nacionales, incluidos los sustitutorios y los ciudadanos.
- JpHolidayName(date) - el nombre en inglés, por ejemplo "Marine Day", "Substitute Holiday" o "Bank Holiday"; una cadena vacía los demás días.
- JpIsGotobi(date) - true en los días gotobi.
- JpGotobiDaysOfMonth(year, month, days[]) - todos los días gotobi de un mes; devuelve cuántos son.
- JpNextGotobi(date) / JpPrevGotobi(date) - el primer gotobi en la fecha o después / el último gotobi en la fecha o antes.
- JpTokyoFixing(date) - las 09:55, hora de Japón, de ese día.
- JpNowJst() - la hora actual de Japón.
- JpServerToJst(time) / JpJstToServer(time) - convierte entre la hora del servidor y la hora de Japón.
- JpServerGmtOffsetSeconds() - el desfase del servidor respecto a GMT en segundos (automático: TimeTradeServer() - TimeGMT(), redondeado a 15 minutos).
- JpSetServerGmtOffset(seconds) - un desfase fijo, por ejemplo 7200 para GMT+2.
- JpSetServerTimeZone(seconds, rule) - el desfase fuera del horario de verano y una regla de horario de verano: 0 ninguna, 1 EE. UU., 2 UE.
- JpSetServerGmtOffsetAuto() - vuelve al desfase automático (predeterminado).
- JpLibraryVersion() - la versión, "1.00".
Los argumentos de fecha están en hora de Japón; se puede pasar cualquier hora del día. Las fechas de festivos y de gotobi se devuelven como las 00:00, hora de Japón.
Cómo usarla
El Market instala la biblioteca como MQL5\Libraries\Market\Japan Bank Holiday and Gotobi Library.ex5. Pegue este bloque de importación al principio de su programa (o guárdelo como MQL5\Include\JpMarketCalendar.mqh e incluya ese archivo):
#import "Market\\Japan Bank Holiday and Gotobi Library.ex5" string JpLibraryVersion(); bool JpIsNationalHoliday(datetime date_jst); bool JpIsBankHoliday(datetime date_jst); bool JpIsBusinessDay(datetime date_jst); string JpHolidayName(datetime date_jst); bool JpIsGotobi(datetime date_jst); int JpGotobiDaysOfMonth(int year, int month, datetime &out[]); datetime JpNextGotobi(datetime from_jst); datetime JpPrevGotobi(datetime from_jst); datetime JpTokyoFixing(datetime date_jst); int JpServerGmtOffsetSeconds(); bool JpSetServerGmtOffset(int seconds); bool JpSetServerTimeZone(int standard_offset_seconds, int dst_rule); void JpSetServerGmtOffsetAuto(); datetime JpServerToJst(datetime server_time); datetime JpJstToServer(datetime jst); datetime JpNowJst(); #import
Ejemplo para un Asesor Experto:
int OnInit()
{
// In the Strategy Tester TimeGMT() returns server time: set the offset yourself
if(MQLInfoInteger(MQL_TESTER))
JpSetServerTimeZone(2 * 3600, 1); // GMT+2, +1 hour in US summer time
return(INIT_SUCCEEDED);
}
void OnTick()
{
datetime jst = JpNowJst(); // Japan time now
if(JpIsGotobi(jst))
Comment("Gotobi - Tokyo fixing at ",
TimeToString(JpJstToServer(JpTokyoFixing(jst))), " server time");
else if(JpIsBankHoliday(jst))
Comment("Japanese bank holiday ", JpHolidayName(jst));
else
Comment("Next gotobi: ", TimeToString(JpNextGotobi(jst), TIME_DATE));
} Reglas utilizadas
- Ley de Festivos Nacionales de Japón con sus reformas: fechas fijas, festivos en lunes (Día de la Mayoría de Edad y Día de la Salud y el Deporte desde 2000, Día del Mar y Día del Respeto a los Mayores desde 2003), Día de la Montaña desde 2016, el Cumpleaños del Emperador según la era y los días trasladados de 2020 y 2021.
- Festivo sustitutorio: cuando un festivo nacional cae en domingo, es festivo el siguiente día que no sea festivo nacional (desde 2007; antes, solo el día siguiente).
- Festivo ciudadano: un día entre dos festivos nacionales (desde 1986), por ejemplo el 22 de septiembre de 2026.
- Festivos únicos: 1989-02-24, 1990-11-12, 1993-06-09, 2019-05-01 y 2019-10-22.
- Días de equinoccio: la fórmula de aproximación estándar, válida para 1980-2099. Da la fecha oficial en todos los años hasta 2027 y coincide con un cálculo astronómico en todos los años hasta 2099. El Gobierno anuncia cada día de equinoccio en febrero del año anterior.
- Festivos bancarios: sábados, domingos, festivos nacionales y del 31 de diciembre al 3 de enero (Ley de Bancos; la regla actual se aplica a todos los años).
- Gotobi: si el día es festivo bancario, pasa al día hábil anterior del mismo mes. Si el día 5 tuviera que pasar al mes anterior (por ejemplo, en mayo de 2027), ese día hábil ya es el gotobi de fin del mes anterior y solo figura allí.
Conviene saber
- Años válidos: 1980-2099. Fuera de este rango las funciones devuelven false, 0, una cadena vacía o -1.
- Probador de estrategias: allí TimeGMT() devuelve la hora del servidor, por lo que el desfase automático es 0. Llame a JpSetServerGmtOffset() o JpSetServerTimeZone() en OnInit(), como en el ejemplo. Si se usa el desfase automático en el probador, la biblioteca escribe un aviso una vez en su diario.
- El desfase automático necesita un terminal sincronizado con el servidor de trading. Justo después de iniciarse el terminal puede valer 0 durante unos segundos; se vuelve a leer en cada llamada.
- El desfase automático es el desfase actual. Para convertir barras pasadas a través de un cambio de horario de verano, configure la regla del servidor con JpSetServerTimeZone().
- Los ajustes se aplican al programa que los llama: llámelos en OnInit() de cada Asesor Experto o indicador.
- JpGotobiDaysOfMonth() necesita un array dinámico: datetime days[];
- Los resultados se guardan en caché por año; una llamada repetida dentro del mismo año tarda unos 0,01 microsegundos.
Soporte
Si algo no queda claro, envíeme un mensaje privado en MQL5.
