vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 46
声望: 1

description

description

策略的其中一个过滤条件是: 如果是类似于一根针的K线,就忽略掉不下单; 如果K线的实体部分占总波动的50%以上,就下单 (总波动包含跳空的情况)。
请问一下老师,按照vnpy的写法,我的代码是对的吗?现在卡在了定义K线部分和总波动这里好几天了。
群里有同学说可以用标准差、老师说基于BarData更简单,但是我仍然不明白应该怎样定义。
我在vscode中 import talib 查看stddev的文档说明,显示需要输入时间timeperiod和nbdev,但是不明白他们和K线比例的关系是什么。
另外老师说的基于BarData,我点进去之后发现是要输入“合约代码、时间、OHLCV等”,也没有计算的公式,所以也不知道该如何基于。
如果我还没写对,能否请老师举个例子,便于更好的理解,万分感谢!

Administrator
avatar
加入于:
帖子: 3810
声望: 199
  1. STDDEV是统计学上的标准差,和你这里的比例不是一个概念
  2. 你上面的写法看着没啥问题,TRANGE是可以这么用的
Member
avatar
加入于:
帖子: 46
声望: 1

description

麻烦老师帮忙看一下,这个报错是因为代码写错了吗?

Administrator
avatar
加入于:
帖子: 3810
声望: 199

没有self.close_price属性,我理解你应该是想写:

self.bar_entity = abs(bar.close_price - bar.open_price)
Member
avatar
加入于:
帖子: 46
声望: 1

description

description

description

description

是的老师,bar.close_price 这个地方是我失误打错了,现已改正。
另外我现在回测,依然显示 “成交记录为空,无法计算”。之前存在的可能是传入的数据量少于初始化的 self.load_bar(10), 后来也已改正。
但数据量增大之后还是出现【成交记录为空】的问题,我在群里提问,老师说是因为【我的初始化判断有问题】所以一直没打印过。但是我的初始化判断,和课程中的策略初始化代码完全一样,所以也不知道问题出在了哪里。所有关于初始化的地方,我都截图了,麻烦老师再帮忙看一下,多谢。
我这个一手回测的代码研究一个星期了,却还是没解决,感觉这样效率太慢了。

Administrator
avatar
加入于:
帖子: 3810
声望: 199

if not self.am15.inited上面一行,加上print(self.am15.inited),看看这里am15从来就没完成初始化。

如果是的话,回去检查你是否有把15分钟K线推送到am15中

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

description

description

description

description

陈老师,还是出现了【成交记录为空,无法计算】的问题。
您说的【am15从来就没完成初始化,把15分钟K线推送到am15中】,am15.update_bar(bar) ,self.am15.update_bar(bar),两种方式我都试过了,还是不行。
cmd报错中好像从self.pos = 0、self.pos > 0 、self.pos < 0开始就不计算了。
麻烦老师,再帮忙看看是哪里不对吧。

Administrator
avatar
加入于:
帖子: 3810
声望: 199

在你的每个交易函数(buy, sell, short, cover)上的一行,加上日志输出,打印当时的K线价格,以及你委托下单的方向、价格,然后就能排查了

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