csv文件读写与数据操作

126 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、根据U列“最后修改时间”:

3、将E列最新价,整理为1分钟问隔,即每个分钟未尾的最新价序列。(例如,900这1分钟的最新价为399.5,1459为403.1)b、将L列数量(表格中记录为累积量),整理为每分钟内的成交量。(例如,900累积数量为901,8.59累积数量为201,因此900次分钟发生的成交量为700)以此两列为内容,制作为分钟数据(index为1分钟间隔的交易时间,859、9:00、d01-…)

2、根据×列(申买量一)与z列(申卖量一),计算买卖量比例(申买量一/申卖量一),并计算其与下一时刻价格变化(此处使用最新价)变化的关系:买卖量比率>1时,下一时刻价格上涨的概率为多少?是否需要设定买卖量比率的阀值来提高预测的准确性?

#include <iostream>
#include <fstream>
#include <iomanip>
#include <sstream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
struct one_data {
	string time;
	double last_price;
	int amount, increment;
	int buy, sale;
};
int main()
{
	vector<one_data> data;
	ifstream  inFile("sc2004_20200212.csv", ios::out);
	//ios::out:如果没有文件,那么生成空文件;如果有文件,清空文件
	if (!inFile)
	{
		cout << "打开文件失败!" << endl;
		exit(1);
	}
	string oneline,now_time;//读该文件一行数据
	getline(inFile, oneline);//跳过列名,第一行不做处理
	one_data onedata;
	while (getline(inFile, oneline)) {
		istringstream readstr(oneline); //string数据流化
		for (int i = 0; i < 44; i++) {
			getline(readstr, oneline, ','); //循环读取数据
			if (i == 4) {
				onedata.last_price = stof(oneline);
			}
			else if (i == 11) {
				onedata.amount = stoi(oneline);
			}
			else if (i == 20) {
				onedata.time = oneline.substr(0,oneline.size()-3);
			}
			else if (i == 23) {
				onedata.buy= stoi(oneline);
			}
			else if (i == 25) {
				onedata.sale = stoi(oneline);
				break;
			}
		}
		if (data.size() > 1 && data[data.size() - 1].time == onedata.time) {
			onedata.buy += data[data.size() - 1].buy;
			onedata.sale += data[data.size() - 1].sale;
			data.pop_back();
		}
		data.push_back(onedata);
		if (data.size() > 1) {
			data[data.size() - 1].increment = data[data.size() - 1].amount - data[data.size() - 2].amount;
		}
		else {
			data[data.size() - 1].increment = data[data.size() - 1].amount;
		}
	}
	ofstream outFile("out.csv", ios::out);
	int count_1 = 0, count_2 = 0;
	outFile << "时间,最新价格,成交量" << endl;
	for(int i = 0; i < data.size(); i++) {
		outFile << data[i].time << ",";
		outFile << data[i].last_price << ",";
		outFile << data[i].increment << endl;
		double rate = (double)data[i].buy / (double)data[i].sale;
		cout << rate << endl;
		if (rate > 1.0 && i < data.size()-1) {
			count_1++;
			if (data[i].last_price < data[i + 1].last_price)count_2++;
		}
	}
	cout << "概率:" << (double)count_2 / (double)count_1;
	return 0;
}