📄 stock_technic.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 + -