Zadanie 4 - obligacja kuponowa

W tym zadaniu zbudujesz model obligacji kuponowej i obliczysz jej wartość bieżącą na dany moment. Będziemy modelować prostą obligację z rocznymi kuponami, wypłacanymi co 12 miesięcy.

Dowiesz się, jak:

1 Utworzenie modelu

Pierwszym krokiem jest utworzenie nowego modelu o nazwie zadanie_4.

Otwórz powłokę Python i użyj poniższej komendy:

2 Dane wejściowe

W tej części przygotujesz dane wejściowe dla modelu:

2.1 Plan biegów (runplan)

Model będzie uruchamiany na dzień 31 grudnia 2024. Dodaj dane wyceny do planu biegów (runplan) – to tam trzymamy informacje dotyczące danej wersji modelu (np. datę wyceny lub wariant stresowy).

Uzupełnij poniższy kod w pliku input.py:

Zadanie: Ustaw rok i miesiąc wyceny zgodnie z treścią zadania. Zapisz miesiąc jako liczbę.

2.2 Parametry obligacji (model point set)

Utwórz model point set o nazwie bond, który zawiera dane jednej obligacji:

Uzupełnij szkielet kodu:

Zadanie: Wstaw brakujące wartości zgodnie z opisem obligacji.

2.3 Stopa procentowa

Dodaj zmienną base_interest_rate, która zawiera miesięczną stopę procentową: 0.2%.

W pliku input.py dopisz:

Zadanie: Uzupełnij wartość jako ułamek dziesiętny.

3 Model

W tej części zbudujesz zmienne potrzebne do wyznaczenia przepływów pieniężnych i ich wartości bieżącej.

3.1 Import danych

Na początku zaimportuj dane wejściowe z pliku input.py.

Uzupełnij kod w model.py:

Zadanie: Zaimportuj trzy zmienne:

3.2 Ostatni miesiąc obligacji

Oblicz, ile miesięcy zostało do końca życia obligacji (czyli ile miesięcy jeszcze pozostało do momentu wykupu, licząc od daty wyceny).

Aby to zrobić:

Uzupełnij funkcję:

Zadanie:

Uzupełnij brakujące atrybuty:

3.3 Miesiąc kalendarzowy

Zamodeluj zmienną calendar_month(t), która wskazuje miesiąc kalendarzowy dla każdego okresu t.

Założenia:

Uzupełnij kod funkcji:

Zadanie: Uzupełnij:

3.4 Kupon

Obligacja wypłaca kupon raz w roku – zawsze w tym samym miesiącu, w którym została wyemitowana. W naszym przykładzie jest to czerwiec, bo issue_month = 6.

Wartość kuponu to iloczyn:

Kupon wypłacany jest tylko:

Uzupełnij kod:

Zadanie: Wstaw:

3.5 Wypłata nominału

Na koniec życia obligacji wypłacany jest nominał.

Uzupełnij funkcję:

Podpowiedź:

Zadanie: Wstaw nazwę atrybutu z wartością nominału.

3.6 Wartość bieżąca

Wartość bieżąca to suma zdyskontowanych przyszłych przepływów pieniężnych.

W ostatnim miesiącu (T_MAX_CALCULATION) nie ma już kolejnych okresów, więc bierzemy tylko kupon i nominał.

Uzupełnij kod funkcji:

Zadanie:

4 Scenariusze stresowe

Wartość bieżąca obligacji zależy od przyjętej stopy procentowej. Sprawdź, jak zmienia się wycena obligacji w trzech scenariuszach:

4.1 Wersje w planie biegów

Dodaj kolumnę stress do planu biegów i dopisz dwie nowe wersje:

Uzupełnij poniższy kod:

Zadanie: Wstaw odpowiednie numery wersji (2, 3) i wartości stresu (0.1, -0.1).

4.2 Zmienna dla stopy procentowej

Zamiast używać base_interest_rate bezpośrednio, utwórz nową zmienną interest_rate(), która modyfikuje stopę procentową zgodnie ze scenariuszem.

Zadanie: Wstaw nazwę atrybutu zawierającego stres w planie biegów.

4.3 Aktualizacja zmiennej present_value

Zmień kod funkcji present_value, tak aby korzystała z nowej zmiennej interest_rate() zamiast base_interest_rate.

Zadanie: Nie musisz nic dopisywać – upewnij się tylko, że korzystasz ze zmiennej interest_rate() (a nie z bazowej stopy base_interest_rate).

4.4 Uruchamianie wersji w terminalu

Uruchom różne wersje modelu, aby zobaczyć wpływ stresu na wartość obligacji.