在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例桌面应用界面/GUI → C++/Qt 期货数据获取

C++/Qt 期货数据获取

桌面应用界面/GUI

下载此实例
  • 开发语言:C/C++
  • 实例大小:3.01M
  • 下载次数:37
  • 浏览次数:460
  • 发布时间:2019-11-02
  • 实例类别:桌面应用界面/GUI
  • 发 布 人:new个对像
  • 文件格式:.rar
  • 所需积分:2
 相关标签: c++ Qt

实例介绍

【实例简介】

自己学习Qt使用写得一个期货数据获取工具。有点简单。

获取交易所的期货数据。里面的合约日期根据实际情况修改。

实体在VS2019可以运行

【实例截图】

【核心代码】

#include "TraderCpt.h"
//#include "QtGuiApplicationCtp.h"
//#include "MdSpiQtClass.h"
//#include "ThostFtdcMdApi.h"
#include "QMessageBox"
//#include "tinyxml.h"
//#include "tinystr.h"
#include <string>
#include "QFile"
#include "QTextStream"
#include "QtClass_AutoTrader.h"

QtClass_AutoTrader qAutoTrader;
double ksbl = 0;                            //亏损比例
TraderCpt::TraderCpt(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);

md = new MdSpi();
td = new TdSpi();
TdSpi::HYStruct hy;

bool a =connect(md, SIGNAL(sendData(QString)), this, SLOT(ReceiveHQ(QString)));     //连接行情信号

connect(td, SIGNAL(sendCQ(QString)), this, SLOT(ReceiveCQ(QString)));       //连接持仓信号

connect(td, SIGNAL(sendZJ(QString)), this, SLOT(ReceiveZJ(QString)));       //连接资金信号

//行情代码

ui.tableWidget_HQ->setColumnCount(13);
QStringList headerHQ;
headerHQ.append(QString::fromLocal8Bit("合约代码"));
headerHQ.append(QString::fromLocal8Bit("网络时间"));
headerHQ.append(QString::fromLocal8Bit("开仓价格"));
headerHQ.append(QString::fromLocal8Bit("持仓类型"));
headerHQ.append(QString::fromLocal8Bit("持仓数量"));
headerHQ.append(QString::fromLocal8Bit("当前盈亏"));
headerHQ.append(QString::fromLocal8Bit("平仓时间"));
headerHQ.append(QString::fromLocal8Bit("保证金比例%"));
headerHQ.append(QString::fromLocal8Bit("资金亏损比例%"));
headerHQ.append(QString::fromLocal8Bit("开盘价"));
headerHQ.append(QString::fromLocal8Bit("买一价"));
headerHQ.append(QString::fromLocal8Bit("卖一价"));
headerHQ.append(QString::fromLocal8Bit("最新价"));

ui.tableWidget_HQ->setHorizontalHeaderLabels(headerHQ);
ui.tableWidget_HQ->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
ui.tableWidget_HQ->setSelectionBehavior(QAbstractItemView::SelectRows);
readTxt("pz.txt");
ui.radioButton_stop->setChecked(true);

}

void TraderCpt::OnAddHeyue()
{
addHeyue();
writeTxt("pz.txt");
}


void TraderCpt::mdLogin()
{
char *ch1;
char *ch2;
char *ch3;
char *ch4;
char *ch5;

QByteArray ba1 = ui.lineEdit_MD->text().toLatin1();
QByteArray ba2 = ui.lineEdit_BrokerID->text().toLatin1();
QByteArray ba3 = ui.lineEdit_TD->text().toLatin1();
QByteArray ba4 = ui.lineEdit_User->text().toLatin1();
QByteArray ba5 = ui.lineEdit_PassWord->text().toLatin1();

ch1 = ba1.data();
ch2 = ba2.data();
ch3 = ba3.data();
ch4 = ba4.data();
ch5 = ba5.data();

strcpy(md->hq.FRONT_ADDR, ch1);
strcpy(md->hq.BROKER_ID, ch2);
strcpy(md->hq.INVESTOR_ID, ch3);

md->Init();

//交易登陆
QString account = ui.lineEdit_User->text();
QString password = ui.lineEdit_PassWord->text();

strcpy(td->jy.FRONT_ADDR, ch3);
strcpy(td->jy.BROKER_ID, ch2);
strcpy(td->jy.INVESTOR_ID, ch4);
strcpy(td->jy.PASSWORD, ch5);
td->Init();
}

