MQL4で学ぶ:2023年の聖金曜日を正確に計算する方法

MT4

まどろっこしい前置きは、なしにしてアメリカの変動する休日「聖金曜日(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);
}

コメント

タイトルとURLをコピーしました