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

📄 do_portfolio.cpp

📁 股票分析源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		config_file_map.load_file(str_config_file_name.c_str());		
	}		
	
	PflSumDataPtr pfl_sum_data_ptr;	
	VectPflDataPtr vect_pfl_data_ptr;
	MapPflSumData::const_iterator iter;
	
	string str_title_key = "title";
	string str_section = "w";
	VectConfigFileItem vect_item;
	
	for (iter=map_data.begin();iter != map_data.end();iter++)
	{
		pfl_sum_data_ptr = iter->second;
		vect_pfl_data_ptr = pfl_sum_data_ptr->vect_pfl_data_ptr;
		
		if (vect_pfl_data_ptr->size() == 0)
		{
			//cout << "no stock to find" << endl;
			continue;
		}
	
		bool is_found = false;
		for (unsigned int j=0;j<vect_pfl_data_ptr->size();j++)
		{			
			if (is_only_include_selected_data && !(*vect_pfl_data_ptr)[j].is_selected)
			{
				continue;	
			}
			
			str_section = string("pfl_") + (*vect_pfl_data_ptr)[j].selector_name;
			config_file_map.get_section_items(vect_item,str_section);
			if (vect_item.size() > 1)
			{
				stable_sort(vect_item.begin(),
					vect_item.end(),gnu::ConfigFileItemSort_key);
				
			}
				
			is_found = false;
			for (unsigned int i=0;i<vect_item.size();i++)
			{
				if (str_trim(vect_item[i].value) == str_trim((*vect_pfl_data_ptr)[j].code))
				{
					is_found = true;
					break;
				}
			} // for (unsigned int i=0;i<vect_item.size();i++)
			
			if (is_found)
			{
				//cout << "found stock : " <<  (*vect_selectordata_ptr)[j].code << endl;
				I18N_DEBUG(_("%s [%s:%l] found stock : %s in %s group, don't need to insert.\n"),
					(*vect_pfl_data_ptr)[j].code,
					(*vect_pfl_data_ptr)[j].selector_title);
				continue;
			} else
			{
				I18N_DEBUG(_("%s [%s:%l] insert stock : %s into : %s group.\n"),
					(*vect_pfl_data_ptr)[j].code,
					(*vect_pfl_data_ptr)[j].selector_title);
			}		
			
			str_key = "w";			
			get_last_cmb_key(str_key,vect_item.size());
			str_value = str_trim((*vect_pfl_data_ptr)[j].code);
			
			isTrue = config_file_map.set_value(str_section,str_key,str_value);
			if (!isTrue)
			{
				I18N_ERROR(_("%s [%s:%l] Can't set section : %s, key : %s value : %s.\n"),
					str_section.c_str(),str_key.c_str(),str_value.c_str());					
			}			
			
		} // for (unsigned int j=0;j<vect_selectordata_ptr->size();j++)		
		
	} //for (iter=map_data.begin();iter != map_data.end();iter++)
	
	isTrue = config_file_map.save();
	if (!isTrue)
	{
		I18N_ERROR(_("%s [%s:%l] Can't save pfl_data_file : %s.\n"),str_config_file_name.c_str());			
	}
}

void hbstock2::write_self_pfl_stocks(const std::map<int,VectSelectorDataPtr>& map_data)
{
	bool isTrue = false;
	bool is_write_self_stocks = true;
	
	// get config of is_write_self_stocks
	string str_key = "is_write_self_stocks";
	string str_value = "w";
	int i_value = 0;
	
	AppConfig* p_app_config = AppConfigInst::instance();
	isTrue = p_app_config->get_value(str_key,i_value);
	if (!isTrue)
	{
		I18N_DEBUG(_("%s [%s:%l] Don't find key : is_write_self_stocks in config file, now insert it.\n"));
		i_value = 1;
		p_app_config->set_value(str_key,i_value);
	}
	
	if (i_value == 0)
	{
		is_write_self_stocks = false;
	} else
	{
		is_write_self_stocks = true;
	}
			
	if (!is_write_self_stocks)
	{
		return;
	}
	
	str_key = "pfl_data_file";	
	string str_config_file_name = "w";
	
	isTrue = p_app_config->get_value(str_key,str_value);
	if (!isTrue)
	{
		I18N_DEBUG(_("%s [%s:%l] Don't find key : pfl_data_file in config file, now insert it.\n"));
		str_value = "pfl_self.conf";
		p_app_config->set_value(str_key,str_value);
	}
	
	str_config_file_name = p_app_config->get_root_dir() + "/etc/" + str_value;
	
	ConfigFileMap config_file_map;
	
	isTrue = config_file_map.load_file(str_config_file_name.c_str());
	if (!isTrue)
	{
		//I18N_ERROR(_("%s [%s:%l] Can't open pfl_data_file : %s, system exit.\n"),str_config_file_name.c_str());		
		create_pfl_config_file(str_config_file_name.c_str());
		config_file_map.load_file(str_config_file_name.c_str());		
	}		
	
	VectSelectorDataPtr vect_selectordata_ptr;
	std::map<int,VectSelectorDataPtr>::const_iterator iter;
	
	string str_title_key = "title";
	string str_section = "w";
	VectConfigFileItem vect_item;
	
	for (iter=map_data.begin();iter != map_data.end();iter++)
	{
		vect_selectordata_ptr = iter->second;
		if (vect_selectordata_ptr->size() == 0)
		{
			//cout << "no stock to find" << endl;
			continue;
		}
		
		str_section = string("pfl_") + (*vect_selectordata_ptr)[0].selector_name;
		// set title
		isTrue = config_file_map.get_value(str_section,str_title_key,str_value);
		if (!isTrue)
		{			
			str_value = (*vect_selectordata_ptr)[0].selector_title;
			isTrue = config_file_map.set_value(str_section,str_title_key,str_value);
		}
		
		
		config_file_map.get_section_items(vect_item,str_section);
		if (vect_item.size() > 1)
		{
			stable_sort(vect_item.begin(),
				vect_item.end(),gnu::ConfigFileItemSort_key);			
		}		
		
		bool is_found = false;
		for (unsigned int j=0;j<vect_selectordata_ptr->size();j++)
		{
			is_found = false;
			for (unsigned int i=0;i<vect_item.size();i++)
			{
				if (str_trim(vect_item[i].value) == str_trim((*vect_selectordata_ptr)[j].code))
				{
					is_found = true;
					break;
				}
			} // for (unsigned int i=0;i<vect_item.size();i++)
			
			if (is_found)
			{
				//cout << "found stock : " <<  (*vect_selectordata_ptr)[j].code << endl;
				I18N_DEBUG(_("%s [%s:%l] found stock : %s in %s group, don't need to insert.\n"),
					(*vect_selectordata_ptr)[j].code,
					(*vect_selectordata_ptr)[j].selector_title);
				continue;
			} else
			{
				I18N_DEBUG(_("%s [%s:%l] insert stock : %s into : %s group.\n"),
					(*vect_selectordata_ptr)[j].code,
					(*vect_selectordata_ptr)[j].selector_title);
			}		
			
			get_last_cmb_key(str_key,vect_item.size());
			str_value = str_trim((*vect_selectordata_ptr)[j].code);
			
			isTrue = config_file_map.set_value(str_section,str_key,str_value);
			if (!isTrue)
			{
				I18N_ERROR(_("%s [%s:%l] Can't set section : %s, key : %s value : %s.\n"),
					str_section.c_str(),str_key.c_str(),str_value.c_str());					
			}				
			
		} // for (unsigned int j=0;j<vect_selectordata_ptr->size();j++)		
		
	} //for (iter=map_data.begin();iter != map_data.end();iter++)
	
	isTrue = config_file_map.save();
	if (!isTrue)
	{
		I18N_ERROR(_("%s [%s:%l] Can't save pfl_data_file : %s.\n"),str_config_file_name.c_str());			
	}
}

