コード例 #1
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def semv(shigh,
         slow,
         sweight,
         length=13):  #标准化后的emv算法,length为均线长度,sweight即为成交量(权重)
    '''
    标准化后的波动难易度
        mid = (max + min)/2
        mid_rate = (mid(n) - mid(n-1)) / mid(n) * BASE
        svolume_rate = svolume(n)/MA(svolume,length) * BASE
        wave_rate = (max-min)/ma(max-min,length) * BASE
        box_rate = svolume_rate / wave_rate
        semv = mid_rate / box_rate    
    '''
    assert len(shigh) == len(sweight) == len(sweight)
    if (len(shigh) < length):
        return np.zeros_like(shigh)
    wma = np.roll(ma(sweight, length), 1)
    dma = np.roll(ma(shigh - slow, length), 1)
    mid = (shigh + slow) / 2
    mid_diff = subd(mid, 1)
    mid_rate = np.cast['int64'](mid_diff) * BASE * BASE / mid
    swb = np.cast['int64'](sweight) * BASE
    swr = np.where(wma, swb / wma, swb * 10)
    ssb = (shigh - slow) * BASE
    wr = np.where(dma, ssb / dma, ssb * 10)  #dma必然大于等于0,等于0时相当于乘10
    rev = np.where(swr > 0, mid_rate * wr / swr, mid_rate * wr * 10)
    rev[:length] = 0
    return np.cast['int32'](rev)
コード例 #2
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def semv_old(shigh,
             slow,
             sweight,
             length=13):  #标准化后的emv算法,length为均线长度,sweight即为成交量(权重),迭代算法
    '''
    标准化后的波动难易度
        mid = (max + min)/2
        mid_rate = (mid(n) - mid(n-1)) / mid(n) * BASE
        svolume_rate = svolume(n)/MA(svolume,length) * BASE
        wave_rate = (max-min)/ma(max-min,length) * BASE
        box_rate = svolume_rate / wave_rate
        semv = mid_rate / box_rate    
    未检查是否溢出
    '''
    assert len(shigh) == len(sweight) == len(sweight)
    rev = np.zeros_like(shigh)
    if (len(shigh) < length):
        return rev
    wma = ma(sweight, length)
    dma = ma(shigh - slow, length)
    premid = (shigh[length - 1] + slow[length - 1]) / 2
    for i in xrange(length, len(shigh)):  #除0都当作除0.1,即*10
        csh, csl, csw = shigh[i], slow[i], sweight[i]
        pwm, pdm = wma[i - 1], dma[i - 1]
        mid = (csh + csl) / 2
        mid_rate = (mid - premid) * BASE * BASE / mid
        sweight_rate = pwm > 0 and csw * BASE / pwm or csw * BASE * 10  #除数为0当作0.1
        wave_rate = pdm > 0 and (csh - csl) * BASE / pdm or (csh -
                                                             csl) * BASE * 10
        rev[i] = sweight_rate > 0 and mid_rate * wave_rate / sweight_rate or mid_rate * wave_rate * 10  #除数为0当作0.1
        #print premid,mid,mid_rate,sweight_rate,wave_rate
        premid = mid
    return rev
コード例 #3
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def semv_old(shigh,slow,sweight,length=13):#标准化后的emv算法,length为均线长度,sweight即为成交量(权重),迭代算法
    '''
    标准化后的波动难易度
        mid = (max + min)/2
        mid_rate = (mid(n) - mid(n-1)) / mid(n) * BASE
        svolume_rate = svolume(n)/MA(svolume,length) * BASE
        wave_rate = (max-min)/ma(max-min,length) * BASE
        box_rate = svolume_rate / wave_rate
        semv = mid_rate / box_rate    
    未检查是否溢出
    '''
    assert len(shigh) == len(sweight) == len(sweight)
    rev = np.zeros_like(shigh)
    if(len(shigh)<length):
        return rev
    wma = ma(sweight,length)
    dma = ma(shigh - slow,length)
    premid = (shigh[length-1] + slow[length-1]) /2
    for i in xrange(length,len(shigh)):   #除0都当作除0.1,即*10
        csh,csl,csw = shigh[i],slow[i],sweight[i]
        pwm,pdm = wma[i-1],dma[i-1]
        mid = (csh + csl) /2
        mid_rate = (mid-premid) * BASE * BASE / mid
        sweight_rate = pwm > 0 and csw * BASE/pwm or csw * BASE * 10 #除数为0当作0.1
        wave_rate = pdm > 0 and (csh-csl)*BASE/pdm or (csh-csl)*BASE * 10
        rev[i] = sweight_rate > 0 and mid_rate*wave_rate/sweight_rate or mid_rate*wave_rate * 10  #除数为0当作0.1
        #print premid,mid,mid_rate,sweight_rate,wave_rate
        premid = mid
    return rev        
コード例 #4
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def semv(shigh,slow,sweight,length=13):#标准化后的emv算法,length为均线长度,sweight即为成交量(权重)
    '''
    标准化后的波动难易度
        mid = (max + min)/2
        mid_rate = (mid(n) - mid(n-1)) / mid(n) * BASE
        svolume_rate = svolume(n)/MA(svolume,length) * BASE
        wave_rate = (max-min)/ma(max-min,length) * BASE
        box_rate = svolume_rate / wave_rate
        semv = mid_rate / box_rate    
    '''
    assert len(shigh) == len(sweight) == len(sweight)
    if(len(shigh)<length):
        return np.zeros_like(shigh)
    wma = np.roll(ma(sweight,length),1)
    dma = np.roll(ma(shigh - slow,length),1)
    mid = (shigh + slow)/2
    mid_diff = subd(mid,1)
    mid_rate = np.cast['int64'](mid_diff) * BASE * BASE / mid
    swb = np.cast['int64'](sweight) * BASE
    swr = np.where(wma,swb/wma,swb*10)
    ssb = (shigh-slow)*BASE
    wr = np.where(dma,ssb/dma,ssb*10)   #dma必然大于等于0,等于0时相当于乘10
    rev = np.where(swr>0,mid_rate * wr/swr,mid_rate*wr*10)
    rev[:length] = 0
    return np.cast['int32'](rev)        
コード例 #5
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def smacd(source,ifast=12,islow=26,idiff=9):
    ''' 简单MACD,用MA替代CEXPMA
    '''
    fast = ma(source,ifast)
    slow = ma(source,islow)
    diff = fast - slow
    dea = ma(diff,idiff)
    return diff,dea
コード例 #6
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def smacd(source, ifast=12, islow=26, idiff=9):
    ''' 简单MACD,用MA替代CEXPMA
    '''
    fast = ma(source, ifast)
    slow = ma(source, islow)
    diff = fast - slow
    dea = ma(diff, idiff)
    return diff, dea
コード例 #7
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def temv(shigh, slow, sweight, length=14, BASE=100):  #国内常用的emv方式
    ''' BASE设定为100是考虑到mid的精度问题,同时又不至于溢出
        VOLUME:=MA(VOL,N)/VOL;
        MID:=100*(HIGH+LOW-REF(HIGH+LOW,1))/(HIGH+LOW);
        EMV:MA(MID*VOLUME*(HIGH-LOW)/MA(HIGH-LOW,N),N);
        MAEMV:MA(EMV,M);
    '''

    mvol = ma(sweight, length) * BASE / sweight
    ahl = shigh + slow
    jhl = shigh - slow
    mid = (ahl - rollx(ahl)) * BASE * BASE / ahl
    rev = ma(mid * mvol * jhl / ma(jhl, length), length)
    return rev
コード例 #8
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def temv(shigh,slow,sweight,length=14,BASE=100):#国内常用的emv方式
    ''' BASE设定为100是考虑到mid的精度问题,同时又不至于溢出
        VOLUME:=MA(VOL,N)/VOL;
        MID:=100*(HIGH+LOW-REF(HIGH+LOW,1))/(HIGH+LOW);
        EMV:MA(MID*VOLUME*(HIGH-LOW)/MA(HIGH-LOW,N),N);
        MAEMV:MA(EMV,M);
    '''

    mvol = ma(sweight,length) * BASE / sweight
    ahl = shigh + slow
    jhl = shigh - slow
    mid = (ahl-rollx(ahl))*BASE*BASE/ahl
    rev = ma(mid*mvol*jhl/ma(jhl,length),length)
    return rev
コード例 #9
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def skdj(shigh,slow,sclose,n=9,m=3):
    lowv = tmin(slow,n)
    highv = tmax(shigh,n)
    rsv = cexpma((sclose-lowv)*100/(highv-lowv),m)
    k = cexpma(rsv,m)
    d = ma(k,m)
    return k,d
コード例 #10
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def skdj(shigh, slow, sclose, n=9, m=3):
    lowv = tmin(slow, n)
    highv = tmax(shigh, n)
    rsv = cexpma((sclose - lowv) * 100 / (highv - lowv), m)
    k = cexpma(rsv, m)
    d = ma(k, m)
    return k, d
コード例 #11
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def cci(shigh,slow,sclose,length):
    '''
        cci路径指标
    '''
    typ = (shigh+slow+sclose)/3
    rev = (typ-ma(typ,length))/(0.015*avedev(typ,length))
    rev[:length-1] = 0
    return np.cast['int32'](rev*BASE)
コード例 #12
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def cci(shigh, slow, sclose, length):
    '''
        cci路径指标
    '''
    typ = (shigh + slow + sclose) / 3
    rev = (typ - ma(typ, length)) / (0.015 * avedev(typ, length))
    rev[:length - 1] = 0
    return np.cast['int32'](rev * BASE)
コード例 #13
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def adx2(sclose,shigh,slow,n=14,m=6):
    ''' 
        调整的算法, abs在ma之后取值
        直接根据sclose,shigh,slow计算adx的快捷函数
        n: 计算di时的平滑天数
        m: 计算adx时的平滑天数
    '''
    pdm,ndm = dm(shigh,slow)
    xtr = msum(tr(sclose,shigh,slow),n)
    pdi = msum(pdm,n)*10000/xtr
    ndi = msum(ndm,n)*10000/xtr
    adx = np.abs(ma((pdi-ndi)*10000/(pdi+ndi),m))
    #adxr = (adx + rollx(adx,m)) /2 
    return pdi,ndi,adx#,adxr
コード例 #14
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def adx2(sclose, shigh, slow, n=14, m=6):
    ''' 
        调整的算法, abs在ma之后取值
        直接根据sclose,shigh,slow计算adx的快捷函数
        n: 计算di时的平滑天数
        m: 计算adx时的平滑天数
    '''
    pdm, ndm = dm(shigh, slow)
    xtr = msum(tr(sclose, shigh, slow), n)
    pdi = msum(pdm, n) * 10000 / xtr
    ndi = msum(ndm, n) * 10000 / xtr
    adx = np.abs(ma((pdi - ndi) * 10000 / (pdi + ndi), m))
    #adxr = (adx + rollx(adx,m)) /2
    return pdi, ndi, adx  #,adxr
コード例 #15
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def adx0(sclose,shigh,slow,n=14,m=6):
    ''' 
        原始的adx计算方法
        直接根据sclose,shigh,slow计算adx的快捷函数
        n: 计算di时的平滑天数
        m: 计算adx时的平滑天数
    '''
    pdm,ndm = dm(shigh,slow)
    xtr = msum(tr(sclose,shigh,slow),n)
    pdi = msum(pdm,n)*10000/xtr
    ndi = msum(ndm,n)*10000/xtr
    adx = ma(np.abs((pdi-ndi)*10000/(pdi+ndi)),m)
    #adxr = (adx + rollx(adx,m)) /2 
    return pdi,ndi,adx#,adxr
コード例 #16
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def adx0(sclose, shigh, slow, n=14, m=6):
    ''' 
        原始的adx计算方法
        直接根据sclose,shigh,slow计算adx的快捷函数
        n: 计算di时的平滑天数
        m: 计算adx时的平滑天数
    '''
    pdm, ndm = dm(shigh, slow)
    xtr = msum(tr(sclose, shigh, slow), n)
    pdi = msum(pdm, n) * 10000 / xtr
    ndi = msum(ndm, n) * 10000 / xtr
    adx = ma(np.abs((pdi - ndi) * 10000 / (pdi + ndi)), m)
    #adxr = (adx + rollx(adx,m)) /2
    return pdi, ndi, adx  #,adxr
コード例 #17
0
ファイル: d2.py プロジェクト: pophoo/foxengine
def ma2(v2,length): #利用一维数组的ma算法
    row_number = v2.shape[0]
    rev = np.zeros_like(v2)
    for i in xrange(row_number):
        rev[i] = ma(v2[i],length)
    return rev
コード例 #18
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def svap2_ma(svolume,sprice,malength,weight=5):  
    ''' 依赖svolume为整数序列,否则导致ma之后0值有非零的base,直接导致后续所有计算出错
        weight为权数,unit单位ma再除以weight. unit的粒度越细,一致性越好
    '''
    return svap2(svolume,sprice,rollx(ma(svolume,malength)/weight))
コード例 #19
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def adtr2(sopen, sclose, shigh, slow, length=20):
    return ma(dtr(sopen, sclose, shigh, slow), length)
コード例 #20
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def atr2(sclose, shigh, slow, length=20):
    return ma(tr(sclose, shigh, slow), length)
コード例 #21
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def cho(shigh, slow, sclose, svol, n1=10, n2=20, m=6):
    mid = np.cumsum(svol * (2 * sclose - shigh - slow) / (shigh + slow), 0)
    cho = ma(mid, n1) - ma(mid, n2)
    macho = ma(cho, m)
    return cho, macho
コード例 #22
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def cho(shigh,slow,sclose,svol,n1=10,n2=20,m=6):
    mid = np.cumsum(svol*(2*sclose-shigh-slow)/(shigh+slow),0);
    cho = ma(mid,n1) - ma(mid,n2)
    macho = ma(cho,m)
    return cho,macho
コード例 #23
0
ファイル: d1indicator.py プロジェクト: hbwzhsh/foxengine
def svap2_ma(svolume, sprice, malength, weight=5):
    ''' 依赖svolume为整数序列,否则导致ma之后0值有非零的base,直接导致后续所有计算出错
        weight为权数,unit单位ma再除以weight. unit的粒度越细,一致性越好
    '''
    return svap2(svolume, sprice, rollx(ma(svolume, malength) / weight))
コード例 #24
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def atr2(sclose,shigh,slow,length=20):
    return ma(tr(sclose,shigh,slow),length)
コード例 #25
0
ファイル: d1indicator.py プロジェクト: pophoo/foxengine
def adtr2(sopen,sclose,shigh,slow,length=20):
    return ma(dtr(sopen,sclose,shigh,slow),length)
コード例 #26
0
ファイル: d2.py プロジェクト: pophoo/foxengine
def ma2a(v2,length):    #v2是array的list
    row_number = len(v2)
    rev = [0] * row_number
    for i in xrange(row_number):
        rev[i] = ma(v2[i],length)
    return rev
コード例 #27
0
def ma2a(v2, length):  #v2是array的list
    row_number = len(v2)
    rev = [0] * row_number
    for i in xrange(row_number):
        rev[i] = ma(v2[i], length)
    return rev
コード例 #28
0
def ma2(v2, length):  #利用一维数组的ma算法
    row_number = v2.shape[0]
    rev = np.zeros_like(v2)
    for i in xrange(row_number):
        rev[i] = ma(v2[i], length)
    return rev