Exemple #1
0
def decline_periods(source,covered=22):
    ''' 求以covered为顶/底点辐射半径所得到的高低点确定的衰落期
        covered默认为辐射半径为月
        返回衰落期数组
    '''
    peaks = xpeak_points(source,covered)
    periods = roll0(distance(peaks),1)    #distance计数信号日为0,因此右移一日。右移后距离是信号日起的距离-1
    min_peaks = (peaks == -1) 
    max_periods = periods[min_peaks] + 1 #
    return max_periods
Exemple #2
0
def decline_periods(source, covered=22):
    ''' 求以covered为顶/底点辐射半径所得到的高低点确定的衰落期
        covered默认为辐射半径为月
        返回衰落期数组
    '''
    peaks = xpeak_points(source, covered)
    periods = roll0(distance(peaks),
                    1)  #distance计数信号日为0,因此右移一日。右移后距离是信号日起的距离-1
    min_peaks = (peaks == -1)
    max_periods = periods[min_peaks] + 1  #
    return max_periods
Exemple #3
0
def asi(sopen, sclose, shigh, slow):
    '''
        1.A=∣当天最高价-前一天收盘价∣
        B=∣当天最低价-前一天收盘价∣
        C=∣当天最高价-前一天最低价∣
        D=∣前一天收盘价-前一天开盘价∣
        2.比较A、B、C三数值:若A最大,R=A+1/2B+1/4D;若B最大,R=B+1/2A十1/4D;若C最大,R=C+1/4D
        3.  E=当天收盘价-前一天收盘价
            F=当天收盘价-当天开盘价
            G=前一天收盘价-前一天开盘价
        4.X=E+1/2F+G
        5.K=A、B之间的最大值
        6.L=3;SI=50*X/R*K/L;ASI=累计每日之SI值
    1.ASI指标大部分时机都是和股价走势同步的,投资者仅能从众多股票中寻找少数产生领先突破的个股。若ASI指标领先股价,提早突破前次ASI高点或低点,则次一日之后的股价必然能突破前次高点或低点。
    2.股价由上往下,欲穿越前一波低点的密集支撑区时,于接近低点处,尚未确定股价是否会跌破支撑之际,如果ASI领先股价,提早一步,跌破相对股价的前一波ASI低点,则次一日之后,股价将随后跌破低点支撑区。投资人可以早一步卖出股票,减少不必要的损失。
    3.股价由下往上,欲穿越前一波的高点套牢区时,于接近高点处,尚未确定股价能否顺利穿越之际,如果ASI领先股价,提早一步,通过相对股价的前一波ASI低点,则次一日之后,股价必然能够顺利突破高点套牢区。股民可以把握ASI的领先作用,提前买入股票。
    4.股价走势一波比一波高,而ASI却未相对创新高点形成“顶背离”时,应卖出;股价走势一波比一波低,而ASI却未相对创新低点形成“底背离”时,应买进。
    5.ASI指标和OBV指标同样维持“N”字型的波动,并且也以突破或跌破“N”字型高低点,为观察ASI指标的主要方法。向上爬升的ASI,一旦向下跌破其前一次显著的N型转折点,一律可视为停损卖出的讯号;向下滑落的ASI,一旦向上突破其前一次的N型转折点,一律可视为果断买进的讯号。
    #这些使用很难度量,所以其实asi只能在肉眼使用    
    '''
    a = np.abs(shigh - roll0(sclose))
    b = np.abs(slow - roll0(sclose))
    c = np.abs(shigh - roll0(slow))
    e = subd(sclose)
    f = sclose - sopen
    g = roll0(f)
    d = np.abs(g)
    l = 3

    x = e + f / 2 + g
    k = np.choose(a > b, [b, a])  #True=1,False=0,因此a>b时True=1

    m = np.select([(a > b) & (b > c), (b > c) & (b > a), (c > a) & (c > b)],
                  [a, b, c])
    r = np.select([m == a, m == b, m == c],
                  [a + b / 2 + d / 4, b + a / 2 + d / 4, c + d / 4])
    si = 50 * x / r * k / l
    return si.cumsum()
Exemple #4
0
def zoom_in(zoomed,src_length,times=5):
    ''' zoom_out的逆. 通用于p/v类型
        src_length为放回后的长度
        必须保证 src_length >= len(zoomed)*times
        并且所有指标后移times位
        因为当期指标只有在本期末才能计算得到,所以其覆盖为下期
    '''
    assert src_length >= len(zoomed)*times
    rev = zoomed.repeat(times)
    outed = src_length - len(zoomed)*times
    #print rev,np.zeros(outed,int)    
    if outed > 0:
        rev = np.concatenate((rev,np.zeros(outed,int)))
    return roll0(rev,times)
Exemple #5
0
def roll02(source,shift):   #每行数据右移,移动部分补0. 二维版本(兼容一维)
    if source.ndim == 1:
        return d1.roll0(source,shift)
    assert source.ndim == 2
    if len(source[0]) == 0:
        return source.copy()
    rev = np.roll(source,shift,axis=1)
    if shift >= 0:
        rev[:,:shift] = 0
    else:
        rlen = source.shape[1]
        begin = rlen + shift if rlen + shift >=0 else 0
        rev[:,begin:] = 0
    return rev
Exemple #6
0
def zoom_in(zoomed, src_length, times=5):
    ''' zoom_out的逆. 通用于p/v类型
        src_length为放回后的长度
        必须保证 src_length >= len(zoomed)*times
        并且所有指标后移times位
        因为当期指标只有在本期末才能计算得到,所以其覆盖为下期
    '''
    assert src_length >= len(zoomed) * times
    rev = zoomed.repeat(times)
    outed = src_length - len(zoomed) * times
    #print rev,np.zeros(outed,int)
    if outed > 0:
        rev = np.concatenate((rev, np.zeros(outed, int)))
    return roll0(rev, times)
Exemple #7
0
def roll02(source, shift):  #每行数据右移,移动部分补0. 二维版本(兼容一维)
    if source.ndim == 1:
        return d1.roll0(source, shift)
    assert source.ndim == 2
    if len(source[0]) == 0:
        return source.copy()
    rev = np.roll(source, shift, axis=1)
    if shift >= 0:
        rev[:, :shift] = 0
    else:
        rlen = source.shape[1]
        begin = rlen + shift if rlen + shift >= 0 else 0
        rev[:, begin:] = 0
    return rev
Exemple #8
0
def asi(sopen,sclose,shigh,slow):
    '''
        1.A=∣当天最高价-前一天收盘价∣
        B=∣当天最低价-前一天收盘价∣
        C=∣当天最高价-前一天最低价∣
        D=∣前一天收盘价-前一天开盘价∣
        2.比较A、B、C三数值:若A最大,R=A+1/2B+1/4D;若B最大,R=B+1/2A十1/4D;若C最大,R=C+1/4D
        3.  E=当天收盘价-前一天收盘价
            F=当天收盘价-当天开盘价
            G=前一天收盘价-前一天开盘价
        4.X=E+1/2F+G
        5.K=A、B之间的最大值
        6.L=3;SI=50*X/R*K/L;ASI=累计每日之SI值
    1.ASI指标大部分时机都是和股价走势同步的,投资者仅能从众多股票中寻找少数产生领先突破的个股。若ASI指标领先股价,提早突破前次ASI高点或低点,则次一日之后的股价必然能突破前次高点或低点。
    2.股价由上往下,欲穿越前一波低点的密集支撑区时,于接近低点处,尚未确定股价是否会跌破支撑之际,如果ASI领先股价,提早一步,跌破相对股价的前一波ASI低点,则次一日之后,股价将随后跌破低点支撑区。投资人可以早一步卖出股票,减少不必要的损失。
    3.股价由下往上,欲穿越前一波的高点套牢区时,于接近高点处,尚未确定股价能否顺利穿越之际,如果ASI领先股价,提早一步,通过相对股价的前一波ASI低点,则次一日之后,股价必然能够顺利突破高点套牢区。股民可以把握ASI的领先作用,提前买入股票。
    4.股价走势一波比一波高,而ASI却未相对创新高点形成“顶背离”时,应卖出;股价走势一波比一波低,而ASI却未相对创新低点形成“底背离”时,应买进。
    5.ASI指标和OBV指标同样维持“N”字型的波动,并且也以突破或跌破“N”字型高低点,为观察ASI指标的主要方法。向上爬升的ASI,一旦向下跌破其前一次显著的N型转折点,一律可视为停损卖出的讯号;向下滑落的ASI,一旦向上突破其前一次的N型转折点,一律可视为果断买进的讯号。
    #这些使用很难度量,所以其实asi只能在肉眼使用    
    '''
    a = np.abs(shigh - roll0(sclose))
    b = np.abs(slow - roll0(sclose))
    c = np.abs(shigh - roll0(slow))
    e = subd(sclose)
    f = sclose-sopen
    g = roll0(f)
    d = np.abs(g)
    l = 3
    
    x = e + f/2 + g
    k = np.choose(a>b,[b,a])   #True=1,False=0,因此a>b时True=1
    
    m = np.select([(a>b) & (b>c),(b>c) & (b>a),(c>a) & (c>b)],[a,b,c])
    r = np.select([m==a,m==b,m==c],[a+b/2+d/4,b+a/2+d/4,c+d/4])
    si = 50 * x / r * k / l    
    return si.cumsum()