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 + -
显示快捷键?