鼎元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倍。 布林带指标编写思路:
1、确定周期(26,26,2);
2、求26周期简单平均线。
3、求26周期内收盘价与平均线的差的平方,并加总。
4、将加总的方差平方除以26周期。得到方差,然后开方得到标准差。
5、均线+2倍标准差为上沿,均线-2倍标准差为下沿。 因为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]