鼎元C++量化程式码指标与函数模块系列之【highest[N]、lowest[N]及close[N]的计算方法及调用方法】
第一部分、变量声明:[code]double highestN(string period, string inst, int num, int ref);//计算前REF bar NUM周期最高价格
double lowestN(string period, string inst, int num, int ref); //计算前ref bar NUM周期最低价格
double closeN(string period, string inst, int ref);//计算ref前个bar的收盘价格
[/code]第二部分、公式核心计算公式模块:[code]
//最高价highest[N]计算公式开始
double test::highestN(string period, string inst, int num, int ref)
{
double d = 0;
int n = 0;
int r = 0;
map<string, TKVALUE>::reverse_iterator it;
for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
{
r++;
if (r <= ref)continue;
if (d < it->second.dHigh)d = it->second.dHigh;
n++;
if (n >= num)break;
}
return d;
}
//最低价lowest[N]计算公式开始
double test::lowestN(string period, string inst, int num, int ref)
{
double d = 0;
int n = 0;
int r = 0;
map<string, TKVALUE>::reverse_iterator it;
for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); ++it)
{
r++;
if (r <= ref)continue;
if (d == 0)d = it->second.dLow;
if (d > it->second.dLow)d = it->second.dLow;
n++;
if (n >= num)break;
}
return d;
}
//返回ref个bar前的收盘价
double test::closeN(string period, string inst, int ref)
{
double d = 0;
int r = 0;
int n = 0;
map<string, TKVALUE>::reverse_iterator it;
for (it = mapK[period][inst].rbegin(); it != mapK[period][inst].rend(); it++)
{
r++;
if (r <= ref)continue; //跳过ref个bar
d = it->second.dClose; //将ref个bar前一个bar的收盘价赋值给d ;
break;
}
return d;
[/code]第三部分、如何调用[code]
RsqBar(sPeriod, sInst);
highestN(sPeriod, sInst, 20, 5);
[/code]barK线先从最新跳过5个bar,然后计算20个周期最高值,类似multicharts中的highest(high,20)[5]。 大家注意一下,这里[N]这个设置是不包括N这个bar的,比方说closeN[1] 是从右边开始数跳过的bar数即跳过1个bar的第二个bar的收盘价。 同理highest[N] 意思是跳过N个bar后从N+1个bar开始向左查询num个周期的最高价。
这里注意混淆,大家注意一下。
页:
[1]