Public Sub McDelta(Fprice As Double, Days As Double, Strike As Double, Cp As String,  Prem As Double, Vol As Double, Delta As Double)    ' CALCULATES ,delta etc using Black / Scholes algorithm
        '   FPRICE    - futures price
        '   DAYS      - number of days to expiry
        '   STRIKE    - strike price
        '   CP        -  'C'all OR 'P'ut
        '   PREM      - premium   
       '   DELTA     - set = -99999 to indicate want PREM/DELTA to be calculated..
        ' Returns:
        '   VOL   - implied volatility
        '   DELTA - delta factor
        ' Returns:
        '   PREM  - premium
        '   DELTA - delta factor
        Dim OptPrem As Boolean
        Dim W As Double
        Dim T As Double
        Dim TT As Double
        Dim Temp9 As Double
        Dim K As Double
        Dim X As Double
        Dim M As Double
        Dim N1 As Double
        Dim N2 As Double
        Dim QQ As Double
        Dim CallPrem As Double
        Dim PutPrem As Double
        Dim Vvol As Double
        Vol = 0    Delta = 0
        OptPrem = False
        If Delta = -99999 Then OptPrem = -1
        Delta = 0
        If OptPrem = False Then Vol = 0
        If OptPrem = True Then Prem = 0
        If Fprice <= 0 Then Exit Sub
        If Strike <= 0 Then Exit Sub
        If Days <= 0 Then Exit Sub
        If Vol <= 0 And OptPrem = True Then Exit Sub
        If Cp <> "C" And Cp <> "P" Then Exit Sub
        If Cp = "C" Then W = 0
        If Cp = "P" Then W = 1
        T = Days        ' do not clobber passed data
    40  T = T / 365
        TT = Sqr(T)
        If OptPrem = True Then Vol = Vol / 100
        If OptPrem = True Then GoTo 50
        Temp9 = Strike * TT
        If Cp = "C" Then    
          Vol = 0
          If Temp9 <> 0 Then Vol = 2.5 * (Prem - 0.5 * (Fprice - Strike)) / Temp9
        Else                    ' for a PUT
          Vol = 0
          If Temp9 <> 0 Then Vol = 2.5 * (Prem + 0.5 * (Fprice - Strike)) / Temp9
          K = 0
        End If
            ' VOLATILITY is ZERO for a CALL if the difference between the strike and futures price
            '                    is twice the premium when the strike is lower than futures prices
            ' VOLATILITY is ZERO for a PUT if the difference between the strike and futures price
            '                    is twice the premium when the strike is higher than futures prices
        If Vol = 0 Then
          Delta = 0
          Exit Sub
        End If
    50  Vvol = Vol * TT
        X = 0
        If Vvol <> 0 Then X = Log(Fprice / Strike) / Vvol + 0.5 * Vvol
        M = 0.39894228082 * Exp(-X ^ 2 / 2)
        If M = 0 Then
          Vol = 0
          Delta = 0
          Exit Sub
        End If
    60  If X >= 0 Then
            N1 = FNN(X)
         Else
           N1 = 1 - FNN(-X)
         End If
    70  If X >= Vvol Then
           N2 = FNN(X - Vvol)
        Else
          N2 = 1 - FNN(Vvol - X)
        End If
        If OptPrem = True Then GoTo 180
    80  QQ = Fprice * N1 - Strike * N2
        QQ = QQ + W * (Strike - Fprice)
        If Abs(Prem - QQ) < 0.001 Then GoTo 100
    90  Temp9 = (Fprice * TT * M)
        If Temp9 <> 0 Then Vol = Vol + (Prem - QQ) / Temp9
        If Vol > 0.01 And Vol < 10 Then
          GoTo 50
        Else
          Vol = 0
          Delta = 0
          Exit Sub
        End If
    100 Vol = 100 * Vol
        Delta = N1
        If W = 1 Then Delta = -1 * N1        ' for a PUT
        If W = 1 Then Delta = (1 - Abs(Delta)) * -1  
        GoTo 210
    180 ' Mode for Option Premiums
        CallPrem = Fprice * N1 - Strike * N2
        Delta = N1
        If W = 1 Then Delta = (1 - Abs(Delta)) * -1
        PutPrem = CallPrem + Strike – Fprice
        Prem = CallPrem
        If W = 1 Then Prem = PutPrem
    210 Exit Sub
      Function FNN(X As Double) As Double
           FNN = 1 - 0.39894228082 * Exp(-X ^ 2 / 2) * (0.31938153 _
                        / (1 + 0.2316419 * X) - 0.356563782 _
                        / (1 + 0.2316419 * X) ^ 2 + 1.781477937 _
                        / (1 + 0.2316419 * X) ^ 3 - 1.821255978 _
                        / (1 + 0.2316419 * X) ^ 4 + 1.330274429 _
                        / (1 + 0.2319419 * X) ^ 5)
        End Function