Книга: Этюды для программистов

10. Не прячьте ваши денежки, или Расчет дохода от вложенного капитала

10.

Не прячьте ваши денежки,

или Расчет дохода от вложенного капитала

Самым разным людям — финансистам, биржевым дельцам, банкирам и даже обыкновенным труженикам, вроде казначея пенсионного фонда Тимстеров[13], — хотелось бы знать, какой доход принесут им вложенные средства. Если деньги лежат на срочном вкладе, то особых сложностей не возникает, ибо банки в каждом рекламном проспекте трубят о своих процентах. Даже если ваши средства вложены в облигации, по которым не только выплачиваются проценты, но которые можно впоследствии еще и с выгодой продать, то, чтобы определить свой доход, достаточно взять разницу курсовой стоимости облигаций, прибавить проценты, и вы получите сумму, которую должен выплатить банк. Результатом этих вычислений, если их выразить в процентах годовых, приносящих при условии непрерывного их начисления известную прибыль, является инвестиционный доход.

Ситуация, однако, не столь проста, если инвестиции связаны, скажем, с инвестиционным фондом, счетом капитала или небольшим собственным делом, когда имеют место нерегулярные поступления и платежи и текущие показатели меняются изо дня в день. Хорошим, в этом смысле, примером служит инвестиционный фонд[14]. Действительно, новые акции могут приобретаться по рыночной стоимости в любой момент, а купленные ранее акции точно так же могут сбываться; в процессе функционирования фонда дивиденды все время меняются (и даже исчезают), однако, как правило, вкладываются в дополнительные акции; и наконец, стоимость акций фонда ежедневно меняется по мере того, как меняется курс лежащих в его основе ценных бумаг. Было бы, конечно, здорово сравнить доход, получаемый со срочного вклада, с той радужной перспективой, которую обещают проспекты инвестиционных фондов, не забывая, само собой, о том, что обычно доход пропорционален риску.

К счастью, для таких случаев имеется формула расчета дохода. Формула, к сожалению, не в замкнутом виде, а итерационная.

Предположим, что А — текущая величина инвестиций, что существует m операций с капиталом, причем i-я операция производилась на сумму Pi (отрицательные значения указывают на изъятие капитала) и имела место Ti лет назад, и пусть первоначальная оценка ожидаемого дохода Y0 полагается равной нулю. Итак, определим при j > 0 величины


и


Тогда наилучшая оценка дохода Yj дается формулой

Yj = Yj?1 + Cj/Dj

Как только разность

|Yj ? Yj?1|

станет достаточно малой, величина дохода считается найденной[15].

Дата Величина инвестиции Сумма операции
3/11/71 $0.00 $68.26
5/ 4/71 73.75 50.00
6/ 4/71 114.82 75.00
8/ 9/71 170.66 50.00
9/ 7/71 229.41 54.00
10/ 4/71 282.97 50.00
10/ 8/71 326.02 4.31
12/ 8/71 328.11 50.00
1/ 1/72 391.65 0.00
21 4/72 413.42 50.00
8/ 1/72 471.35 0.00
10/ 5/72 440.83 7.72
10/ 5/72 448.55 4.14
10/ 2/73 398.36 4.80
1/ 2/74 330.74 0.00
6/ 7/74 360.97 -200.00
10/ 3/74 180.42 50.00
3/13/75 253.96 -200.00
Таблица 10.1. Запись реальных инвестиций. Даты представлены в виде: месяц/число/год.

При изучении табл. 10.1 обратите внимание, что величина А получается суммированием среднего и правого столбцов таблицы. Например, для третьей строки А = 189.82 долл., P1 = 68.26 долл., Р2 = 50.00 долл., Р3 = 75.00 долл., a T1 ? 85/365, Т2 ? 31/365, Т3 = 0. Заметим также, что для каждой строки таблицы оценка Y0 считается равной нулю и что расчет дохода для любой текущей даты не зависит от величины доходов в предшествующие времена.

Тема. Напишите программу вычисления дохода от вложенного капитала. Исходные данные представляют собой записи о проведенных операциях, в каждой из которых указываются дата, сумма операции и величина инвестиции на день проведения операции без учета последней. Предполагается, что информация упорядочена по времени. Программа должна проверить, не нарушен ли хронологический порядок следования данных и нет ли где-нибудь изъятия средств, превышающего текущий счет. Программа должна отпечатать аккуратную таблицу платежных операций. При этом для каждой операции в выводимой строке должны быть указаны дата ее проведения, сумма инвестиций до операции, объем операции, сумма инвестиций после операции, доход на день проведения и сумма всех поступлений и платежей на текущий день. Каким именно образом обозначить конец вводимой информации — решать самому программисту, а вот равенство нулю суммы операции является удобным способом выяснения величины текущего дохода. Если у вас нет собственных инвестиций и вы не можете раздобыть Wall Street Journal[16], тогда исходными данными для программы, быть может не вполне удачными, зато реальными, может служить табл. 10.1.

Указания исполнителю. В рассматриваемой задаче существует интересный побочный вопрос. Даты проведения банковских операций задаются в обычном виде: месяц/число/год. А для решения задачи требуется иметь отрезки времени Ti, прошедшие после операции, выраженные в годах. У банкиров и юристов имеется несколько способов определения момента времени, когда прекращается начисление процентов на деньги (подозревают, что метод расчета зависит от того, кто кому должен). В программе достаточно вычислять годы в виде вещественных чисел с учетом високосных лет, предполагая, что все даты лежат в диапазоне от 1900 до 1999 включительно. Вообще говоря, перевод дат из одного календаря в другой может оказаться отнюдь не простым делом.

Инструментовка. Годится любой процедурный язык, предусматривающий действия с вещественными числами.

Длительность исполнения. Одному исполнителю на одну неделю.

Оглавление книги


Генерация: 1.255. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз