在迭代以下代碼時,我得到了錯誤的結果。結果應該是-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)
任何幫助將不勝感激!
uj5u.com熱心網友回復:
差價要先計算,再乘以成交量:
pl = (market[key] - portfolio[key]["strike"]) * portfolio[key]["volume"]
uj5u.com熱心網友回復:
只需使用值替換投資組合[key]
for key, value in portfolio.items():
pl = (market[key] - value["strike"]) * value["volume"]
total_pl = pl
uj5u.com熱心網友回復:
2 觀察:
- 您用來計算每只股票盈虧的公式
pl是錯誤的——您實際上是從價格中減去整體頭寸價值(價格 * 規模)。 - 沒有必要
portfolio在回圈中查找字典(我指的是portfolio[key]["volume"]和portfolio[key]["strike"])),因為您已經使用 loop解壓了它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)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/322685.html
