Distribuzione normale



  • Distribuzione normale
    di salvoturu (utente non iscritto) data: 10/01/2014 10:57:08

    Salve a tutti...
    Ho un problema apparentemente semplice che non riesco a risolvere..
    dovrei creare la distribuzione normale di alcuni numeri solo che quando do l'avvio all'operazione mi da l'errore "l'indice non è incluso nell'intervallo"...
    dove sbaglio...
    Help me

     
    Sub provaci()
    Dim L As Byte, vega() As Double
    
    For L = 1 To 20
    vega(L) = Application.NormSDist(Cells(L, 3).Value)
    Cells(L, 2).Value = vega(L)
    
    Next L
    End Sub



  • di patel data: 10/01/2014 11:59:26

    allega il file, altrimenti come possiamo testare la macro ?





  • di patel data: 10/01/2014 12:13:29

    comunque prova con
     
    Dim L As Byte, vega(20) As Double






  • di patel data: 10/01/2014 12:16:14

    anche se non capisco a cosa ti serve l'array vega, basterebbe
     
    Sub provaci()
    Dim L As Integer
    For L = 1 To 3
     Cells(L, 2).Value = Application.NormSDist(Cells(L, 3).Value)
    Next L
    End Sub






  • di scossa data: 10/01/2014 13:22:29

    Aggistare il range secondo le proprie esigenze.
     
    Sub provaci()
     Range("B1:B3").Value = Application.NormSDist(Range("C1:C3").Value)
    End Sub
    



  • di scossa data: 10/01/2014 13:24:00

    Oppure selezionare le celle a sx dei valori ed eseguire la sub sotto:
     
    Sub provaci2()
      Dim rng As Range
      Set rng = Selection.Columns(1)
      rng.Value = Application.NormSDist(rng.Offset(0, 1).Value)
      Set rng = Nothing
    End Sub



  • di salvoturu (utente non iscritto) data: 10/01/2014 15:58:50

    Le soluzioni che mi avete dato vanno bene...
    il problema sta nel fatto che i valori del range devono essere moltiplicati per una esponenziale e a quel punto ritorniamo al solito problema...
    Vi allego il file cosi capite meglio....
    il tutto è contenuto in una userform spero riusciate a capire...
     
    Private Sub btn_calcola_Click()
    Dim S As Single, X As Single, T As Single
    Dim d1 As Double, d2 As Double, Delta As Double, vega() As Double
    Dim r As Byte, k As Byte, v As Byte, I As Byte, J As Double, L As Double
    
    S = txtS
    X = txtX
    T = txtT
    r = txtr
    k = txtk
    v = txtv
    
    If txtS < 100 Then
        MsgBox prompt:="Valore del prezzo corrente inferiore a 100 ", Buttons:=vbCritical, Title:="errore inserimento dati"
        Exit Sub
    End If
    
    
    d1 = (Application.Ln(S / X) + (r - k + (v ^ 2) / 2) * T) / v * Sqr(T)
    txtd1 = d1
    d2 = d1 - v * Sqr(T)
    txtd2 = d2
    'Delta = Exp(-k * T)
    Delta = Application.NormSDist(d1) * Exp(-k * T)
    txtdelta = Delta
    
    For J = 1 To 20
    For I = 2 To 20
    Cells(1, 1).Value = S - 90
    Cells(I, 1).Value = Cells(I - 1, 1).Value + 10
    d1 = (Application.Ln(Cells(J, 1).Value / X) + (r - k + (v ^ 2) / 2) * T) / v * Sqr(T)
    Cells(J, 3).Value = d1
    Next I, J
    
    
    For L = 1 To 20
     Cells(L, 2).Value = Application.NormSDist(Cells(L, 3).Value) * Exp(-k * T)
    Next L
    
    End Sub



  • di scossa data: 10/01/2014 16:16:22

    cit.: "mi da l'errore l'indice non è incluso nell'intervallo... "

    Mi riservo di guardare il file più tardi, intanto considera questo: le matrici in VBA per default hanno indice 0, quindi sia Dim Vega() sia Dim Vega(20) creano una matrice che va da Vega(0) a Vega(19) ......

    Prova quindi a dichiarare Vega(1 To 20)....


     
    Dim L As Byte, vega(1 To 20) As Double 
    



  • di salvoturu (utente non iscritto) data: 10/01/2014 16:36:08

    Vi pregherei di inserire i seguenti dati da inserire nelle txtbox
    S=100
    X=90
    T=0,5
    r=6
    k=2
    v=35
    La colonna B mi esce costante mentre dovrebbe variare al variare della colonna C che a sua volta varia al variare della colonna A....



  • di scossa (utente non iscritto) data: 11/01/2014 18:22:47

    Non sono entrato nel merito del codice ma .....

    cit.: "La colonna B mi esce costante mentre dovrebbe variare ....."

    Non sono costanti, se imposti le celle della colonna B come numero con 15 decimali vedrai che sono diversi.
    Non è che sbagli la formula?



  • di salvoturu (utente non iscritto) data: 12/01/2014 10:42:50

    dovrebbero uscire valori crescenti al crescere del capitale, mentre cosi variano di poco....la variazione dovrebbe essere maggiore....



  • di scossa (utente non iscritto) data: 12/01/2014 13:10:34

    cit.: "dovrebbero uscire valori crescenti al crescere del capitale, mentre cosi variano di poco....la variazione dovrebbe essere maggiore...."

    Ma tu sei sicuro che le formule utilizzate siano scritte correttamente.

    Togli i cicli e verifica i risultati singolarmente; sono corretti?



  • di salvoturu (utente non iscritto) data: 12/01/2014 15:40:42

    allego il file pdf con le formule ed il risultato grafico da ottenere...