快照和tick 行情拼装c++
时间: 2023-07-23 14:34:48 浏览: 46
拼装Tick行情和快照数据的方法有很多种,这里提供一种C++语言实现的简单方法:
1. 定义Tick数据结构体
Tick数据结构体包含股票代码、成交价格、成交量和交易时间等信息,定义如下:
```c++
struct TickData {
string code; // 股票代码
double price; // 成交价格
int volume; // 成交量
string time; // 交易时间
};
```
2. 定义Snapshot数据结构体
Snapshot数据结构体包含股票代码、买卖盘信息和时间等信息,定义如下:
```c++
struct SnapshotData {
string code; // 股票代码
vector<double> ask; // 卖盘价格
vector<int> ask_vol; // 卖盘数量
vector<double> bid; // 买盘价格
vector<int> bid_vol; // 买盘数量
string time; // 时间
};
```
其中,ask和ask_vol分别表示卖盘价格和数量,bid和bid_vol分别表示买盘价格和数量。
3. 读取Tick行情数据
使用C++文件读取函数,读取Tick行情数据文件,将每一行数据解析成TickData结构体,存储到一个vector中,代码如下:
```c++
vector<TickData> read_tick_data(string file_path) {
vector<TickData> tick_data;
ifstream infile(file_path);
string line;
while (getline(infile, line)) {
TickData tick;
istringstream iss(line);
iss >> tick.code >> tick.price >> tick.volume >> tick.time;
tick_data.push_back(tick);
}
return tick_data;
}
```
4. 读取Snapshot数据
使用C++文件读取函数,读取Snapshot数据文件,将每一行数据解析成SnapshotData结构体,存储到一个vector中,代码如下:
```c++
vector<SnapshotData> read_snapshot_data(string file_path) {
vector<SnapshotData> snapshot_data;
ifstream infile(file_path);
string line;
while (getline(infile, line)) {
SnapshotData snap;
istringstream iss(line);
iss >> snap.code;
double ask_price, bid_price;
int ask_vol, bid_vol;
for (int i = 0; i < 5; ++i) {
iss >> ask_price >> ask_vol;
snap.ask.push_back(ask_price);
snap.ask_vol.push_back(ask_vol);
}
for (int i = 0; i < 5; ++i) {
iss >> bid_price >> bid_vol;
snap.bid.push_back(bid_price);
snap.bid_vol.push_back(bid_vol);
}
iss >> snap.time;
snapshot_data.push_back(snap);
}
return snapshot_data;
}
```
5. 合并Tick和Snapshot数据
将读取到的Tick数据和Snapshot数据按照时间顺序合并,代码如下:
```c++
vector<pair<string, pair<TickData, SnapshotData>>> merge_data(vector<TickData> tick_data, vector<SnapshotData> snapshot_data) {
vector<pair<string, pair<TickData, SnapshotData>>> merged_data;
int tick_idx = 0, snap_idx = 0;
while (tick_idx < tick_data.size() && snap_idx < snapshot_data.size()) {
TickData tick = tick_data[tick_idx];
SnapshotData snap = snapshot_data[snap_idx];
if (tick.time < snap.time) {
++tick_idx;
} else if (tick.time > snap.time) {
++snap_idx;
} else {
merged_data.push_back({tick.time, {tick, snap}});
++tick_idx;
++snap_idx;
}
}
return merged_data;
}
```
6. 输出合并结果
将合并结果输出到文件中,代码如下:
```c++
void output_data(vector<pair<string, pair<TickData, SnapshotData>>> merged_data, string file_path) {
ofstream outfile(file_path);
for (auto data : merged_data) {
outfile << data.first << " " << data.second.first.code << " " << data.second.first.price << " " << data.second.first.volume << " ";
outfile << data.second.second.ask[0] << " " << data.second.second.ask_vol[0] << " " << data.second.second.ask[1] << " " << data.second.second.ask_vol[1] << " ";
outfile << data.second.second.bid[0] << " " << data.second.second.bid_vol[0] << " " << data.second.second.bid[1] << " " << data.second.second.bid_vol[1] << " ";
outfile << data.second.second.time << endl;
}
}
```
以上就是一个简单的Tick行情和Snapshot数据的拼装实现。需要注意的是,实际应用中可能需要考虑更复杂的情况,如数据缺失、数据异常等。