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

📄 do_stock.h

📁 股票分析源代码
💻 H
字号:
#ifndef __HBSTOCK2_DO_STOCK_H__
#define __HBSTOCK2_DO_STOCK_H__

#include <vector>
#include <map>

#include "hbstock2/stock_selector.h"
#include "hbstock2/stock_selector_manger.h"

namespace hbstock2
{

struct MarketInputInfo
{
	std::string market_code;
	std::string prefix_stock;
};

typedef std::vector<MarketInputInfo> VectMarketInputInfo;
typedef ACE_Refcounted_Auto_Ptr<VectMarketInputInfo,ACE_Null_Mutex> VectMarketInputInfoPtr;

/**
* input_market_format_type = 0 , input 1,2
* input_market_format_type = 1 , input sh=600*,5100*;sz=000*,002*
*/

bool check_selector_parameter(std::vector<MarketInputInfo>& vect_market_input_info,
	int input_market_format_type,const std::string& str_market);
	
bool check_test_parameter(int input_test_format_type,const std::string& str_test);	

bool check_selecror(SetStockSelectorPtr& set_selector_ptr,const std::string& str_selector);

/**
* This functin used to execute selector
*/
void do_select_stock(std::map<int,VectSelectorDataPtr>& map_data,
	const SetStockSelectorPtr& set_selector_ptr,
	const std::vector<MarketInputInfo>& vect_market_input_info,
	const char* p_ch_date=0,
	bool is_include_false_stock = false);

/**
* This functin used to execute selector as one stock_selector_ptr
*/
void do_select_stock_ex(VectSelectorData& vect_selector_data,
	const StockSelectorPtr& stock_selector_ptr,
	const std::vector<MarketInputInfo>& vect_market_input_info,
	const char* p_ch_date=0,
	bool is_include_false_stock = false);
	
void treat_selected_result(const std::map<int,VectSelectorDataPtr>& map_data,
	const char* p_ch_date = NULL);

void write_treat_result(std::ostream& os ,const std::map<int,VectSelectorDataPtr >& map_data,
	const char* p_ch_date,const char* p_ch_prefix=NULL);

/**
* test2 condition
*/
void treat_test2_result(const SetStockSelectorPtr& set_selector_ptr);
void check_test2_data(const VectSelectorData& vect_selector_data);

struct slt_test_format_data
{
	std::string date;
	VectMarketInputInfoPtr vect_market_input_info_ptr;
	bool is_true;
};

void get_slt_test_info_from_file(std::vector<slt_test_format_data>& vect_test_data,
	const std::string& str_file);


// for income testing
/******************************** The Starting of income testing *************************************/
// for one stock 
struct IncomeTopPoint
{
	char date[LEN_DATE+1];
	float days; 
	float rate;
};

typedef std::vector<IncomeTopPoint> VectIncomeTopPoint;
typedef ACE_Refcounted_Auto_Ptr<VectIncomeTopPoint,ACE_Null_Mutex> VectIncomeTopPointPtr;

struct IncomeRangeItem
{	
	short int dist_day; // eg. 5 day ,10 day
	
	IncomeTopPoint high_point;
	IncomeTopPoint low_point;
};

typedef std::vector<IncomeRangeItem> VectIncomeRangeItem;
typedef ACE_Refcounted_Auto_Ptr<VectIncomeRangeItem,ACE_Null_Mutex> VectIncomeRangeItemPtr;

struct StockIncomeInfo
{
	char   code[LEN_CODE+1];
	char   day[LEN_DATE+1];
	//std::string date;
	//std::string code;
	float priority;
	
	short int highest_dist_day;  // eg. 5 day ,10 day	
	IncomeTopPoint highest_point;
	
	short int lowest_dist_day;  // eg. 5 day ,10 day
	IncomeTopPoint lowest_point;
	
	VectIncomeRangeItemPtr vect_income_range_item_ptr;
};

typedef std::vector<StockIncomeInfo> VectStockIncomeInfo;
typedef ACE_Refcounted_Auto_Ptr<VectStockIncomeInfo,ACE_Null_Mutex> VectStockIncomeInfoPtr;

// for static
struct DayRangeAvg
{
	float day_max;
	float day_min;
	float day_avg;	
	float day_dev;  //deviation
	
	float rate_max;
	float rate_min;
	float rate_avg;	
	float rate_dev;	
	
	std::string memo;
};

// for success
struct IncomeSuccessDayRangeItem
{
	short int dist_day; // eg. 5 day ,10 day
	
	int success_num; 
	float success_rate;
	
	DayRangeAvg day_range_avg;
	
	VectIncomeTopPoint vect_income_top_point;
};

typedef std::vector<IncomeSuccessDayRangeItem> VectIncomeSuccessDayRangeItem;
typedef ACE_Refcounted_Auto_Ptr<VectIncomeSuccessDayRangeItem,ACE_Null_Mutex> VectIncomeSuccessDayRangeItemPtr;

struct IncomeSuccessStatic
{		
	int success_num; 
	float success_rate; 
		
	int fail_num;
	float fail_rate;	
	
	VectIncomeSuccessDayRangeItemPtr vect_success_day_range_item_ptr;
	
};

struct PhaseIncomeStatic
{	
	std::string name;
	std::string day_range; //eg. 20050901 ~ 20051010,20051010,20051014
	std::vector<std::string> vect_day;
	
	VectStockIncomeInfoPtr vect_stock_income_info_ptr;
	
