怎么修改模拟盘的资金呢?
问题描述
解决方案
在 JoinQuant (聚宽) 平台上,如果您需要在模拟盘(或回测)运行过程中修改账户的可用资金,可以使用平台提供的专用 API 函数:inout_cash。
inout_cash 函数详解
inout_cash(cash, pindex=0) 函数用于向账户转入或转出资金。当日的出入金会从当日开始记入成本,并用于计算收益(即当日结束计算收益时的本金是包含当日出入金金额的)。
参数说明:
cash: 浮点数或整数。代表出入金的金额。正数表示入金(增加资金),负数表示出金(减少资金)。pindex: 整数。在使用set_subportfolios创建了多个子仓位时,用于指定操作的 subportfolio 序号。从 0 开始,例如 0 指定第一个子账户,1 指定第二个子账户。默认为 0。
代码示例
以下是如何在策略代码中使用 inout_cash 来修改模拟盘资金的示例:
def handle_data(context, data):
# 查看修改前的账户可用资金
log.info('修改前账户可用资金:', context.portfolio.subportfolios[0].available_cash)
# 增加资金:向账户转入 6666 元
inout_cash(6666, pindex=0)
# 查看增加资金之后账户的可用资金
log.info('增加后账户可用资金:', context.portfolio.subportfolios[0].available_cash)
# 减少资金:从账户转出 3000 元
inout_cash(-3000, pindex=0)
# 查看减少资金之后账户的可用资金
log.info('减少后账户可用资金:', context.portfolio.subportfolios[0].available_cash)
注意事项
- 收益计算:使用
inout_cash进行出入金操作后,系统会自动调整您的本金基数,从而保证收益率(returns)计算的准确性。例如,您追加了资金,这部分资金不会被算作策略的盈利。 - 多账户操作:如果您在
initialize中使用了set_subportfolios配置了股票、期货等多个子账户,请务必通过pindex参数指定正确的账户进行资金修改。 - 账户间划转:如果您需要在不同的子账户之间转移资金,请使用
transfer_cash(from_pindex, to_pindex, cash)函数,而不是分别调用两次inout_cash。