迭代字典并根据其内容计算结果
Iterating over a dictionary and computing a result from its contents
在迭代以下代码时,我得到了错误的结果。结果应该是-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"]
只是用价值代替投资组合[key]
for key, value in portfolio.items():
pl = (market[key] - value["strike"]) * value["volume"]
total_pl += pl
2 个观察结果:
- 您用来计算每只股票的 PnL 的公式
pl
是错误的 - 您实际上是从价格中减去总体头寸价值(价格 * 大小)。
- 不需要在循环中查找字典
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()])
就个人而言,我会添加一些合理性检查,确保您拥有投资组合中所有股票的市场信息,并以某种方式管理缺失的信息(现在,它只是 return a KeyError
).
在迭代以下代码时,我得到了错误的结果。结果应该是-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"]
只是用价值代替投资组合[key]
for key, value in portfolio.items():
pl = (market[key] - value["strike"]) * value["volume"]
total_pl += pl
2 个观察结果:
- 您用来计算每只股票的 PnL 的公式
pl
是错误的 - 您实际上是从价格中减去总体头寸价值(价格 * 大小)。 - 不需要在循环中查找字典
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()])
就个人而言,我会添加一些合理性检查,确保您拥有投资组合中所有股票的市场信息,并以某种方式管理缺失的信息(现在,它只是 return a KeyError
).