मैं पायथन में अपना पहला बीएस विकल्प मॉडल लागू करने की कोशिश कर रहा हूं। एक समय में एक अंतर्निहित मूल्य पारित करने के बजाय, मैं एक सरणी पास करना चाहता हूं। यहाँ कोड और त्रुटि संदेश है:

xS=np.arange(10,110,10)

C=np.maximum(xS-K,0)

def bsm_call(S,K,T,r,sigma):

    d1=[(log(S/K) + 0.5 * pow(sigma,2)*T)/(sigma*pow(T,0.5)) for S in xS ] 

    d2=[d1-sigma*pow(T,0.5)]

    vC=[S * stats.norm.cdf(d1,0,1) - K * exp(-r*T) * stats.norm.cdf(d2,0,1)]

    return np.array(vC)

extC=bsm_call(xS,K,T,r,sigma)

उत्पन्न करता है: लेखन त्रुटि: असमर्थित संकार्य प्रकार (ओं) के लिए -: 'सूची' और 'फ्लोट'

सुनिश्चित नहीं है कि इसका क्या अर्थ है, लेकिन मुझे लगता है कि जिस तरह से मैं एक्सएस सरणी पास कर रहा हूं उसे पसंद नहीं है। तो बस परीक्षण करने के लिए, मैंने कोशिश की:

def test(S,K,T,r,sigma):    
    d1=[(log(S/K) + 0.5 * pow(sigma,2)*T)/(sigma*pow(T,0.5)) for S in xS ] 
    return np.array(d1)

test1=test(xS,K,T,r,sigma)
print(test1)

इसने मुझे d1 के लिए कुछ मान दिए (सुनिश्चित नहीं है कि वे सही हैं .... लेकिन कम से कम कोड ने काम किया)। इसलिए, इससे प्रोत्साहित होकर, मैंने दूसरी पंक्ति जोड़ने का प्रयास किया:

def test(S,K,T,r,sigma):    
    d1=[(log(S/K) + 0.5 * pow(sigma,2)*T)/(sigma*pow(T,0.5)) for S in xS ] 
    d2=[d1-sigma*pow(T,0.5) for S in xS]
    return np.array(d1+d2)

test1=test(xS,K,T,r,sigma)
print(test1)

त्रुटि संदेश अब है: यहां छवि विवरण दर्ज करें

मैं "सीधे" एक्सएस सरणी के माध्यम से लूपिंग से बचने की कोशिश कर रहा हूं। जाहिर है, पाइथन में ऐसा करने के लिए पर्याप्त नहीं है .... कुछ सुझावों की सराहना करेंगे। धन्यवाद, सी

0
Chet 15 फरवरी 2020, 03:38

2 जवाब

d1=[(log(S/K) + 0.5 * pow(sigma,2)*T)/(sigma*pow(T,0.5)) for S in xS ]

d1 एक साधारण पायथन सूची है।

d2=[d1-sigma*pow(T,0.5) for S in xS]

यहां, आप पूरी सूची से एक फ्लोट मान घटाने की कोशिश कर रहे हैं, और इसे len(xS) बार करें। आपको क्या लगता है कि आपको इससे क्या कार्यक्षमता मिलनी चाहिए? यह निश्चित रूप से कानूनी नहीं है।

आप एक NumPy सरणी से एक फ्लोट घटा सकते हैं, लेकिन किसी सूची से नहीं।

0
Prune 15 फरवरी 2020, 03:51
आपकी टिप्पणियों के लिए आभार। इस समय परीक्षण और त्रुटि, पूरी तरह से पायथन की सभी बारीकियों को जाने बिना। अंतत:, मैं स्टॉक की कीमतों के पूरे सूचकांक को बीएस समीकरण में पारित करने की कोशिश कर रहा हूं और बीएस कीमतों की एक सरणी प्राप्त कर रहा हूं।
 – 
Chet
15 फरवरी 2020, 03:57
फिर आपको एक सरणी का उपयोग करने की आवश्यकता है, सूची नहीं। केवल d1 के बजाय np.array(d1) आज़माएं।
 – 
Prune
15 फरवरी 2020, 04:17

मैंने @Prune से सुझाव की कोशिश की ... काम करने के लिए वाक्यविन्यास नहीं मिला। तो मैंने यह कोशिश की -

def bsm_call(S,K,T,r,sigma):
    d1=(log(S/K) + 0.5 * pow(sigma,2)*T)/(sigma*pow(T,0.5))
    d2=d1-sigma*pow(T,0.5)
    vC=S * stats.norm.cdf(d1,0,1) - K * exp(-r*T) * stats.norm.cdf(d2,0,1)
    return vC



extC=[]
for i in xS:  
   #print(i)
   extC.append(bsm_call(i,K,T,r,sigma))
   print(i)
print(extC)

और बीएस कॉल फ़ंक्शन में स्टॉक मूल्य सरणी के तत्वों को पारित करने में सक्षम था। मैं इसे एक कदम करने की कोशिश कर रहा था...लेकिन मुझे लगता है कि यह अभी के लिए काम करता है।

0
Chet 15 फरवरी 2020, 06:33