如何基于初始资金计算股票策略DataFrame中每行的持仓账户可用余额
账户余额累计计算修正方案
错误原因
你当前代码的核心问题是将余额变量的初始化操作放在了循环内部的判断分支里,每次遍历交易记录时都会把余额重置为初始值1000,自然无法累计上一笔交易的最终余额。
修正实现
循环实现(逻辑直观,适配非连续交易场景)
把余额初始化放到循环外部,每次交易后更新的余额直接作为下一次计算的基数:
import numpy as np Starting_Balance = 1000 # 初始化当前余额和结果列表,放在循环外 current_bal = Starting_Balance test = [] for i in range(len(concat)): if concat.loc[i, 'Sell at'] > 0: # 用更新后的当前余额计算可买股数 share_cnt = np.round(current_bal / concat.loc[i, 'Bought at'], 0) profit = share_cnt * concat.loc[i, 'Win / (loss) $ Long'][i] current_bal += profit # 逐行记录当前余额,和原DataFrame行顺序一一对应 test.append(current_bal) # 将计算结果写入原DataFrame的新列 concat['可用账户余额'] = test
注意事项
- 如果你的
concatDataFrame不是默认的0开始的连续整数索引,建议把loc换成iloc取行,避免索引错位 - 股数取整规则可根据实际交易规则调整,比如A股是100股整数倍,就把
np.round换成向下取整后再对100取整的逻辑即可
内容的提问来源于stack exchange,提问作者Jose Miguel Valle Balsells
相关产品推荐
相关产品推荐

