.n Инвестиционный анализ
.a 
.d 23333
.s
* Расширение "Инвестиционный анализ"
Расширение предназначено для выполнения типовых расчётов по оценке эффективности инвестиционных проектов.
Оно позволяет: 
- автоматизировать построение сценариев денежных потоков инвестиционных проектов;
- рассчитать типовые характеристики инвестиционных проектов по заданным сценариям денежных потоков;
- проводить комплексное сравнения инвестиционных проектов и сценариев их реализации.

Расширение требует наличия файлов x_ia.api, x_ia.php, x_ia.txt (не входят в базовую комплектацию).

**Функция mcr() - формирование модели денежного потока
Функция mcr(m) позволяет автоматизировать процессы построения сценариев денежного потока инвестиционного проекта за счёт преобразования модели ряда денежного потока (m) в числовой ряд. 

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

Примеры моделей денежного потока:
2 -40% +0% +0%
2 =50% +0% +0%

При построении последовательных значений модели денежного потока могут использоваться:
- отрицательные и положительные числа;
- числа со спецсимволами % или = в конце и +,-,=  в начале. 

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

Одиночный символ = (знак равенства) предполагает копирование предыдущего значения. 
''Разметка'/
 ~x=mcr("1 2 = = 3 =")
 @vvt(x)
''Вывод'/
~x=mcr("1 2 = = 3 =")
@vvt(x)

Числа, оканчивающиеся на символ % (знак процента) интерпретируются как процентное значение к предыдущему рассчитанному значению ряда и вычитаемое (-) или прибавляемое (+) к предыдущему значению.  

''Разметка'/
 ~x=mcr("10 -10% 10 +10%")
 @vvt(x)
''Вывод'/
~x=mcr("10 -10% 10 +10%")
@vvt(x)

Символ = (равно) перед числом с символом % (процент) сзади него означает вычисление заданного процента от базового значения - первого числового значения модели при её рассмотрении слева направо. 

''Разметка'/
 ~x=mcr("=90% 10 =80% =70% =60%")
 @vvt(x)
''Вывод'/
~x=mcr("=90% 10 =80% =70% =60%")
@vvt(x)

В данном примере базовым значением является число 10 - первое числовое значение модели. Все остальные значения вычисляются как заданный процент от него. 

Символ = (равно) после числа означает прибавление (вычитание) данного числа из предыдущего значения. 

''Разметка'/
 ~x=mcr("=90% 10 -2= +3= =70%")
 @vvt(x)
''Вывод'/
~x=mcr("=90% 10 -2= +3= =70%")
@vvt(x)

**Функция cfd() - дисконтирование денежного потока
Функция cfd(cf,r) выполняет дисконтирование денежного потока cf (массив или строка чисел) с коэффициентом дисконтирования r. 

''Разметка'/
 ~x=cfd("10 10 10 10",0.1)
 @vvt(x)
''Вывод'/
~x=cfd("10 10 10 10",0.1)
@vvt(x)

**Функция npv() - NPV дисконтированного ряда
Функция npv(cf,r) вычисляет NPV дисконтированого с коэффициентом r денежного потока cf. 

''Разметка'/
 ~u=npv("10 10 10 10",0.1)
 NPV равно =u
''Вывод'/
~u=npv("10 10 10 10",0.1)
NPV равно =u

**Функция mpi() - индекс доходности
Функция mpi(d,r[,k]) вычисляет индекс доходности рядов доходов d и расходов r с коэффициентом дисконтирования k (по умолчанию равен нулю). 

''Разметка'/
/
 ~d=massiv("0 10 10 10")
 ~r=massiv("10 5  0  0")
 ~x=mpi(d,r)
Индекс доходности без дисконтирования равен =x
/
''Вывод'/
~d=massiv("0 10 10 10")
~r=massiv("10 5  0  0")
~x=mpi(d,r)
Индекс доходности без дисконтирования равен =x

''Разметка'/
/
 ~d=massiv("0 10 10 10")
 ~r=massiv("10 5  0  0")
 ~x=mpi(d,r,0.1)
Индекс доходности с дисконтированием по ставке 0.1 равен =x
/
''Вывод'/
~d=massiv("0 10 10 10")
~r=massiv("10 5  0  0")
~x=mpi(d,r,0.1)
Индекс доходности с дисконтированием по ставке 0.1 равен =x

**Функция ppd() - срок окупаемости
Функция ppd(d,r[,k]) вычисляет cрок окупаемости рядов доходов d и расходов r с коэффициентом дисконтирования k (по умолчанию равен нулю). Примеры используют ряды доходов и расходов, построенные в предыдущем примере для функции mpi().

''Разметка'/
/
 ~x=ppd(d,r)
Срок окупаемости без дисконтирования равен =x
/
''Вывод'/
~x=ppd(d,r)
Срок окупаемости без дисконтирования равен =x

''Разметка'/
/
 ~x=ppd(d,r,0.1)
Срок окупаемости с дисконтированием по ставке 0.1 равен =x
/
''Вывод'/
~x=ppd(d,r,0.1)
Срок окупаемости с дисконтированием по ставке 0.1 равен =x

**Функция irr() - внутренняя норма доходности 
Функция irr(cf[,e]) вычисляет внутреннюю норму доходности денежного потока cf с точность до e (по умолчанию e=0.0001). 

''Разметка'/
/
По данным рядов доходов (d) и расходов (r) из прошлых примеров с помощью функции вычитания векторов vmv расширения "Линейная алгебра" получаем денежный поток
 :::Доходы
 @vvt(d)
 :::Расходы
 @vvt(r)
 ~cf=vmv(d,r)
 :::Денежный поток 
 @vvt(cf)
 ~x=irr(cf)
Внутренняя норма доходности равна =x
Проверяем, вычисляя NPV с данной ставкой дисконтирования
 ~y=npv(cf,x)
Доходность проекта при ставке дисконтирования =x равна =y 
/
''Вывод'/
По данным рядов доходов (d) и расходов (r) из прошлых примеров с помощью функции вычитания векторов vmv расширения "Линейная алгебра" получаем денежный поток
:::Доходы
@vvt(d)
:::Расходы
@vvt(r)
~cf=vmv(d,r)
:::Денежный поток 
@vvt(cf)
~x=irr(cf)
Внутренняя норма доходности равна =x
Проверяем, вычисляя NPV с данной ставкой дисконтирования
~y=npv(cf,x)
Доходность проекта при ставке дисконтирования =x равна =y 

**Функция ia() - пакетные вычисления с загрузкой данных из файла или секции
Функция ia(p) в пакетном режиме выполняет комплексный обсчёт нескольких сценариев нескольких проектов и выводит отчёт. Параметр p должен быть текстовой строкой, включающей разделённые пробелами параметры, заданные в форме ключ:значение. На текущий момент может использовать единственный параметр d, значением которого должен быть указатель на массив исходных данных. Детальное описание порядка подготовки данных для функции ia() и описание выходных данных содержит !inv/instr.s.  Здесь приведём лишь отчёт, полученный по данным рассматриваемого в ней примера.

''Разметка'/
 @ia("d:inv/invfs.s~inv01")
''Вывод'/
@ia("d:inv/invfs.s~inv01")