0x1 秒 K 需求
在尝试做期货,发现期货在杠杆的加持下,通常级别都比较小,大家一般选择 15F 的周期图。我想了一下,也是有道理的。有夜盘的品种,每天交易 5 小时 45 分钟,共 345 分钟。
要比较好的周期切分,又符合大众的使用习惯,就是 15F 图了,每天的数据,刚好可以完整的分成 23 根 K 线。
把周期定在 15F 图,这样的话,做日内小级别,其实也是可以看秒级别的图找买点的,前文
《小试期货》
也有论述。
在使用中发现,同花顺的期货通,是有秒级图表的,仅支持 5S,10S,15S,30S 这几个周期。
可是,同花顺的秒级数据,只保留最新的一天的数据,每天夜盘之前就清除了之前的数据。那么,问题来了。如果想要复盘几天前的秒级数据,是不支持的。我也没有找到其他的支持历史秒级的软件(如果有朋友知道,也请指点一二)。
确实,因为秒级数据量确实是比较大,以存储 5S 数据为例子(10S,15S,30S 可以根据 5S 数据来合成),每天有 345 * 6 = 2070 根。存储和加载长期的数据,确实是比较麻烦的。
目前,我还发现有一个可以看秒级数据源的,Tradingview 上面,他们最近刚对接了上期所的数据,可以看上期所的秒级数据历史数据。如图,是热卷的数据:
可是,目前也只有上期所的数据,其他的郑商所,大商所都还没有,或许后面点,等他们的好消息吧。
光等待,也不是办法。于是想到,自己本地的 tv-sdk 版本,是不是应该也支持秒级数据的。
如果有历史的秒级数据,在本地 tv 上展现出来,就可以很方便的复盘历史的数据。所以,需要具备 2 个条件:
-
能下载到期货数据的历史秒级数据。
-
本地的 tv-sdk,能支持显示秒级数据。
0x2 秒级数据
首先是需要找到秒级的数据源。
之前使用的国信的 iquant 量化客户端,可以下载数据,但只有分钟级别。之前也整理过一个 python 程序(如果有需要的,可以找我要),可以把所有股票数据的历史 1 分 K 线全部保存 csv 格式的文件。
使用同样的程序,是支持期货数据的历史 1 分 K 线的,也能保存成 csv,可是没有找到历史的秒级(或者 tick 数据)怎么能下载和保存。(如果有朋友知道,也请指点一二)。
也简单调研过一些期货量化的接口,感觉要下载他们的秒级数据(或者 tick 数据),还是比较的麻烦,要么收费比较高,要么限制使用他们的客户端之类的。
总之,目前还没有一个好用的,能支持 api 获取或者下载所有期货主连历史 K 线的接口,最好收费不太贵的。
通过一些其他的途径,找到收费相对不高的,每天盘后下载他们的 tick 数据。这样我就可以自己合成任意的秒级数据了。
之前说的是秒级的数据,实际上,他们可以提供每 500 毫秒的数据,一般就叫 tick 数据了。数据大概长这个样子(纯碱 401)
其中,最重要的就是红色框的,最新的成交价。在这个 tick 数据的基础上,可以合成需要的秒级数据。
按照同花顺的思路,通常我们只需要 5S 的数据就行了,1S 太小了,也没有什么必要。合成 5S 后,10S、15S、30S 其实是 tv-sdk 可以自己合成的。如果为了性能,也可以提前合成这些数据,这个在 tv 的配置地方再说。
要合成 5S 的 csv 数据,自然就是 python 上场了。
主要的就是使用 pandas 的 resample 方法,核心代码:
1234567for tf in ('5S', '10S', '15S', '30S'):
secK = ticks['price'].resample(tf).ohlc(_method='ohlc')
secK['volume'] = ticks['volume'].resample(tf).sum()
secK['amount'] = ticks['amount'].resample(tf).sum()
secK.dropna(inplace=True)
最后生成的数据,如图所示,5S 的数据,10S 及其他数据类似:
准备好了数据,接下来就是配置 tv-sdk,支持秒级数据展示了。
0x3 tv 的配置
最开始,还以为 tv 提供的这个 sdk,可能不支持秒级数据显示。进过一番各种尝试和查看他们的文档,发现 tv 的 sdk,是支持秒级数据显示的。
首先,是需要在前端的代码里面,增加配置: