⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stock.cpp

📁 通信达接口引警 可直接下载股票数据,建立自已的股票软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	int p = 0;
	fs.seekg(0x182);
	while(!fs.eof() && -1 != (p =fs.tellg()))
	{
		char temp[10];
		fs.read(&temp[0],9);
		if(0 == temp[0]) break;
		string name(temp);		// block name

		unsigned short cnt = 0;
		fs.read((char*)&cnt, 2);
		fs.seekg(2, ios::cur);
		while(cnt -- > 0)
		{
			fs.read(&temp[0],7);
			if(0 == temp[0]) break;
			string member(temp, 6);

			stock_block_info[name].push_back(member);
		}
		fs.seekg(p + 0x0afd);
	}
	return true;
}

void StockBasicInfo::save_block_info()
{
	const string filename = "F:\\Develop\\stock\\data\\block_info.mat";

	int deal_col_count = 0;
	StockGroupMap::const_iterator iter_code;
	for(iter_code = stock_block_info.begin();iter_code !=  stock_block_info.end(); ++iter_code)
	{
		if(iter_code->second.size() > (uint)deal_col_count)
		{
			deal_col_count = iter_code->second.size();
		}
	}
	++deal_col_count;				// 加上名称
	int dims[2];
	dims[0] = deal_col_count;
	dims[1] = stock_block_info.size();

	int block_index = 1;

	mxArray *mx_t0_data = mxCreateNumericArray(2, &dims[0], mxDOUBLE_CLASS, mxREAL);
	double *p_mxT0data = mxGetPr(mx_t0_data), *p_temp_mxT0data = p_mxT0data;
	
	for(iter_code = stock_block_info.begin();iter_code !=  stock_block_info.end(); ++iter_code, ++block_index)
	{
		p_temp_mxT0data[0] = block_index;		//  Block name

		int block_member_index = 1;
		for(StringVector::const_iterator iter_i = iter_code->second.begin();iter_i < iter_code->second.end();++iter_i, ++block_member_index)
		{
			p_temp_mxT0data[block_member_index] = atoi(iter_i->c_str());
		}
		p_temp_mxT0data += deal_col_count;
	}
	matlab_engine::Instance().saveVarToFile(filename, mx_t0_data, "block_info");
	mxDestroyArray(mx_t0_data);

}

void StockBasicInfo::save_stock_set()
{
	uint d = date_to_uint(gregorian::day_clock::local_day()); 
	const string filename = "F:\\Develop\\stock\\data\\StockSet";

	stringstream ss;
	ss << filename << d << ".mat";

	if(is_file_exist(ss.str()))return;
	
	int deal_col_count = 0; int max_stock_count = 0;
	for(short m = MarketInfo::MARKET_FIRST; m < MarketInfo::MARKET_MAX; m++)
	{
		max_stock_count += MarketInfo::stocks_set[m].size();
	}
	int dims[2];
	dims[0] = 1;
	dims[1] = max_stock_count;

	mxArray *mx_t0_data = mxCreateNumericArray(2, &dims[0], mxDOUBLE_CLASS, mxREAL);
	double *p_mxT0data = mxGetPr(mx_t0_data), *p_temp_mxT0data = p_mxT0data;
	
	for(short m = MarketInfo::MARKET_FIRST; m < MarketInfo::MARKET_MAX; m++)
	{
		for(StringSet::const_iterator iter = MarketInfo::stocks_set[m].begin();iter != MarketInfo::stocks_set[m].end();++iter, ++p_temp_mxT0data)
		{
			*p_temp_mxT0data = atoi(iter->c_str());
		}
	}
	matlab_engine::Instance().saveVarToFile(ss.str(), mx_t0_data, "stock_set");
	mxDestroyArray(mx_t0_data);

}


void StockBasicInfo::add_stock_gbbq(uint dt, const GBBQ& gbbq)
{
	stock_gbbq_info[dt].push_back(gbbq);
}
#if 0
int StockBasicInfo::get_cir_amount(const string &stock_code, const gregorian::date& dt)
{
	DateGBBQ &dgb = stock_gbbq_info[stock_code];
	uint uint_dt = date_to_uint(dt);
	float cir_amount = 0;
	for(DateGBBQ::const_iterator iter = dgb.begin(); iter < dgb.end(); ++iter)
	{
		if(2 == iter->chg_type || 5 == iter->chg_type || 8 == iter->chg_type)
		{
			if(iter->dt == uint_dt) 
			{
				cir_amount = iter->data.gb.new_cir;
				break;
			}
			else if(iter->dt > uint_dt)
			{
				cir_amount = iter->data.gb.old_cir;
				break;
			}
			else
			{
				cir_amount = iter->data.gb.new_cir;
			}
		}
	}
	if(cir_amount < 1.0)	// 没有股本变迁数据。取当前值
	{
		if(stock_base_info.find(stock_code) != stock_base_info.end())
			cir_amount = static_cast<float>(stock_base_info[stock_code].cir_amount);
		else
			cir_amount = 10000.0;
	}
	return static_cast<int>(cir_amount);
}
#endif
bool StockTransact::Transact::operator == (const StockTransact::Transact& t)
{
	return (minute == t.minute
		&& price == t.price
		&& vol == t.vol
		&& bs == t.bs);
}

