为什么我的if-elif语句只对我的if语句有效



我正在继续一个更大的项目,在这一部分,我试图使用华尔街来提取特定看涨或看跌期权交易的隐含波动性。我能够让它单独用于看涨和看跌,但当我将它们组合成一个动作时就不行了。

像aapl 180这样的输入变量调用5天直到到期->对calls和put的函数使用if-elif语句以获得相应的IV->将IV作为变量返回,以便在不同的部分中进行进一步的计算

这是我最近的一个例子。如果有任何帮助,我们将不胜感激,我是新的编码,所以如果这是明显的道歉。

作为参考,我的问题是,当我分别运行调用和放置函数时,它们会给出两个不同的数字,但像这样,无论p或C输入如何,我都会得到调用的值。

谢谢。

from wallstreet import Call, Put
import datetime
from datetime import date
ticker = "tsla"
K = 900
today = date.today()
expiry = today + datetime.timedelta(days=5)
y = expiry.year
d = expiry.day
m = expiry.month
CorP = "P"
if CorP == "c" or "C":
call = Call(ticker, d=d, m=m, y=y, strike=K)
sigma = call.implied_volatility()
elif CorP == "p" or "P":
put = Put(ticker, d=d, m=m, y=y, strike=K)
sigma = put.implied_volatility()
print(sigma)

我认为您的代码中存在逻辑错误

更换线路

if CorP == "c" or "C":

带有

if CorP == "c" or CroP == "C":

与CCD_ 1部分相同

更换

elif CorP == "p" or "P":

带有

elif CorP == "p" or CorP == "P":

您应该使用lower()函数来简化if语句

if CorP.lower() == "c": # Converts capital "C" to lower "c" and runs if statement
call = Call(ticker, d=d, m=m, y=y, strike=K)
sigma = call.implied_volatility()
elif CorP.lower() == "p": # Converts capital "P" to lower "p" and runs if statement
put = Put(ticker, d=d, m=m, y=y, strike=K)
sigma = put.implied_volatility()

相关内容

最新更新