Esempio n. 1
0
def attack2c(stock):#
    ''' 跳空高开并且全日收盘未补缺口,且收盘大于开盘,并收于相对高位
    '''
    linelog('%s:%s' % (attack2.__name__,stock.code))
    t = stock.transaction
    
    last = rollx(t[CLOSE],1) #CLOSE?
    tk = gand(t[OPEN] > last*102/100,t[LOW]>last)   
    down = t[HIGH]-t[CLOSE] < (t[CLOSE]-t[OPEN])*2/3
    ol = t[CLOSE] > t[OPEN]

    cup = gand(tk,down,ol)


    #三线理顺
    #tt = rollx(gand(stock.t4,stock.t5),1)
    fm = rollx(gand(stock.diff < stock.dea))

    g = rollx(gand(stock.g20>stock.g60,stock.g60>stock.g120))

    smarket = gand(stock.ref.t2,stock.ref.t1,stock.ref.t0)
    signal = gand(cup,t[VOLUME]>0,g)#smarket)#,rama) #,rama  #,tt,peak)#,fmacd,xmacd)  #rama

    dsignal = decover(signal,3)
    #stock.buyprice = select([dsignal>0],[t[HIGH]])     #涨停价
    #stock.buyprice = select([dsignal>0],[stock.open2])     #第二小时开盘
    #print signal
    return dsignal
Esempio n. 2
0
def attack2c(stock):  #
    ''' 跳空高开并且全日收盘未补缺口,且收盘大于开盘,并收于相对高位
    '''
    linelog('%s:%s' % (attack2.__name__, stock.code))
    t = stock.transaction

    last = rollx(t[CLOSE], 1)  #CLOSE?
    tk = gand(t[OPEN] > last * 102 / 100, t[LOW] > last)
    down = t[HIGH] - t[CLOSE] < (t[CLOSE] - t[OPEN]) * 2 / 3
    ol = t[CLOSE] > t[OPEN]

    cup = gand(tk, down, ol)

    #三线理顺
    #tt = rollx(gand(stock.t4,stock.t5),1)
    fm = rollx(gand(stock.diff < stock.dea))

    g = rollx(gand(stock.g20 > stock.g60, stock.g60 > stock.g120))

    smarket = gand(stock.ref.t2, stock.ref.t1, stock.ref.t0)
    signal = gand(cup, t[VOLUME] > 0,
                  g)  #smarket)#,rama) #,rama  #,tt,peak)#,fmacd,xmacd)  #rama

    dsignal = decover(signal, 3)
    #stock.buyprice = select([dsignal>0],[t[HIGH]])     #涨停价
    #stock.buyprice = select([dsignal>0],[stock.open2])     #第二小时开盘
    #print signal
    return dsignal
Esempio n. 3
0
def hmxru(stock):
    ''' 成交量分配后的macd,采用supdown
        vfilter = svma < vma * 2/3    
        评估:总盈亏值=4813,交易次数=14  期望值=5444
                总盈亏率(1/1000)=4813,平均盈亏率(1/1000)=343,盈利交易率(1/1000)=928
                平均持仓时间=50,持仓效率(1/1000000)=6860
                赢利次数=13,赢利总值=4876
                亏损次数=1,亏损总值=63
                平盘次数=0
        vfilter = gand(svma<vma*2/3,t[VOLUME]<=vma*2/3)
        评估:总盈亏值=3810,交易次数=8   期望值=1000
                总盈亏率(1/1000)=3810,平均盈亏率(1/1000)=476,盈利交易率(1/1000)=1000
                平均持仓时间=65,持仓效率(1/1000000)=7323
                赢利次数=8,赢利总值=3810
                亏损次数=0,亏损总值=0
                平盘次数=0

    '''
    t = stock.transaction
    mxc = stock.xru
    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    vfilter = gand(svma<vma*2/3,t[VOLUME]<=vma*2/3)
    #vfilter = gand(svma<vma*2/3)
    xatr = stock.atr * BASE / t[CLOSE]     
    ma0 = ma(t[CLOSE],3)
    ndown = bnot(gand(t[CLOSE]<ma0,ma0<stock.ma1,stock.ma1<stock.ma2))
    s = stock
    sv = greater(msum(t[VOLUME] > 0,120),100)   #确保新股上市前100天无信号    
    signal = gand(mxc,stock.above,vfilter,strend(stock.ma4)>0,stock.t5,xatr>=60,stock.magic,stock.ma1<stock.ma2,stock.ma1>stock.ma3,ndown)


    linelog(stock.code)
    return signal
Esempio n. 4
0
def fup60b(stock):
    '''
        60分钟从负数上来的有失败上叉先导的第一次成功上叉
    '''
    t = stock.transaction
    linelog('%s:%s' % (fup60.__name__,stock.code))

    hzero =  cached_zeros(len(stock.hour))
    
    pdiff,pdea = cmacd(stock.hour)
    
    cross0 = cross(hzero,pdiff)

    udcross = cross(pdea,pdiff)

    #失败上叉:最近5个周期内被下叉信号抵消,或者最近5个周期内出现第二个上叉信号(导致msum仍然>0)
    fcross = gand(udcross>0,gor(rollx(msum(udcross,5),-5)==0,rollx(msum(udcross>0,5),-5)>1))

    ucross = gand(udcross>0,pdiff>0,bnot(fcross))

    xsum1 = rsum(ucross,cross0)  #此时,第一个cross>0和第二个之间的位置被填满1
    xsum = rsum(xsum1,cross0)   #此时,只有第一个发生位为1

    signal = gand(equals(xsum,1),pdiff>0)

    return hour2day(signal)
Esempio n. 5
0
def hmacd2(stock):
    ''' 无大用
    '''
    t = stock.transaction    
    linelog(stock.code)
    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    vfilter = gand(svma<vma*2/3)
    #vfilter = gand(svma<vma*3/4,t[VOLUME]<vma)
    #vfilter = gand(svma<vma*3/5,t[VOLUME]>0,t[VOLUME]>vma*1/2)#,t[VOLUME]<vma*3/2)   #2/3        

    xatr = stock.atr * BASE / t[CLOSE]
    cf = (t[OPEN]-t[LOW] + t[HIGH]-t[CLOSE])*1000 / (t[HIGH]-t[LOW])   #向下的动力  
    mcf = ma(cf,7)
    
    #ma3 = ma(t[CLOSE],3)
    #ma7 = ma(t[CLOSE],7)
    #c37 = gand(cross(ma7,ma3)>0,strend(ma3)>0)
    #sc = sfollow(stock.hdev,c37,3)
    
    ss = gand(msum(stock.hup,5)>1,stock.hup)    #5日内的第二次上叉

    s=stock
    #signal = gand(stock.hdev,stock.t5,vfilter,mcf>1000,stock.g5<stock.g60,s.g20 >= s.g60,s.g60 >= s.g120,s.g120 >= s.g250,s.g20<=8000)
    #magic = gand(s.g20 >= s.g60,s.g60 <= s.g120,s.g120 <= s.g250)#,s.g20<=8000)
    magic = gand(s.g5>s.g60,s.g20 >= s.g60,s.g60 <= s.g120,s.g20<=8000)
    signal = gand(ss,stock.t5,stock.t4,vfilter,mcf<900,xatr>60,magic)
    return signal
Esempio n. 6
0
def hdev(stock):
    ''' 
        2005-2009无法找到好的策略
    '''
    t = stock.transaction    
    linelog(stock.code)
    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    vfilter = gand(svma<vma*3/5)
    #vfilter = gand(svma<vma*3/5,t[VOLUME]>0,t[VOLUME]>vma*1/2)#,t[VOLUME]<vma*3/2)   #2/3        

    xatr = stock.atr * BASE / t[CLOSE]
    cf = (t[OPEN]-t[LOW] + t[HIGH]-t[CLOSE])*1000 / (t[HIGH]-t[LOW])   #向下的动力  
    mcf = ma(cf,7)
    
    ma3 = ma(t[CLOSE],3)
    ma7 = ma(t[CLOSE],7)
    c37 = gand(cross(ma7,ma3)>0,strend(ma3)>0)
    sc = sfollow(stock.hdev,c37,3)

    s=stock
    #signal = gand(stock.hdev,stock.t5,vfilter,mcf>1000,stock.g5<stock.g60,s.g20 >= s.g60,s.g60 >= s.g120,s.g120 >= s.g250,s.g20<=8000)
    magic = gand(stock.g5<stock.g20,s.g20 >= s.g60,s.g60 >= s.g120,s.g120 >= s.g250,s.g20<=8000,s.g20>=3000)
    signal = gand(sc,stock.t5,strend(stock.ma4)>0,vfilter,mcf<900)
    return signal
Esempio n. 7
0
def mxru3(stock):
    ''' 成交量分配后的macd,采用supdown3

        sfollow = 15
        评估:总盈亏值=5596,交易次数=21  期望值=5782
                总盈亏率(1/1000)=5596,平均盈亏率(1/1000)=266,盈利交易率(1/1000)=904
                平均持仓时间=46,持仓效率(1/1000000)=5782
                赢利次数=19,赢利总值=5689
                亏损次数=2,亏损总值=93
                平盘次数=0
        sfollow = 30
        评估:总盈亏值=7176,交易次数=27  期望值=6973
                总盈亏率(1/1000)=7176,平均盈亏率(1/1000)=265,盈利交易率(1/1000)=888
                平均持仓时间=46,持仓效率(1/1000000)=5760
                赢利次数=24,赢利总值=7292
                亏损次数=3,亏损总值=116
                平盘次数=0
    '''
    t = stock.transaction
    mdiff,mdea = macd_ruv3(t[OPEN],t[CLOSE],t[HIGH],t[LOW],t[VOLUME])
    mxc = cross(mdea,mdiff) > 0
    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    #vfilter = gand(svma<vma*7/8,svma>vma/2,t[VOLUME]<=vma,t[CLOSE]>stock.ma1,cf)
    vfilter = gand(svma<vma*2/3,t[VOLUME]<=vma*4/3)
    xatr = stock.atr * BASE / t[CLOSE]     
    signal = gand(mxc)
    linelog(stock.code)
    signal = sfollow(signal,stock.hup,30)
    return gand(signal,vfilter,stock.magic,strend(stock.ma4)>0,stock.t5,xatr>=50,t[CLOSE]>stock.ma3)
Esempio n. 8
0
def up_in_day(stock, xup=200):  #xup为涨停次日的开盘涨幅,万分位表示
    ''' 次日开盘小于x%则不追,追进次日开盘小于2%则卖出,收盘未涨停也卖出
        需要屏蔽一字涨停的情况
        my_pricer = (lambda s : s.buyprice,lambda s : s.sellprice)
        myMediator=nmediator_factory(trade_strategy=B0S0_N,pricer = my_pricer)    

        200/-25,-50
        评估:总盈亏值=-10690,交易次数=1194      期望值=-237
                总盈亏率(1/1000)=-10690,平均盈亏率(1/1000)=-9,盈利交易率(1/1000)=268
                平均持仓时间=1,持仓效率(1/1000000)=-9000
                赢利次数=321,赢利总值=22580
                亏损次数=862,亏损总值=33270
                平盘次数=11


        最后发现,第一小时涨停的,第二天追击的风险最大,第二小时涨停的最好,但也都是负的
        
    '''
    linelog('%s:%s' % (up_in_day.__name__, stock.code))
    t = stock.transaction
    climit = xfollow(limitup1(t[CLOSE]), t[VOLUME])
    #yup = rollx(gand(stock.slup1,climit),1)  #昨日开盘前两小时涨停并且收盘封住
    yup = rollx(climit, 1)
    pre = rollx(t[CLOSE], 1)
    tup = np.sign(t[OPEN] * 10000 / pre >= xup + 10000)  #今日开盘大于xup
    tx = np.sign(t[LOW] * 10000 / pre <= 10990)  #非一字涨停,追
    #tv = xfollow(t[VOLUME].copy(),t[VOLUME])    #不能更改t[VOLUME]本身

    #xmacd = rollx((stock.diff-stock.dea) * 1000 / stock.ma3 > 10,1)
    #fmacd = rollx(stock.diff > stock.dea,1)
    #tdea = strend(stock.dea) < 30

    #u30 = rollx(t[CLOSE]>stock.ma3,1)
    #fma = rollx(gand(stock.ma1 > stock.ma2),1)#,stock.ma2>stock.ma4,stock.ma3>stock.ma4),1)

    #lol = rollx( t[OPEN] * 97 < t[LOW]*100,1) #昨日涨停,但反向震荡不超过3%

    #tlimit = tv / 6 < rollx(tv,1)       #量不能超过前日6倍,越等于开盘量小于前日1/3?
    #tt = rollx(gand(stock.t5,stock.t4,stock.t3,strend(ma(t[CLOSE],250))>0),1) #以昨日趋势为准
    tt = gand(stock.t5, stock.t4,
              strend(ma(t[CLOSE], 250)) > 0)  #不采用跳点法,可能这是一个敏感位置
    #mg5 = ma(stock.g5,5)
    #xcross = gand(cross(mg5,stock.g5)>0,strend(stock.g5)>0)
    #g = rollx(gand(stock.g60>9000,stock.g20>9000,xcross),1)

    #涨停需要领袖群雄10天
    #hh10 = tmax(t[HIGH],10)
    #peak = pre > rollx(hh10,2)

    ama = fama(t[CLOSE])
    rama = rollx(ama * 1000 / rollx(ama) > 995)  #-284, p=342

    signal = gand(yup, tup, tx, t[VOLUME] > 0,
                  tt)  #,rama)   #,tt,peak)#,fmacd,xmacd)  #rama

    dsignal = decover(signal, 3)
    stock.buyprice = select([dsignal > 0], [t[OPEN]])
    #print signal

    return dsignal
Esempio n. 9
0
def fup60b(stock):
    '''
        60分钟从负数上来的有失败上叉先导的第一次成功上叉
    '''
    t = stock.transaction
    linelog('%s:%s' % (fup60.__name__, stock.code))

    hzero = cached_zeros(len(stock.hour))

    pdiff, pdea = cmacd(stock.hour)

    cross0 = cross(hzero, pdiff)

    udcross = cross(pdea, pdiff)

    #失败上叉:最近5个周期内被下叉信号抵消,或者最近5个周期内出现第二个上叉信号(导致msum仍然>0)
    fcross = gand(
        udcross > 0,
        gor(
            rollx(msum(udcross, 5), -5) == 0,
            rollx(msum(udcross > 0, 5), -5) > 1))

    ucross = gand(udcross > 0, pdiff > 0, bnot(fcross))

    xsum1 = rsum(ucross, cross0)  #此时,第一个cross>0和第二个之间的位置被填满1
    xsum = rsum(xsum1, cross0)  #此时,只有第一个发生位为1

    signal = gand(equals(xsum, 1), pdiff > 0)

    return hour2day(signal)
Esempio n. 10
0
def tsvama2sbv(stock,fast,slow,follow=7):
    ''' svama慢线下叉快线,follow日后再上叉回来
        添加vfilter
    '''
    t = stock.transaction
    svap,v2i = stock.svap_ma_67_2

    ma_svapfast = ma(svap,fast)
    ma_svapslow = ma(svap,slow)
    trend_ma_svapfast = strend(ma_svapfast)
    trend_ma_svapslow = strend(ma_svapslow)

    cross_down = band(cross(ma_svapslow,ma_svapfast)<0,trend_ma_svapfast<0)    
    cross_up = band(cross(ma_svapslow,ma_svapfast)>0,trend_ma_svapfast>0)        
    
    sdown = transform(cross_down,v2i,len(t[VOLUME]))
    sup = transform(cross_up,v2i,len(t[VOLUME]))    
    
    sync_down_up = sfollow(sdown,sup,follow)
    
    linelog('%s:%s' % (tsvama2sbv.__name__,stock.code))

    vma_s = ma(t[VOLUME],13)
    vma_l = ma(t[VOLUME],30)

    vfilter = vma_s < vma_l

    ss = gand(bnot(sfollow(sync_down_up,stock.hup,10)),sfollow(sync_down_up,stock.hup,20))
    return gand(ss,stock.above,stock.t5,stock.magic,vfilter)
Esempio n. 11
0
 def _calc(self, tmaker, sdata, dates, begin=0, **kwargs):
     trades = []
     ibegin = dates.searchsorted(begin)
     for s in sdata.values():
         try:  #捕捉某些异常,如未划入任何板块的股票在计算板块相关信号时会出错
             self.prepare(s, **kwargs)
             sbuy = self.buy_signal_maker(s)
             sbuy[:
                  ibegin] = 0  #去掉之前的信号,便于mm的对tbegin的一致性,而trade因为已经自身处理了时段,无此处也无影响
             ssell = self.sell_signal_maker(
                 s, self.trade_strategy.bshift(sbuy))
             #logger.debug('sbuy:%s',sbuy.tolist())
             #sbuy,ssell = smooth2(s.transaction[VOLUME],sbuy,ssell) #这个处理被划入limit_adjust
             trades.extend(
                 self.trade_maker(tmaker,
                                  dates,
                                  s,
                                  sbuy,
                                  ssell,
                                  begin=begin))
             self.finishing(s, sbuy, ssell)
         except Exception, inst:
             #print u'mediator _calc %s except : %s' % (s.code,inst)
             linelog(u'mediator _calc %s except : %s' % (s.code, inst))
             logger.exception(u'%s calc error : %s', s.code, inst)
Esempio n. 12
0
def up_in_day(stock,xup=200):#xup为涨停次日的开盘涨幅,万分位表示
    ''' 次日开盘小于x%则不追,追进次日开盘小于2%则卖出,收盘未涨停也卖出
        需要屏蔽一字涨停的情况
        my_pricer = (lambda s : s.buyprice,lambda s : s.sellprice)
        myMediator=nmediator_factory(trade_strategy=B0S0_N,pricer = my_pricer)    

        200/-25,-50
        评估:总盈亏值=-10690,交易次数=1194      期望值=-237
                总盈亏率(1/1000)=-10690,平均盈亏率(1/1000)=-9,盈利交易率(1/1000)=268
                平均持仓时间=1,持仓效率(1/1000000)=-9000
                赢利次数=321,赢利总值=22580
                亏损次数=862,亏损总值=33270
                平盘次数=11


        最后发现,第一小时涨停的,第二天追击的风险最大,第二小时涨停的最好,但也都是负的
        
    '''
    linelog('%s:%s' % (up_in_day.__name__,stock.code))
    t = stock.transaction
    climit = xfollow(limitup1(t[CLOSE]),t[VOLUME])
    #yup = rollx(gand(stock.slup1,climit),1)  #昨日开盘前两小时涨停并且收盘封住
    yup = rollx(climit,1)
    pre = rollx(t[CLOSE],1)
    tup = np.sign(t[OPEN] * 10000 / pre >= xup + 10000)    #今日开盘大于xup
    tx = np.sign(t[LOW] * 10000 / pre <= 10990)    #非一字涨停,追
    #tv = xfollow(t[VOLUME].copy(),t[VOLUME])    #不能更改t[VOLUME]本身

    #xmacd = rollx((stock.diff-stock.dea) * 1000 / stock.ma3 > 10,1)
    #fmacd = rollx(stock.diff > stock.dea,1)
    #tdea = strend(stock.dea) < 30

    #u30 = rollx(t[CLOSE]>stock.ma3,1)
    #fma = rollx(gand(stock.ma1 > stock.ma2),1)#,stock.ma2>stock.ma4,stock.ma3>stock.ma4),1)

    #lol = rollx( t[OPEN] * 97 < t[LOW]*100,1) #昨日涨停,但反向震荡不超过3%

    #tlimit = tv / 6 < rollx(tv,1)       #量不能超过前日6倍,越等于开盘量小于前日1/3?
    #tt = rollx(gand(stock.t5,stock.t4,stock.t3,strend(ma(t[CLOSE],250))>0),1) #以昨日趋势为准
    tt = gand(stock.t5,stock.t4,strend(ma(t[CLOSE],250))>0)    #不采用跳点法,可能这是一个敏感位置
    #mg5 = ma(stock.g5,5)
    #xcross = gand(cross(mg5,stock.g5)>0,strend(stock.g5)>0)
    #g = rollx(gand(stock.g60>9000,stock.g20>9000,xcross),1)
    
    #涨停需要领袖群雄10天
    #hh10 = tmax(t[HIGH],10)
    #peak = pre > rollx(hh10,2)
    
    ama = fama(t[CLOSE])
    rama = rollx(ama*1000/rollx(ama)>995)   #-284, p=342

    signal = gand(yup,tup,tx,t[VOLUME]>0,tt)#,rama)   #,tt,peak)#,fmacd,xmacd)  #rama

    dsignal = decover(signal,3)
    stock.buyprice = select([dsignal>0],[t[OPEN]])
    #print signal

    return dsignal
Esempio n. 13
0
def prepare_up1(stock):
    linelog('prepare hour:%s' % stock.code)
    #up = stock.hour * 10000 / rollx(stock.hour,1) >= 10200
    down =stock.hour_high - stock.hour < (stock.hour-stock.hour_open)*2/3
    ol = stock.hour > stock.hour_open
    tk = stock.hour_low > rollx(stock.hour_high)
    up = stock.hour * 10000 / gmin(rollx(stock.hour,1),stock.hour_open) > 10200
    stock.up1 =  xfollow(hour2day1(gand(up,down,ol,tk)),stock.transaction[VOLUME])
    stock.open2 = hour2day2(stock.hour_open)
Esempio n. 14
0
def hmacd_b(stock):
    linelog(stock.code)
    t = stock.transaction    

    asignal = stock.hmacda

    signal = gand(asignal)

    return signal
Esempio n. 15
0
def attack2(stock, xup=200):  #
    ''' 盘中追第二个涨停
    '''
    linelog('%s:%s' % (attack2.__name__, stock.code))
    t = stock.transaction

    ama = fama(t[CLOSE])
    rama = rollx(t[CLOSE] * 1000 / rollx(ama) >= 1030)  #-284, p=342

    lup1 = gand((limitup1(t[CLOSE])), t[OPEN] * 10000 / t[LOW] < 10050)

    climit = xfollow(lup1, t[VOLUME])
    #climit = xfollow(limitup2(t[HIGH],t[LOW]),t[VOLUME])   #一字板
    #yup = rollx(gand(stock.slup2,climit,bnot(stock.slup1)),1)  #昨日第二小时涨停并且收盘封住
    yup = rollx(gand(stock.slup2, stock.stoped3, climit, bnot(stock.slup1)),
                1)  #昨日第二小时涨停并且至收盘都没打开过,含第一小时

    #大盘因素
    #smarket = rollx(gand(stock.ref.t2,stock.ref.t1,stock.ref.t0),1)
    smarket = gand(stock.ref.t2, stock.ref.t1, stock.ref.t0)
    #smarket = gand(strend(stock.ref.diff)>0,strend(stock.ref.diff-stock.ref.dea)>0)

    #yup = gand(stock.slup3,bnot(stock.stoped4))  #前3小时涨停,并且在第四小时打开过
    #yup2 = gand(stock.slup2,bnot(gand(stock.stoped3,stock.stoped4)),bnot(stock.slup1))  #第2小时开始涨停,并且在第3-4小时打开过,否则买不到
    #yup3 = gand(stock.slup3,bnot(stock.stoped4),bnot(gand(stock.slup1,stock.slup2)))
    #yup2 = gand(stock.touch2,bnot(stock.slup1))  #第2小时开始触及涨停
    #yup3 = gand(stock.touch3,bnot(gand(stock.slup1,stock.slup2)))
    #yup=gor(yup2,yup3)
    cup = gand(stock.up1, yup,
               bnot(gand(stock.stoped3, stock.stoped4, stock.stoped2)))

    #因为此时追击点在下午开盘,所以可以观察大盘

    #yup = gand(stock.slup1,bnot(gand(stock.stoped2,stock.stoped3,stock.stoped4)))  #前1小时涨停,并且在第四小时打开过
    #无法判断第四小时涨停的个股涨停后是否打开过

    #必须是跳空且缺口不补

    pre = rollx(t[CLOSE], 1)
    tup = np.sign(t[OPEN] * 10000 / pre <= xup + 10000)  #今日开盘大于xup,这个条件是反作用

    #c_ex = lambda c,s:gand(c.g60>3000,s>3000)
    #cs = catalog_signal_cs(stock.c60,c_ex)

    signal = gand(cup, t[VOLUME] > 0, stock.ref.up1
                  )  #smarket)#,rama) #,rama  #,tt,peak)#,fmacd,xmacd)  #rama
    #signal = gand(cup,t[VOLUME]>0,rama,r1,smarket,tup)#,rama)   #,tt,peak)#,fmacd,xmacd)  #rama

    dsignal = decover(signal, 3)
    #stock.buyprice = select([dsignal>0],[t[HIGH]])     #涨停价
    stock.buyprice = select([dsignal > 0], [stock.open2])  #第二小时开盘
    #print signal

    return dsignal
Esempio n. 16
0
def tsvama2_old(stock,fast,slow):
    t = stock.transaction
    svap,v2i = stock.svap_ma_67 
    ma_svapfast = ma(svap,fast)
    ma_svapslow = ma(svap,slow)
    trend_ma_svapfast = strend(ma_svapfast) > 0
    trend_ma_svapslow = strend(ma_svapslow) > 0
    cross_fast_slow = gand(cross(ma_svapslow,ma_svapfast)>0,trend_ma_svapfast,trend_ma_svapslow)
    msvap = transform(cross_fast_slow,v2i,len(t[VOLUME]))
    linelog('%s:%s' % (tsvama2.__name__,stock.code))
    return gand(stock.golden,msvap,stock.above)    
Esempio n. 17
0
def prepare_up1(stock):
    linelog('prepare hour:%s' % stock.code)
    #up = stock.hour * 10000 / rollx(stock.hour,1) >= 10200
    down = stock.hour_high - stock.hour < (stock.hour -
                                           stock.hour_open) * 2 / 3
    ol = stock.hour > stock.hour_open
    tk = stock.hour_low > rollx(stock.hour_high)
    up = stock.hour * 10000 / gmin(rollx(stock.hour, 1),
                                   stock.hour_open) > 10200
    stock.up1 = xfollow(hour2day1(gand(up, down, ol, tk)),
                        stock.transaction[VOLUME])
    stock.open2 = hour2day2(stock.hour_open)
Esempio n. 18
0
def prepare_index(stock,begin,end):
    linelog('prepare hour:%s' % stock.code)
    t = get_hour(stock.code,begin,end)
    stock.hour = t[CLOSE].copy()
    stock.hour_open = t[OPEN].copy()
    stock.hour_low = t[LOW].copy()
    stock.hour_high = t[HIGH].copy()
    stock.hour_v = t[VOLUME].copy()
    stock.hour[range4(len(stock.hour))] = np.cast['int32'](stock.transaction[CLOSE])   #消除第4小时数据收盘与当日收盘价的差异,日收盘价为最后均价
    down =stock.hour_high - stock.hour < (stock.hour-stock.hour_open)*2/3
    ol = stock.hour > stock.hour_open
    stock.up1 =  xfollow(hour2day1(gand(down,ol)),stock.transaction[VOLUME])
    stock.open2 = hour2day2(stock.hour_open)
Esempio n. 19
0
def attack2(stock,xup=200):#
    ''' 盘中追第二个涨停
    '''
    linelog('%s:%s' % (attack2.__name__,stock.code))
    t = stock.transaction
    
    ama = fama(t[CLOSE])
    rama = rollx(t[CLOSE]*1000/rollx(ama)>=1030)   #-284, p=342

    lup1 = gand((limitup1(t[CLOSE])),t[OPEN]*10000/t[LOW]<10050)

    climit = xfollow(lup1,t[VOLUME])
    #climit = xfollow(limitup2(t[HIGH],t[LOW]),t[VOLUME])   #一字板
    #yup = rollx(gand(stock.slup2,climit,bnot(stock.slup1)),1)  #昨日第二小时涨停并且收盘封住
    yup = rollx(gand(stock.slup2,stock.stoped3,climit,bnot(stock.slup1)),1)  #昨日第二小时涨停并且至收盘都没打开过,含第一小时

    #大盘因素
    #smarket = rollx(gand(stock.ref.t2,stock.ref.t1,stock.ref.t0),1)
    smarket = gand(stock.ref.t2,stock.ref.t1,stock.ref.t0)
    #smarket = gand(strend(stock.ref.diff)>0,strend(stock.ref.diff-stock.ref.dea)>0)

    #yup = gand(stock.slup3,bnot(stock.stoped4))  #前3小时涨停,并且在第四小时打开过
    #yup2 = gand(stock.slup2,bnot(gand(stock.stoped3,stock.stoped4)),bnot(stock.slup1))  #第2小时开始涨停,并且在第3-4小时打开过,否则买不到
    #yup3 = gand(stock.slup3,bnot(stock.stoped4),bnot(gand(stock.slup1,stock.slup2))) 
    #yup2 = gand(stock.touch2,bnot(stock.slup1))  #第2小时开始触及涨停
    #yup3 = gand(stock.touch3,bnot(gand(stock.slup1,stock.slup2))) 
    #yup=gor(yup2,yup3)
    cup = gand(stock.up1,yup,bnot(gand(stock.stoped3,stock.stoped4,stock.stoped2)))

    #因为此时追击点在下午开盘,所以可以观察大盘

    #yup = gand(stock.slup1,bnot(gand(stock.stoped2,stock.stoped3,stock.stoped4)))  #前1小时涨停,并且在第四小时打开过
    #无法判断第四小时涨停的个股涨停后是否打开过

    #必须是跳空且缺口不补

    pre=rollx(t[CLOSE],1)
    tup = np.sign(t[OPEN] * 10000 / pre <= xup + 10000)    #今日开盘大于xup,这个条件是反作用

    #c_ex = lambda c,s:gand(c.g60>3000,s>3000)
    #cs = catalog_signal_cs(stock.c60,c_ex)    

    signal = gand(cup,t[VOLUME]>0,stock.ref.up1)#smarket)#,rama) #,rama  #,tt,peak)#,fmacd,xmacd)  #rama
    #signal = gand(cup,t[VOLUME]>0,rama,r1,smarket,tup)#,rama)   #,tt,peak)#,fmacd,xmacd)  #rama

    dsignal = decover(signal,3)
    #stock.buyprice = select([dsignal>0],[t[HIGH]])     #涨停价
    stock.buyprice = select([dsignal>0],[stock.open2])     #第二小时开盘
    #print signal

    return dsignal
Esempio n. 20
0
def hmacd(stock):
    t = stock.transaction    
    linelog(stock.code)
    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    vfilter = gand(svma<vma*3/2,svma>vma*2/3)
    s=stock
    magic = gand(s.g20 >= s.g120,s.g60 >= s.g120,s.g120 >= s.g250,s.g5<s.g20,s.g20<=8000,s.g20>=3000)
    xatr = stock.atr * BASE / t[CLOSE]
    cf = (t[OPEN]-t[LOW] + t[HIGH]-t[CLOSE])*1000 / (t[HIGH]-t[LOW])   #向下的动力  
    mcf = ma(cf,7)
    
    signal = gand(stock.above,stock.t5,stock.hup,vfilter,magic,xatr>45,xatr<60,mcf<900,stock.ma4_up)
    return signal
Esempio n. 21
0
def heff(stock):
    ''' 效果不平衡
        0501-0909
        评估:总盈亏值=35014,交易次数=178        期望值=2684
                总盈亏率(1/1000)=35014,平均盈亏率(1/1000)=196,盈利交易率(1/1000)=612
                平均持仓时间=32,持仓效率(1/1000000)=6125
                赢利次数=109,赢利总值=40100
                亏损次数=69,亏损总值=5086
                平盘次数=0
        0711-0909
        评估:总盈亏值=17918,交易次数=63 期望值=4437
                总盈亏率(1/1000)=17918,平均盈亏率(1/1000)=284,盈利交易率(1/1000)=809
                平均持仓时间=43,持仓效率(1/1000000)=6604
                赢利次数=51,赢利总值=18686
                亏损次数=12,亏损总值=768
                平盘次数=0

    '''
    linelog(stock.code)
    t = stock.transaction
    ef = efficient_rate(stock.hour)
    zx = cached_zeros(len(stock.hour))
    efz = hour2day(gand(cross(zx, ef) > 0, strend(ef) > 0))
    vma = ma(t[VOLUME], 30)
    svma = ma(t[VOLUME], 3)
    vfilter = gand(svma < vma * 3 / 4, t[VOLUME] < vma)
    cf = (t[OPEN] - t[LOW] + t[HIGH] - t[CLOSE]) * 1000 / (t[HIGH] - t[LOW]
                                                           )  #向下的动力
    mcf = ma(cf, 7)

    refn = gand(stock.ref.ma0 < stock.ref.ma1, stock.ref.ma1 < stock.ref.ma2,
                bnot(stock.ref.t0), bnot(stock.ref.t1), bnot(stock.ref.t2))
    sup = gand(stock.ma0 > stock.ma1, stock.ma1 > stock.ma2, stock.t1,
               stock.t2)

    s1 = gand(efz, bor(bnot(refn), sup))
    s2 = sfollow(efz, bnot(refn), 10)
    ss = bor(s1, s2)
    s = stock
    magic = gand(s.g20 >= s.g60, s.g60 >= s.g120, s.g120 >= s.g250,
                 s.g5 > s.g20, s.g20 <= 8000)
    xatr = stock.atr * BASE / t[CLOSE]

    #signal = gand(ss,stock.above,stock.t5,stock.t4,magic,vfilter,mcf<1000)
    signal = gand(ss, stock.above, stock.t5, stock.t4, magic, vfilter,
                  mcf < 1000, xatr > 40, stock.ma1 > stock.ma3,
                  stock.diff < stock.dea)
    return signal
Esempio n. 22
0
 def _calc(self,tmaker,sdata,dates,begin=0,**kwargs):
     trades = []
     ibegin = dates.searchsorted(begin)
     for s in sdata.values():
         try:    #捕捉某些异常,如未划入任何板块的股票在计算板块相关信号时会出错
             self.prepare(s,**kwargs)
             sbuy = self.buy_signal_maker(s)
             sbuy[:ibegin] = 0   #去掉之前的信号,便于mm的对tbegin的一致性,而trade因为已经自身处理了时段,无此处也无影响
             ssell = self.sell_signal_maker(s,self.trade_strategy.bshift(sbuy))
             #logger.debug('sbuy:%s',sbuy.tolist())                
             #sbuy,ssell = smooth2(s.transaction[VOLUME],sbuy,ssell) #这个处理被划入limit_adjust
             trades.extend(self.trade_maker(tmaker,dates,s,sbuy,ssell,begin=begin))
             self.finishing(s,sbuy,ssell)
         except Exception,inst:
             #print u'mediator _calc %s except : %s' % (s.code,inst)
             linelog(u'mediator _calc %s except : %s' % (s.code,inst))
             logger.exception(u'%s calc error : %s',s.code,inst)
Esempio n. 23
0
def up_in_hour1(stock,xup=200):#xup为涨停次日的开盘涨幅,万分位表示
    '''第1小时涨停'''
    linelog('%s:%s' % (up_in_hour1.__name__,stock.code))
    t = stock.transaction
    climit = xfollow(limitup1(t[CLOSE]),t[VOLUME])
    yup = rollx(gand(stock.slup1,climit),1)  #昨日开盘第一小时涨停并且收盘封住
    pre = rollx(t[CLOSE],1)
    tup = np.sign(t[OPEN] * 10000 / pre >= xup + 10000)    #今日开盘大于xup
    tx = np.sign(t[LOW] * 10000 / pre <= 10990)    #非一字涨停,追
    tt = gand(stock.t5,stock.t4,strend(ma(t[CLOSE],250))>0)    #不采用跳点法,可能这是一个敏感位置

    signal = gand(yup,tup,tx,t[VOLUME]>0,tt)#,rama)   #,tt,peak)#,fmacd,xmacd)  #rama

    dsignal = decover(signal,3)
    stock.buyprice = select([dsignal>0],[t[OPEN]])
    #print signal

    return dsignal
Esempio n. 24
0
def gmacd5(stock,ldown=30,astart=60): #
    t = stock.transaction
    
    mdiff,mdea = cmacd(stock.g5)   

    xcross = gand(cross(mdea,mdiff) > 0)

    linelog(stock.code)

    #ss = sfollow(xcross,stock.mup,3)
    ss = band(xcross,stock.mup)

    #gf1 = gand(stock.g20>5000,stock.g20<9500)

    xatr = stock.atr * BASE / t[CLOSE]     
    
    signal = gand(ss,stock.above,stock.t5,strend(stock.ma4)>0,t[VOLUME]>0,mdiff>=mdea,strend(stock.ref.ma4)>0,xatr>=astart)
    
    return signal
Esempio n. 25
0
 def run(self):
     '''
         调度过程
     '''
     while(self.get_itime()<2359):
         self.prepare_data()
         #print u'读取数据成功,最新时间:%s' % self.dyn_datas[self.names[0]].transaction[ITIME][-1]
         today = dt.date.today()
         tt = today.year*10000 + today.month*100 + today.day
         ct = self.dyn_datas[self.names.keys()[0]].transaction
         if len(ct[IDATE])==0 or ct[IDATE][-1] < tt:
             win32api.MessageBox(0,u'请检查时间是否正确......',u'提示',0x00001000L)
         if len(ct[IDATE])>0:
             linelog(u'读取数据成功,%s-%s:%s-%s,%s-%s' % (ct[IDATE][-1],ct[ITIME][-1],ct[IOPEN][-1],ct[ICLOSE][-1],ct[IHIGH][-1],ct[ILOW][-1]))
             #print u'读取数据成功,%s-%s:%s-%s,%s-%s' % (ct[IDATE][-1],ct[ITIME][-1],ct[IOPEN][-1],ct[ICLOSE][-1],ct[IHIGH][-1],ct[ILOW][-1])
             self.check_signal()
         else:
             linelog(u'无当日动态数据')
         time.sleep(9)    #计算需要10秒,因此总延迟19秒
Esempio n. 26
0
def gup(stock,percent=8500):
    linelog('%s:%s' % (gup.__name__,stock.code))
    t = stock.transaction
    sp = cached_ints(len(t[CLOSE]),percent)
    xcross = gand(cross(sp,stock.g60)>0,strend(stock.g60)>0,t[VOLUME]>0)
    gs = gand(xcross,stock.g20<stock.g60,strend(stock.g20)>0)

    vma_s = ma(t[VOLUME],13)
    vma_l = ma(t[VOLUME],60)

    vfilter = rollx(vma_s < vma_l * 4/5,1)

    xatr = stock.atr * BASE / t[CLOSE]

    xref = stock.ref.transaction[CLOSE] >= stock.ref.ma0

    signal = gand(gs,xatr<50,stock.t4,stock.t5,vfilter,stock.ma4>stock.ma5,strend(stock.diff)>0,stock.xup,xref)
    
    return signal
Esempio n. 27
0
def hxud(stock):
    '''
        vfilter = gand(svma<vma*3/5,t[VOLUME]>0,t[VOLUME]>vma*1/2)#,t[VOLUME]<vma*3/2)   #2/3    
        评估:总盈亏值=9798,交易次数=18  期望值=9714
                总盈亏率(1/1000)=9798,平均盈亏率(1/1000)=544,盈利交易率(1/1000)=777
                平均持仓时间=50,持仓效率(1/1000000)=10880
                赢利次数=14,赢利总值=10024
                亏损次数=4,亏损总值=226
                平盘次数=0
        vfilter = gand(svma<vma*2/3,t[VOLUME]>0,t[VOLUME]>vma*1/2)#,t[VOLUME]<vma*3/2)  #无意义
        评估:总盈亏值=10410,交易次数=25 期望值=6500
                总盈亏率(1/1000)=10410,平均盈亏率(1/1000)=416,盈利交易率(1/1000)=760
                平均持仓时间=43,持仓效率(1/1000000)=9674
                赢利次数=19,赢利总值=10799
                亏损次数=6,亏损总值=389
                平盘次数=0
        vfilter = gand(svma<vma*1/2,t[VOLUME]>0,t[VOLUME]>vma*1/2)#,t[VOLUME]<vma*3/2)  #说明svma越小越好,最近越缩量越好
        评估:总盈亏值=2785,交易次数=5   期望值=1000
                总盈亏率(1/1000)=2785,平均盈亏率(1/1000)=557,盈利交易率(1/1000)=1000
                平均持仓时间=57,持仓效率(1/1000000)=9771
                赢利次数=5,赢利总值=2785
                亏损次数=0,亏损总值=0
                平盘次数=0

    '''
    t = stock.transaction
    linelog(stock.code)
    xatr = stock.atr * BASE / t[CLOSE]     

    ss = syntony(stock.hup,stock.hmxc,3)
    #ss = sfollow(stock.hup,stock.hmxc,3)

    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    vfilter = gand(svma<vma*3/5,t[VOLUME]>0,t[VOLUME]>vma*1/2)#,t[VOLUME]<vma*3/2)   #2/3    

    cf = (t[OPEN]-t[LOW] + t[HIGH]-t[CLOSE])*1000 / (t[HIGH]-t[LOW])   #向下的动力  
    mcf = ma(cf,7)

    s=stock
    signal = gand(ss,vfilter,mcf>1000,mcf<1050,stock.t5,stock.above,strend(stock.ma4)>0,strend(stock.ma3)>0,xatr>45,xatr<60,stock.ma1<stock.ma2,stock.ma1>stock.ma3,s.g20 >= s.g60,s.g60 >= s.g120,s.g120 >= s.g250,s.g20<=8000,s.g5<s.g20,s.g20>=3000)
    return signal
Esempio n. 28
0
def heff(stock):
    ''' 效果不平衡
        0501-0909
        评估:总盈亏值=35014,交易次数=178        期望值=2684
                总盈亏率(1/1000)=35014,平均盈亏率(1/1000)=196,盈利交易率(1/1000)=612
                平均持仓时间=32,持仓效率(1/1000000)=6125
                赢利次数=109,赢利总值=40100
                亏损次数=69,亏损总值=5086
                平盘次数=0
        0711-0909
        评估:总盈亏值=17918,交易次数=63 期望值=4437
                总盈亏率(1/1000)=17918,平均盈亏率(1/1000)=284,盈利交易率(1/1000)=809
                平均持仓时间=43,持仓效率(1/1000000)=6604
                赢利次数=51,赢利总值=18686
                亏损次数=12,亏损总值=768
                平盘次数=0

    '''
    linelog(stock.code)
    t = stock.transaction    
    ef = efficient_rate(stock.hour)
    zx = cached_zeros(len(stock.hour))
    efz = hour2day(gand(cross(zx,ef)>0,strend(ef)>0))
    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    vfilter = gand(svma<vma*3/4,t[VOLUME]<vma)
    cf = (t[OPEN]-t[LOW] + t[HIGH]-t[CLOSE])*1000 / (t[HIGH]-t[LOW])   #向下的动力  
    mcf = ma(cf,7) 

    refn = gand(stock.ref.ma0<stock.ref.ma1,stock.ref.ma1<stock.ref.ma2,bnot(stock.ref.t0),bnot(stock.ref.t1),bnot(stock.ref.t2))
    sup = gand(stock.ma0>stock.ma1,stock.ma1>stock.ma2,stock.t1,stock.t2)

    s1 = gand(efz,bor(bnot(refn),sup))
    s2 = sfollow(efz,bnot(refn),10)
    ss = bor(s1,s2)
    s = stock
    magic = gand(s.g20 >= s.g60,s.g60 >= s.g120,s.g120 >= s.g250,s.g5>s.g20,s.g20<=8000)
    xatr = stock.atr * BASE / t[CLOSE]     

    #signal = gand(ss,stock.above,stock.t5,stock.t4,magic,vfilter,mcf<1000)
    signal = gand(ss,stock.above,stock.t5,stock.t4,magic,vfilter,mcf<1000,xatr>40,stock.ma1>stock.ma3,stock.diff<stock.dea)
    return signal
Esempio n. 29
0
def up_in_hour1(stock, xup=200):  #xup为涨停次日的开盘涨幅,万分位表示
    '''第1小时涨停'''
    linelog('%s:%s' % (up_in_hour1.__name__, stock.code))
    t = stock.transaction
    climit = xfollow(limitup1(t[CLOSE]), t[VOLUME])
    yup = rollx(gand(stock.slup1, climit), 1)  #昨日开盘第一小时涨停并且收盘封住
    pre = rollx(t[CLOSE], 1)
    tup = np.sign(t[OPEN] * 10000 / pre >= xup + 10000)  #今日开盘大于xup
    tx = np.sign(t[LOW] * 10000 / pre <= 10990)  #非一字涨停,追
    tt = gand(stock.t5, stock.t4,
              strend(ma(t[CLOSE], 250)) > 0)  #不采用跳点法,可能这是一个敏感位置

    signal = gand(yup, tup, tx, t[VOLUME] > 0,
                  tt)  #,rama)   #,tt,peak)#,fmacd,xmacd)  #rama

    dsignal = decover(signal, 3)
    stock.buyprice = select([dsignal > 0], [t[OPEN]])
    #print signal

    return dsignal
Esempio n. 30
0
def hemv1b(stock,fast=15,base=120):
    t = stock.transaction

    em = emv(t[HIGH],t[LOW],t[VOLUME])
    mv1 = msum2(em,fast)
    mvbase = msum2(em,base)

    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)

    vfilter = gand(svma<=vma*3/4)

    baseline = cached_zeros(len(t[CLOSE]))

    thumb = gand(stock.magic,stock.g20>3000)

    ss = sfollow(cross(baseline,mv1)>0,stock.hup,30)

    ecross = gand(ss,thumb,strend(mv1)>0,stock.t5,stock.above,strend(mvbase)>0,vfilter)
    linelog(stock.code)
    return ecross
Esempio n. 31
0
 def run(self):
     '''
         调度过程
     '''
     while (self.get_itime() < 2359):
         self.prepare_data()
         #print u'读取数据成功,最新时间:%s' % self.dyn_datas[self.names[0]].transaction[ITIME][-1]
         today = dt.date.today()
         tt = today.year * 10000 + today.month * 100 + today.day
         ct = self.dyn_datas[self.names.keys()[0]].transaction
         if len(ct[IDATE]) == 0 or ct[IDATE][-1] < tt:
             win32api.MessageBox(0, u'请检查时间是否正确......', u'提示', 0x00001000L)
         if len(ct[IDATE]) > 0:
             linelog(u'读取数据成功,%s-%s:%s-%s,%s-%s' %
                     (ct[IDATE][-1], ct[ITIME][-1], ct[IOPEN][-1],
                      ct[ICLOSE][-1], ct[IHIGH][-1], ct[ILOW][-1]))
             #print u'读取数据成功,%s-%s:%s-%s,%s-%s' % (ct[IDATE][-1],ct[ITIME][-1],ct[IOPEN][-1],ct[ICLOSE][-1],ct[IHIGH][-1],ct[ILOW][-1])
             self.check_signal()
         else:
             linelog(u'无当日动态数据')
         time.sleep(9)  #计算需要10秒,因此总延迟19秒
Esempio n. 32
0
def hspring(stock,threshold=-30):
    ''' 对于结果
        下影越短越好,close-low/close 也是越短越好
    '''
    t = stock.transaction
    linelog('spring:%s' % stock.code)
    
    s11 = gand(stock.ks >=-5,stock.ks<0,stock.ref.ks<=threshold)
    s12 = gand(stock.ks >=5,stock.ks<20,stock.ref.ks<=threshold)
    s1 = bor(s11,s12)
    s21 = gand(stock.ks>=5,stock.ks<75,stock.ref.ks<=threshold)

    signals = bor(s1,s21)

    ss = sfollow(signals,stock.hup,10)


    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    vfilter = gand(svma<vma*7/8,svma>vma/2,t[VOLUME]<=vma*2/3)    
    return gand(ss,stock.magic,stock.above,vfilter)
Esempio n. 33
0
def hmacd_a(stock):
    linelog(stock.code)
    t = stock.transaction    

    shour = stock.hour
    pdiff1,pdea1 = cmacd(stock.hour)
    pdiffd,pdead = cmacd(stock.hour,48,104,36)
    

    #signal = gand(cross(pdea1,pdiff1)>0,pdiffd>pdead,pdiffd>0,pdiff1>0)    #至少一日前还在下面

    msignal = gand(cross(cached_zeros(len(pdiff1)),pdiffd)>0,strend(pdiff1-pdea1)>3)

    #nsignal = gand(pdiff1<pdea1)

    signal = gand(hour2day(msignal))

    stock.hmacda = signal
    #signal = gand(signal,stock.t5,stock.t4)
    
    return signal
Esempio n. 34
0
def xudh(stock,xfunc=xc0s,astart=45):
    ''' 
        评估:总盈亏值=5146,交易次数=21  期望值=3223
                总盈亏率(1/1000)=5146,平均盈亏率(1/1000)=245,盈利交易率(1/1000)=952
                平均持仓时间=47,持仓效率(1/1000000)=5212
                赢利次数=20,赢利总值=5222
                亏损次数=1,亏损总值=76
                平盘次数=0
        原: 牺牲效率提高成功率
        评估:总盈亏值=7295,交易次数=21  期望值=2496
                总盈亏率(1/1000)=7295,平均盈亏率(1/1000)=347,盈利交易率(1/1000)=904
                平均持仓时间=48,持仓效率(1/1000000)=7229
                赢利次数=19,赢利总值=7573
                亏损次数=2,亏损总值=278
                平盘次数=0
        
    '''
    t = stock.transaction
    mxc = xfunc(t[OPEN],t[CLOSE],t[HIGH],t[LOW],ma1=13) > 0

    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)

    vfilter = gand(svma<vma*2/3)
    cf = (t[OPEN]-t[LOW] + t[HIGH]-t[CLOSE])*1000 / (t[HIGH]-t[LOW])   #向下的动力  
    mcf = ma(cf,7)

    stdea = strend(stock.dea)
    stdiff = strend(stock.diff)
    st = gand(stdea<=-3,stdea>=-4,stdiff<=-5,stdiff>=-6)

    xatr = stock.atr * BASE / t[CLOSE]     

    #logger.debug('tlen,hlen=%s,%s' %(len(mxc),len(stock.hup)))
    ss = sfollow(mxc,stock.hup,3)

    signal = gand(ss,vfilter,stock.thumb,stock.above,stock.t5,mcf>1000,stock.ma1<stock.ma2,stock.ma1>stock.ma3,st,xatr>=astart)
    linelog(stock.code)
    return signal
Esempio n. 35
0
def mxru(stock):
    ''' 成交量分配后的macd,采用supdown
        评估:总盈亏值=6744,交易次数=18  期望值=12466
                总盈亏率(1/1000)=6744,平均盈亏率(1/1000)=374,盈利交易率(1/1000)=944
                平均持仓时间=54,持仓效率(1/1000000)=6925
                赢利次数=17,赢利总值=6774
                亏损次数=1,亏损总值=30
                平盘次数=0
    '''
    t = stock.transaction
    mdiff,mdea = macd_ruv(t[OPEN],t[CLOSE],t[HIGH],t[LOW],t[VOLUME])
    mxc = cross(mdea,mdiff) > 0
    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    #vfilter = gand(svma<vma*7/8,svma>vma/2,t[VOLUME]<=vma,t[CLOSE]>stock.ma1,cf)
    vfilter = gand(svma<vma*2/3,t[VOLUME]<=vma*2/3)
    xatr = stock.atr * BASE / t[CLOSE]     
    signal = gand(mxc)
    linelog(stock.code)

    signal = sfollow(signal,stock.hup,30)
    return gand(signal,vfilter,stock.magic,strend(stock.ma4)>0,stock.t5,xatr>=50,t[CLOSE]>stock.ma4)
Esempio n. 36
0
def fup60(stock):
    '''
        60分钟从负数上来的第一次上叉
        #或从负数上来的成功地第一次上叉(不到5个周期就下叉计作失败)
    '''
    t = stock.transaction
    linelog('%s:%s' % (fup60.__name__, stock.code))

    hzero = cached_zeros(len(stock.hour))

    pdiff, pdea = cmacd(stock.hour)

    cross0 = cross(hzero, pdiff)

    ucross = gand(cross(pdea, pdiff) > 0)

    xsum1 = rsum(ucross, cross0)  #此时,第一个cross>0和第二个之间的位置被填满1
    xsum = rsum(xsum1, cross0)  #此时,只有第一个发生位为1

    signal = gand(equals(xsum, 1), pdiff > 0)

    return hour2day(signal)
