stock_kline.cpp

来自「股票分析源代码」· C++ 代码 · 共 970 行 · 第 1/3 页

CPP
970
字号
	{
		wave.is_convex = true;
	} else
	{
		for (unsigned int i=0;i<info.vect_top_index.size();i++)
		{			
			if (info.vect_top_index[i].index > info.index_lowest &&
				info.vect_top_index[i].is_high_point && 
				info.is_low_of_last_index)
			{
				wave.is_convex = true;
				break;
			}
			
		} //for (unsigned int i=0;i<info.vect_top_index.size();i++)
	} //if (info.index_highest > info.index_lowest && is_low_of_last_index)
		
	// set index
	if (info.index_highest > info.index_lowest)
	{
		wave.index_middlehighest = info.index_highest;
		wave.index_leftlowest = info.index_lowest;		
	} else
	{		
		float f_high_price = 0;
		wave.index_leftlowest = info.index_lowest;	
		
		for (unsigned int i=0;i<info.vect_top_index.size();i++)
		{			
			if (info.vect_top_index[i].is_high_point && 
				info.vect_top_index[i].index > info.index_lowest)
			{
				if (f_high_price<vect_data[info.vect_top_index[i].index].high_price)
				{
					wave.index_middlehighest = info.vect_top_index[i].index;
					f_high_price = vect_data[info.vect_top_index[i].index].high_price;
				}
			}
			
		} //for (unsigned int i=0;i<info.vect_top_index.size();i++)
	}
	
	wave.index_rightlowest = 0;
	wave.is_convex = false;
	if (info.is_low_of_last_index)
	{
		wave.index_lastlow = info.vect_top_index[info.vect_top_index.size()-1].index;
		wave.index_rightlowest = wave.index_lastlow;
		wave.is_convex = true;
	}	
		
	// count high and low point , check  last low is rightlowest or not ?
	wave.count_bighigh_point = 0;
	wave.count_high_point = 0;
	wave.count_low_point = 0;
	
	for (unsigned int i=0;i<info.vect_top_index.size();i++)
	{
		if (!info.vect_top_index[i].is_high_point && 
			(int)info.vect_top_index[i].index > wave.index_middlehighest &&
			(int)info.vect_top_index[i].index != wave.index_lastlow)
		{
			if (vect_data[info.vect_top_index[i].index].low_price < 
				vect_data[wave.index_lastlow].low_price)
			{
				wave.index_rightlowest = info.vect_top_index[i].index;
			}
		}
		
		if ((int)info.vect_top_index[i].index > wave.index_leftlowest &&
			(int)info.vect_top_index[i].index  < wave.index_rightlowest && 
			info.vect_top_index[i].is_high_point)
		{
			wave.count_bighigh_point ++ ;
		}	
		
		if ((int)info.vect_top_index[i].index > wave.index_leftlowest &&			 
			info.vect_top_index[i].is_high_point)
		{
			wave.count_high_point ++ ;
		}	
		
		if ((int)info.vect_top_index[i].index > wave.index_leftlowest &&
			!info.vect_top_index[i].is_high_point)
		{
			wave.count_low_point ++ ;
		}
			
	} // for (unsigned int i=0;i<info.vect_top_index.size();i++)
	
	// set current index
	wave.index_current = vect_data.size() -1;
	wave.index_middlehighest_org = wave.index_middlehighest;
	
	//cout << "wave.index_middlehighest : "  << wave.index_middlehighest << endl;
	
	// set dist
	wave.dist_middlehighest_leftlowest = wave.index_middlehighest - wave.index_leftlowest;
	wave.dist_middlehighest_rightlowest = wave.index_rightlowest - wave.index_middlehighest ;
	wave.dist_middlehighest_lastlow = wave.index_lastlow - wave.index_middlehighest ;
	wave.dist_middlehighest_current = wave.index_current - wave.index_middlehighest;
	wave.dist_rightlowest_current = wave.index_current - wave.index_rightlowest;
	wave.dist_lastlow_current = wave.index_current - wave.index_lastlow;
	wave.dist_leftlowest_current = wave.index_current - wave.index_leftlowest ;
	wave.dist_leftlowest_lastlow = wave.index_lastlow - wave.index_leftlowest ;
	wave.dist_rightlowest_lastlow = wave.index_lastlow - wave.index_rightlowest;
	
	//check middle highest and set smart middle highest	
	float f_middlehighest_price = 0;
	float f_tmp_price_ratio = 0;
	float f_max_ratio = 2.5;
	float f_dist_tmp = 0;
	float f_dist_middlehighest = 0;
	float f_fen_z = 0;
	float f_fen_m = 0;
	int i_index_middlehighest_org = 0;
	bool is_change_index = false;
	
	i_index_middlehighest_org = wave.index_middlehighest;
	f_middlehighest_price = vect_data[wave.index_middlehighest].high_price;
	f_fen_z = (float)wave.dist_middlehighest_leftlowest;
	f_fen_m = (float)wave.dist_leftlowest_current;
	f_dist_middlehighest = f_fen_z /f_fen_m * 100 ;	
	f_dist_middlehighest = fabsf(f_dist_middlehighest - 50);
	for (unsigned int i=0;i<info.vect_top_index.size();i++)
	{
		if (info.vect_top_index[i].is_high_point && 
			(int)info.vect_top_index[i].index > wave.index_leftlowest &&
			(int)info.vect_top_index[i].index < i_index_middlehighest_org)
		{
			if ((i+1) == info.vect_top_index.size())
			{
				break;
			}
			
			if (info.vect_top_index[i+1].is_high_point)
			{
				continue;
			}
			
			f_tmp_price_ratio = (f_middlehighest_price - vect_data[info.vect_top_index[i].index].high_price)/
				f_middlehighest_price * 100;			
			//cout << "f_middlehighest_price : "  << f_middlehighest_price << endl;			
			//cout << "f_tmp_price            : "  << vect_data[info.vect_top_index[i].index].high_price << endl;
			//cout << "f_tmp_price rate       : "  << f_tmp_price_ratio << endl;
			if (f_tmp_price_ratio <= f_max_ratio)
			{
				f_dist_tmp = (float)(info.vect_top_index[i].index-wave.index_leftlowest)/
					(float)wave.dist_leftlowest_current * 100;
				f_dist_tmp = fabsf(f_dist_tmp - 50);
				
				//cout << "f_dist_tmp              : "  << f_dist_tmp << endl;
				//cout << "f_dist_middlehighest   : "  << f_dist_middlehighest << endl;
				
				if (f_dist_tmp < f_dist_middlehighest)
				{
					f_dist_middlehighest = f_dist_tmp;
					wave.index_middlehighest = info.vect_top_index[i].index;
					is_change_index = true;
				}
			}
		}
		
	}
	
	if (is_change_index)
	{
		// set dist
		wave.dist_middlehighest_leftlowest = wave.index_middlehighest - wave.index_leftlowest;
		wave.dist_middlehighest_rightlowest = wave.index_rightlowest - wave.index_middlehighest ;
		wave.dist_middlehighest_lastlow = wave.index_lastlow - wave.index_middlehighest ;
		wave.dist_middlehighest_current = wave.index_current - wave.index_middlehighest;
		wave.dist_rightlowest_current = wave.index_current - wave.index_rightlowest;
		wave.dist_lastlow_current = wave.index_current - wave.index_lastlow;
		wave.dist_leftlowest_current = wave.index_current - wave.index_leftlowest ;	
		wave.dist_leftlowest_lastlow = wave.index_lastlow - wave.index_leftlowest ;
		wave.dist_rightlowest_lastlow = wave.index_lastlow - wave.index_rightlowest;
	}
	//cout << "wave.index_middlehighest : "  << wave.index_middlehighest << endl;
	//cout << "wave.index_leftlowest    : "  << wave.index_leftlowest << endl;
	//cout << "wave.index_rightlowest   : "  << wave.index_rightlowest << endl;
	//cout << "wave.index_current        : "  << wave.index_current << endl;
			
	//cout << "hbstock2::get_kline_convex_wave --> 4 " << endl;
	// set rate
	wave.rate_middlehighest_leftlowest = 
		(vect_data[wave.index_middlehighest].high_price-vect_data[wave.index_leftlowest].low_price)*100/
		vect_data[wave.index_middlehighest].high_price;	
	wave.rate_middlehighest_rightlowest = 
		(vect_data[wave.index_middlehighest].high_price-vect_data[wave.index_rightlowest].low_price)*100/
		vect_data[wave.index_middlehighest].high_price;
	wave.rate_middlehighest_lastlow = 
		(vect_data[wave.index_middlehighest].high_price-vect_data[wave.index_lastlow].low_price)*100/
		vect_data[wave.index_middlehighest].high_price;
	wave.rate_middlehighest_current = 
		(vect_data[wave.index_middlehighest].high_price-vect_data[wave.index_current].close_price)*100/
		vect_data[wave.index_middlehighest].high_price;	
	wave.rate_rightlowest_current = 
		(vect_data[wave.index_current].close_price-vect_data[wave.index_rightlowest].low_price)*100/
		vect_data[wave.index_rightlowest].low_price;
	
	wave.rate_rightlowest_leftlowest = 
		(vect_data[wave.index_rightlowest].low_price-vect_data[wave.index_leftlowest].low_price)*100/
		vect_data[wave.index_rightlowest].low_price;
	wave.rate_leftlowest_current = 
		(vect_data[wave.index_current].close_price-vect_data[wave.index_leftlowest].low_price)*100/
		vect_data[wave.index_leftlowest].low_price;
	
	//cout << "hbstock2::get_kline_convex_wave --> 5 " << endl;
	
	wave.rate_middlehighest_leftlowest_close = 
		(vect_data[wave.index_middlehighest].close_price-vect_data[wave.index_leftlowest].close_price)*100/
		vect_data[wave.index_middlehighest].close_price;
	wave.rate_middlehighest_rightlowest_close = 
		(vect_data[wave.index_middlehighest].close_price-vect_data[wave.index_rightlowest].close_price)*100/
		vect_data[wave.index_middlehighest].close_price;
	wave.rate_middlehighest_lastlow_close = 
		(vect_data[wave.index_middlehighest].close_price-vect_data[wave.index_lastlow].close_price)*100/
		vect_data[wave.index_middlehighest].close_price;
	wave.rate_middlehighest_current_close = 
		(vect_data[wave.index_middlehighest].close_price-vect_data[wave.index_current].close_price)*100/
		vect_data[wave.index_middlehighest].close_price;
	wave.rate_rightlowest_current_close = 
		(vect_data[wave.index_current].close_price-vect_data[wave.index_rightlowest].close_price)*100/
		vect_data[wave.index_rightlowest].close_price;
	wave.rate_rightlowest_leftlowest_close = 
		(vect_data[wave.index_rightlowest].close_price-vect_data[wave.index_leftlowest].close_price)*100/
		vect_data[wave.index_rightlowest].close_price;
	wave.rate_leftlowest_current_close = 
		(vect_data[wave.index_current].close_price-vect_data[wave.index_leftlowest].close_price)*100/
		vect_data[wave.index_leftlowest].close_price;
	
}

