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