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