Esempio n. 1
0
def vectorized_smabreak_divergence(code='510300', tradeCycle='D'):
    colNames = [
        'time', 'code', 'curclose', 'sma', 'ATR', 'ATRRatio', 'ATRWZ',
        'tradeImpScore', 'primImpScore'
    ]

    filename = StrategyName + '-' + code + '-' + tradeCycle
    dfSelected = pd.DataFrame([], columns=colNames)
    RootDir = os.path.join(os.pardir, 'data', 'Vectorized')

    filepath = os.path.join(RootDir, filename + '.xls')

    code = DP.codeType(code)
    startdate = '2000-01-01'
    dfdata = ts.get_k_data(code, start=startdate, end='', ktype=tradeCycle)
    if (len(dfdata) < 120):  # 剔除交易时间少于120天的个股
        print('Not Enough data for decision making.')

    totaldates = dfdata['date'].values
    totalcloses = dfdata['close'].values
    totalhighs = dfdata['high'].values
    totallows = dfdata['low'].values

    macddiclist = ta.cal_macd(totaldates, totalcloses)
    totalmacd, totaldif, totaldea = DP.get_macd_list(macddiclist)
    i = 120

    while i < len(totalcloses):

        closes = totalcloses[:i]
        highs = totalhighs[:i]
        lows = totallows[:i]
        dates = totaldates[:i]
        if (not ta.smaupcrosssignal(closes, 20)):
            i += 1
            continue
        primCycle = GetPrimaryCycle(tradeCycle)
        if (stock_in_divergece(code,
                               primCycle,
                               startdate=startdate,
                               enddate=dates[-1])):

            absdis, perdis, maprice = ta.curdistosma(closes, 20)
            curATR = ta.last_atr(dates, closes, highs, lows)

            ATRWZ = absdis / curATR
            curClose = closes[-1]
            ATRRatio = curATR / curClose

            tradeImpScore = FBD.ImpluseScore(dates, closes)

            curATR = round(curATR, 2)
            ATRRatio = round(ATRRatio * 100, 2)

            ATRWZ = round(ATRWZ, 2)

            maprice = round(maprice, 2)

            dataprimCycle = ts.get_k_data(code, ktype=primCycle)
            primCloses = dataprimCycle['close'].values
            primdates = dataprimCycle['date'].values

            primImpScore = FBD.ImpluseScore(primdates, primCloses)

            s = Series([
                dates[-1], code, curClose, maprice, curATR, ATRRatio, ATRWZ,
                tradeImpScore, primImpScore
            ],
                       index=colNames)

            dfSelected = dfSelected.append(s, ignore_index=True)
        else:

            pass
        i += 1
    # dfSelected = dfSelected.sort_values(by='totalscore',ascending=False)
    dfSelected = pd.DataFrame(dfSelected.values, columns=dfSelected.columns)
    # dfSelected.to_csv(filepath)
    DI.Write_DF_T0_Excel(filepath, dfSelected, 'selected')
    return dfSelected
Esempio n. 2
0
def batch_upcrossafter_divergence(dataset='hs300', tradeCycle='D'):
    lasttradetimestr = DP.get_last_trade_time('D')

    colNames = [
        'code', 'name', 'period', 'curclose', 'sma', 'ATR', 'ATRRatio',
        'rewardrisk', 'primImpScore', 'tradeImpScore', 'primdivscore',
        'divscore', 'difdeascore', 'macdscore', 'totalscore'
    ]

    filename = StrategyName + lasttradetimestr + '-' + dataset + '-' + tradeCycle

    RootDir = os.path.join(os.pardir, 'data', lasttradetimestr)
    DP.mkdir(RootDir)
    filepath = os.path.join(RootDir, filename + '.xls')

    codelist = DI.get_stockcode_list(dataset)

    dfSelected = pd.DataFrame([], columns=colNames)
    dfScreen = codelist[['code', 'name']]
    totalrows = len(dfScreen)
    for i in range(totalrows):
        code = dfScreen.loc[i, 'code']
        code = DP.codeType(code)

        name = dfScreen.loc[i, 'name']

        if (DI.is_tingpai(code)):
            continue

        dfdata = ts.get_k_data(code, ktype=tradeCycle)
        if (len(dfdata) < 120):  #剔除交易时间少于120天的个股
            continue

        dates = dfdata['date'].values
        closes = dfdata['close'].values
        highs = dfdata['high'].values
        lows = dfdata['low'].values
        if (not ta.smaupcrosssignal(closes, 20)):

            continue

        print(name)
        macddiclist = ta.cal_macd(dates, closes)
        macd, dif, dea = DP.get_macd_list(macddiclist)

        if (min(macd[-3:]) > 0):
            continue

        primCycle = GetPrimaryCycle(tradeCycle)
        dataprimCycle = ts.get_k_data(code, ktype=primCycle)
        primCloses = dataprimCycle['close'].values
        primdates = dataprimCycle['date'].values
        primlows = dataprimCycle['low'].values

        primmacd = pd.Series(ta.cal_macd(primdates, primCloses))
        primmacd, primdif, primdea = DP.get_macd_list(primmacd)

        divStatus = ta.macd_in_bulldivergence(dates, primmacd)

        divscore = divStatus['div']
        macdscore = divStatus['macd']
        period = divStatus['period']

        if (divscore != 0):

            print(code, name, divscore, macdscore, period)
            absdis, perdis, maprice = ta.curdistosma(closes, 20)
            curATR = ta.last_atr(dates, closes, highs, lows)

            ATRWZ = absdis / curATR
            curClose = closes[-1]
            ATRRatio = curATR / curClose

            primImpScore = FBD.ImpluseScore(primdates, primCloses)
            tradeImpScore = FBD.ImpluseScore(dates, closes)
            primdivStatus = ta.macd_in_bulldivergence_signal(
                primdates, primmacd)

            primdivscore = primdivStatus['div']

            if (primdivscore != 0):
                primdivscore = 1

            difdeadivscore = 0
            if (ta.in_loose_bulldivergence(dif, period)):
                difdeadivscore += 1
            if (ta.in_loose_bulldivergence(dea, period)):
                difdeadivscore += 1

            totalscore = primImpScore + tradeImpScore + primdivscore + divscore + difdeadivscore + macdscore

            curATR = round(curATR, 2)
            ATRRatio = round(ATRRatio * 100, 2)

            ATRWZ = round(ATRWZ, 2)

            maprice = round(maprice, 2)
            colNames = [
                'code', 'name', 'period', 'curclose', 'sma', 'ATR', 'ATRRatio',
                'ATRWZ', 'primImpScore', 'tradeImpScore', 'primdivscore',
                'divscore', 'difdeascore', 'macdscore', 'totalscore'
            ]
            s = Series([
                code, name, period, curClose, maprice, curATR, ATRRatio, ATRWZ,
                primImpScore, tradeImpScore, primdivscore, divscore,
                difdeadivscore, macdscore, totalscore
            ],
                       index=colNames)

            dfSelected = dfSelected.append(s, ignore_index=True)
    dfSelected = dfSelected.sort_values(by='totalscore', ascending=False)
    dfSelected = pd.DataFrame(dfSelected.values, columns=dfSelected.columns)

    DI.Write_DF_T0_Excel(filepath, dfSelected, 'selected')