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

📄 stock_technic.cpp

📁 股票分析源代码
💻 CPP
字号:
//#include <iostream>

#include "hbstock2/stock_technic.h"

using namespace std;
using namespace hbstock2;

void hbstock2::ma(std::vector<float>& arr_out, const std::vector<float>& arr_in, unsigned int ma_len)
{
	if (arr_in.size() < ma_len)
	{
		return;	
	}
	
	arr_out.clear();
	
	unsigned int i_size = 0;	
	float t_sum = 0;	
	float t_ret ;
	
	int i_start = 0;
	i_size = arr_in.size();
	
	for (unsigned int i=i_size-1;i>=0;i--)
	{
		i_start = i-ma_len+1;
		if (i_start < 0)
		{
			break;
		}
		
		if (i==i_size-1)
		{
			for (unsigned int j=0;j<ma_len;j++)
			{
				t_sum = t_sum + arr_in[i_start + j];
			} 			
			
		} else
		{
			//cout << "i_start: " << i_start << " i : " << i << endl;
			t_sum = t_sum + arr_in[i_start] - arr_in[i_start+ma_len];
		}
		
		t_ret = t_sum /ma_len;
		
		arr_out.insert(arr_out.begin(),t_ret);
		
	} // for (unsigned int i=i_size-1;i>=0;i--)
}

void hbstock2::ema(std::vector<float>& arr_out, const std::vector<float>& arr_in, unsigned int ema_len)
{	
	float t_data;
	
	if (arr_in.size() < 2)
	{
		return;	
	}
	
	arr_out.push_back(arr_in[0]);
	
	for (unsigned int i=1;i<arr_in.size();i++)
	{
		t_data = (2 * arr_in[i]+  (ema_len-1)*arr_out[i-1])/(ema_len+1);
		arr_out.push_back(t_data);		
	}
}

macd::macd()
{
	m_i_EMA1_len = 12;
	m_i_EMA2_len = 26;
	m_i_DIF_len =  9;
}

macd::~macd()
{
	
}

void macd::set_param(unsigned int EMA1_len,unsigned int EMA2_len,unsigned int DIF_len)
{
	m_i_EMA1_len = EMA1_len;
	m_i_EMA2_len = EMA2_len;
	m_i_DIF_len =  DIF_len;
}

void macd::result(std::vector<hbstock2::macd_data >& arr_macd,const std::vector<float>& arr_in)
{
	unsigned int i_in_len =0;
	
	i_in_len = arr_in.size();
	
	if (arr_in.size() < 2)
	{
		return;	
	}
	
	std::vector<float> arr_EMA1;
	std::vector<float> arr_EMA2;
	std::vector<float> arr_DIF;
	std::vector<float> arr_DEA;
	std::vector<float> arr_MACD;
	
	ema(arr_EMA1,arr_in,m_i_EMA1_len);
	ema(arr_EMA2,arr_in,m_i_EMA2_len);
	
	//cout << "arr_EMA2 size : " << arr_EMA2.size() << endl;
	
	unsigned int i_eam_size = arr_EMA1.size();
		
	float t_data = 0;
		
	for (unsigned int i=0;i<i_eam_size;i++)
	{
		
		t_data = arr_EMA1[i] - arr_EMA2[i];
		arr_DIF.push_back(t_data);			
	}
	
	ema(arr_DEA,arr_DIF,m_i_DIF_len);
	macd_data md;
	
	for (unsigned int i=0;i<arr_DEA.size();i++)
	{		
		md.dif = arr_DIF[i];
		md.dea = arr_DEA[i];
		md.macd = (md.dif - md.dea) * 2;
		
		arr_macd.push_back(md);		
	}	
}

⌨️ 快捷键说明

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