龙听期货论坛's Archiver

龙听 发表于 2024-11-13 09:58

鼎元C++期货量化/程序化教程【布林带(bollingerbands,BOLL)计算方法及调用方法】

一、先在C++头文件声明公式变量:[code]double bollingerbands(string period, string inst, int num,int ref);//BOLL计算公式;[/code]二、在test.cpp源文件中增加BOLL公式模块:[code]//布林带(bollingerbands)开始
double test::bollingerbands(string period, string inst, int num, int ref)
{
        double avg1 = avg(sPeriod, sInst,num);//中间均线
        int n = 0;
        double sumdev = 0;
        double madev = 0;
        if (mapK[period][inst].size() < num) return 0;
        map<string, TKVALUE>::reverse_iterator it;
        for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
        {
                sumdev += pow(it->second.dClose - avg1,2); //diff平方加总
                n++;
                if (n >= num)break;
        }
          madev = sqrt(sumdev / num); //得到方差后再取标准差
         
          return avg1 + ref*madev;
}

//布林带(bollingerbands)结束[/code]三、如何调用:[code]
RsqBar(sPeriod, sInst);
indvalue = bollingerbands(sPeriod, sInst, length,2); //指标BOLL的上沿;
indvalue1 = bollingerbands(sPeriod, sInst, length,-2); //指标BOLL的下沿;
[/code]其中: indvalue是在头文件中需要声明的变量,length是BOLL的周期参数,类型是double类型,BOLL的经典参数为(26,26,2)。即中间带是26周期均线,标准差周期为26,标准差为2倍。

龙听 发表于 2024-11-13 10:05

布林带指标编写思路:

1、确定周期(26,26,2);
2、求26周期简单平均线。
3、求26周期内收盘价与平均线的差的平方,并加总。
4、将加总的方差平方除以26周期。得到方差,然后开方得到标准差。
5、均线+2倍标准差为上沿,均线-2倍标准差为下沿。

龙听 发表于 2024-11-13 10:08

因为K线bar是按时间先后顺序排列的,时间越早的越靠前,所以我们求boll线时需要从最新的数据bar开始,所以要将mapk的序列倒转一下。

需要[code]
map<string, TKVALUE>::reverse_iterator it;
for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
[/code]先倒序一下数据,然后遍历。这是本策略编写的关键之处。

页: [1]