Quantlib: Функция перехода по дате для TimeUnit «дней» - ошибка или особенность?

0

У меня есть крошечный вопрос относительно функции опережения даты в C ++ Quantlib. Я хотел использовать смещение платежа (в днях) для продукта с условным обозначением рабочего дня «предшествующий», но дата платежа всегда была установлена на первый день после выходных, когда дата платежа приходилась на выходные. Это связано с тем, что функция «заранее» игнорирует условные обозначения рабочих дней, когда «дни» передаются функции «заранее», см. Здесь:

 Date Calendar::advance(const Date& d,
                       Integer n, TimeUnit unit,
                       BusinessDayConvention c,
                       bool endOfMonth) const {
    QL_REQUIRE(d!=Date(), "null date");
    if (n == 0) {
        return adjust(d,c);
    } else if (unit == Days) {
        Date d1 = d;
        if (n > 0) {
            while (n > 0) {
                d1++;
                while (isHoliday(d1))
                    d1++;
                n--;
            }
        } else {
            while (n < 0) {
                d1--;
                while(isHoliday(d1))
                    d1--;
                n++;
            }
        }
        return d1;
    } else if (unit == Weeks) {
        Date d1 = d + n*unit;
        return adjust(d1,c);
    } else {
        Date d1 = d + n*unit;

        // we are sure the unit is Months or Years
        if (endOfMonth && isEndOfMonth(d))
            return Calendar::endOfMonth(d1);

        return adjust(d1, c);
    }
}

Это сделано специально? Ps -функция "adjust" правильно использует условные обозначения рабочего дня!

Теги:
quantlib quantlib-swig
CodeFix

2 ответа

0

Да, зачет платежей всегда осуществляется в рабочие дни. Таким образом, вызов OISRateHelper немного вводил в заблуждение, потому что вы можете передать условное обозначение рабочего дня для компенсации платежа.

ql.OISRateHelper(0,
                     ql.Period(swapMaturity),
                     ql.QuoteHandle(rate),
                     eoniaIndex,
                     termStructureHandle,
                     False,
                     paymentOffset,
                     ql.Preceding
                     )
Поделиться
Источник
0

Да, это одна из вещей, которую я бы исправил, если бы это не нарушало клиентский код. В случае днейCalendar::advance означает «аванс на количество рабочих дней»; Конвенция неприменима, потому что, продвигаясь таким образом, вы никогда не попадете в отпуск.

Если вы имеете в виду «продвинуться на несколько календарных дней (например, 2), а затем скорректировать», вы можете написать именно это:

Date paymentDate = calendar.adjust(date + 2, convention);
Поделиться
Источник

Другие вопросы

  • Проблема алгоритма: найти все последовательности, извлеченные из стека1 ответ

    Предположим список[1, 2, 3, 4] для отправки в стек возможная последовательность извлечения из стека:1 2 3 4 1 2 4 3 1 3 2 4 ...

  • Итератор Python по фрейму данных или списку с данными о запасах1 ответ

    Я работаю над личным проектом - скорее учебным предприятием, чем чем-либо другим, и проект состоит из нескольких, которые могут показаться общими задачами для обработки данных в python. Я пробовал несколько способов решить самостоятельно или с помощью информации, полученной из других потоков, но пок...

  • Python требует установки ipykernel3 ответ

    У меня возникает проблема, когда я использую записную книжку jupyter в коде VS. На экране отображается «Python 3.7.8 требует установки ipykernel». Если бы я следил за всплывающим окном, чтобы вызвать ipykernel. Это все еще не работает. Скриншоты прилагаются. Меня это очень беспокоит. Может ли кто-ни...

  • Python, нельзя округлять после деления? [дубликат]2 ответ

    На этот вопрос уже есть ответы здесь : Поведение округления Python 3.x (11 ответов) Закрыт 7 месяцев назад . Я новичок в Python и сейчас пишу код. Мне нужно округлить некоторые числа после того, как я разделил их вот так.n = 5 print(round(n/2)) Почему здесь 2, а не 3? Он работает на 7 и дает 4, но...

  • Панды: новый столбец с индексом уникальных значений другого столбца3 ответ

    Мой фрейм данных:ID Name_Identify ColumnA ColumnB ColumnC 1 POM-OPP D43 D03 D59 2 MIAN-ERP D80 D74 E34 3 POM-OPP E97 B56 A01 4 POM-OPP A66 D04 C34 5 DONP28 B55 A42 A80 6 ...

  • Вложенные циклы Python while для сравнения векторов1 ответ

    У меня есть функцияpart который производит массивы чисел длиныn*k случайным образом, но при условии определенного распределения. У меня тоже есть функцияcheck_diff что возвращаетсяTrue/False в соответствии с определенной степенью сходства между такими векторами; это не совсем актуально. Я хочу постр...

  • Веб-драйвер Selenium выдает ошибку при попытке нажать "Далее"1 ответ

    После запуска этого кода я получаю ту же ошибку. Я думал, изменив его с этого elm = driver.find_element_by_class_name ('next') на текущий код, ошибка исчезнет, но она сохраняется. while True: elm = driver.find_element_by_xpath('//*[@id="left-section"]/div[1]/div[2]/div/div[...

  • PyImport_Import не может найти модуль2 ответ

    Я пытаюсь вызвать функцию python внутри своего c ++ Когда я импортирую свой модуль python, он выдает эту ошибку:ModuleNotFoundError: No module named 'test' Вот как я импортирую модуль:#define PY_SSIZE_T_CLEAN #include <Python.h> int main() { Py_Initialize(); PyObject *pName = PyUnico...

  • Почему я не могу открыть / прочитать текстовый файл в расширении C, вызванном из Python?4 ответ

    Я пытаюсь передать имя файла из python в C \ C ++ .dll и заставить код C \ C ++ открыть / прочитать этот файл. Вот очень простой пример того, чего я пытаюсь достичь с помощью ctypes. Прошу прощения за безрассудство моего кода на C ++. Я здесь учусь.//C++ code in example.cpp compiled to example.dll #...

  • Использование сокетов для создания кликов на устройстве Android (преобразование с python на C)1 ответ

    Я пытаюсь создать программу сокета, которая взаимодействует с клиентским устройством Android для имитации щелчков по нему, до сих пор мне удалось настроить и успешно запустить код TCP-сервера на Python, используя приведенный ниже код.import socket import time HOST = '192.168.1.243' PORT = 4000 w...

CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум