Example #1
0
def follow_seller(stock,buy_signal,xstop=25,ret=50,**kwargs):
    '''
        如果价格小于最近5日高点5%,则卖出
        xstop为根据买入价的止损
        ret为从高点向下的回退值
    '''
    t = stock.transaction

    #从顶下落处理,前5天的收盘/开盘的高者和今天的开盘的高者 回落ret之后

    #hhret = gmax(rollx(tmax(gmax(t[OPEN],t[CLOSE]),5),1),t[OPEN])* (1000-ret)/1000
    hhret = gmax(rollx(tmax(t[HIGH],5),1),t[OPEN])* (1000-ret)/1000
    
    #hhret = rollx(tmax(t[HIGH],5),1) * (1000-ret)/1000
    sdl = t[LOW] < hhret
 
    #止损处理2.5%
    stop_price = extend2next(rollx(stock.buyprice,1) * (1000-xstop)/1000)
    stopl = t[LOW] < stop_price

    cut_price = gmin(gmax(hhret,stop_price),t[HIGH])    #首先,止损线和退回线高者先被触及,同时,穿越时可能跳低,所以找与t[HIGH]的低点
    cut_signal = gor(sdl,stopl)

    cut_signal = select([t[VOLUME]>0],[cut_signal]) #默认为0,即未交易的日子卖出信号不能发出,否则会合并到下一交易日

    bs = gand(buy_signal,cut_signal)
    rbs = rollx(bs)

    sell_signal = select([bs],[0],default=cut_signal) + rbs #如果当日冲销,则后推一日,但如果前一日也是当日,则信号被屏蔽

    stock.sellprice = select([cut_signal],[cut_price],default=t[OPEN])
    #止损和退回用cut_price, 当日卖出信号平移用开盘价,停牌平移用开盘价

    return cut_signal
Example #2
0
def utr(sopen,sclose,shigh,slow):
    ''' 上升波幅
        根据最高价-sopen和最高价-rollx(sclose)的大者
    '''
    sho = shigh - sopen
    shc = shigh - rollx(sclose)
    return gmax(sho,shc) #必然>=0
Example #3
0
def utr(sopen, sclose, shigh, slow):
    ''' 上升波幅
        根据最高价-sopen和最高价-rollx(sclose)的大者
    '''
    sho = shigh - sopen
    shc = shigh - rollx(sclose)
    return gmax(sho, shc)  #必然>=0
Example #4
0
def dtr(sopen,sclose,shigh,slow):
    '''
        下跌波幅
        根据sopen-最低价和rollx(sclose)-最低价的大者        
    '''
    slo = sopen - slow
    slc = rollx(sclose) - slow
    return gmax(slo,slc)    #必然>=0
Example #5
0
def tr(sclose,shigh,slow):
    ''' 真实波幅
    '''
    sclose = rollx(sclose)
    shl = np.abs(shigh - slow)
    shc = np.abs(shigh - sclose)
    slc = np.abs(slow - sclose)
    return gmax(shl,shc,slc)
Example #6
0
def dtr(sopen, sclose, shigh, slow):
    '''
        下跌波幅
        根据sopen-最低价和rollx(sclose)-最低价的大者        
    '''
    slo = sopen - slow
    slc = rollx(sclose) - slow
    return gmax(slo, slc)  #必然>=0
Example #7
0
def tr(sclose, shigh, slow):
    ''' 真实波幅
    '''
    sclose = rollx(sclose)
    shl = np.abs(shigh - slow)
    shc = np.abs(shigh - sclose)
    slc = np.abs(slow - sclose)
    return gmax(shl, shc, slc)
Example #8
0
def follow_seller(stock, buy_signal, xstop=25, ret=50, **kwargs):
    '''
        如果价格小于最近5日高点5%,则卖出
        xstop为根据买入价的止损
        ret为从高点向下的回退值
    '''
    t = stock.transaction

    #从顶下落处理,前5天的收盘/开盘的高者和今天的开盘的高者 回落ret之后

    #hhret = gmax(rollx(tmax(gmax(t[OPEN],t[CLOSE]),5),1),t[OPEN])* (1000-ret)/1000
    hhret = gmax(rollx(tmax(t[HIGH], 5), 1), t[OPEN]) * (1000 - ret) / 1000

    #hhret = rollx(tmax(t[HIGH],5),1) * (1000-ret)/1000
    sdl = t[LOW] < hhret

    #止损处理2.5%
    stop_price = extend2next(rollx(stock.buyprice, 1) * (1000 - xstop) / 1000)
    stopl = t[LOW] < stop_price

    cut_price = gmin(gmax(hhret, stop_price),
                     t[HIGH])  #首先,止损线和退回线高者先被触及,同时,穿越时可能跳低,所以找与t[HIGH]的低点
    cut_signal = gor(sdl, stopl)

    cut_signal = select([t[VOLUME] > 0],
                        [cut_signal])  #默认为0,即未交易的日子卖出信号不能发出,否则会合并到下一交易日

    bs = gand(buy_signal, cut_signal)
    rbs = rollx(bs)

    sell_signal = select(
        [bs], [0], default=cut_signal) + rbs  #如果当日冲销,则后推一日,但如果前一日也是当日,则信号被屏蔽

    stock.sellprice = select([cut_signal], [cut_price], default=t[OPEN])
    #止损和退回用cut_price, 当日卖出信号平移用开盘价,停牌平移用开盘价

    return cut_signal
Example #9
0
def up_seller(stock, buy_signal, xstop=25, ret=50, **kwargs):
    '''
        如果买入日为阴线,则开盘卖出
        如果价格小于最近5日高点5%,则卖出
        xstop为根据买入价的止损
        ret为从高点向下的回退值
    '''
    t = stock.transaction

    #阴线处理
    sol = rollx(gand(buy_signal, t[CLOSE] < t[OPEN]), 1)

    #从顶下落处理,前5天的收盘/开盘的高者和今天的开盘的高者 回落ret之后

    #hhret = gmax(rollx(tmax(gmax(t[OPEN],t[CLOSE]),5),1),t[OPEN])* (1000-ret)/1000
    hhret = gmax(rollx(tmax(t[HIGH], 5), 1), t[OPEN]) * (1000 - ret) / 1000

    sdl = t[LOW] < hhret

    #止损处理2.5%
    stop_price = extend2next(rollx(stock.buyprice, 1) * (1000 - xstop) /
                             1000)  #要求buyprice只有在buyer日才有数据,否则extend2next无意义
    stopl = t[LOW] < stop_price

    cut_price = gmin(gmax(hhret, stop_price),
                     t[HIGH])  #首先,止损线和退回线高者先被触及,同时,穿越时可能跳低,所以找与t[HIGH]的低点
    cut_signal = gor(sdl, stopl)

    cut_signal = select([t[VOLUME] > 0],
                        [cut_signal])  #默认为0,即未交易的日子卖出信号不能发出,否则会合并到下一交易日

    ssignal = gor(sol, cut_signal)
    stock.sellprice = select([cut_signal], [cut_price], default=t[OPEN])
    #止损和退回用cut_price, 阴线出局和停牌平移都用开盘价

    return ssignal
Example #10
-1
def up_seller(stock,buy_signal,xstop=25,ret=50,**kwargs):
    '''
        如果买入日为阴线,则开盘卖出
        如果价格小于最近5日高点5%,则卖出
        xstop为根据买入价的止损
        ret为从高点向下的回退值
    '''
    t = stock.transaction

    #阴线处理
    sol = rollx(gand(buy_signal,t[CLOSE] < t[OPEN]),1)

    #从顶下落处理,前5天的收盘/开盘的高者和今天的开盘的高者 回落ret之后

    #hhret = gmax(rollx(tmax(gmax(t[OPEN],t[CLOSE]),5),1),t[OPEN])* (1000-ret)/1000
    hhret = gmax(rollx(tmax(t[HIGH],5),1),t[OPEN])* (1000-ret)/1000
   
    sdl = t[LOW] < hhret
 
    #止损处理2.5%
    stop_price = extend2next(rollx(stock.buyprice,1) * (1000-xstop)/1000)   #要求buyprice只有在buyer日才有数据,否则extend2next无意义
    stopl = t[LOW] < stop_price

    cut_price = gmin(gmax(hhret,stop_price),t[HIGH])    #首先,止损线和退回线高者先被触及,同时,穿越时可能跳低,所以找与t[HIGH]的低点
    cut_signal = gor(sdl,stopl)

    cut_signal = select([t[VOLUME]>0],[cut_signal]) #默认为0,即未交易的日子卖出信号不能发出,否则会合并到下一交易日


    ssignal = gor(sol,cut_signal)
    stock.sellprice = select([cut_signal],[cut_price],default=t[OPEN])
    #止损和退回用cut_price, 阴线出局和停牌平移都用开盘价

    return ssignal