void hbstock2::obtain_pfl_data_from_file(
	MapPflSumData& map_pfl_sum_data,
	const VectPflFileData& vect_pfl_file_data,
	const char* p_ch_date)
{
	// init pfl sum data
	init_map_pfl_sum_data(map_pfl_sum_data,true,p_ch_date);
	
	DataManger* p_datamanger = DataMangerInst::instance();
		
	// copy selector data to pfl data
	VectPflFileData::const_iterator iter;
	VectConfigFileItemPtr vect_item_ptr;
	PflSumDataPtr pfl_sum_data_temp_ptr;
	
	std::string str_stock_code_out = "w";
	std::string str_market_code = "w";
	bool isTrue = false;
	
	for (iter=vect_pfl_file_data.begin();iter != vect_pfl_file_data.end();iter++)
	{	
		if (! iter->is_selected)
		{
			continue;
		}
		
		vect_item_ptr = iter->vect_item_ptr;			
				
		for (unsigned int i=0;i<vect_item_ptr->size();i++)
		{
			PflData pfl_data;
			
			pfl_data.period_type = SHORT_LINE;
			strcpy(pfl_data.code,(*vect_item_ptr)[i].value.c_str());	
			strcpy(pfl_data.selector_name,(*iter).name.c_str());	
			strcpy(pfl_data.selector_title,(*iter).title.c_str());	
			
			// add pfl_data to map
			
			isTrue = p_datamanger->check_transform_stock_code(pfl_data.code,
				str_stock_code_out,
				str_market_code);
			if (!isTrue)
			{
				I18N_ERROR(_("%s [%s:%l] Don't find stock : %s \n"),pfl_data.code);
				continue;
			}
			
			if (pfl_data.code[0] >= '0' && pfl_data.code[0]<='9')
			{
				str_stock_code_out = str_market_code + "." + string(pfl_data.code);
				strcpy(pfl_data.code,str_stock_code_out.c_str());	
			}
						
			//find pfl_sum_data
			//pfl_sum_data_temp_ptr = map_pfl_sum_data[str_market_code];
			pfl_sum_data_temp_ptr = find_map_pfl_sum_data(gnu::str_toupper(str_market_code),
				map_pfl_sum_data);	
			if (pfl_sum_data_temp_ptr.get() == NULL)
			{
				continue;
			}
			
			// test if found in vect_pfl_data
			bool is_found = false;
			is_found =binary_search(pfl_sum_data_temp_ptr->vect_pfl_data_ptr->begin(),
				pfl_sum_data_temp_ptr->vect_pfl_data_ptr->end(),
				pfl_data,hbstock2::PflDataSort);
			if (!is_found)
			{
				pfl_sum_data_temp_ptr->vect_pfl_data_ptr->push_back(pfl_data);
				//pfl_data_source.vect_cmb_init_stock.push_back(cmb_init_stock);
				stable_sort(pfl_sum_data_temp_ptr->vect_pfl_data_ptr->begin(),
					pfl_sum_data_temp_ptr->vect_pfl_data_ptr->end(),
					hbstock2::PflDataSort);
			}			
			
		} //for (unsigned int i=0;i<vect_stock_ptr->size();i++)
	} // for (iter=vect_pfl_file_data.begin();iter != vect_pfl_file_data.end();iter++)
	
}

PflSumDataPtr hbstock2::find_map_pfl_sum_data(const std::string& str_market_code,
	const MapPflSumData& map_pfl_sum_data)
{	
	MapPflSumData::const_iterator iter;
	PflSumDataPtr pfl_sum_data_ptr;	
	std::vector<std::string> vect_split;
	
	for (iter=map_pfl_sum_data.begin();iter != map_pfl_sum_data.end();iter++)
	{	
		vect_split.clear();
		gnu::str_split(iter->first.c_str(),",",vect_split);
		for (unsigned int i=0;i<vect_split.size();i++)
		{
			if (vect_split[i] == str_market_code)
			{
				pfl_sum_data_ptr = iter->second;
				break;
			}
		} //for (unsigned int i=0;i<vect_split.size();i++)		
	} //for (iter=map_pfl_sum_data.begin();iter != map_pfl_sum_data.end();iter++)
	
	return pfl_sum_data_ptr;
}