void TraderCpt::ReceiveHQ(QString TICK)
{
QStringList strlist = TICK.split(",");
//qAutoTrader 
for (int i = 0; i < ui.tableWidget_HQ->rowCount(); i )
{

if (ui.tableWidget_HQ->item(i, 0)->text() == strlist.at(0))
{

qAutoTrader.hyDm = strlist.at(0);
qAutoTrader.CData = strlist.at(12);
qAutoTrader.CTime = strlist.at(1);
qAutoTrader.atLastPrice = strlist.at(2).toInt();
qAutoTrader.atVol = strlist.at(8).toInt();
qAutoTrader.readTxt(strlist.at(0));         //读取文件
ui.tableWidget_HQ->setItem(i, 1, new QTableWidgetItem(strlist.at(1)));    //合约代码
ui.tableWidget_HQ->setItem(i, 9, new QTableWidgetItem(strlist.at(11)));   //开盘价
ui.tableWidget_HQ->setItem(i, 10, new QTableWidgetItem(strlist.at(3)));   //买一价
ui.tableWidget_HQ->setItem(i, 11, new QTableWidgetItem(strlist.at(5)));   //卖一价
ui.tableWidget_HQ->setItem(i, 12, new QTableWidgetItem(strlist.at(2)));   //最新价
if (ui.tableWidget_HQ->item(i,2) == NULL)
{
return;
}
if (ui.tableWidget_HQ->item(i,2)->text() == " ")
{
ui.tableWidget_HQ->setItem(i, 5, new QTableWidgetItem(""));
return;
}
return;
}
kc(i);
pc(i);                              //开仓与平仓
}

}

void TraderCpt::ReceiveCQ(QString CCData)
{
QString lx;
QStringList strlist = CCData.split(",");
if (strlist.at(1) == "2")
{
lx = QString::fromLocal8Bit("买");
}
else if (strlist.at(1) == "3")
{
lx = QString::fromLocal8Bit("卖");
}
for (int i = 0; i < ui.tableWidget_HQ->rowCount(); i )
{
if (ui.tableWidget_HQ->item(i,0)->text()==strlist.at(0))
{
ui.tableWidget_HQ->setItem(i, 2, new QTableWidgetItem(strlist.at(3)));
ui.tableWidget_HQ->setItem(i, 3, new QTableWidgetItem(lx));
ui.tableWidget_HQ->setItem(i, 4, new QTableWidgetItem(strlist.at(2)));
return;
}
}
int row = ui.tableWidget_HQ->rowCount();
ui.tableWidget_HQ->insertRow(row);

}

void TraderCpt::ReceiveZJ(QString ZJData)
{
QStringList strlist = ZJData.split(",");
QString yinKui = strlist.at(4);
QString yinKuiBi = strlist.at(5);
ui.label_yinKui->setText(yinKui);
ui.label_yinKui_BiLi->setText(yinKuiBi);
ksbl = yinKuiBi.toDouble();
}

void TraderCpt::addHeyue()
{

int row = ui.tableWidget_HQ->rowCount();
ui.tableWidget_HQ->insertRow(row);
ui.tableWidget_HQ->setItem(row, 0, new QTableWidgetItem(ui.lineEdit_JianKongDaiMa->text()));
ui.tableWidget_HQ->setItem(row, 6, new QTableWidgetItem(ui.lineEdit_PingCangTime->text()));
ui.tableWidget_HQ->setItem(row, 7, new QTableWidgetItem(ui.lineEdit_BaoZhengJinBiLi->text()));
ui.tableWidget_HQ->setItem(row, 8, new QTableWidgetItem(ui.lineEdit_KuiShunBiLi->text()));
}

void TraderCpt::writeTxt(QString path)
{
QFile myData(path);
if (myData.open(QFile::WriteOnly | QIODevice::Truncate))       //Truncata :覆盖  Append 追加
{
QTextStream out(&myData);
for (int i = 0; i <ui.tableWidget_HQ->rowCount(); i )
{
QString dm = ui.tableWidget_HQ->item(i, 0)->text();
QString pcTime = ui.tableWidget_HQ->item(i, 6)->text();
QString bzj = ui.tableWidget_HQ->item(i, 7)->text();
QString loss = ui.tableWidget_HQ->item(i, 8)->text();
out << dm "," pcTime "," bzj "," loss "\r\n";
}
myData.close();
}
}

void TraderCpt::readTxt(QString path)
{

ui.lineEdit_MD->setText("tcp://180.168.146.187:10010");   //正常交易日
//ui.lineEdit_MD->setText("tcp://180.168.146.187:10031"); //节假日模拟行情
ui.lineEdit_TD->setText("tcp://180.168.146.187:10000");
//ui.lineEdit_TD->setText("tcp://180.168.146.187:10030");
ui.lineEdit_BrokerID->setText("");

ui.lineEdit_User->setText("");

ui.lineEdit_PassWord->setText("");

QFile file(path);
QStringList strdm;
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
while (!file.atEnd())
{
QByteArray line = file.readLine();
QString str(line);
if (str.trimmed()== "")
{
continue;
}
QStringList strlist = str.split(",");
int row = ui.tableWidget_HQ->rowCount();
ui.tableWidget_HQ->insertRow(row);
ui.tableWidget_HQ->setItem(row, 0, new QTableWidgetItem(strlist.at(0)));
ui.tableWidget_HQ->setItem(row, 6, new QTableWidgetItem(strlist.at(1)));
ui.tableWidget_HQ->setItem(row, 7, new QTableWidgetItem(strlist.at(2)));
ui.tableWidget_HQ->setItem(row, 8, new QTableWidgetItem(strlist.at(3)));
strdm.append(strlist.at(0));
md->Dm = strdm.join(",");
}
}
}

void TraderCpt::kc(int i)
{
//自动下单操作
int vol = 0;
QString dm = ui.tableWidget_HQ->item(i, 0)->text();
QString settime = ui.tableWidget_HQ->item(i, 6)->text();
QString updatetime = ui.tableWidget_HQ->item(i, 1)->text();
QString ksbfb = ui.tableWidget_HQ->item(i, 8)->text();

if (ksbl >ksbfb.toDouble())
{
return;
}
if (ui.radioButton_run->isChecked() == false)
{
return;
}
if (pcTime(updatetime,settime))
{
return;
}

if (ui.tableWidget_HQ->item(i,9)== NULL || ui.tableWidget_HQ->item(i,11) == NULL )
{
return;
}
if (ui.tableWidget_HQ->item(i,4) != NULL)
{
vol = ui.tableWidget_HQ->item(i, 4)->text().toInt();
}
if (vol > 0)
{
return;
}
if (ui.label_WKC->text() == "已开仓")
{
return;
}
double openprice = ui.tableWidget_HQ->item(i, 9)->text().toDouble();
double lastprice = ui.tableWidget_HQ->item(i, 12)->text().toDouble();
double buyprice = ui.tableWidget_HQ->item(i, 10)->text().toDouble();
double sellprice = ui.tableWidget_HQ->item(i, 11)->text().toDouble();
if (lastprice > openprice && ui.tableWidget_HQ->item(i, 2)->text() == " ")
{
td->ReqOrderInsert(dm, "开多", 1, buyprice);
ui.label_WKC->setText("已开仓");
}
else if (lastprice < openprice && ui.tableWidget_HQ->item(i, 2)->text() == " ")
{
td->ReqOrderInsert(dm, "开空", 1, sellprice);
}
}

void TraderCpt::pc(int i)
{
int vol = 0;
QString ksbfb = ui.tableWidget_HQ->item(i, 8)->text();
if (ui.radioButton_run->isChecked() == false)
{
return;
}
QString dm = ui.tableWidget_HQ->item(i, 0)->text();
if (ui.tableWidget_HQ->item(i,4) == NULL)
{
return;
}
if (ui.tableWidget_HQ->item(i, 9) == NULL || ui.tableWidget_HQ->item(i, 11) == NULL)
{
return;
}
if (ui.tableWidget_HQ->item(i, 4) != NULL)
{
vol = ui.tableWidget_HQ->item(i, 4)->text().toInt();
}
if (vol == 0)
{
return;
}

QString netTime = ui.tableWidget_HQ->item(i, 1)->text().trimmed();
QString ccLx = ui.tableWidget_HQ->item(i, 3)->text().trimmed();
QString setTime = ui.tableWidget_HQ->item(i, 6)->text().trimmed();
double openprice = ui.tableWidget_HQ->item(i, 9)->text().toDouble();
double lastprice = ui.tableWidget_HQ->item(i, 12)->text().toDouble();
double buyprice = ui.tableWidget_HQ->item(i, 10)->text().toDouble();
double sellprice = ui.tableWidget_HQ->item(i, 11)->text().toDouble();

//价格平仓
if (lastprice > openprice && ccLx == "买" && vol >= 1)
{
td->ReqOrderInsert(dm, "平多", 1, sellprice);
ui.label_WKC->setText("已开仓");
}
else if (lastprice < openprice && ccLx == "卖" && vol >= 1)
{
td->ReqOrderInsert(dm, "平空", 1, buyprice);
}

//时间平仓
if (pcTime(netTime,setTime) == true|| ksbl > ksbfb.toDouble())
{
if (ccLx == QString::fromLocal8Bit("买") && vol >= 1)
{
td->ReqOrderInsert(dm, "平多", 1, sellprice);
vol = 0;
}
else if (ccLx == QString::fromLocal8Bit("卖") && vol >= 1)
{
td->ReqOrderInsert(dm, "平空", 1, buyprice);
vol = 0;
}

}
//超过亏损平仓


}
bool TraderCpt::pcTime(QString netTime, QString setTime)
{
QDateTime netT = QDateTime::fromString(netTime, "hh:mm:ss");
QDateTime setT = QDateTime::fromString(setTime, "hh:mm:ss");
if (netT >setT)
{
return true;
}
else
{
return false;
}

}




标签: c++ Qt

实例下载地址

C++/Qt 期货数据获取

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警