Esempio n. 37
0
def attack2b(stock):  #
    ''' 盘中第二小时追跳高不变者
        使用fseller(信号次日卖出)
        bo_pricer = (lambda s : s.buyprice,lambda s : s.transaction[OPEN])
        myMediator=nmediator_factory(trade_strategy=B0S1,pricer = bo_pricer)    
        使用fseller_t(信号当日卖出)
        my_pricer = (lambda s : s.buyprice,lambda s : s.sellprice)
        myMediator=nmediator_factory(trade_strategy=B0S0_N,pricer = my_pricer)    
        使用follow_seller(信号当日卖出)
        my_pricer = (lambda s : s.buyprice,lambda s : s.sellprice)
        myMediator=nmediator_factory(trade_strategy=B0S0_N,pricer = my_pricer)    

    '''
    linelog('%s:%s' % (attack2.__name__, stock.code))
    t = stock.transaction

    #第一个涨停 #确保没有稍长的下影线

    cup = gand(stock.up1,
               bnot(gand(stock.stoped2, stock.stoped3, stock.stoped4)))

    #三线理顺
    #tt = rollx(gand(stock.t4,stock.t5),1)
    fm = rollx(gand(stock.diff < stock.dea))

    g = rollx(gand(stock.g20 > stock.g60, stock.g60 > stock.g120))

    tref = rollx(gand(stock.ref.t3))

    signal = gand(cup, t[VOLUME] > 0, stock.ref.up1, tref,
                  strend(stock.ref.diff) > 0, fm,
                  g)  #smarket)#,rama) #,rama  #,tt,peak)#,fmacd,xmacd)  #rama

    dsignal = decover(signal, 3)
    #stock.buyprice = select([dsignal>0],[t[HIGH]])     #涨停价
    stock.buyprice = select([dsignal > 0], [stock.open2])  #第二小时开盘
    #print signal

    return dsignal
Esempio n. 38
0
def hmxru3(stock):
    ''' 成交量分配后的macd,采用supdown3
        评估:总盈亏值=6163,交易次数=22  期望值=3733
                总盈亏率(1/1000)=6163,平均盈亏率(1/1000)=280,盈利交易率(1/1000)=863
                平均持仓时间=48,持仓效率(1/1000000)=5833
                赢利次数=19,赢利总值=6389
                亏损次数=3,亏损总值=226
                平盘次数=0
    '''
    t = stock.transaction
    mxc = stock.xru3
    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    vfilter = gand(svma<vma*2/3,svma>vma/2,t[VOLUME]<=vma*2/3)
    xatr = stock.atr * BASE / t[CLOSE]     
    cf = (t[OPEN]-t[LOW] + t[HIGH]-t[CLOSE])*1000 / (t[HIGH]-t[LOW])   #向下的动力  
    mcf = ma(cf,7)
    
    s = stock
    signal = gand(s.above,mxc,vfilter,strend(stock.ma4)>0,stock.t5,xatr>=50,stock.magic,stock.ma1<stock.ma2,stock.ma1>stock.ma3,mcf<1000)
    linelog(stock.code)
    return signal
Esempio n. 39
0
def hxudl(stock):
    ''' 恶劣
    '''
    t = stock.transaction
    linelog(stock.code)
    xatr = stock.atr * BASE / t[CLOSE]     

    ss = syntony(stock.hup,stock.hmxc,3)
    #ss = sfollow(stock.hup,stock.hmxc,3)

    vma = ma(t[VOLUME],30)
    svma = ma(t[VOLUME],3)
    vfilter = gand(svma<vma*3/5,t[VOLUME]>0,t[VOLUME]>vma*1/2)#,t[VOLUME]<vma*3/2)   #2/3    

    cf = (t[OPEN]-t[LOW] + t[HIGH]-t[CLOSE])*1000 / (t[HIGH]-t[LOW])   #向下的动力  
    mcf = ma(cf,7)

    s=stock
    spos = gand(ma(stock.ref.transaction[CLOSE],250) > stock.ref.ma5,stock.ref.ma5>stock.ref.ma4,stock.ref.t4>0,stock.ref.ma1>stock.ref.ma2,stock.ref.ma1>stock.ref.ma3)
    #spos2 = gand(ma(t[CLOSE],250) > stock.ma5,stock.ma5>stock.ma4,stock.t4>0)    
    signal = gand(stock.hmxc,vfilter,spos,strend(stock.ma3)>0,xatr>45,xatr<60,stock.ma1>stock.ma2,stock.ma1>stock.ma3,s.g20 >= s.g60,s.g60 >= s.g120,s.g120 >= s.g250,s.g20<=8000,s.g5<s.g20,s.g20>=3000)
    return signal
Esempio n. 40
0
def prepare_hour(stock,begin,end):
    linelog('prepare hour:%s' % stock.code)
    t = get_hour(stock.code,begin,end)
    stock.hour = t[CLOSE].copy()
    #stock.hour_open = t[OPEN].copy()
    #stock.hour_low = t[LOW].copy()
    #stock.hour_high = t[HIGH].copy()
    #stock.hour_v = t[VOLUME].copy()
    stock.hour[range4(len(stock.hour))] = stock.transaction[CLOSE]   #消除第4小时数据收盘与当日收盘价的差异,日收盘价为最后均价
    prepare_hmacd(stock)
    stock.hmxc = hour2day(xc0s(t[OPEN],stock.hour,t[HIGH],t[LOW],ma1=13) > 0)
    mdiff,mdea = macd_ruv3(t[OPEN],stock.hour,t[HIGH],t[LOW],t[VOLUME])
    mxc = cross(mdea,mdiff) > 0
    stock.xru3 = hour2day(mxc)
    mdiff,mdea = macd_ruv(t[OPEN],stock.hour,t[HIGH],t[LOW],t[VOLUME])
    mxc = cross(mdea,mdiff) > 0
    stock.xru = hour2day(mxc)
    ma3 = ma(stock.hour,3)
    ma7 = ma(stock.hour,7)
    ma13 = ma(stock.hour,13)
    ma30 = ma(stock.hour,30)
    stock.ma4_up = hour2day(gand((ma3>ma7),gand(ma7>ma13),gand(ma13>ma30),strend(ma3)>0,strend(ma7)>0,strend(ma13)>0,strend(ma30)>0))
Esempio n. 41
0
def fupf(stock):
    '''
        本次上叉比上次上叉的位置高,同时价格也高
    '''

    t = stock.transaction
    linelog('%s:%s' % (fupf.__name__, stock.code))

    pdiff, pdea = cmacd(stock.hour)

    upcross2 = gand(cross(pdea, pdiff) > 0, strend(pdiff) > 0)

    dsub = rsub(pdea, upcross2)
    #csub = rsub(stock.hour,upcross2)
    #ssub = rsub(rollx(strend(pdea)),upcross2)   #上叉前一天的strend(pdea)

    vz = tmax(np.abs(pdiff), 60) / 5  #pdiff不能超过0线太高

    hsignal = gand(dsub > 0, pdiff < vz)

    xatr = stock.atr * BASE / t[CLOSE]
    mxatr = ma(xatr, 13)
    xr = gand(xatr < 50, xatr < mxatr)  #,strend(xatr-mxatr)<0)

    nd = bnot(gand(stock.ma1 < stock.ma2, stock.ma2 < stock.ma3))

    rt = gand(stock.ref.t3)

    vma_s = ma(t[VOLUME], 13)
    vma_l = ma(t[VOLUME], 30)

    vfilter = vma_s < vma_l * 3 / 4

    gr = gand(stock.g20 < 3000, stock.g20 > stock.g60, stock.g60 > stock.g120)

    signal = gand(hour2day(hsignal),
                  strend(stock.diff) > 0, xr, rt, nd, vfilter, gr)

    return signal
Esempio n. 42
0
def fupf(stock):
    '''
        本次上叉比上次上叉的位置高,同时价格也高
    '''

    t = stock.transaction
    linelog('%s:%s' % (fupf.__name__,stock.code))

    pdiff,pdea = cmacd(stock.hour)

    upcross2 = gand(cross(pdea,pdiff)>0,strend(pdiff)>0)

    dsub = rsub(pdea,upcross2)
    #csub = rsub(stock.hour,upcross2)
    #ssub = rsub(rollx(strend(pdea)),upcross2)   #上叉前一天的strend(pdea)

    vz = tmax(np.abs(pdiff),60) / 5 #pdiff不能超过0线太高

    hsignal = gand(dsub>0,pdiff<vz)


    xatr = stock.atr * BASE / t[CLOSE]
    mxatr = ma(xatr,13)
    xr = gand(xatr<50,xatr<mxatr)#,strend(xatr-mxatr)<0)

    nd = bnot(gand(stock.ma1<stock.ma2,stock.ma2<stock.ma3))

    rt = gand(stock.ref.t3)

    vma_s = ma(t[VOLUME],13)
    vma_l = ma(t[VOLUME],30)

    vfilter = vma_s < vma_l * 3/4

    gr = gand(stock.g20<3000,stock.g20>stock.g60,stock.g60>stock.g120)

    signal = gand(hour2day(hsignal),strend(stock.diff)>0,xr,rt,nd,vfilter,gr)

    return signal
