まどろっこしい前置きは、なしにしてアメリカの変動する休日「聖金曜日(Good Friday)」の計算をMQL4で実装したコードになります。フリーでご使用できますが、ご自身の責任でご活用ください。
Print部分は確認でご使用下さい。
年だけforで回せば、年ごとの聖金曜日が出力できます。
bool IsGoodFriday(int year, int month, int day) {
int lunarCycle = year % 19;
int century = year / 100;
int shiftedCentury = (century - 17) / 25;
int moonCorrection = (19 * lunarCycle + 15 + century - (century / 4) - ((century - shiftedCentury) / 3)) % 30;
int easterCorrection = moonCorrection - (moonCorrection / 28) * (1 - (29 / (moonCorrection + 1)) * ((21 - lunarCycle) / 11));
int weekDay = (year + (year / 4) - century + (century / 4) + easterCorrection + 2) % 7;
int easterDayOffset = easterCorrection - weekDay;
int goodFridayMonth = 3 + (easterDayOffset + 40) / 44;
int goodFridayDay = easterDayOffset + 28 - 31 * (goodFridayMonth / 4);
// Convert to Good Friday
if (goodFridayDay > 2) {
goodFridayDay -= 2;
} else {
goodFridayMonth = 3;
goodFridayDay = (goodFridayDay == 1) ? 30 : 31;
}
//Print(year,"年の聖金曜日は",year,"年",goodFridayMonth,"月",goodFridayDay,"日");
return (month == goodFridayMonth && day == goodFridayDay);
}


コメント