鼎元C++量化程式码指标与函数模块系列之【指数移动平均(Exponential Moving Average,ema)数组计算方法及调用方法】
使用场景:1、ema只是一个中间变量,所以需要用数组的形式计算。
第一部分:头文件声明变量:[code]
vector<double>ema(vector<double>pc, int num);//ema计算返回数组vector形式指数移动平均
[/code]第二部分:源文件公式区域计算核心公式[code]
////ema计算返回数组vector形式指数移动平均
vector<double>test::ema(vector<double>pc, int num)
{
vector<double>ema;
double emavector = 0;
int i = 0;
for (int it = 0; it < pc.size(); it++)
{
if (i < num)
{
emavector = (emavector + pc[it]) / (i+1);
i++;
ema.push_back(emavector);
}
else
{
emavector = (2 * pc[it] + (num-1) * emavector) / (num+1);//ema均线计算公式
ema.push_back(emavector);
}
}
return ema;
}
[/code]第三部分:声明中间变量名称:[code]
vector<double>pc;//priceclose,pc简称
vector<double>emashort, emalong;
[/code]第四部分:源文件数据处理与调用[code]
RsqBar(sPeriod, sInst);
map<string, TKVALUE>::iterator it;
for (it = mapK[sPeriod][sInst].begin(); it != mapK[sPeriod][sInst].end(); it++)
{
pc.push_back(it->second.dClose); //将收盘价放入pc容器vector
}
emashort = ema(pc,12); //调用获得数组形式的新变量容器
emalong = ema(pc,26); //调用获得数组形式的新变量容器
InsertLog("ema1均线值为: " + to_string(emashort[emashort.size() - 1])); //将新变量最新值输出到日志
InsertLog("dea均线值为: " + to_string(emalong[emalong.size() - 1]));
[/code] 数组形式的ema均线使用场景很多,而且多为中阐传递数据变量存在,在下一节我们将演示设计macd指标,此即为ema数组形式使用范例。
页:
[1]