Lezione 13

Transcript

Lezione 13
Introduzione alla Programmazione e Applicazioni per la
Finanza M2 (Prodotti Derivati)
Lezione 13
Anno accademico 2005-06
Titolare corso: Prof. Costanza Torricelli
Docente a contratto: Dott. Marianna Brunetti
CommandButton, ComboBox e UserForm
I pulsanti di comando personalizzati (CommandButton)
• I pulsanti di comando sono particolarmente utili se vogliamo collegare
l’esecuzione di macro ad uno specifico foglio di Excel
• Rispondono a diversi tipi di eventi:
•
•
click del mouse
o anche semplice spostamento del mouse sullo stesso
• Per collegare un pulsante di comando ad una “routine di gestione degli
eventi” occorrono 3 fasi:
1.
Creazione del CommandButton
2.
Collegamento del CommandButton alla routine ( o macro) di
gestione degli eventi
3.
Esecuzione del CommandButton
CommandButton, ComboBox e UserForm
Esempio: un CommandButton per il calcolo del VA – Fase 1
•Visualizza è Barre degli Strumenti è VBA è Strumenti di Controllo
1.
2.
3.
4.
Casella di Controllo
Casella di Testo
Pulsante di Comando
Pulsante di Opzione
5.
6.
7.
8.
Casella di Riepilogo
Casella combinata
Interruttore
…
• Pulsante di Comando e trascino per creare il Command Button
=> in entrambe le barre si attiva la “Modalità Progettazione”
NB: Modalità Progettazione VS Modalità Esecuzione
• Pulsante destro è Proprietà
• NOME: btnValoreAttuale
• CAPTION : Clicca qui per Calcolare il Valore Attuale
• ACCELLERATOR: A
• TAKEFOCUSONCLICK: False
CommandButton, ComboBox e UserForm
Esempio: un CommandButton per il calcolo del VA – Fase 2
• Sempre in modalità progettazione, doppio click col sinistro
• Automaticamente si crea una Sub, ma osserviamo le differenze:
•Nome è NomeOggetto_NomeEvento (qui btnValoreAttuale_Click)
•Public VS Private
• Riporto la subroutine per il calcolo del Valore Attuale
Private Sub btnValoreAttuale_Click()
Dim FC As Double
FC = InputBox("Immettere il valore del flusso di cassa futuro", "Calcolo Valore Attuale", 0)
Dim Tasso As Double
Tasso = InputBox("Immettere il tasso periodale", "Calcolo Valore Attuale")
Dim Periodi As Integer
Periodi = InputBox("Immettere il numero di periodi", "Calcolo Valore Attuale")
MsgBox "Il Valore Attuale di " & FC & " al tasso periodale di " & Tasso & " per " & Periodi & _
" periodi é: " & Round(PV(Tasso, Periodi, -FC), 2), vbInformation, “Calcolo Valore Attuale"
End Sub
CommandButton, ComboBox e UserForm
Esempio: un CommandButton per il calcolo del VA – Fase 3
• Esco dalla modalità progettazione
• Click sul pulsante di comando personalizzato
Clicca qui per calcolare il Valore Attuale
• Si attiva la macro! Cfr. risultati
Flusso di cassa
100
200
300
400
1000
Tasso di
interesse
0.05
0.03
0.03
0.06
0.11
Numero di
Valore
periodi
Attuale
10
772.17
5
915.94
7 1,869.08
2
733.36
1
900.90
CommandButton, ComboBox e UserForm
Le Caselle Combinate (ComboBox)
• Menù a tendina che limitano i dati in input ad un insieme di valori predefiniti
Esempio
• Visualizza è Barre degli Strumenti è VBA è Strumenti di Controllo
• Casella Combinata è trascino
• Pulsante destro è Proprietà
• NOME: cmbNomeCognome, cmbPercorso, cmbEmail
• BORDER STYLE: BorderStyleSingle (valore 1)
Formali
• SPECIAL EFFECT: SpecialEffectSunken (valore 2)
• LIST FILL RANGE: I3:I22, J25:J27, K3:K22
Sostanziali
• STYLE: StyleDropDownList (valore 2)
• Selezioniamo dai menù a tendina i valori corrispondenti per Nome, Percorso
ed e-mail
CommandButton, ComboBox e UserForm
Le UserForm
• Finestre di dialogo personalizzate incorporabili nell’interfaccia di Excel
•
Anche qui occorrono 3 fasi:
1.
Creazione della UserForm
2.
Stesura del codice per il
funzionamento della
UserForm
3.
Collegamento della
UserForm ad Excel
Esempio
“Crea una finestra di dialogo per
il calcolo del prezzo di call e put
secondo il modello di B&S”
CommandButton, ComboBox e UserForm
La UserForm per B&S – Fase 1
• VBA è Inserisci è UserForm => 1.
2.
UserForm vuota
Casella Strumenti
• NOME: frmBlackAndScholes, CAPTION: Calcolo del prezzo B&S di
un'opzione
• Aggiungiamo i vari ActiveXcontrols (bottoni, menu a tendina, caselle di
testo etc…)
Caselle di
Testo
Etichette
Casella
Combinata
Pulsanti di
Comando
CommandButton, ComboBox e UserForm
La UserForm per B&S– Fase 1 (ctd)
Etichette:
• funzione puramente descrittiva
• modifico il testo o tramite CAPTION o digitandovi dentro il testo
desiderato
Caselle di Testo: • permettono l’inserimento di testo da parte dell’utente
• importante modificarne il nome di default => NOME:
qui txtSottostante, txtStrike, txtTassoInteresse,
txtScadenza, txtVarianza, txtPrezzo
ComboBox: • ci permetterà di scegliere tra Call e Put
• NOME: cmbTipoOpzione
Pulsanti: • NOME: btnOk, btnAnnulla, btnChiudi
• CAPTION: OK, Annulla, Chiudi
NB: Formato è Allinea, Rendi Uguale, Adatta, Centra nel Form, Spaziatura
verticale o orizzontale, etc…
CommandButton, ComboBox e UserForm
Le UserForm – Fase 2
Colleghiamo la Form ad una routine per il calcolo del prezzo secondo B&S
• Tasto DX è Visualizza Codice => 2 menù a tendina
Generale
Contiene l’elenco di tutti gli oggetti
presenti nella finestra, compresa la
Form stessa => possiamo selezionare da
qui l’oggetto al quale vogliamo
collegare una routine
Eventi
Contiene l’elenco dei possibili
eventi a cui possiamo associare
l’oggetto selezionato
Modificando l’oggetto selezionato,
tale elenco viene automaticamente
aggiornato con tutti i possibili eventi
ad esso associabili
CommandButton, ComboBox e UserForm
La UserForm per B&S– Fase 2
• Scegliamo oggetto: UserForm ed evento: Initialize
Private Sub UserForm_Initialize()
….
End Sub
• a questo punto occorre aggiungere le due scelte “call” e “put” al
combobox…
cmbTipoOpzione.AddItem "Call"
cmbTipoOpzione.AddItem "Put"
End Sub
• …e collegare l’esecuzione della routine che calcola il prezzo B&S per le
opzioni all’evento “click su OK” => seleziono dal menù oggetti btnOk e da
quello eventi Click (default)
Private Sub btnOk_Click()
…
End Sub
• ora resta da scrivere il codice per il calcolo del prezzo delle opzioni
secondo B&S
CommandButton, ComboBox e UserForm
La UserForm per B&S – Fase 2 (ctd)
• Dichiariamo le variabili che useremo con i relativi tipi
Dim S, X, r, T, sigma, d1, d2, Nd1, Nd2, C, P As Double
Dim TipoOpzione As Integer
• Indichiamo a VBA dove andare a recuperarsi i valori di ciascuna di esse
S = Val(txtSottostante)
X = Val(txtStrike)
r = Val(txtTassoInteresse)
T = Val(txtScadenza)
sigma = Val(txtVarianza)
• Indichiamo dove individuare il tipo di opzione da prezzare
TipoOpzione = cmbTipoOpzione.ListIndex
CommandButton, ComboBox e UserForm
La UserForm per B&S – Fase 2 (ctd)
• Impostiamo i messaggi di errore da far comparire in caso di mancato
inserimento dei valori
If S = 0 Then
MsgBox "Attenzione! Non hai inserito il valore del sottostante (S)", , "Attenzione!"
ElseIf X = 0 Then
MsgBox "Attenzione! Non hai inserito il valore dello strike (X)", , "Attenzione!"
ElseIf r = 0 Then
MsgBox "Attenzione! Non hai inserito il tasso di interesse (r)", , "Attenzione!"
ElseIf T = 0 Then
MsgBox "Attenzione! Non hai inserito la scadenza (T)", , "Attenzione!"
ElseIf sigma = 0 Then
MsgBox "Attenzione! Non hai inserito la varianza (sigma)", , "Attenzione!"
Else:
• Inseriti tutti i valori, la routine procede con i soliti passaggi per il calcolo dei
prezzi di call e put europee secondo B&S
CommandButton, ComboBox e UserForm
La UserForm per B&S – Fase 2 (ctd)
d1 = (Log(S / X) + (r + 0.5 * (sigma) ^ 2) * T) / (sigma * Sqr(T))
d2 = d1 - Sqr(T) * sigma
Nd1 = Application.WorksheetFunction.NormSDist(d1)
Nd2 = Application.WorksheetFunction.NormSDist(d2)
C = S * Nd1 - X * Exp(-r * T) * Nd2
P = C + X * Exp(-r * T) - S
End If
• Specifichiamo quale valore vogliamo che VBA mostri nella casella testo
“Prezzo B&S” (dipende dalla scelta fatta nel combobox!):
Select Case TipoOpzione
Case 0:
txtPrezzo = Round(C,3)
Case 1:
Arrotondando il risultato mostrato
a sole 3 cifre decimali...
txtPrezzo = Round(P, 3)
End Select
End Sub
CommandButton, ComboBox e UserForm
La UserForm per B&S – Fase 2 (ctd)
• Quali eventi vogliamo collegare al clik sui restanti due Pulsanti?
• Annulla è Private Sub btnAnnulla_Click()
MsgBox "Così non concludi nulla...!!!", vbCritical, "Attenzione! Pessima
Scelta"
End Sub
• Chiudi è Private Sub btnChiudi_Click()
Me.Hide
End Sub
• Non resta altro che collegare la UserForm ad Excel, ad esempio tramite un
CommandButton:
•NOME: btnCollegamentoAdUserForm
•CAPTION: “Clicca qui per attivare la UserForm”
CommandButton, ComboBox e UserForm
La UserForm per B&S – Fase 3
Clicca qui per attivare la UserForm
• Doppio click è Private Sub btnCollegamentoAdUserForm_Click()
frmBlackAndScholes.Show
End Sub
• Implementiamo in Excel:
• Se manca qualche dato, viene correttamente segnalato?
• OK, Annulla e Chiudi rispondono alle aspettative?
• Inserendo tutti i dati, i risultati corrispondono (cfr. valori
riportati sul foglio di lavoro)?
• Come dovrei modificare la UserForm in modo da poter
scegliere anche il modello di pricing (es. binomiale o B&S)?
• E per avere in output la volatilità implicita?
CommandButton, ComboBox e UserForm