历史数据服务,是指自己编程通过API接口调用历史K线数据(不包含当前交易日的数据),用于量化回测等场景。
一、可选数据范围
- 境内交易所 — 大连商品交易所 (DCE) 、郑州商品交易所 (ZCE) 、上海期货交易所 (SHFE) ;
- 境外交易所 — 芝加哥期货交易所 (CBOT) 、芝加哥商品交易所 (CME) 、纽约商业交易所 (NYMEX) 、纽约商品交易所 (COMEX) 、欧洲期货交易所 (EUREX) 、洲际交易所 (ICE) - 美国、洲际交易所 (ICE) - 欧洲、新加坡交易所 (SGX) 、香港交易所 (HKEX) 、伦敦金属交易所 (LME) 。
二、服务费用
基础价格
三、API使用步骤
第一步:下载C++ API 或
下载Python API
第二步:使用授权账号/密码登录WT9通用版;
第三步:调用API接口的Init函数与WT9客户端建立连接 (WT9本地端口:7800/7600);
第四步:连接建立成功后,调用GetKLineData获取K线数据,调用GetTickData获取Tick数据。
注:测试可选沪铜加权数据。
四、API说明
- C++接口说明 查看
提供Windows 64位的C++版本的动态库,动态库使用vs2008编译,指定运行以MD进行连接。
1. GetInstance函数
提供静态函数创建CWHDataApi的单例,懒汉模式,程序退出时自动释放内存。
函数原形:
static CWHDataApi* GetInstance();
参数:
无
返回结果:
获取数据的API指针
2. RelaseInstance函数
提供主动释放CWHDataApi单例的方法。
函数原形:
static void RelaseInstance();
参数:
无
返回结果:
无
3. GetApiVersion函数
提供获取API版本号的函数,API与客户端创建连接的时候,会验证版本号,如果版本号不一致会返回登录失败。可以通过该接口确认版本号。
函数原形:
static const char* GetApiVersion();
参数:
无
返回结果:
API接口的版本号
4. Init函数
初始化连接的函数,使用该接口与WT9客户端创建连接,创建连接的过程中会验证行情账户以及API的版本号。
函数原形:
virtual bool Init(
const char* szUserName,
CLIENT_TYPE nClientType,
char* szErrorMsg,
size_t nErrorLength) = 0;
参数:
szUserName:行情账户
nClientType:连接到哪个客户端 CLIENT_TYPE_T9 连接WT9客户端
szErrorMsg:存储错误信息的指针,连接失败的时候存储错误提示信息
nErrorLength:用来存放错误信息内存的长度,防止内部处理越界
返回结果:
连接是否创建成功
成功返回true
失败返回false
5. GetKLineData函数
获取K线数据,返回数据指针和数据长度,内存内部管理,下次调用申请K线数据接口时清空。
函数原形:
virtual bool GetKLineData(
CWHKLineData*& pData,
int& nCount,
const char* szCode,
int tBegin,
int tEnd,
const char* szPeriod,
char* szErrorMsg,
size_t nErrorLength) = 0;
参数:
pData:返回获取到的数据
nCount:返回的数据的个数
szCode:合约的名称、可以是中文名、英文名、或者文华码
tBegin:起始时间时间戳(秒)
tEnd:结束时间时间戳(秒)
szPeriod:周期信息”1Day”:日线 “15Min”:15分钟线 “1Min”:1分钟线
szErrorMsg:存储错误信息的指针,连接失败的时候存储错误提示信息
nErrorLength:用来存放错误信息内存的长度,防止内部处理越界
返回结果:
获取K线数据是否成功
成功返回true
失败返回false
数据结构:
K线数据结构
struct CWHKLineData
{
int Time; // 时间
float Open; // 开盘价
float Close; // 收盘价
float High; // 最高价
float Low; // 最低价
float Volume; // 成交量
float OpI; // 持仓量
float AVPrice;// 均价
float Scale; // 主动买卖比例
};
6. GetKLineDataOfTheYear函数
获取外盘合约年度的K线数据,返回数据指针和数据长度,内存内部管理,下次调用申请K线数据接口时清空。
函数原形:
virtual bool GetKLineDataOfTheYear(
CWHKLineData*& pData,
int& nCount,
const char* szCode,
int nYear,
int tBegin,
int tEnd,
const char* szPeriod,
char* szErrorMsg,
size_t nErrorLength) = 0;
参数:
pData:返回获取到的数据
nCount:返回的数据的个数
szCode:合约的名称、可以是中文名、英文名、或者文华码
nYear:外盘合约年度 例如:2023
tBegin:起始时间时间戳(秒)
tEnd:结束时间时间戳(秒)
szPeriod:周期信息”1Day”:日线 “15Min”:15分钟线 “1Min”:1分钟线
szErrorMsg:存储错误信息的指针,连接失败的时候存储错误提示信息
nErrorLength:用来存放错误信息内存的长度,防止内部处理越界
返回结果:
获取外盘合约年度的K线数据是否成功
成功返回true
失败返回false
数据结构:
K线数据结构
struct CWHKLineData
{
int Time; // 时间
float Open; // 开盘价
float Close; // 收盘价
float High; // 最高价
float Low; // 最低价
float Volume; // 成交量
float OpI; // 持仓量
float AVPrice;// 均价
float Scale; // 主动买卖比例
};
7. GetTickData函数
获取Tick数据,返回数据指针和数据长度,内存内部管理,下次调用申请Tick线数据接口时清空。
函数原形:
virtual bool GetTickData(
CWHTickData*& pData,
int& nCount,
const char* szCode,
int tTime,
char* szErrorMsg,
size_t nErrorLength) = 0;
参数:
pData:返回获取到的数据
nCount:返回的数据的个数
szCode:合约的名称、可以是中文名、英文名、或者文华码
tTime:时间戳(秒)
szErrorMsg:存储错误信息的指针,连接失败的时候存储错误提示信息
nErrorLength:用来存放错误信息内存的长度,防止内部处理越界
返回结果:
获取Tick线数据是否成功
成功返回true
失败返回false
参数结构:
Tick数据结构
struct CWHTickData
{
int Time; // 时间
float Price; // 最新价
float Volume; // 成交量 In Total
float OpI; // 持仓量 In Total
int Activity; // 0 主动买 1 主动卖 2 其他
float AVPrice; // 均价
float fBid[5]; // 买价1 - 买价5
float fBidVol[5]; // 买量1 - 买量5
float fAsk[5]; // 卖价1 - 卖价5
float fAskVol[5]; // 卖量1 - 卖量5
};
- Python接口说明 查看
(一)示例
import pandas as pd
from whdata import *
#初始化
bInitSuccess = Init('WT9行情账号')
#获取日线数据
if bInitSuccess == True:
df = pd.DataFrame()
bSuccess = GetKLineData(df, 'cu2205','2022-04-01', '2022-04-14', '1Day')
if bSuccess == True:
print(df)
#获取外盘合约年度的日线数据
if bInitSuccess == True:
df = pd.DataFrame()
bSuccess = GetKLineDataOfTheYear(df, 'GCZ3', '2023','2023-03-01', '2023-03-31', '1Day')
if bSuccess == True:
print(df)
#获取tick数据
if bInitSuccess == True:
df_tick = pd.DataFrame()
bSuccess = GetTickData(df_tick, 'cu2205','2022-04-01')
if bSuccess == True and len(df_tick) > 0:
#数据列名称
print(df_tick.columns)
#取第一笔tick
print(df_tick.iloc[0])
#取第一笔tick的最新价
print(df_tick.iloc[0]['Price'])
(二)接口说明
1. Init(QuoteAccount, ClientType = "WT9")初始化
参数 | 类型 | 说明 |
QuoteAccount | str | WT9客户端登录的行情账号 |
ClientType | str | 客户端类型 "WT9" |
2. GetKLineData(df, code, beginTime, endTime, period='1Day')获取k线数据
参数 | 类型 | 说明 |
df | DataFrame | 获取到的k线数据 |
code | str | 合约代码,支持中文名称、英文名称、文华码 |
beginTime | str | 开始时间,格式YYYY-MM-DD |
endTime | str | 结束时间,格式YYYY-MM-DD |
period | str | 周期,'1Day'日线、'1Min'一分钟线、'15Min'十五分钟线 |
注:参数df是返回的k数据
索引 'Time'(时间)
列名 'Open'(开盘价)
'Close'(收盘价)
'High'(最高价)
'Low'(最低价)
'Volume'(成交量)
'OpI'(持仓量)
'AVPrice'(成交均价)
'Scale'(买卖比)
3. GetKLineDataOfTheYear(df, code, year, beginTime, endTime, period = ”1Day”) 获取外盘合约年度的K线数据
参数 | 类型 | 说明 |
df | DataFrame | 获取到的k线数据 |
code | str | 外盘合约代码,支持中文名称、英文名称、文华码 |
year | str | 外盘合约年度,例如: 2023 |
beginTime | str | 开始时间,格式YYYY-MM-DD |
endTime | str | 结束时间,格式YYYY-MM-DD |
period | str | 周期,'1Day'日线、'1Min'一分钟线、'15Min'十五分钟线 |
注:参数df是返回的k数据
索引 'Time'(时间)
列名 'Open'(开盘价)
'Close'(收盘价)
'High'(最高价)
'Low'(最低价)
'Volume'(成交量)
'OpI'(持仓量)
'AVPrice'(成交均价)
'Scale'(买卖比)
4. GetTickData(df, code, time)
参数 | 类型 | 说明 |
df | DataFrame | 获取到的tick数据 |
code | str | 合约代码,支持中文名称、英文名称、文华码 |
time | str | 时间,格式YYYY-MM-DD |
注:参数df是返回的tick数据
索引 'Time'(时间)
列名 'Price'(最新价)
'Volume'(成交量)
'Activity'(方向:0-买 1-卖 2-半买半卖)
'BidPrice_1'(买一价)
'BidPrice_2'(买二价)
'BidPrice_3'(买三价)
'BidPrice_4'(买四价)
'BidPrice_5'(买五价)
'BidVol_1'(买一量)
'BidVol_2'(买二量)
'BidVol_3'(买三量)
'BidVol_4'(买四量)
'BidVol_5'(买五量)
'AskPrice_1'(卖一价)
'AskPrice_2'(卖二价)
'AskPrice_3'(卖三价)
'AskPrice_4'(卖四价)
'AskPrice_5'(卖五价)
'AskVol_1'(卖一量)
'AskVol_2'(卖二量)
'AskVol_3'(卖三量)
'AskVol_4'(卖四量)
'AskVol_5'(卖五量)