void hbstock2::print_kline_convex_wave(const KLineConvexWave& info,
	const VectStockData& vect_data)
{
	cout << "====================================================================" << endl;	
	
	cout << "is convex               : " ;
	if (info.is_convex)
	{
		cout << "true" << endl;
	} else
	{
		cout << "false" << endl;
	}
	
	cout << "is div                  : " ;
	if (info.is_div)
	{
		cout << "true" << endl;
	} else
	{
		cout << "false" << endl;
	}
	
	cout << "div rate                : " << info.div_rate << endl;
	cout << "is include div data     : " ;
	if (info.is_include_div_data)
	{
		cout << "true" << endl;
	} else
	{
		cout << "false" << endl;
	}
	
	cout << "---------------------------------------------------------" << endl;
	
	cout << "middlehighest_org date       : " << vect_data[info.index_middlehighest_org].day << endl;
	cout << "middlehighest date           : " << vect_data[info.index_middlehighest].day << endl;
	cout << "leftlowest    date           : " << vect_data[info.index_leftlowest].day << endl;
	cout << "rightlowest   date           : " << vect_data[info.index_rightlowest].day << endl;
	cout << "lastlow       date           : " << vect_data[info.index_lastlow].day << endl;
	cout << "current       date           : " << vect_data[info.index_current].day << endl;
		
	cout << "---------------------------------------------------------" << endl;
	
	cout << "index_middlehighest_org      : " << info.index_middlehighest_org << endl;
	cout << "index_middlehighest          : " << info.index_middlehighest << endl;
	cout << "index_leftlowest             : " << info.index_leftlowest << endl;
	cout << "index_rightlowest            : " << info.index_rightlowest << endl;
	cout << "index_lastlow                : " << info.index_lastlow << endl;
	cout << "index_current                : " << info.index_current << endl;
	
	
	cout << "---------------------------------------------------------" << endl;
	
	cout << "dist_middlehighest_leftlowest    : " << info.dist_middlehighest_leftlowest << endl;
	cout << "dist_middlehighest_rightlowest   : " << info.dist_middlehighest_rightlowest << endl;
	cout << "dist_middlehighest_lastlow       : " << info.dist_middlehighest_lastlow << endl;	
	cout << "dist_middlehighest_current       : " << info.dist_middlehighest_current << endl;
	cout << "dist_lastlow_current             : " << info.dist_lastlow_current << endl;
	
	cout << "dist_rightlowest_current         : " << info.dist_rightlowest_current << endl;
	cout << "dist_leftlowest_current          : " << info.dist_leftlowest_current << endl;
	cout << "dist_leftlowest_lastlow          : " << info.dist_leftlowest_lastlow << endl;
	cout << "dist_rightlowest_lastlow         : " << info.dist_rightlowest_lastlow << endl;
	
	cout << "---------------------------------------------------------" << endl;
	
	cout << "rate_middlehighest_leftlowest    : " << info.rate_middlehighest_leftlowest << endl;
	cout << "rate_middlehighest_rightlowest   : " << info.rate_middlehighest_rightlowest << endl;
	cout << "rate_middlehighest_lastlow       : " << info.rate_middlehighest_lastlow << endl;	
	cout << "rate_middlehighest_current       : " << info.rate_middlehighest_current << endl;
	cout << "rate_rightlowest_current         : " << info.rate_rightlowest_current << endl;
	cout << "rate_leftlowest_current          : " << info.rate_leftlowest_current << endl;
	
	cout << "---------------------------------------------------------" << endl;
	
	cout << "rate_middlehighest_leftlowest_close     : " << info.rate_middlehighest_leftlowest_close << endl;
	cout << "rate_middlehighest_rightlowest_close    : " << info.rate_middlehighest_rightlowest_close << endl;
	cout << "rate_middlehighest_lastlow_close        : " << info.rate_middlehighest_lastlow_close << endl;	
	cout << "rate_middlehighest_current_close        : " << info.rate_middlehighest_current_close << endl;
	cout << "rate_rightlowest_current_close          : " << info.rate_rightlowest_current_close << endl;
	cout << "rate_leftlowest_current_close           : " << info.rate_leftlowest_current_close << endl;
	
	cout << "====================================================================" << endl;
}


⌨️ 快捷键说明

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