如何获取K线(周期)数据
<h4><strong>简要说明</strong></h4>
<ul>
<li>和获取分时行情数据类似,获取周期(K线)行情数据主要有两种方式:
1.使用ths_api包中提供的get_kline函数:直接主动获取某股票的周期行情数据;
2.使用ths_api包中提供的reg_kline函数:订阅某股票的周期行情数据后,每次行情数据有更新后,由行情服务器自动推送更新的数据,程序被动接收。</li>
</ul>
<hr />
<h4><strong>1.用get_kline获取一次指定代码列表的周期行情数据</strong></h4>
<p><strong>调用格式</strong></p>
<pre><code>get_kline(StockCode, duration_minute, length)
'''
@brief 获取一次指定代码列表的周期行情数据,包括分钟线(1、5、15、30、60)、日线、周线、月线、季度线、年线,2s内只能执行1次
@param StockCode 证券代码列表,支持str、list、set格式,一次最多取500个
@param duration_minute 周期,以分钟为步长,支持int,入参为:1=》1分钟线、5、15、30、60、1440=》日线(24*60)、10080=》周线(7*24*60)、43200=》月线、129600=》季度线、525600=》年线
@param length 数据条数,最大1w条,比如 duration_minute=1 length=5表示从当前开始取一分钟线,取5条数据
@return 周期行情数据结构dict,格式和reg_kline返回一致,时间越以前的数据,排在dict的越前面。
'''</code></pre>
<p><strong>示例代码</strong></p>
<pre><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
#例1:每10s获取一次日线周期的最近两条K线行情数据,如果今日的收盘价(盘中为现价)较昨日的收盘价下跌3%,卖出该股的一半仓位。
from ths_api import *
import time
code = '300033'
api = hq.ths_hq_api() #连接行情服务器
while True:
time.sleep( 10 ) #等待10s
kline = api.get_kline(code, 60*24, 2) #获取最近两日(包含今日)的日线周期K线行情数据
print(kline)
print('昨日收盘价:', kline[code][-2]['close']) #时间越早的数据在kline中排在越前
if kline[code][-1]['close'] < kline[code][-2]['close'] * 0.97:
xd.cmd('sell %s zxjg -cw 1/2' % code)
break</code></pre>
<p><strong>运行结果</strong></p>
<p>去除部分日志后,程序输出结果如下(其中,为了便于阅读,kline各字段的输出用json格式做了替换)。可见,当前现价较昨日收盘价下跌超过3%,委托提交。</p>
<pre><code>{
"300033": [
{
"StockCode": "300033", # 股票代码
"datetime": 20191016, # 日期
"Index": 0, # 第几条周期数据
"amount": 860746280.0, # 成交金额
"volume": 8575647.0, # 成交量
"open": 100.5, # 开盘价
"high": 101.86, # 最高价
"low": 99.13, # 最低价
"MarketId": "33", # 市场ID
"close": 99.2 # 收盘价
},
{
"StockCode": "300033",
"datetime": 20191017,
"Index": 1,
"amount": 538748140.0,
"volume": 5400459.0,
"open": 99.8,
"high": 100.12,
"low": 97.32,
"MarketId": "33",
"close": 97.47
}
]
}
昨日收盘价: 97.47
tips=您的卖出委托已成功提交,合同编号:1281337942。</code></pre>
<hr />
<h4><strong>2.用reg_kline订阅指定代码列表的周期数据:</strong></h4>
<p><strong>调用格式</strong></p>
<pre><code>reg_kline(StockCode, duration_minute, length)
'''
@param StockCode 证券代码列表,支持str、list、set格式,一次最多取500个
@param duration_minute 周期,以分钟为步长,支持int,入参为:1=》1分钟线、5、15、30、60、1440=》日线(24*60)、10080=》周线(7*24*60)、43200=》月线、129600=》季度线、525600=》年线
@param length 时长,对应需要多少条数据,比如 duration_minute=1 length=5表示从当前开始取一分钟线,取5条数据
@return 返回实时行情数据结构引用,是个dict,格式参考get_kline的返回,其内容在wait_update后更新
'''</code></pre>
<p><strong>示例代码</strong></p>
<pre><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
#例2:行情每次更新时,服务器推送一次日线周期的最近两条K线行情数据,如果今日的收盘价(盘中为现价)较昨日的收盘价下跌3%,卖出该股的一半仓位。
from ths_api import *
import time
code = '300033'
api = hq.ths_hq_api() #连接行情服务器
kline = api.reg_kline(code, 60*24, 2) #订阅最近两日(包含今日)的日线周期K线行情数据
while True:
api.wait_update() #等待行情数据更新
print(kline)
print('昨日收盘价:', kline[code][-2]['close']) #时间越早的数据在kline中排在越前
if kline[code][-1]['close'] < kline[code][-2]['close'] * 0.97:
xd.cmd('sell %s zxjg -cw 1/2' % code)
break</code></pre>
<p><strong>运行结果</strong></p>
<p>程序运行结果和例1类似。程序的区别是本例先订阅300033最近两日的日线周期K线行情数据,当有行情数据更新时,服务器推送一次订阅数据的最新值,赋值给kline。</p>