VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 419
声望: 173

1 几乎所有例子的仓位都是self.fixed_size=1

进阶课程里看过陈晓优老师讲的很多策略例子,都是讲如何买和如何卖,如何止盈和止损的,又是仿真、优化、实盘的,看到人是心潮澎湃!
于是看是着手仿照例子编写自己的策略,策略经过计算买卖信号后,总是要下单的,那我下多大仓位呢? 回过头这时候参考例子才发现,几乎所有的仓位都是self.fixed_size=1,就没有讲如何动态决定仓位的例子!
于是VNPY的QQ群里问前辈、先知,无人回答,再在论坛里问老师,终于回答了:”不建议动态仓位,这么重要的事情必须交给手工完成!“,这个答复让我有点懵——做量化交易你让为手动决定仓位???

2 是不建议动态仓位,还是无法动态仓位?

动态仓位需要什么条件:

  • 开仓价格(Price)
  • 可用资金(Money)
  • 合约乘数(Size)
  • 保证金(率)(Margin)
  • 手续费(率)(FeeRate)
  • 开仓的量 (N)
  • 开仓资金(KM)

假设是按手续费率(而不是按手收费),那么开仓资金为:

KM = Price*N*Size*Margin (1+ FeeRate)

那么必须符合添加KM < Money,进而推出

 N < Money/(Price*Size*Margin (1+ FeeRate))。

当然你不可能满仓干,也许还要一个最大开仓资金比例R,例如:

N = int(Money*R/(Price*Size*Margin (1+ FeeRate)))。

当R=40%表示用你账户里40%的资金,可以动态开仓的手数。这样不就可以动态开仓了吗?
当然实际开仓时的仓位计算可能比这复杂多了,比如你可以考虑交易合约的波动水平,需要考虑投资者愿意承担的风险水平等等,但不管怎么变化,策略动态开仓都必须要有如下这几个参数:

  • 开仓价格(Price)
  • 合约乘数(Size)
  • 可用资金(Money)
  • 保证金(率)(Margin)
  • 手续费(率)(FeeRate)

3 用户策略怎么可以与”钱“无关?

经过艰苦和漫长的代码研读和梳理,发现CTA策略交易中只有pos、trading和inited这些策略成员,没有与资金相关的东西。我们来看看这几个动态下单必须具备的参数是否提供了:

  • 开仓价格(Price):策略从合约的行情数据中提取
  • 合约乘数(Size):main_engine中可以使用vt_symbol作为参数提取,函数是main_engine.get_contract()
  • 可用资金(Money):目前有,可以通过 main_engine.get_account()函数提供 但是是当你运行多个策略的时候,这些策略是共用同一个账户的,无法直接使用。
  • 保证金(率)(Margin):目前有,但是这是各个交易所公布的统一的保证金(率),不是你开户的期货各种给你的保证金(率),如rb2010.SHFE的保证金是率8%,可是也许你的开户的期货公司给你的保证金率为却为12%或者15%,怎么用?
  • 手续费(率)(FeeRate):目前没有,而且这个费率回是因人而异的,这样是看你怎么和你的期货经纪人怎么谈判的,所以也没有办法用!

结论:

目前VNPY的CTA策略因为缺少上述几个关键参数,无法实现动态仓位交易。是不能也,而非不可以!

4 为CTA账户引入策略账户!

作为交易赚钱的CTA策略,怎么可以不与这些资金相关的参数打交道?因人而异的保证金和手续费不应该成为不提供这些参数的理由!
当多个策略在同时运行的时候,你的实际账户权益的消长,到底是哪个策略赚的,哪个策略赔的都无法说清楚,运行3天后就已经是一本糊涂账了,这怎么可以!

虽然有上面的困难,但是办法总比困难多!可以参考文华财经8.3或者库安9.0的办法(熟悉文华财经客户端的人应该都知道),它们的方法是用模组账户的方法来为每个用户模组创建一个虚拟的模组账户,很好地解决用户算法对资金、保证金和手续费等参数的设定!

策略账户的功能:

  1. 分配交易的初始资金,还可以做出金入金等虚拟操作,目的就是控制策略的交易规模。
  2. 设置各个合约实际使用的保证金(率)
  3. 设置各个合约可以使用的手续费(率),包括开仓、平仓和平今仓手续费(率)
  4. 可以记录策略产出的委托单
  5. 可以记录策略初始的成交单
  6. 可以为策略提供合约的当前可用资金、保证金(率)和手续费(率)
  7. 算策略的历史交易盈亏和当前交易的浮动盈亏
  8. 提供当前策略账户的权益和可用资金
  9. 提供策略自创建以来的所有历史委托单和成交单查询,解决目前CTA策略之知道最新活动委托单,当日成交单和未平仓的仓位,而不知道历史交易的情况的问题。

