121 lines
2.9 KiB
C
121 lines
2.9 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>double > long long > int > bool<EFBFBD><EFBFBD>
|
|||
|
|
3. <EFBFBD><EFBFBD>QString<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĩβ
|
|||
|
|
4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>й<EFBFBD><EFBFBD>ܺͽӿڲ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
// Ӧ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ݽṹ - <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
#include <QJsonArray>
|
|||
|
|
#include <QJsonObject>
|
|||
|
|
#include <QJsonDocument>
|
|||
|
|
#include <QVector>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8>Ϣ
|
|||
|
|
struct OrderDetail {
|
|||
|
|
double volume = 0.0; // 8<>ֽ<EFBFBD> (<28><><EFBFBD>뵽8)
|
|||
|
|
long long orderId = 0; // 8<>ֽ<EFBFBD>
|
|||
|
|
// <20>ܴ<EFBFBD>С16<31>ֽ<EFBFBD> (<28><>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD>)
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// ÿ<><C3BF><EFBFBD><EFBFBD>λ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
|||
|
|
struct OrderBookEntry {
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>)
|
|||
|
|
double price = 0.0; // 8<>ֽ<EFBFBD>
|
|||
|
|
double volume = 0.0; // 8<>ֽ<EFBFBD>
|
|||
|
|
int orderCount = 0; // 4<>ֽ<EFBFBD>
|
|||
|
|
// <20>˴<EFBFBD><CBB4><EFBFBD>4<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>QString<6E><67><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>)
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
QString code = ""; // 24<32>ֽ<EFBFBD> (<28><><EFBFBD><EFBFBD>64λϵͳ)
|
|||
|
|
QVector<OrderDetail> details;// 24<32>ֽ<EFBFBD> (<28><><EFBFBD><EFBFBD>64λϵͳ)
|
|||
|
|
|
|||
|
|
bool isValid() const {
|
|||
|
|
return price > 0 && volume > 0 && !details.isEmpty();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>ܴ<EFBFBD>СԼ72<37>ֽ<EFBFBD> (8+8+4+4<><34><EFBFBD><EFBFBD>+24+24)
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
struct OrderBookData {
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
QString name = ""; // 24
|
|||
|
|
QString code = ""; // 24
|
|||
|
|
QString askTime = ""; // 24
|
|||
|
|
QString bidTime = ""; // 24
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
QVector<OrderBookEntry> bids; // 24
|
|||
|
|
QVector<OrderBookEntry> asks; // 24
|
|||
|
|
|
|||
|
|
void clear() {
|
|||
|
|
bids.clear();
|
|||
|
|
asks.clear();
|
|||
|
|
}
|
|||
|
|
bool isEmpty() const { return bids.isEmpty() && asks.isEmpty(); }
|
|||
|
|
|
|||
|
|
// <20>ܴ<EFBFBD>СԼ144<34>ֽ<EFBFBD> + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// <20>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9>
|
|||
|
|
struct BigOrderInfo {
|
|||
|
|
// 8<>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
double price = 0.0; // 8
|
|||
|
|
double volume = 0.0; // 8
|
|||
|
|
long long orderId = 0; // 8
|
|||
|
|
|
|||
|
|
// 4<>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int nBigOrderType = 1; // 4 (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0<><30>/1<><31>)
|
|||
|
|
int level = 1; // 4 (<28>۸<EFBFBD><DBB8><EFBFBD>λ)
|
|||
|
|
|
|||
|
|
// 1<>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool isBigOrder = false; // 1
|
|||
|
|
// <20>˴<EFBFBD><CBB4><EFBFBD>3<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>QString<6E><67><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>)
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>QString<6E><67><EFBFBD><EFBFBD>
|
|||
|
|
QString name = ""; // 24
|
|||
|
|
QString code = ""; // 24
|
|||
|
|
QString svrRecvTime = "";// 24 (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>)
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>л<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
|
|||
|
|
QJsonObject toJson() const {
|
|||
|
|
return{
|
|||
|
|
{ "isBigOrder", isBigOrder },
|
|||
|
|
{ "nBigOrderType", nBigOrderType },
|
|||
|
|
{ "orderId", orderId },
|
|||
|
|
{ "name", name },
|
|||
|
|
{ "code", code },
|
|||
|
|
{ "price", price },
|
|||
|
|
{ "volume", volume },
|
|||
|
|
{ "level", level },
|
|||
|
|
{ "svrRecvTime", svrRecvTime }
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
static BigOrderInfo fromJson(const QJsonObject& json) {
|
|||
|
|
BigOrderInfo info;
|
|||
|
|
info.isBigOrder = json.value("isBigOrder").toBool(false);
|
|||
|
|
info.nBigOrderType = json.value("nBigOrderType").toInt(1);
|
|||
|
|
|
|||
|
|
// <20><>ȫת<C8AB><D7AA>long long
|
|||
|
|
bool ok = false;
|
|||
|
|
info.orderId = json.value("orderId").toString().toLongLong(&ok);
|
|||
|
|
if (!ok) info.orderId = 0;
|
|||
|
|
|
|||
|
|
info.name = json.value("name").toString("");
|
|||
|
|
info.code = json.value("code").toString("");
|
|||
|
|
info.price = json.value("price").toDouble(0.0);
|
|||
|
|
info.volume = json.value("volume").toDouble(0.0);
|
|||
|
|
info.level = json.value("level").toInt(1);
|
|||
|
|
info.svrRecvTime = json.value("svrRecvTime").toString("");
|
|||
|
|
|
|||
|
|
return info;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
|
|||
|
|
Q_DECLARE_METATYPE(BigOrderInfo)
|