	// for success static
	int total; // total stock number	
	IncomeSuccessStatic income_success_static;	
};

typedef ACE_Refcounted_Auto_Ptr<PhaseIncomeStatic,ACE_Null_Mutex> PhaseIncomeStaticPtr;

typedef std::vector<PhaseIncomeStaticPtr> VectPhaseIncomeStatic;
typedef ACE_Refcounted_Auto_Ptr<VectPhaseIncomeStatic,ACE_Null_Mutex> VectPhaseIncomeStaticPtr;

struct BandIncomeStatic
{
	std::string name;
	std::string title;
	
	VectPhaseIncomeStaticPtr vect_phase_static_ptr;	
	
	// for success static
	int total; // total stock number
	IncomeSuccessStatic income_success_static;
	
};

typedef ACE_Refcounted_Auto_Ptr<BandIncomeStatic,ACE_Null_Mutex> BandIncomeStaticPtr;

typedef std::vector<BandIncomeStaticPtr> VectBandIncomeStatic;
typedef ACE_Refcounted_Auto_Ptr<VectBandIncomeStatic,ACE_Null_Mutex> VectBandIncomeStaticPtr;

struct GlobalIncomeStatic
{
	std::string index_name;
	std::vector<short int> vect_income_day_range;
	std::vector<MarketInputInfo> vect_market_input_info;
	std::string market_tip;
	std::string output_file_name;
	std::string dir_name;
	
	float success_level;
	
	// using selector
	StockSelectorPtr stock_selector_ptr;
	
	VectBandIncomeStaticPtr vect_band_income_static_ptr;	
	
	// for success static
	int total; // total stock number
	IncomeSuccessStatic income_success_static;
};

/**
* test3 funct -> income test
*/

struct IncomeSelectorTestInfo
{
	StockSelectorPtr stock_selector_ptr;
	std::string test_file_name;
	std::string dir_name;
};

typedef std::vector<IncomeSelectorTestInfo> VectIncomeSelectorTestInfo;

void treat_income_test(const SetStockSelectorPtr& set_selector_ptr);
void treat_income_test_ex(const SetStockSelectorPtr& set_selector_ptr,const std::string& str_test_file);
void treat_income_selector_test_info(const IncomeSelectorTestInfo& income_selector_test_info);
void treate_all_income_test_static(GlobalIncomeStatic& global_income_static);
void obtain_day_range(const GlobalIncomeStatic& global_income_static,
	PhaseIncomeStaticPtr& phase_income_static_ptr);
void select_stock_in_phase(const GlobalIncomeStatic& global_income_static,
	PhaseIncomeStaticPtr& phase_income_static_ptr);
void obtain_single_static_info(const GlobalIncomeStatic& global_income_static,
	StockIncomeInfo& stock_income_info);
	
void static_success_info(GlobalIncomeStatic& global_income_static);
void static_success_day_range(GlobalIncomeStatic& global_income_static);
void static_success_day_range_single(IncomeSuccessStatic& income_success_static);

float avg(std::vector<float>& vect_f);
float dev(std::vector<float>& vect_f,float f_avg);

void set_up_success_static_value(IncomeSuccessStatic& income_success_static,
	const unsigned int& i_day_index,const StockIncomeInfo& stock_income_info);
void set_down_success_static_value(IncomeSuccessStatic& income_success_static,
	const unsigned int& i_day_index,const StockIncomeInfo& stock_income_info);

bool print_income_test_interface(const std::vector<std::string>& vect_file,
	std::string& str_test_file);

/*
* strFormat : text , html , xml
*
*/
void print_income_test_result(const GlobalIncomeStatic& global_income_static,const std::string strFormat);
void print_income_test_result_html(const GlobalIncomeStatic& global_income_static);
void print_income_test_result_xml(const GlobalIncomeStatic& global_income_static);
void print_income_test_result_text(const GlobalIncomeStatic& global_income_static);


void print_income_test_result_html_stock_list(
	const GlobalIncomeStatic& global_income_static,
	std::ofstream& ofs);
void print_income_test_result_html_success_static(
	const GlobalIncomeStatic& global_income_static,
	std::ofstream& ofs);

void print_income_test_result_html_success_static_sub1(
	const GlobalIncomeStatic& global_income_static,
	std::ofstream& ofs);
void print_income_test_result_html_success_static_sub2(
	const GlobalIncomeStatic& global_income_static,
	std::ofstream& ofs);

void print_html_success_static_all_2(
	const std::string& str_title,	
	const std::string& str_band,
	const std::string& str_phase,const int& total,
	const IncomeSuccessStatic& income_success_static,	
	std::ofstream& ofs);
	
void print_html_success_static_title(std::ofstream& ofs);
void print_html_success_static_content(
	const std::string& str_title,
	const std::string& str_band,
	const std::string& str_phase,
	const int& total,
	const IncomeSuccessStatic& income_success_static,
	std::ofstream& ofs);

void print_html_success_static_day_range_title(std::ofstream& ofs);
void print_html_success_static_day_range(
	const std::string& str_title,
	const std::string& str_band,
	const std::string& str_phase,
	const IncomeSuccessDayRangeItem& income_success_day_range_item,
	std::ofstream& ofs);

bool get_income_test_info_from_file(GlobalIncomeStatic& global_income_static,
	const std::string& str_file);

std::string get_band_suffix_name(const std::string& str_name);
std::string get_phase_suffix_name(const std::string& str_name);

/******************************** The End of Income Testing *************************************/

} // namespace hbstock2
#endif  // #ifndef __HBSTOCK2_DO_STOCK_H__

⌨️ 快捷键说明

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