如何实现策略账户 ?

策略账户的已经基本上实现了,目前只在测试中,且看我一步一步慢慢为大家分享......

5. 最新进展

有兴趣的可以先看看 策略账户界面展示

Member
avatar
加入于:
帖子: 18
声望: 0

这的确是个大问题,实盘自动交易不可能手工的

Member
avatar
加入于:
帖子: 419
声望: 173

先分享一下策略账户设计的最新成果

用户策略只需要调用策略账户引擎提供的接口,启动之初创建本策略实例的策略账户,策略账户引擎就可以在后台监视策略的交易活动了。它可以监视策略的每笔交易盈亏,分配资金的使用情况,保证金的占用情况,累计手续费,目前的可用资金(按分配资金计算)等信息,这些信息对用户策略是非常有用的。

主界面面中多了个策略账户区域

description

双点策略账户区域,进入策略账户管理界面

description

这是策略的出入金管理界面

可以查询策略自创建以来的所有的出让金记录。当你策略中资金不足,你可以在此往策略账户中入金,当然如果策略很赚钱,你也可以通过出金减小策略的交易规模,做到落袋为安!
description

这是策略账户中保存的属于本策略的历史委托单记录:

description

这是策略账户中保存的属于本策略的历史成交单记录:

description

Member
avatar
加入于:
帖子: 12
声望: 0

你们的策略会不会重复下单

Member
avatar
加入于:
帖子: 419
声望: 173

不会,重复的信号才会导致导致重复下单

Member
avatar
加入于:
帖子: 50
声望: 1

Member
avatar
加入于:
帖子: 16
声望: 3

楼主的问题太重要了,我也是在分析如何动态调整仓位,楼主的说明对我很管用。
动态调整仓位(比如按照资金余额的百分比)很重要,这应该是通过系统实现而非手工调整。
另外,除了交易部分支持动态调整仓位外, 回测部分应该也需要加上,否则无法进行有效的基于动态仓位回测。
建议vnpy在后续的版本中, 在回测和实盘功能部分,增加基于资金余额的的动态调整仓位功能,谢谢大家~

Member
加入于:
帖子: 9
声望: 1

guan wrote:

楼主的问题太重要了,我也是在分析如何动态调整仓位,楼主的说明对我很管用。
动态调整仓位(比如按照资金余额的百分比)很重要,这应该是通过系统实现而非手工调整。
另外,除了交易部分支持动态调整仓位外, 回测部分应该也需要加上,否则无法进行有效的基于动态仓位回测。
建议vnpy在后续的版本中, 在回测和实盘功能部分,增加基于资金余额的的动态调整仓位功能,谢谢大家~
不是吧,这个功能到现在还没有?我是还没用过vnpy的回测,不过印象里回测功能已经出来好久了呢。

Member
avatar
加入于:
帖子: 54
声望: 0

你们技术大神才是用这个软件的自由地,我们编程小白来说,想到的想法都无法实现。坐等大神分享,解决我的困惑。

Member
avatar
加入于:
帖子: 7
声望: 0

永无止境 wrote:

你们的策略会不会重复下单

不会重复下单的,要么你控制好你的信号不重复,要么,你把你开仓的总金额设定一个上限,就算重复信号也不再开仓即可

Member
avatar
加入于:
帖子: 22
声望: 2

以损定量,根据合约乘数,计算开仓时的仓位,取值问题,请教:
contractData = self.cta_engine.main_engine.get_contract(self.vt_symbol)

AttributeError: 'BacktestingEngine' object has no attribute 'main_engine'
这个错误是因为什么?谢谢

Member
avatar
加入于:
帖子: 7
声望: 0

非常实用的改进,看来是个大咖。为大咖点赞!

Member
加入于:
帖子: 132
声望: 0

你这就是把策略的委托单数据和成交单数据存到文件或者数据库中再做个策略用户界面,在界面中查询就从数据库中读取数据显示到界面吗?

Member
avatar
加入于:
帖子: 419
声望: 173

是的,保存到数据库也是可以的。不过还是比较复杂的。

Member
avatar
加入于:
帖子: 22
声望: 2

VNPY应该把你的代码纳入版本,这么好的东西

Member
加入于:
帖子: 1
声望: 0

牛逼

Member
avatar
加入于:
帖子: 50
声望: 1

非常实用的总结

Member
avatar
加入于:
帖子: 103
声望: 7

狠人儿,厉害。

Member
加入于:
帖子: 12
声望: 1

搞不明白这么多年了,vnpy在k线合成资金管理这些方面仍然一大堆坑

Member
avatar
加入于:
帖子: 12
声望: 0

zhaoyang wrote:

搞不明白这么多年了,vnpy在k线合成资金管理这些方面仍然一大堆坑
这两方面不突破,vnpy永远只是程序员的玩具

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】