L2十档行情API接口的开发原理不知道大家有没有了解过,其实在现实的股市量化交易中,就有不少的投资者也在思考这个问题,并且也有的部分交易者会选择自己开发来使用,不仅支持A股所有的股票数据,也能对期货、外汇、黄金等投资产品行情有利用价值,帮助投资者快速的捕抓市场投机。那么,L2十档行情API接口是如何开发的呢?先来看看它的数据类型,以及挖掘数据信息的范围:
一、数据类型:
交易所 | 数据类型 |
上交所 | 十档行情快照(Level-2) |
委托队列(Level-2) | |
逐笔成交(Level-2) | |
深交所 | 十档行情快照(Level-2) |
逐笔委托(Level-2) | |
委托队列(Level-2) | |
逐笔成交(Level-2) | |
沪深交易所 | 期权、可转债 |
二、消息类型
消息 | 说明 |
TickRecord | 逐笔成交 |
OrderRecord | 逐笔委托 |
OrderQueueRecord | 委托队列 |
StockQuoteRecord | 股票十档行情 |
总的来说,L2十档行情API接口有以下这些开发亮点:
1、L2十档行情API接口主要是以20条高速服务器线路并发获取行情。
2、txt方式接入股票代码,xml高速输出,接入方便,操作简单。
3、行情来源各个证券市场,能够保证速度,不限量的查询方式。主要的电脑够带宽与性能都能支持,海量数据挖掘也不会失真。
示例股票api接口获取股票历史数据的程序:
void stockDialog::on_refreshStock_clicked()
{
stockNumList.clear();
QTime startTime = QTime::currentTime();
ui->refreshStatus->setText("正在更新股票数量...");
QSqlQuery query;
QString sel = QString("select stockNum from stocklist");
bool result = query.exec(sel);
if(result){
while(query.next()){
QString stockNum = query.value(0).toString();
stockNumList<<stockNum;//获取所有股票代码
}
}
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this, SLOT(writeData(QNetworkReply*)));
for(int i=600000;i<604000;i++){//上证范围
if(stockNumList.contains(QString::number(i,10)))
continue;
QNetworkRequest request(stockSource1.arg(i).arg(ui->lastTime->text()).arg(ui->thisTime->text()));
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
manager->get(request);
sleep(20);
}
for(int i=300000;i<300999;i++){//创业板范围,后续可能需要加大
if(stockNumList.contains(QString::number(i,10)))
continue;
QNetworkRequest request(stockSource1.arg(i).arg(ui->lastTime->text()).arg(ui->thisTime->text()));
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
manager->get(request);
sleep(20);
}
for(int i=1600;i<2999;i++){
QString ii = "00"+QString::number(i, 10);
if(stockNumList.contains(ii))
continue;
QNetworkRequest request(stockSource1.arg(ii).arg(ui->lastTime->text()).arg(ui->thisTime->text()));
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
manager->get(request);
sleep(20);
}
for(int i=100;i<1000;i++){
QString ii = "000"+QString::number(i, 10);
if(stockNumList.contains(ii))
continue;
QNetworkRequest request(stockSource1.arg(ii).arg(ui->lastTime->text()).arg(ui->thisTime->text()));
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
manager->get(request);
sleep(20);
}
for(int i=10;i<100;i++){
QString ii = "0000"+QString::number(i, 10);
if(stockNumList.contains(ii))
continue;
QNetworkRequest request(stockSource1.arg(ii).arg(ui->lastTime->text()).arg(ui->thisTime->text()));
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
manager->get(request);
sleep(20);
}
for(int i=1;i<10;i++){
QString ii = "00000"+QString::number(i, 10);
if(stockNumList.contains(ii))
continue;
QNetworkRequest request(stockSource1.arg(ii).arg(ui->lastTime->text()).arg(ui->thisTime->text()));
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
manager->get(request);
sleep(20);
}
QTime stopTime = QTime::currentTime();
int elapsed = startTime.msecsTo(stopTime)/1000;
QString str = "更新股票数量结束,用时"+QString::number(elapsed, 10)+"秒";
ui->refreshStatus->setText(str);
stockNumList.clear();
result = query.exec(sel);
if(result){
while(query.next()){
QString stockNum = query.value(0).toString();
stockNumList<<stockNum;/API数据接口获取所有股票代码
}
}
}
执行示例:
但需要注意的是,股票API接口限流现象的存在是很正常的,在股市交易中,我们不可能将一些股票L2接口来传达更多的数据,因此就会使用一些定时程序来限流,才不会出现卡顿的现象,可以执行分批的限流方法,具体获取数据使用到的函数接口类型总体概括为:股票接口终端数据接口的socket接口地址:120.0.1端口:8080接口名称:加法actionname:add入参:{'action':'add','result':3}errorcode:codemessage-1DataError-2WrongAction即可。