Quantlib: Функция перехода по дате для TimeUnit «дней» - ошибка или особенность?
У меня есть крошечный вопрос относительно функции опережения даты в 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" правильно использует условные обозначения рабочего дня!

2 ответа
Да, зачет платежей всегда осуществляется в рабочие дни. Таким образом, вызов OISRateHelper немного вводил в заблуждение, потому что вы можете передать условное обозначение рабочего дня для компенсации платежа.
ql.OISRateHelper(0,
ql.Period(swapMaturity),
ql.QuoteHandle(rate),
eoniaIndex,
termStructureHandle,
False,
paymentOffset,
ql.Preceding
)
Да, это одна из вещей, которую я бы исправил, если бы это не нарушало клиентский код. В случае дней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...

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