计算一个序列的移动平均线序列的模板,可实现均线的均线

#pragma once

//write by 陈墨仙 20150718

//功能:计算序列的移动平均线,并返回序列

template<class T>class funcMa

{

public:

funcMa(){lastTick = 0;};

~funcMa(){};

void clear()

{

t.clear();

t.swap(vector<T>(t));

lastTick = 0;

}

vector<T> Caculate(vector<T> p,int N,int direction)

{

int size = p.size() -1;

if (size <= 0)

{

return t;

}

//vector<double> tSum;

if (direction == 1)

{

for (;size > lastTick; size--)

{

T sum = 0;

T ma = 0;

if(N > size)

{

N = size + 1;

}

for (int i = size; i > size - N; i--)

{

sum += p[i];

}

ma = sum/N;

//tSum.push_back(sum);

t.push_back(ma);

}

lastTick = size + 1;

}

else

{

for (int i = lastTick; i<=size; i++)

{

T sum = 0;

T ma =0;

int temp = N;

if(temp > i)

temp = i + 1;

for(int j = i; j > i - temp; j--)

{

sum+=p[j];

}

ma = sum/temp;

t.push_back(ma);

}

lastTick = size + 1;

}

return t;

}

private:

int lastTick;

vector<T> t;

};

源码下载地址:http://download.csdn.net/detail/corivsky/8916855

该代码的优点是。仅仅要不clear,就不会反复计算移动平均序列,当传入序列增大时。他会在原有基础上计算传入序列新增的数值。

用法:
static funcMa<double> ma60;
static funcMa<double> ma2;
static funcMa<double> ma22;

static vector<double> C;//收盘价序列
vector<double> ma60temp = ma60.Caculate(C,N*2,0);//收盘价的均线序列
vector<double> ma2temp = ma2.Caculate(ma60temp,M1*2,0);//均线的均线
vector<double> ma22temp =ma22.Caculate(ma2temp,M2*2,0);//均线的均线的均线
时间: 2024-10-20 13:27:54

计算一个序列的移动平均线序列的模板,可实现均线的均线的相关文章

简单移动平均线、加权移动平均线、指数平滑移动平均

移动平均线的种类 移动平均线可分为"算术移动平均线"."加权移动平均线"."指数平滑移动平均线"三种. 1.算术移动平均线(MA) 算术移动平均线是简单而普遍的移动平均线.平均线是指算术平均数,计算方法为一组数字相加,除以该组数据的组成个数. 以5天移动平均线为便,计算方法如下: MA=(C1+C2+C3+C4+C5)/5 一般公式:MA=(C1+C2+C3+C4+C5+....+Cn)/n C:第一日收盘价 n:移动平均数周期 "移动

5. 移动平均线基础知识

1. 移动平均线基本概念: 移动平均线,代码MA 原理:把连续一段时间的收盘价加起来算出平均得出的一根平滑曲线. 2. 金叉和死叉概念 当短周期的均线上穿长周期的均线,形成一个向上的交叉,称为金叉,通常作为看涨信号. 当短周期的均线下穿长周期的均线,形成一个向下的交易,称为死叉,通常作为看跌信号. 3. 多头排列和空头排列 当短周期均线在长周期均线上方运行,称为均线的多头排列,代表强势行情,趋势看涨. 当短周期均线在长周期均线下方运行,称为均线的空头排列,代表弱势行情,趋势看跌. 4. 均线的基

把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend

1 //把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend 2 //dp[i][j]:把第i个数转成第j小的数,最小花费 3 //此题与poj 3666相似 a[i]转换成a[i]-i 4 5 #include <iostream> 6 #include <cstdio> 7 #include <cstdlib> 8 #include <algorithm> 9 #include <

给定一个序列,判断该序列是否是对应输入序列的出栈序列问题

最近在刷剑指offer的题目,有问题描述如下: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 分析:从这样的角度来考虑,我们首先建立一个空栈,观察出栈序列,找到第一个出栈的元素所在的位置,找到之后,将这个元素以及该元素入栈顺序前的所有元素压栈

numpy移动平均线 布林带 线性模型 趋势线

移动平均线 简单移动平均线 关键函数: np.convolve() 简单移动平均线是数列与等权重的指示函数的卷积 import sys import numpy as np import matplotlib.pyplot as plt N = 5 weights = np.ones(N) / N print("Weights",weights) #生成等权重的指示函数 # [ 0.2 0.2 0.2 0.2 0.2] c = np.loadtxt('my.csv',delimiter

二叉树先序序列和中序序列求解树

这种题一般有二种形式,共同点是都已知中序序列.如果没有中序序列,是无法唯一确定一棵树的. <1>已知二叉树的前序序列和中序序列,求解树. 1.确定树的根节点.树根是当前树中所有元素在前序遍历中最先出现的元素. 2.求解树的子树.找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树.若根节点左边或右边为空,则该方向子树为空:若根节点 边和右边都为空,则根节点已经为叶子节点. 3.递归求解树.将左子树和右子树分别看成一棵二叉树,重复1.2.3步,直到所有的节点完成定

拓扑序列的最小字典序列

查错 考场上又写挂的一道签到题... 我们发现这题要求得到一个最小字典序列 显然找到所有序列然后排序是不可取的, 那么我们不能使用平常的拓扑排序方法,怎么搞使得在每次处理拓扑顺序的时候来维护呢? 用小根堆维护入度为0的点即可,输入的时候统计入度 {$inline on} const maxn=100010; type node=record pos,next:longint; end; var heap,getin,head,ans:array[0..maxn] of longint; edge

在命令行获取标准输入序列的反互序列,pep序列和长度信息

最近对序列文件处理的比较多,时常要看一些核酸序列的反向互补序列,长度,可能的翻译序列.以前我常常使用seqBuider 来查看,如果能在命令行直接查看,想必是极好的. 这是一个perl脚本,不过我把它的执行路径写入环境变量后,就可以当linux命令直接使用了,很方便的. 这个脚本有四个参数.[-i -r -p -l ] 其中 -i 是必要的参数,用来接收标准输入: -r 是获得一段序列的反向互补序列(50个字符一行的格式输出): -p 是提供一段序列的ORF框架序列,即三种可能的pep翻译(50

判断出栈序列是否可能是某个入栈序列的出栈序列,C++

主要思想栈必须满足先进后出的规则,例如: 压入序列1,2,3,4,5 出栈序列4,3,5,1,2 设定一个Max值代表目前已经出栈的压入序列索引号最大的值 如当4出栈的时候,目前Max是4,当3出栈的时候,就查看3,4是否出栈,如果出栈就正确 当1出栈的时候,目前Max是5,就查看1~5时候出栈,这时候2还没有出栈就认为这个出栈序列不符合先进后出 #include<iostream>#include<map>#include<vector>#include<mem