backtrader.broker Commission外汇点差/保证金/杠杆的设置(技巧) – backtrader中文教程
在使用backtrader进行回测外汇数据时,烧脑的是在保证金与杠杆的设置。
例如:如何EURUSD下单1手时,100倍杠杆的情况下,
buy: 1.12888,close: 1.13162
占用保证金:1128.88
其中赚取0.00274即274个点,按17的点差,单边收取8.5个点。
毛利:274
净利 = 毛利 – 点差 = 274 – 17 = 257
如以下运行结果:
经过测试,可以使用多种方式实现,这里介绍两种简单的方式,我个人觉得在特定的情况下行数越少运行越高效。
核心:设置参数使保证金 = automargin * margin * size * price
第一种:cerebro.broker.setcommission
cerebro.broker.setcommission(commission=SYMBOL_COMM[symbol_name] * 1000.0 * 100.0 / 2, # SYMBOL_COMM[symbol_name]为货币对的点差,/2 :变成单边点差 margin=1, # 必须为1 automargin=1000,# 不同货币的保证金可以使用公式计算得出 mult=1000.0*100.0, # 100是杠杆的倍数,1000固定 name=symbol_name) # 设定此方案分配给那个货币对使用
第二种:cerebro.broker.addcommissioninfo
comm_customize_symbol = bt.CommissionInfo( commission=SYMBOL_COMM[symbol_name] * 1000.0 * 100.0 / 2, # SYMBOL_COMM[symbol_name]为货币对的点差,/2 :变成单边点差 margin=1, # 必须为1 automargin=1000, # 不同货币的保证金可以使用公式计算得出 mult=1000.0 * 100.0, # 100是杠杆的倍数,1000固定 )# cerebro.broker.addcommissioninfo(comm_customize_symbol, symbol_name)
上面两种方式,都要记得设置和修改SYMBOL_COMM[symbol_name],这里存的是货币对的点差。当然您也可以另外设置参数,让点差自动浮动起来。这是另外的话题了。
下面是完整的代码:
import backtrader as bt # 佣金点差 SYMBOL_COMM = { 'EURUSD': 0.00017, } cerebro = bt.Cerebro() cerebro.broker.setcommission(commission=sett.SYMBOL_COMM[symbol_name] * 1000.0 * 100.0 / 2, # SYMBOL_COMM[symbol_name]为货币对的点差,/2 :变成单边点差 margin=1, # 必须为1,原因不说了, automargin=1000, # 不同货币的保证金可以使用公式计算得出 mult=1000.0*100.0, # 100是杠杆的倍数,1000固定 name=symbol_name) # 设定此方案分配给那个货币对使用