K线
数据链上
VIP
市值
API
排行
CoinOSNew
CoinClaw🦞
语言
  • 简体中文
  • 繁体中文
  • English
全球行情数据应用领跑者,致力于更高效地提供有价值的信息。

功能

  • 实时行情
  • 特色功能
  • AI网格

服务

  • 资讯内容
  • 开放数据(API)
  • 机构服务

软件下载

  • PC版
  • Android版
  • iOS版

联系我们

  • 聊天室
  • 商务邮箱
  • 官方邮箱
  • 官方验证通道

加入社区

  • Telegram
  • Twitter
  • Discord

© Copyright 2013-2026. All rights reserved.

简体繁體English
|旧版

程序化交易中的K线数据处理浅谈

CN
发明者量化
关注
6年前
AI 总结,5秒速览全文

前言

在编写程序化交易策略时,使用K线数据,经常会有需求使用一些非标准周期K线数据的情况,例如需要使用12分钟周期K线数据、4小时K线周期数据,通常这类非标准周期是无法直接获取的。那么我们如何应对此类需求呢?


答案肯定是有办法的。非标准周期可以通过更小周期的数据,合并合成获取,可以想象一下,多个周期中的最高价,算作合成后的最高价,最低价算作合成后的最低价,开盘价不会变,就用合成这根K线原料数据的第一个开盘价,收盘价对应的是用合成这根K线的原料数据的最后一个的收盘价,时间就是取的开盘价的时间,成交量用原料数据的交易量求和计算得出。


思路

我们以区块链资产 市场 BTC_USDT 为例,用1小时合成为4小时。




这四个1小时周期的数据,合成一个根4小时周期的数据,开盘价即第一根 00:00 时间的开盘价:11382.57。收盘价是 最后一根 即 03:00 时的收盘价:11384.71。最高价就找这里面最高的价格:11447.07。最低价就找这里面最低的价格:11365.51。4小时周期 起始时间 就是 00:00 这根1小时K线的起始时间,即 2019.8.12 00:00。成交量每根1小时的求和即可(主要观察价格如何合成,成交量数据中没有显示),这里不做赘述。

合成出的 一根4小时K线即:


高:11447.07

开:11382.57

低:11365.51

收:11384.71

时间:2019.8.12 00:00


可以看到数据是一致的。


编写代码实现

验证了初步的思路,就可以动手写一写代码初步实现一下这个需求了。直接放出代码,代码仅供参考学习:


其实要合成K线,就需要两个东西,第一是需要原料数据,即小周期的K线数据,例子中 var r = exchange.GetRecords() 获取的小周期K线数据。第二是需要明确合成为多大的周期,即 K线数据合成的目标周期。然后通过 GetNewCycleRecords 函数的算法,就可以最后返回一个合成出来的K线数组结构的数据了。


需要注意的是:

1、目标周期不能小于你传入GetNewCycleRecords 函数作为数据原料的K线的周期。

因为无法用小周期去合成更小的周期的数据。

2、设置的目标周期必须是周期闭合的。例如 12分钟周期的K线,从每个小时的0分0秒开始(以0时举例),第一个周期是00:00:00 ~ 00:12:00,第二个周期是00:12:00 ~ 00:24:00,第三个周期是00:24:00 ~ 00:36:00,第四个周期是00:36:00 ~ 00:48:00,第五个周期是00:48:00 ~ 01:00:00 ,正好组成一个完整的1小时。


如果是 13分钟周期,就是不闭合的周期,这样的周期算出的数据不唯一,因为根据合成的数据起始点不同,合成出来的数据有差异。

实盘运行了一下:



对比交易所图表




使用K线数据构造需要的数据结构

经常有群友提问,我想计算每根K线的最高价的均线,怎么办?通常,我们计算均线都是计算的收盘价的均值,组成均线,但是也有时候有需求计算最高价、最低价、开盘价等等。这个时候就不能直接把exchange.GetRecords() 函数返回的K线数据直接传入 指标计算函数了。

例如:talib.MA 均线指标计算函数有两个参数,第一个参数是需要传入的数据,第二个参数是指标周期参数。例如我们要算如下图的指标



K线周期是4小时,在交易所图表上,已经设置好了一条均线,均线周期参数为9。并且设置计算的数据源是每根Bar的最高价。



即这条均线是9个4小时周期K线Bar的最高价平均计算出的均值,组成的指标均线。我们自己动手构造一个数据算下,看是不是和交易所的图表计算得出的一样。


既然要计算每根Bar的最高价的均值得出均线指标。那么就需要先构造一个数组,其中每个数据元素都是对应每根Bar的最高价。可以看到 highs 变量初始为一个空数组,然后我们遍历 r2 这个K线数据变量(不记得r2了?看下上面合成4小时K线的main函数中的代码)。

读取r2每根Bar的最高价(即 r2[i].High , i取值范围 从 0 到 r2.length - 1 ),然后 push 进highs 。这样就构造了一个和K线数据Bar一一对应的数据结构。此时 highs 就可以传入 talib.MA函数计算出均线了。完整的例子:


回测运行:

可以看到 图中鼠标停留位置的均线指标值均为 11466.9289以上代码可以复制到策略中运行测试,记得勾选「画线类库」后保存!


数字货币市场的K线数据获取方式

发明者量化交易平台已经有封装好的接口,即 exchange.GetRecords 函数,即可获取K线数据。下面着重讲解的是直接访问交易所K线数据接口获取数据,因为有时候需要指定参数获取更多的K线,封装的GetRecords 接口。一般是返回 100根。如果遇到策略初始需要超过100根的K线时,就需要收集等待。

为了让策略尽快进行运作,可以自己封装一个函数,直接访问交易所K线接口,指定参数获取更多的K线数据。 以火币币币交易 BTC_USDT 交易对为例,我们实现这个需求,找到交易所的API文档,查看K线接口描述:



参数:


测试代码:

可以看到日志上,打印 records.length 为 300, 即 records K线数据 bar 数量有300根。

免责声明:本文章仅代表作者个人观点,不代表本平台的立场和观点。本文章仅供信息分享,不构成对任何人的任何投资建议。用户与作者之间的任何争议,与本平台无关。如网页中刊载的文章或图片涉及侵权,请提供相关的权利证明和身份证明发送邮件到support@aicoin.com,本平台相关工作人员将会进行核查。

|
|
APP下载
Windows
Mac
分享至:

X

Telegram

Facebook

Reddit

复制链接

|
|
APP下载
Windows
Mac
分享至:

X

Telegram

Facebook

Reddit

复制链接

发明者量化的精选文章

4年前
CTA策略之orderflow订单流策略(2)
4年前
零基础入门商品期货程序化交易(1)
4年前
币圈量化交易萌新看过来--带你走近币圈量化(八)
查看更多

目录

|
|
APP下载
Windows
Mac
分享至:

X

Telegram

Facebook

Reddit

复制链接

相关文章

avatar
avatar交易公子扶苏
25秒钟前
26/04/19美谷再创历史新高,BTC下降趋势考验,注意回踩反弹机会
avatar
avatar币圈伟泽
2小时前
币先生:4.19以太ETH今日最新走势解析预测分析.内附操作策略
avatar
avatar周彦灵
2小时前
周彦灵:4.19比特币BTC 以太ETH今日最新走势预测分析及操作策略
avatar
avatar老崔说币
7小时前
TRUMP转入7.59百万枚代币,新一轮熊市即将开砸?
avatar
avatar币圈伟泽
15小时前
币先生:4.19比特币BTC今日最新走势解析预测分析.内附操作策略
APP下载
Windows
Mac

X

Telegram

Facebook

Reddit

复制链接