龙听期货论坛's Archiver

龙听 发表于 2024-12-19 10:36

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

龙听 发表于 2024-12-19 19:55

大家注意一下,这里[N]这个设置是不包括N这个bar的,比方说closeN[1] 是从右边开始数跳过的bar数即跳过1个bar的第二个bar的收盘价。 同理highest[N] 意思是跳过N个bar后从N+1个bar开始向左查询num个周期的最高价。

这里注意混淆,大家注意一下。

页: [1]