2012-07-30 26 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