佣金:信用

在某些情况下,真实经纪人的现金金额可能会减少,因为资产操作包括利率。例子:

  • 股票卖空
  • 多头和空头ETF

费用直接计入经纪人账户中的现金余额。但它仍然可以被视为佣金计划的一部分。因此,它已在backtrader中建模。

该类CommInfoBase(以及CommissionInfo主接口对象)已扩展为:

  • 两 (2) 个新参数,允许设置利率并确定是否应仅应用于空头或多头和空头

参数

  • interest0.0(定义:)

    如果该值非零,则为持有卖空头寸收取的年利息。这主要用于股票卖空

    应用的默认公式:days * price * size * (interest / 365)

    必须以绝对值指定:0.05 -> 5%

  • 可以通过覆盖方法来更改行为: get_credit_interest
  • interest_longFalse(定义:)

    某些产品(例如 ETF)会收取空头和多头头寸的利息。如果 ths 是Trueinterest非零,则将在两个方向上收取利息

公式

默认实现将使用以下公式:

days * abs(size) * price * (interest / 365)

在哪里:

  • days: 自开仓或最后一次信用利息计算发生后经过的天数

覆盖公式

为了改变公式的子类化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在上一次计算之后发生