aufrufende Funktion mit dataframe Daten Fehler gibt (nicht in der Serie zu <class 'float'>)

Habe ich eine option-pricing-Modell (sehr einfache Black-Scholes -) das funktioniert auch mit Daten, die in dieser Weise:

In [18]:
BS2(100.,100.,1.,.001,.3)

Out[18]:
11.96762435837207

die Funktion ist hier:

Black Sholes Function

def BS2(S,X,T,r,v):
    d1 = (log(S/X)+(.001+v*v/2)*T)/(v*sqrt(T))
    d2 = d1-v*sqrt(T)
    return (S*CND(d1)-X*exp(-.001*T)*CND(d2))

Ich glaube nicht, dass es darauf ankommt, für diese Frage, aber BS2 nennt dies:

Cumulative normal distribution function

def CND(X):
    (a1,a2,a3,a4,a5) = (0.31938153, -0.356563782, 1.781477937, 
     -1.821255978, 1.330274429)
    L = abs(X)
    K = 1.0 / (1.0 + 0.2316419 * L)
    w = 1.0 - 1.0 / sqrt(2*pi)*exp(-L*L/2.) * (a1*K + a2*K*K + a3*pow(K,3) +
    a4*pow(K,4) + a5*pow(K,5))
    if X<0:
        w = 1.0-w
    return w

Habe ich versucht zu ändern, der die Arbeit BS-Funktion zum annehmen von Daten aus einer df, aber scheinen etwas falsch gemacht haben:

def BS(df):
    d1 = (log(S/X)+(.001+v*v/2)*T)/(v*sqrt(T))
    d2 = d1-v*sqrt(T)
    return pd.Series((S*CND(d1)-X*exp(-.001*T)*CND(d2)))

meine Daten ist sehr geradlinig:

In [13]:
df

Out[13]:
    S    X   T    r    v
0  100  100  1  0.001  0.3
1   50   50  1  0.001  0.3

sind und alle float64

In [14]:

df.dtypes
Out[14]:
S    float64
X    float64
T    float64
r    float64
v    float64
dtype: object

Ich auch versucht, die Zuordnung der df-Variablen einen Namen, bevor Sie an BS2 (ich habe auf diese Weise, und ohne diese Zuordnung:

S=df['S']
X=df['X']
T=df['T']
r=df['r']
v=df['v']

auf die Gefahr der übersendung zu viel info, hier ist die Fehlermeldung:

In [18]:

BS(df)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-745e7dd0eb2c> in <module>()
----> 1 BS(df)

<ipython-input-17-b666a39cd530> in BS(df)
  3 def BS(df):
  4     CallPutFlag='c'
----> 5     d1 = (log(S/X)+(.001+v*v/2)*T)/(v*sqrt(T))
  6     d2 = d1-v*sqrt(T)
  7     cp = ((S*CND(d1)-X*exp(-.001*T)*CND(d2)))

C:\Users\camcompco\AppData\Roaming\Python\Python34\site-   packages\pandas\core\series.py in wrapper(self)
 74             return converter(self.iloc[0])
 75         raise TypeError(
---> 76             "cannot convert the series to {0}".format(str(converter)))
 77     return wrapper
 78 

TypeError: cannot convert the series to <class 'float'>

jegliche Hilfe würde sehr geschätzt werden.

John

InformationsquelleAutor John | 2015-06-14
Schreibe einen Kommentar