void hbstock2::init_map_pfl_sum_data(MapPflSumData& map_pfl_sum_data,
	const bool is_user_defined_type,
	const char* p_ch_date)
{
	map_pfl_sum_data.clear();
	
	// get time
	char p_ch_date_tmp[256];
	struct tm* p_tm_now = NULL;
	time_t tt_now = 0;
	
	memset(p_ch_date_tmp,'\0',sizeof(p_ch_date_tmp));
	
	if (p_ch_date != NULL)
	{
		strcpy(p_ch_date_tmp,p_ch_date);
	} else
	{
		tt_now = time(NULL);
		p_tm_now = localtime(&tt_now);
		strftime(p_ch_date_tmp ,sizeof(p_ch_date_tmp)-1 , "%Y%m%d",p_tm_now);
	}
	
	//check is sum market
	//China Market:SH.000001:sh,sz:1
	string str_market_title = _("ShangHai,ShenZhen");
	string str_market_combine = str_market_title + ":SH.000001:SH,SZ:1";
	
	AppConfig* p_app_config = AppConfigInst::instance();
	string str_section = "general";
	string str_key = "pfl_market_combine";
	string str_value = "w";
	p_app_config->get_value(str_section,str_key,str_value,str_market_combine);
	
	std::vector<std::string> vect_split;
	std::vector<std::string> vect_split_sub;	
	gnu::str_split(str_value.c_str(),";",vect_split);
	for (unsigned int i=0;i<vect_split.size();i++)
	{
		gnu::str_split(vect_split[i].c_str(),":",vect_split_sub);
		if (vect_split_sub.size()!=4)
		{
			I18N_ERROR(_("%s [%s:%l] pfl_market_combine format : %s error.\n"),vect_split[i].c_str());	
			continue;
		}
		
		int i_pfl_combine = atoi(vect_split_sub[3].c_str());
		if (i_pfl_combine == 0)
		{
			I18N_DEBUG(_("%s [%s:%l] don't need market combine.\n"));	
			continue;
		}
		
		PflSumDataPtr pfl_sum_data_ptr(new PflSumData);
		
		// for selector selected stock
		pfl_sum_data_ptr->is_user_defined_type = is_user_defined_type;
		strcpy(pfl_sum_data_ptr->market_code,str_toupper(vect_split_sub[2]).c_str());
		strcpy(pfl_sum_data_ptr->market_title,vect_split_sub[0].c_str());
		strcpy(pfl_sum_data_ptr->index_code,str_toupper(vect_split_sub[1]).c_str());
		
		map_pfl_sum_data[pfl_sum_data_ptr->market_code] = pfl_sum_data_ptr;		
		if (p_ch_date != NULL)
		{
			strcpy(pfl_sum_data_ptr->input_day,p_ch_date);
		} else
		{
			strcpy(pfl_sum_data_ptr->input_day,p_ch_date_tmp);
		}
		
	} //for (unsigned int i=0;i<vect_split.size();i++)
	
	// init pfl sum data
	SetMarket::iterator iter_market;
	DataManger* p_datamanger = NULL;
	p_datamanger = DataMangerInst::instance();
	SetMarketPtr set_market_ptr;
	PflSumDataPtr pfl_sum_data_temp_ptr;
	set_market_ptr = p_datamanger->get_all_market();
	for (iter_market=set_market_ptr->begin();iter_market !=  set_market_ptr->end();iter_market++)
	{
		//find pfl_sum_data			
		pfl_sum_data_temp_ptr = find_map_pfl_sum_data(gnu::str_toupper(iter_market->code),
			map_pfl_sum_data);	
		if (pfl_sum_data_temp_ptr.get() != NULL)
		{
				continue;
		}
		
		PflSumDataPtr pfl_sum_data_ptr(new PflSumData);
		
		// for selector selected stock
		pfl_sum_data_ptr->is_user_defined_type = is_user_defined_type;
		strcpy(pfl_sum_data_ptr->market_code,iter_market->code.c_str());
		strcpy(pfl_sum_data_ptr->market_title,iter_market->title.c_str());
		map_pfl_sum_data[iter_market->code] = pfl_sum_data_ptr;		
		if (p_ch_date != NULL)
		{
			strcpy(pfl_sum_data_ptr->input_day,p_ch_date);
		} else
		{
			strcpy(pfl_sum_data_ptr->input_day,p_ch_date_tmp);
		}
	}	
}

void hbstock2::obtain_pfl_data(MapPflSumData& map_pfl_sum_data,
	const std::map<int,VectSelectorDataPtr>& map_data,
	const char* p_ch_date)
{	
	// init pfl sum data
	init_map_pfl_sum_data(map_pfl_sum_data,false,p_ch_date);
	
	// copy selector data to pfl data
	std::map<int,VectSelectorDataPtr>::const_iterator iter;
	VectSelectorDataPtr vect_selectordata_ptr;
	PflSumDataPtr pfl_sum_data_temp_ptr;
	
	for (iter=map_data.begin();iter != map_data.end();iter++)
	{		
		vect_selectordata_ptr = iter->second;			
				
		for (unsigned int i=0;i<vect_selectordata_ptr->size();i++)
		{
			PflData pfl_data;
			
			pfl_data.period_type = (*vect_selectordata_ptr)[i].period_type;
			strcpy(pfl_data.code,(*vect_selectordata_ptr)[i].code);	
			strcpy(pfl_data.selector_name,(*vect_selectordata_ptr)[i].selector_name);	
			strcpy(pfl_data.selector_title,(*vect_selectordata_ptr)[i].selector_title);	

⌨️ 快捷键说明

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