Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2009, 13:06   #1
killerplize
Новичок
Джуниор
 
Регистрация: 02.12.2009
Сообщений: 2
По умолчанию VBA. определить ценность облигации и сравнить её с нынешней ценой.

У меня тут проблемка встала. Надо написать функцию в VBA. Задача такова (перевожу с англ.):
Нужно определить ценность облигации и сравнить её с нынешней ценой.
Если цена > ценности, то надо вывести сообщение, что не стоит покупать.
Если цена < ценности, то надо вывести сообщение, что нужно покупать.
Если цена = ценности, то надо вывести сообщение, что типа без разницы.

Вот уравнение для определения ценности облигации:

Ценность облигации = Купоновая плата (Процент грубо говоря) / (100% + Процентная ставка) ^ первый год + Купоновая плата/ (100% + Процентная ставка) ^ второй год и т.д. до последнего года + Face Value (это сколько ты получишь по истечении срока облигации)/(100%+прочентная ставка) ^ последний год

Пример:
Face Value = F = 1000
Скоко лет = Т = 3 года
Купоновая плата = С = 50
Процентная ставка = R = 10%

Ценность = C / (1 + r)^1 + C / (1 + r)^2 + C / (1 + r)^3 + F / (1 + r)^3 =
= 50 / (1 + 0.1)^1 + 50 / (1 + 0.1)^2 + 50 / (1 + 0.1)^3 + 1000 / (1 + 0.1)^3 = 875.67

Вот примерно так это решается.

Я сам написал что-то, но почему-то не получается.
Вот мои малевания:

Код:
Function Decision1(Coupon, FaceValue, MarketPrice As Currency, InterestRate As Variant, Years As Integer) As String
Dim a As Currency
Dim b As Integer
For b = 1 To Years
a = Coupon / ((1 + InterestRate) ^ b)
Next b
BondValue = a + FaceValue / ((1 + InterestRate) ^ Years)
If BondValue < MarketPrice Then
    Decision1 = "The bond is overvalued by " & MarketPrice - BondValue & "." & "Don't buy it!"
    ElseIf BondValue > MarketPrice Then
    Decision1 = "The bond is undervalued by " & BondValue - MarketPrice & "." & "Should buy it!"
    Else: BondValue = MarketPrice
    Decision1 = "The bond is neither premium, nor discount!"
    End If
End Function
Я не знаю что тут делать. Пробовал и так, и эдак, один х*р не получается. Я попробовал написать для конкретно 3 лет, вот тогда у меня получается, но мне надо, чтобы эта функция работала для всех случаев. Если хотите, могу запостить функцию для конкретно 3 лет.
Помогите плз.

Последний раз редактировалось Stilet; 02.12.2009 в 13:36.
killerplize вне форума Ответить с цитированием
Старый 03.12.2009, 16:18   #2
killerplize
Новичок
Джуниор
 
Регистрация: 02.12.2009
Сообщений: 2
По умолчанию

Все, сам сделал. Надо было просто перед циклом написать BondValue = 0, и все. Модеры, можете удалять топик.
killerplize вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Культурная ценность(?) совр американских фильмов HellMercenariess Свободное общение 43 12.11.2009 10:00
Определить язык текста средствами VBA Luckyrich Microsoft Office Word 4 30.05.2009 11:03
VBA= сравнить 2 диапазона. Jainy_90 Microsoft Office Excel 2 16.05.2009 22:07