Esempio n. 43
0
def gup(stock, percent=8500):
    linelog('%s:%s' % (gup.__name__, stock.code))
    t = stock.transaction
    sp = cached_ints(len(t[CLOSE]), percent)
    xcross = gand(
        cross(sp, stock.g60) > 0,
        strend(stock.g60) > 0, t[VOLUME] > 0)
    gs = gand(xcross, stock.g20 < stock.g60, strend(stock.g20) > 0)

    vma_s = ma(t[VOLUME], 13)
    vma_l = ma(t[VOLUME], 60)

    vfilter = rollx(vma_s < vma_l * 4 / 5, 1)

    xatr = stock.atr * BASE / t[CLOSE]

    xref = stock.ref.transaction[CLOSE] >= stock.ref.ma0

    signal = gand(gs, xatr < 50, stock.t4, stock.t5, vfilter,
                  stock.ma4 > stock.ma5,
                  strend(stock.diff) > 0, stock.xup, xref)

    return signal
Esempio n. 44
0
def prepare_slup4(stock):
    linelog('prepare hour:%s' % stock.code)
    slup4 = np.sign(stock.hour * 10000 / rollx(stock.hour, 4) >= 10990)
    stock.slup4 = xfollow(hour2day4(slup4),
                          stock.transaction[VOLUME])  #第1小时涨停. 确保第二天停盘也能够使信号延递
Esempio n. 45
0
def follow_up2(stock):
    '''第n小时涨停,且涨停板在后两个小时打开过
       第1/2/3小时涨停,后面打开过
       第二小时最好,但仍然只有1/3的概率
        1
        评估:总盈亏值=-5945,交易次数=370        期望值=-396
                总盈亏率(1/1000)=-5945,平均盈亏率(1/1000)=-17,盈利交易率(1/1000)=283
                平均持仓时间=1,持仓效率(1/1000000)=-17000
                赢利次数=105,赢利总值=5427
                亏损次数=262,亏损总值=11372
                平盘次数=3

        2
        评估:总盈亏值=-1925,交易次数=278        期望值=-185
                总盈亏率(1/1000)=-1925,平均盈亏率(1/1000)=-7,盈利交易率(1/1000)=345
                平均持仓时间=1,持仓效率(1/1000000)=-7000
                赢利次数=96,赢利总值=5064
                亏损次数=180,亏损总值=6989
                平盘次数=2

        3
        评估:总盈亏值=-4560,交易次数=413        期望值=-325
                总盈亏率(1/1000)=-4560,平均盈亏率(1/1000)=-12,盈利交易率(1/1000)=288
                平均持仓时间=1,持仓效率(1/1000000)=-12000
                赢利次数=119,赢利总值=6388
                亏损次数=294,亏损总值=10948
                平盘次数=0
       
    '''
    linelog('%s:%s' % (follow_up2.__name__, stock.code))
    t = stock.transaction
    #yup = gand(stock.slup2,bnot(stock.slup1),bnot(gand(stock.stoped3,stock.stoped4)))  #开盘第二小时涨停,并且在第三四小时打开过
    #yup = gand(stock.slup1,bnot(gand(stock.stoped2,stock.stoped3,stock.stoped4)))  #开盘第1小时涨停,并且在第2三四小时打开过
    #yup = gand(stock.slup3,bnot(gor(stock.slup1,stock.slup2)),bnot(stock.stoped4))  #第3小时涨停,并且在第四小时打开过

    #开盘涨停
    oup = t[OPEN] * 10000 / rollx(t[CLOSE], 1) >= 10990
    cup = t[CLOSE] * 10000 / rollx(t[CLOSE], 1) >= 10990
    hup = t[HIGH] * 10000 / rollx(t[CLOSE], 1) >= 10990
    lup = t[LOW] * 10000 / rollx(t[CLOSE], 1) >= 10990
    yup = gand(bnot(oup), cup)

    #无法判断第四小时涨停的个股涨停后是否打开过
    tt = gand(stock.t5, stock.t4,
              strend(ma(t[CLOSE], 250)) > 0)  #不采用跳点法,可能这是一个敏感位置

    smarket = gand(stock.ref.t2, stock.ref.t1, stock.ref.t0)  #使用当日的大盘情况,差别巨大

    ama = fama(stock.ref.transaction[CLOSE])
    #rama = stock.ref.transaction[CLOSE]*1000/rollx(ama)>=1000   #-284, p=342

    c_ex = lambda c, s: gand(c.g60 > 5000, s > 8000)
    cs = catalog_signal_cs(stock.c60, c_ex)

    signal = gand(yup, t[VOLUME] > 0, smarket,
                  rollx(cs))  #,tt,peak)#,fmacd,xmacd)  #rama

    dsignal = decover(signal, 3)

    stock.buyprice = select([dsignal > 0], [t[HIGH]])  #涨停价

    #print signal

    return dsignal
Esempio n. 46
0
def prepare_touch4(stock):
    linelog('prepare hour:%s' % stock.code)
    touch4 = np.sign(stock.hour_high * 10000 / rollx(stock.hour, 4) >= 10990)
    stock.touch4 = xfollow(hour2day4(touch4),
                           stock.transaction[VOLUME])  #第1小时涨停. 确保第二天停盘也能够使信号延递
Esempio n. 47
0
def up_in_hour2(stock, xup=200):  #xup为涨停次日的开盘涨幅,万分位表示
    '''第2小时涨停,接近有利可图
        评估:总盈亏值=-172,交易次数=268 期望值=-27
                总盈亏率(1/1000)=-172,平均盈亏率(1/1000)=-1,盈利交易率(1/1000)=309
                平均持仓时间=1,持仓效率(1/1000000)=-1000
                赢利次数=83,赢利总值=6739
                亏损次数=180,亏损总值=6911
                平盘次数=5

    12.
        评估:总盈亏值=-8219,交易次数=700        期望值=-286
                总盈亏率(1/1000)=-8219,平均盈亏率(1/1000)=-12,盈利交易率(1/1000)=255
                平均持仓时间=1,持仓效率(1/1000000)=-12000
                赢利次数=179,赢利总值=13627
                亏损次数=515,亏损总值=21846
                平盘次数=6
    
    前面如果是一字涨停,则可忽略大盘
    '''
    linelog('%s:%s' % (up_in_hour2.__name__, stock.code))
    t = stock.transaction
    climit = xfollow(limitup1(t[CLOSE]), t[VOLUME])
    #climit = xfollow(limitup2(t[HIGH],t[LOW]),t[VOLUME])   #一字板
    #yup = rollx(gand(stock.slup2,climit,bnot(stock.slup1)),1)  #昨日第二小时涨停并且收盘封住
    yup = rollx(gand(stock.slup2, climit), 1)  #昨日第二小时涨停并且至收盘都没打开过,含第一小时
    #yup = rollx(climit,1)
    pre = rollx(t[CLOSE], 1)
    tup = np.sign(t[OPEN] * 10000 / pre >= xup + 10000)  #今日开盘大于xup

    tx = np.sign(t[LOW] * 10000 / pre < 10990)  #非一字涨停,追
    #tt = gand(stock.t5,stock.t4,stock.t3,strend(ma(t[CLOSE],250))>0)    #不采用跳点法,可能这是一个敏感位置
    tt = gand(stock.t5, stock.t4,
              strend(ma(t[CLOSE], 250)) > 0)  #不采用跳点法,可能这是一个敏感位置

    ama = fama(t[CLOSE])
    rama = rollx(ama * 1000 / rollx(ama) <= 1000)  #-284, p=342

    #cswing = t[CLOSE] * 1000 / pre - 1000  #涨幅
    #cup = select([cswing>0],[cswing])
    #mcup1 = ma(cup,13)
    #mcup2 = ma(cup,30)
    #sm = rollx(gand(mcup1<mcup2),1)

    rlimit = limitup1(t[CLOSE])
    times = msum2(rlimit, 5)
    r1 = rollx(gand(times == 2), 1)  #第n个涨停

    #大盘因素
    #smarket = rollx(gand(stock.ref.t2,stock.ref.t1,stock.ref.t0),1)
    #smarket = gand(stock.ref.t2,stock.ref.t1,stock.ref.t0)  #使用当日的大盘情况,差别巨大
    smarket = rollx(gand(stock.ref.t2, stock.ref.t1, stock.ref.t0),
                    1)  #使用当日的大盘情况,差别巨大

    #smart优于tt,这两类条件貌似重合,叠加无效果
    #signal = gand(yup,tup,tx,t[VOLUME]>0,smarket,tt)#,r1)   #,tt,peak)#,fmacd,xmacd)  #rama
    signal = gand(yup, tup, tx, t[VOLUME] > 0, smarket, r1,
                  rama)  #,tt,peak)#,fmacd,xmacd)  #rama

    #一字涨停,忽略大盘
    pup = rollx(t[LOW] * 10000 / pre >= 10990, 1)
    psignal = gand(yup, tup, tx, t[VOLUME] > 0, r1, rama, pup)

    signal = gor(signal, psignal)

    dsignal = decover(signal, 3)
    stock.buyprice = select([dsignal > 0], [t[OPEN]])
    #print signal

    return dsignal