Избранное трейдера MrD
Напомним основные различия между YTM и HPR.
YTM (yield to maturity) — доходность к погашению, номинальная или эффективная, в зависимости от контекста. Это ставка дисконтирования, при которой приведенная стоимость потока платежей по облигации равна ее рыночной цене. Методики расчета YTM есть на сайте Мосбиржи. В Quik и брокерских приложениях указывается эффективная доходность. Ее можно вычислить и самостоятельно при помощи функции Excel ЧИСТВНДОХ(..) /XIRR(..)/ При расчете YTM неявно предполагается, что облигация удерживается до погашения и все получаемые купоны реинвестируются под эту же ставку. Иными словами, это априорная оценка доходности, рассчитываемая заранее.
HPR (holding period return) — реализованная доходность за время удержания позиции. Именно она важна для инвестора, так как отражает финансовый результат в течение срока владения облигацией. Этот срок может быть любым; предполагается, что по его истечении облигация продается или погашается.
20220915,090000,61420,61497,61406,61464,241
20220915,090100,61460,61476,61420,61451,160
20220915,090200,61444,61489,61436,61479,185
Осмелюсь предположить, что эти строки ты заливаешь в массив с помощью string.match. Это готовый парсер строки с разделителем. Работает достаточно шустро. Я на нем сидел пару лет.
Когда данных не много, такой метод загрузки не напрягает. Но когда за день 20-30 раз загружаешь сотни тысяч или миллион строк, то потери времени становятся невыносимыми.
Стал искать способ ускорить этот процесс. И он таки нашелся. Выяснил следующее:
Если строки в файле истории сконвертировать в такой вид (делается 1 раз):
table.insert(MyTable,{«20220915»,«090000»,61420,61497,61406,61464,241})
table.insert(MyTable,{«20220915»,«090100»,61460,61476,61420,61451,160})
table.insert(MyTable,{«20220915»,«090200»,61444,61489,61436,61479,185})