在某些情况下,真实经纪人的现金金额可能会减少,因为资产操作包括利率。例子:
-
卖空股票
-
交易所买卖基金包括多头和空头
该费用直接与经纪人帐户中的现金余额挂钩。但它仍然可以被视为佣金计划的一部分。因此,它已被建模为 backtrader。
该CommInfoBase
类(以及随之而来的主 CommissionInfo
接口对象)已扩展为:
- 两(2)个新参数,允许设置利率并确定是否应仅应用于空头或同时应用于多头和空头
参数
-
interest
(防守:0.0
)如果此值为非零,则为持有卖空头寸所收取的年利息。这主要用于股票卖空
套用缺省公式:
days * price * size * (interest / 365)
必须以绝对值指定:0.05 -> 5%
注意
可以通过重写该方法来更改行为:
get_credit_interest
-
interest_long
(防守:False
)一些产品,如ETF,需要对空头和多头头寸收取利息。如果 ths 为
True
非interest
零,则将在两个方向上收取利息
公式
缺省实现将使用以下公式:
days * abs(size) * price * (interest / 365)
哪里:
days
:自开仓或信用利息计算 last 天数
覆盖公式
为了改变公式,需要子类CommissionInfo
化。要重写的方法是:
def _get_credit_interest(self, size, price, days, dt0, dt1): ''' This method returns the cost in terms of credit interest charged by the broker. In the case of ``size > 0`` this method will only be called if the parameter to the class ``interest_long`` is ``True`` The formulat for the calculation of the credit interest rate is: The formula: ``days * price * abs(size) * (interest / 365)`` Params: - ``data``: data feed for which interest is charged - ``size``: current position size. > 0 for long positions and < 0 for short positions (this parameter will not be ``0``) - ``price``: current position price - ``days``: number of days elapsed since last credit calculation (this is (dt0 - dt1).days) - ``dt0``: (datetime.datetime) current datetime - ``dt1``: (datetime.datetime) datetime of previous calculation ``dt0`` and ``dt1`` are not used in the default implementation and are provided as extra input for overridden methods '''
可能是经纪人在计算利率时不考虑周末或银行假日。在这种情况下,这个子类可以解决问题。
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
上一次计算之后的交易da