2012-07-30 63 views
2

我一直在用裁切这一段时间的一个变量:的Python:暗算功能

我有依赖于五(5)个变量是可以解决前一个函数(布莱克 - 斯科尔斯) 。在我解决了这个BS实例的价格之后,我想创建一系列不同的输入(例如时间),并将它们与相应的输出(解决方案,所有其他变量保持不变)进行比较。

所以希望我想

class BS 

    def __init__(self, args) 
     self.a = float(args[0]) 
     self.b = float(args[1]) 
     self.c = float(args[2]) 
     self.d = float(args[3]) 
     self.e = float(args[4]) 
    ... 
    ... 
    the math 
    ... 
    ... 

现在密谋什么的,我可以创建类,适用于计算从T或一段时间价格的方法的一个实例。

def price(self) 
    'math that only requires T' 
    return price 

所以,我只需要运行BS.price(),并可以输出类似

t = range(T-200, T+200, 1) 

prices = [BS.price() for x in t] 
rhos = [BS.rho() for x in t] 
vegas = [BS.vega() for x in t] 
parities = [BS.parity() for x in t] 


pylab.plot(prices,t) 
pylab.plot(rhos,t) 
pylab.plot(vegas,t) 
pylab.plot(parities,t) 

如果价格的唯一变量是时间。有没有更好的方法来观察python的单变量依赖关系?我宁愿R,但这不取决于我。

感谢您的帮助!

编辑:我不知道如何在时间变量正在进行math.sqrt()和scipy.cdf()等数学运算时使用列表解析。有没有办法做到这一点?我知道如何建立依赖变量t的函数,浮点数。我如何将值列表输入到math.sqrt()或scipy.cdf()?谢谢您的帮助!

+2

它凡在你的列表中理解更新时间变量被传递到类目前尚不清楚。一旦你创建了一个BS的实例,那么BS.price()将会是一个由参数决定的常量。在您的设计下,您需要为每个不同的时间创建新的BS实例。在这种情况下,让BS类接受一个时间列表作为参数,以及固定的其他参数不是更好吗?还要注意,你不是在你的示例代码中创建一个BS对象,所以除非'price'是一个静态方法(使用装饰器),否则你不能以这种方式调用它。 – ely 2012-07-30 01:53:51

+0

当时间变量正在进行math.sqrt()和scipy.cdf()等数学运算时,我不知道如何使用列表解析。有没有办法做到这一点?我知道如何建立依赖变量t的函数,浮点数。我如何将值列表输入到math.sqrt()或scipy.cdf()?谢谢您的帮助! – Jared 2012-07-30 02:04:09

+0

如果你的函数有多个参数,其中一个选项是创建一个lambda,其中除了时间都是固定的。假设你有'my_price_func(a,b,c,d,time)'...那么只需定义'fixed_args = lambda t:my_price_func(a = self.a,b = self.b,c = self.c,d = self.d,time = t)'现在你可以在类定义中调用'[fixed_args(t)for time_range]'。这是一个混乱的解决方案,因为你选择的类设计不是封装Black Scholes算法的好方法。我建议首先变得更加熟悉python。问一些关于列表解析的简化例子Q. – ely 2012-07-30 02:29:58

回答

1

当时间变量正在进行math.sqrt()和scipy.cdf()等数学运算时,我不知道如何使用列表解析。有没有办法做到这一点?我知道如何建立依赖变量t的函数,浮点数。我如何将值列表输入到math.sqrt()或scipy.cdf()?

有几个问题需要考虑:

  • Python生成器允许您为您完成值的集合/列表迭代动态生成的结果。这里是一个很好的讨论:
    http://wiki.python.org/moin/Generators

  • Python的地图和减少功能,让您应用功能(例如开方)每个元素在列表中,并减少可以减少每个某些操作的结果给的列出为一个值(检查2.1“映射列表”):
    http://www.siafoo.net/article/52