const int BaseInfo::record_len = 0x1e1;
fstream& operator >> (fstream& fs, BaseInfo& bs)
{
	char code[MarketInfo::StocksCodeLen];

	fs.read(code, MarketInfo::StocksCodeLen);
	bs.stock_code = string(&code[0], MarketInfo::StocksCodeLen);

	fs >> bs.update_time;
	fs >> bs.ttl_amount;
	fs >> bs.state_own_amount;	// 国家股
	fs >> bs.init_amount;		// 发起股本
	fs >> bs.corp_amount;		// 法人股本
	fs >> bs.b_amount;			// B 股本
	fs >> bs.h_amount;			// H 股本
	fs >> bs.cir_amount;		// 流通 股本
	fs >> bs.empl_amount;		// 职工 股本
	fs >> bs.unknown1;			// 
	fs >> bs.ttl_asset;			// 总资产
	fs >> bs.varible_asset;		// 流动 资产
	fs >> bs.firm_asset;		// 固定 资产
	fs >> bs.invisible_asset;	// 无形 资产
	fs >> bs.long_term_invest;	// 长期投资
	fs >> bs.varible_debt;		// 流动负债
	fs >> bs.long_term_debt;	// 长期负债
	fs >> bs.accu_fund;			// 公积金
	fs >> bs.net_asset;			// 净资产
	fs >> bs.major_income;		// 主营收入
	fs >> bs.major_profit;		// 主营利润
	fs >> bs.unknown2;			// 
	fs >> bs.bussiness_income;	// 营业收入
	fs >> bs.invest_income;		// 投资收入
	fs >> bs.allowance;			// 补贴收入
	fs >> bs.non_bussiness_income;	// 业外收入
	fs >> bs.income_adjustment;	// 收入调整
	fs >> bs.ttl_profit;		// 利润总额
	fs >> bs.unknown3;			// 
	fs >> bs.net_profit;		// 税后利润
	fs >> bs.undist_profit;		// 未分配利润
	fs >> bs.per_net_assert2;	// 每股净资产2
	return fs;
	
}

extern void output_short_index_data();

uint date_to_uint(gregorian::date d)
{
	return d.year() * 10000 + d.month() * 100 + d.day();
}

gregorian::date uint_to_date(uint d)
{
	return gregorian::date(d / 10000, d % 10000 / 100, d % 100);
}

string MarketInfo::get_first_stock()
{
	// set the first stock
	for(short m = MarketInfo::MARKET_FIRST; m < MarketInfo::MARKET_MAX; m++)
	{
		StringSet::const_iterator iter = MarketInfo::stocks_set[m].begin();
		if(iter != MarketInfo::stocks_set[m].end())
		{
			return *iter;
		}
	}
	return "";
}

string MarketInfo::find_next_stock(const string& stock_code)
{
	bool first_in_market = false;
	for(short m = MarketInfo::get_market_type(stock_code); m < MarketInfo::MARKET_MAX; m++)
	{
		StringSet::const_iterator iter ;
		if(! first_in_market)
		{
			iter = MarketInfo::stocks_set[m].find(stock_code);
			if( iter != MarketInfo::stocks_set[m].end())
			{
				++iter;
				if(iter != MarketInfo::stocks_set[m].end())
				{
					return *iter;
				}
			}
			first_in_market = true;
		}
		else
		{
			iter = MarketInfo::stocks_set[m].begin();
			if(iter != MarketInfo::stocks_set[m].end())
			{
				return *iter;
			}
		}
	}
	return "";
}


void show_curr_bid(char const*  first, char const*  last )
{
	cout << "show_curr_bid called\r\n";

	recursive_mutex::scoped_lock guard(bid_mutex);
	StockBid::BidMap::const_iterator i = instant_price_list.begin();

	// has data
	if(i != instant_price_list.end())
	{
		// print title here
	}
	while(i++ != instant_price_list.end())
	{
		cout << i->first << endl;
	}

}
	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -