示例#1
0
def kfactor(source, signal=None):
    '''
        计算source中相邻信号的k因子
        k因子指值差除以距离
        返回的是浮点数
        这里不设置interval参数,是因为如果interval>1,则有kfactor的交叠问题
            如1-->3,2-->4,则1-->2用13的斜率,而2-4用24斜率,直觉无意义
    '''
    if len(source) == 0:
        return np.array([])
    if signal == None:  #对于数值正好为0的情况,需要signal
        signal = source
    else:
        assert len(source) == len(signal)
    rev = np.zeros(len(source), np.float)
    si = np.nonzero(signal)[0]
    if len(si) == 0:
        return rev
    ss = source[si]
    drev = nsubd(ss) * 1.0 / nsubd(si)
    rev[rollx(si)] = drev
    rev = extend2next(rev)
    #rev[si] = rev[si-1] #起点/转折点斜率为0
    rev = np.select([signal != 0], [rollx(rev)], rev)
    return rev
示例#2
0
文件: d1ex.py 项目: pophoo/foxengine
def kfactor(source,signal=None):
    '''
        计算source中相邻信号的k因子
        k因子指值差除以距离
        返回的是浮点数
        这里不设置interval参数,是因为如果interval>1,则有kfactor的交叠问题
            如1-->3,2-->4,则1-->2用13的斜率,而2-4用24斜率,直觉无意义
    '''
    if len(source)==0:
        return np.array([])
    if signal == None:  #对于数值正好为0的情况,需要signal
        signal = source 
    else:
        assert len(source) == len(signal)
    rev = np.zeros(len(source),np.float)
    si = np.nonzero(signal)[0]
    if len(si) == 0:
        return rev
    ss = source[si]
    drev = nsubd(ss) * 1.0 / nsubd(si)
    rev[rollx(si)] = drev
    rev = extend2next(rev)
    #rev[si] = rev[si-1] #起点/转折点斜率为0
    rev = np.select([signal!=0],[rollx(rev)],rev)
    return rev
示例#3
0
文件: d1ex.py 项目: pophoo/foxengine
def ssub(source):
    '''
        相邻信号量相减
        约等于rsub(source,source),当第一个元素不等于0时第一个元素不相同
    '''
    isc = np.nonzero(source)
    ssource = nsubd(source[isc])
    rev = np.zeros_like(source)
    if(len(isc[0])>0):
        rev[isc] = ssource
    return rev
示例#4
0
def ssub(source):
    '''
        相邻信号量相减
        约等于rsub(source,source),当第一个元素不等于0时第一个元素不相同
    '''
    isc = np.nonzero(source)
    ssource = nsubd(source[isc])
    rev = np.zeros_like(source)
    if (len(isc[0]) > 0):
        rev[isc] = ssource
    return rev
示例#5
0
文件: d1ex.py 项目: pophoo/foxengine
def sresume(source,length=5,covered=1):
    ''' 连续>=length个零随后covered个非零日
    '''
    rev = np.zeros_like(source)
    nzeros = np.where(source != 0)[0]
    sdiff = nsubd(nzeros)
    indice = nzeros[sdiff>=length]
    if len(indice) > 0:
        rlen = len(rev)
        for i in range(covered):
            cur_indice = indice + i
            cur_indice[cur_indice>=rlen] = rlen-1   #防止溢出
            rev[cur_indice] = 1
    return rev
示例#6
0
def sresume(source, length=5, covered=1):
    ''' 连续>=length个零随后covered个非零日
    '''
    rev = np.zeros_like(source)
    nzeros = np.where(source != 0)[0]
    sdiff = nsubd(nzeros)
    indice = nzeros[sdiff >= length]
    if len(indice) > 0:
        rlen = len(rev)
        for i in range(covered):
            cur_indice = indice + i
            cur_indice[cur_indice >= rlen] = rlen - 1  #防止溢出
            rev[cur_indice] = 1
    return rev
示例#7
0
文件: d1ex.py 项目: pophoo/foxengine
def fnma(source,length):    #自然ma算法,前length个元素为各自的累积和除以累积元素个数
    """ 计算移动平均线,返回浮点数
        @param source 源数组
        @param length 均线跨度
        @return 移动平均序列
    """
    
    dividen = np.arange(len(source))+1
    dividen[dividen > length] = length

    acc = np.add.accumulate(source)
    rev = nsubd(acc,length)

    rev = rev*1.0/dividen
    return rev
示例#8
0
def fnma(source, length):  #自然ma算法,前length个元素为各自的累积和除以累积元素个数
    """ 计算移动平均线,返回浮点数
        @param source 源数组
        @param length 均线跨度
        @return 移动平均序列
    """

    dividen = np.arange(len(source)) + 1
    dividen[dividen > length] = length

    acc = np.add.accumulate(source)
    rev = nsubd(acc, length)

    rev = rev * 1.0 / dividen
    return rev
示例#9
0
文件: d1ex.py 项目: pophoo/foxengine
def rsub2(source,signal,distance=1):
    ''' 相邻信号日signal的减法(相当于比较) 
        d(n+1) = src(n+1) -  s(n)
        d(0) = src(0)
    '''
    assert len(source) == len(signal)
    isc = np.nonzero(signal)
    ssource = nsubd(source[isc],distance)
    if(len(ssource)>0): #前distance元素应该减去序列的第一个,因为它没东西减
        for i in range(distance):
            ssource[i] -= source[0]
    rev = np.zeros_like(source)
    if(len(isc[0])>0):
        #print isc,len(isc)
        rev[isc] = ssource
    return rev
示例#10
0
文件: d1ex.py 项目: pophoo/foxengine
def rsub(source,signal):
    ''' 相邻信号日signal的减法(相当于比较) 
        d(n+1) = src(n+1) -  s(n)
        d(0) = src(0)
    '''
    assert len(source) == len(signal)
    if len(source) == 0:
        return source.copy()
    isc = np.nonzero(signal)
    ssource = nsubd(source[isc])
    if(len(ssource)>0): #第一个元素应该减去序列的第一个,因为它没东西减
        ssource[0] -= source[0]
    rev = np.zeros_like(source)
    if(len(isc[0])>0):
        rev[isc] = ssource
    return rev
示例#11
0
def rsub2(source, signal, distance=1):
    ''' 相邻信号日signal的减法(相当于比较) 
        d(n+1) = src(n+1) -  s(n)
        d(0) = src(0)
    '''
    assert len(source) == len(signal)
    isc = np.nonzero(signal)
    ssource = nsubd(source[isc], distance)
    if (len(ssource) > 0):  #前distance元素应该减去序列的第一个,因为它没东西减
        for i in range(distance):
            ssource[i] -= source[0]
    rev = np.zeros_like(source)
    if (len(isc[0]) > 0):
        #print isc,len(isc)
        rev[isc] = ssource
    return rev
示例#12
0
def rsub(source, signal):
    ''' 相邻信号日signal的减法(相当于比较) 
        d(n+1) = src(n+1) -  s(n)
        d(0) = src(0)
    '''
    assert len(source) == len(signal)
    if len(source) == 0:
        return source.copy()
    isc = np.nonzero(signal)
    ssource = nsubd(source[isc])
    if (len(ssource) > 0):  #第一个元素应该减去序列的第一个,因为它没东西减
        ssource[0] -= source[0]
    rev = np.zeros_like(source)
    if (len(isc[0]) > 0):
        rev[isc] = ssource
    return rev
示例#13
0
文件: d1ex.py 项目: pophoo/foxengine
def nma(source,length):    #自然ma算法,前length个元素为各自的累积和除以累积元素个数
    """ 计算移动平均线
        @param source 源数组
        @param length 均线跨度
        @return 移动平均序列
    """
    
    dividen = np.arange(len(source)) + 1
    dividen[dividen > length] = length

    pps = dividen/2 #用于整数四舍五入尾数

    acc = np.add.accumulate(source)
    rev = nsubd(acc,length)

    rev += pps  #这种in place方式要快于 sum = (sum + pps) / length
    rev /= dividen
    return rev
示例#14
0
def nma(source, length):  #自然ma算法,前length个元素为各自的累积和除以累积元素个数
    """ 计算移动平均线
        @param source 源数组
        @param length 均线跨度
        @return 移动平均序列
    """

    dividen = np.arange(len(source)) + 1
    dividen[dividen > length] = length

    pps = dividen / 2  #用于整数四舍五入尾数

    acc = np.add.accumulate(source)
    rev = nsubd(acc, length)

    rev += pps  #这种in place方式要快于 sum = (sum + pps) / length
    rev /= dividen
    return rev
示例#15
0
文件: d2.py 项目: pophoo/foxengine
def nsubd2(source,distance=1):   #自然的偏移减法,distance必须大于0,返回结果中前distance个元素不变
    if source.ndim == 1:
        return d1.nsubd(source)
    rs = roll02(source,distance)
    return source - rs
示例#16
0
def nsubd2(source, distance=1):  #自然的偏移减法,distance必须大于0,返回结果中前distance个元素不变
    if source.ndim == 1:
        return d1.nsubd(source)
    rs = roll02(source, distance)
    return source - rs