get_price(API说明)和get_candle_stick(API说明)函数支持获取实时K线数据,以下是一些使用说明:
get_price不支持,get_candle_stick支持get_price(["600000.SH"],None,"20220118 14:04","5m",["open","close"],bar_count=5)是以截止时间向前推,每5条1分钟数据合成1条数据;get_candle_stick(["600000.SH"],"20220118 14:04","5m",["open","close"],bar_count=5)则是最后4条1分钟数据合成1条数据,再向前推,每5条1分钟数据合成1条数据,合成方式与行情软件的K线图一致get_price和get_candle_stick能够获取数据标签为T日的日级数据,由当日开盘到当前时间的数据合成,截止于最新tick数据,所以在取当日行情时,不同时间取到的数据可能是不一样的get_price("600000.SH", "20231001", "20231016", "1d", ["open", "high", "low", "close"])
get_candle_stick("600000.SH", end_date='20231016 1500', fre_step='1m', fields=["open", "high", "low", "close"], bar_count=5)
get_tick(["601012.SH"],"20231016 09:30","20231016 09:30:20",["current","volume"])
get_current("600000.SH", ["current"])
以上接口为主动获取行情数据,结果立即返回,可在策略框架内使用。除此之外,研究环境还支持通过DataFeed来接收高频数据推送,包括证券快照、逐笔成交、逐笔委托、委托队列等数据。
DataFeed的工作模式是:客户端将订阅信息(包括需要哪些股票、哪些数据类型)发送到服务端,等待服务端推送数据;服务端在接收到交易所给出的数据后,即时分发给需要这部分数据的客户端,因此函数不是立刻返回行情数据的。需要注意的是,DataFeed的工作模式与策略框架会产生冲突,请勿一起使用。
DataFeed的使用说明详见 Datafeed数据接口使用教程.ipynb
from tick_trade_api import DatafeedHqGenerator
g1 = DatafeedHqGenerator(stock=['300033.SZ'])
for d in g1:
print(d)
print('\n')
print('通过属性获取成交金额:%s' % d['turnover'])
print('通过属性获取成交金额:%s' % d.turnover)
break
注意事项:
DatafeedHqGenerator的属性queue:queue.Queue中,用户逐一取出后进行计算import pandas as pd
import datetime
from tick_trade_api import DatafeedHqGenerator
from tick_trade_api.api import TradeAPI
def symbol_convert(x):
if x >= '600000':
return x + '.SH'
else:
return x + '.SZ'
trade_api = TradeAPI(account_id='58035826') #填入已登录的资金账号
symbol_list = ['000932.SZ', '600801.SH'] # 设置股票池
shares = 200 # 设置统一的最大交易股票数量
up_per = 0.07 # 设置触发买入的涨幅阈值
g1 = DatafeedHqGenerator(stock=symbol_list)
date_str = datetime.date.today().strftime('%Y%m%d')
print(date_str)
print('启动涨幅监控')
print('\n')
for d in g1:
print(d.trade_time.strftime('%H:%M:%S'))
symbol = d.code
symbol = symbol_convert(symbol)
# 在每一条行情推送计算股票涨幅
ret = d.new_price / d.pre_price - 1.0
# 打印涨幅
print('%s 涨幅为 %.2f%%' % (symbol, ret * 100))
if ret >= up_per:
print('%s 超过预警涨幅 %.2f%% 正在检查剩余量' % (symbol, up_per * 100))
# 检查是否还有待委托的股票余量
order_list = trade_api.get_orders()
order_list = [x for x in order_list if x['symbol'] == symbol]
order_list = [x for x in order_list if x['status'] != '全部撤单']
order_left = shares - np.sum([x['amount'] for x in order_list])
# 存在余量时下单交易
if order_left > 0:
print(' 剩余委托量%s,正在下单' % order_left)
trade_api.order(symbol, order_left)
# 不存在余量时不执行
else:
print(' 委托余量不足')
print('\n')