龙听期货论坛's Archiver

龙听 发表于 2024-12-17 20:43

鼎元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]

龙听 发表于 2024-12-17 20:47

数组形式的ema均线使用场景很多,而且多为中阐传递数据变量存在,在下一节我们将演示设计macd指标,此即为ema数组形式使用范例。

页: [1]