基于Python和Pandas的FIFO资本利得/损失程序合理性检查请求
FIFO资本利得计算程序逻辑合理性排查请求
我用Python和Pandas开发了一款基于FIFO(先进先出)规则的资本利得/损失计算程序,但程序计算结果远低于我手动计算用于报税的数值(手动结果也可能出错),差值超过一半。恳请财务或技术人员帮忙检查程序的合理性,测试数据及代码如下:
编辑说明:已根据评论将排序参数从False修改为True
# 创建交易数据的DataFrame transactions = pd.DataFrame({ "Date": ["2022-01-01", "2022-01-02", "2022-01-03", "2022-01-04", "2022-01-05"], "Operation": ["Buy", "Buy", "Buy", "Sell", "Sell"], "Stock Price": [100.0, 110.0, 120.0, 130.0, 140.0], "Shares": [10.0, 20.0, 30.0, 15.0, 25.0] }) # 创建成本基数列(买入总价) transactions["Cost Basis"] = transactions["Stock Price"] * transactions["Shares"] # 创建资本利得/损失列 transactions["Capital Gain/Loss"] = 0.0 # 创建剩余股数列 transactions["Remaining Shares"] = 0.0 # 初始化剩余股数和成本基数跟踪变量 remaining_shares = 0.0 cost_basis = 0.0 # 按时间正序遍历交易记录 for i, row in transactions.sort_values("Date", ascending=True).iterrows(): if row["Operation"] == "Buy": # 买入操作:累加剩余股数和成本基数 remaining_shares += row["Shares"] cost_basis += row["Cost Basis"] transactions.at[i, "Remaining Shares"] = remaining_shares elif row["Operation"] == "Sell": # 卖出操作:计算资本利得/损失并更新剩余股数和成本基数 if remaining_shares > 0: if remaining_shares >= row["Shares"]: capital_gain_loss = row["Shares"] * (row["Stock Price"] - cost_basis/remaining_shares) remaining_shares -= row["Shares"] cost_basis -= row["Shares"] * (cost_basis/remaining_shares) else: capital_gain_loss = remaining_shares * (row["Stock Price"] - cost_basis/remaining_shares) remaining_shares = 0 cost_basis = 0 transactions.at[i, "Capital Gain/Loss"] = capital_gain_loss transactions.at[i, "Remaining Shares"] = remaining_shares # 按年份汇总资本利得/损失 transactions["Year"] = pd.to_datetime(transactions["Date"]).dt.year result = transactions.groupby("Year")["Capital Gain/Loss"].sum() print(result)
内容的提问来源于stack exchange,提问作者Lucas Muller
相关产品推荐
相关产品推荐

