佣金:信贷#
在某些情况下,实际经纪人账户中的现金金额可能会减少,因为资产操作包括利率。例如:
卖空股票
ETF,包括做多和做空
该费用直接从经纪人账户的现金余额中扣除。但它仍然可以被视为佣金计划的一部分。因此,它已经在 backtrader 中建模。
已通过 CommInfoBase
类(以及主接口对象 CommissionInfo
)进行了扩展,增加了以下内容:
两个(2)个新参数,允许设置利率并确定是否仅应用于做空方向或做多和做空方向
参数#
interest
(默认值:0.0
)如果这个值非零,则为持有卖空头寸收取的年利率。这主要用于卖空股票。默认应用的公式是:
days * price * size * (interest / 365)
必须指定为绝对值:0.05 -> 5%
注意
通过覆盖方法 get_credit_interest
可以更改行为
interest_long
(默认值:False
)有些产品(如ETF)在多头和空头仓位上都要收取利息。如果这个值为
True
,并且interest
不为零,那么利息将在两个方向上都会被收取
公式#
默认实现将使用以下公式:
days * abs(size) * price * (interest / 365)
其中:
days
: 开仓或上次计算信用利息以来的天数重写公式
*** ** ** ** ** ** **
为了改变公式,需要对 CommissionInfo
进行子类化。需要重写的方法是:
```python def _get_credit_interest(self, size, price, days, dt0, dt1):
‘’’ 此方法返回经纪人收取的信用利息成本。
在
size > 0
的情况下,只有在类参数interest_long
为True
时才会调用此方法。计算信用利息率的公式为:
公式:
days * price * abs(size) * (interest / 365)
- 参数:
data
:计算利息的数据源
size
:当前仓位大小。对于多头仓位,size > 0
;对于空头仓位,size < 0
(此参数不会为0
)
price
:当前仓位价格
days
:自上次计算信用时经过的天数(此值等于(dt0 - dt1)。days)
``- `dt0 :(datetime.datetime)当前日期时间
dt1 :(datetime.datetime)上次计算的日期时间
dt0 和`dt1`未在默认实现中使用,并提供为覆盖的方法的额外输入。
也许 broker 在计算利率时不考虑周末或银行假期。在这种情况下,这个子类可以解决问题。
import backtrader as bt
class MyCommissionInfo(bt.CommInfo):
def _get_credit_interest(self, size, price, days, dt0, dt1):
return 1.0 * abs(size) * price * (self.p.interest / 365.0)
在这种情况下,在公式中:
days 已被替换为 1.0
如果周末/银行假期不计入,下一次计算将始终在上一次计算后的1个交易日之后发生。