问题描述
解决方案
在聚宽(JoinQuant)及中国A股市场的交易规则中,可用资金(Available Cash)和可取资金(Transferable Cash)是两个不同的概念,主要区别在于资金的用途和结算周期(T+1制度)。
以下是详细的区别说明:
1. 定义区别
-
可用资金 (Available Cash)
- 定义:当前账户中可以用来购买证券(如股票、基金等)的资金。
- API属性:
context.portfolio.available_cash - 用途:用于策略内部的买入操作。
-
可取资金 (Transferable Cash)
- 定义:当前账户中可以提现(转出到银行卡)的资金。
- API属性:
context.portfolio.transferable_cash - 用途:用于计算账户实际可转出的现金流,通常不包括当日卖出股票回笼的资金。
2. 核心差异:T+1 结算制度
两者出现差异的主要原因是中国A股市场实行的 T+1 资金交收制度:
- 当日卖出股票获得的资金:
- 可用:卖出成交后,资金立即回到账户,可以在当天直接用来购买其他股票。因此,这部分资金会计入“可用资金”。
- 不可取:卖出成交后的资金,当天不可以提现,需要等到第二个交易日(T+1)完成交收后才能提现。因此,这部分资金当天不计入“可取资金”。
3. 举例说明
假设您的账户初始状态为:现金 0 元,持有市值 10,000 元的股票 A。
-
周一上午 10:00,您卖出了全部股票 A,成交金额为 10,000 元。
- 可用资金:10,000 元(您可以马上用这笔钱买入股票 B)。
- 可取资金:0 元(这笔钱当天不能转出)。
-
周二开盘前(资金完成交收)。
- 可用资金:10,000 元。
- 可取资金:10,000 元(此时可以提现了)。
4. 总结公式
一般情况下,两者的关系如下:
$$ \text{可用资金} = \text{可取资金} + \text{当日卖出证券所得资金} $$
- 可用资金 $\ge$ 可取资金
Q&A
Q: 在编写策略时,下单函数应该使用哪个资金属性?
A: 在编写买入逻辑时,应使用 可用资金 (context.portfolio.available_cash) 来判断是否有足够的钱进行购买。
Q: 为什么我的可用资金大于可取资金?
A: 这通常是因为您在当日进行了卖出操作。卖出股票回笼的资金当天可用(买股)但不可取(提现),导致可用资金大于可取资金。
Q: 模拟交易中的出入金函数 inout_cash 影响哪个资金?
A: inout_cash 模拟的是银证转账。如果是入金(正数),可用资金和可取资金都会增加;如果是出金(负数),则必须有足够的可取资金才能操作成功。