遍历字典并从其内容计算结果



在迭代下面的代码时,我得到了一个错误的结果。结果应该是-174.5,但我得到-9170.27。

我的代码如下:
portfolio = {
"AAPL": {
"volume": 10,
"strike": 154.12
},
"GOOG": {
"volume": 2,
"strike": 812.56
},
"TSLA": {
"volume": 12,
"strike": 342.12
},
"FB": {
"volume": 18,
"strike": 209.0
}
}
# print(portfolio["TSLA"]["volume"])
# print(portfolio["GOOG"]["strike"])
market = {
"AAPL":  198.84,
"GOOG": 1217.93,
"TSLA":  267.66,
"FB":    179.06
}
total_pl = 0
for key, value in portfolio.items():
pl = market[key] - (portfolio[key]["strike"]) * portfolio[key]["volume"]
total_pl += pl
print(total_pl)

任何帮助都将非常感激!

价差应先计算出来,再乘以容积:

pl = (market[key] - portfolio[key]["strike"]) * portfolio[key]["volume"]

2个观察:

  • 您用于计算每只股票pl的PnL的公式是错误的-您基本上是从价格中减去总体头寸值(价格*大小)。
  • 不需要在循环中查找字典portfolio(我指的是portfolio[key]["volume"]portfolio[key]["strike"])),因为您已经使用循环for key, value in portfolio.items()解压缩了。你可以简单地调用value["volume"]value["strike"]
  • 在代码:

total_pl = 0
for key, value in portfolio.items():
pl = (market[key] - value["strike"]) * value["volume"]
total_pl += pl

您可以使用列表推导式使其更紧凑:

total_pl = sum([v["volume"] * (market[k] - v["strike"]) for k, v in portfolio.items()])

就我个人而言,我会添加一些完整性检查,以确保您的投资组合中所有股票都有市场提要,并以某种方式管理丢失的提要(现在,它将简单地返回KeyError)。

用value代替portfolio[key]

for key, value in portfolio.items():
pl = (market[key] - value["strike"]) * value["volume"]
total_pl += pl

相关内容

  • 没有找到相关文章

最新更新