【答读者问11】backtradcer如何计算交易1手需要的现金?
作者:yunjinqi   类别:    日期:2021-12-23 17:38:45    阅读:1902 次   消耗积分:0 分    


这篇文章是免费文章,不计入专栏里面。本文可以在下面地址免费阅读。

在使用backtrader做量化策略的时候,需要考虑的一个问题就是,每次交易需要交易多少手。backtrader在实现的过程中,提供了多种方式可以调用,比如backtrader有一个sizer类,可以根据需求设置相应的手数;在order中,也有target order可以使用,然而,万变不离其宗,最重要的是确定下单的手数的时候,需要知道以下信息,计算出交易一手需要的现金:

  1. 账户的value

    账户的value很容易获得,可以在next中使用getvalue的函数

    self.baroker.getvalue()
  2. 账户的cash

    获取cash和value比较类似,使用getcash函数

    self.broker.getcash()
  3. 交易价格

    如果下单的时候,使用限价单之类的订单,比较容易得到相应的价格;如果使用的是市价单,则比较难得到成交价格,只有成交的时候才知道。如果下单的时候不是all in的话,影响一般不是很大;如果是all in的话,可以参考这篇文章:【答读者问4】如何实现all-in(每次下单使用全部资金)

  4. 每一手需要的cash

    最关键的是需要计算每一手需要的cash。不同资产类别下,这个有很大的不同。

    • 股票

      股票相对比较简单,一般每手都是100股,而且没有杠杆。这个时候,每一手需要的现金就是:100*成交价

    • 期货

      期货就相对比较复杂了,需要获得不同资产的合约乘数(杠杆)以及保证金率,这样才能够计算出一手需要的现金。

# 如果在使用的时候设置了不同的保证金率和合约乘数,就可以使用下面的代码进行调用info = self.broker.getcommissioninfo(data)# 合约乘数mult = info.p.mult# 保证金率margin = info.p.margin# 假设成交的价格是price,则一手的名义价值为:nominal_value = 1*price*mult# 1手需要的保证金为:require_margin = nominal_value*margin

注:本文写作使用45分钟完成。


智慧、心灵、财富,总要有一个在路上,愿我们能在人生的道路上,不断成长、不断成熟~~~

感兴趣可以关注我的专栏:

my_quant_study_note:分享一些关于量化投资、量化交易相关的思考

backtrader量化投资回测与交易:本专栏免费,分享backtrader相关的内容。

量化投资神器-backtrader源码解析-从入门到精通:本专栏目前收费299元,预计更新100篇策略(更新中)+36篇backtrader讲解(已完成)+backtrader源码分析。



版权所有,转载本站文章请注明出处:云子量化, http://www.woniunote.com/article/40
上一篇:【答读者问10】backtrader如何调用技术指标的值?
下一篇:【答读者问12】如何理解backtrader的line以及对line进行操作?