コード例 #1
0
 def testSelectSignalByDateAndInnerCode(self):
     signalData = SourceDataDao.load_signal_data('')
     signalData = SourceDataDao.select_signal_by_date_and_inner_code(signalData, '2004-01-31', '000049.SZ')
     # self.assertEqual(self.sum(1, 2), 3)
     print('signalData:'+str(len(signalData)))
     #print(signalData)
     self.assertNotEqual(len(signalData), 0)
コード例 #2
0
def getActualSellList(planSellList, tradingDate, signalData, dailyQuote,
                      numOfToKeepInSellList, cannotSellList):
    if len(planSellList) == 0:
        return planSellList
    #创建2列DF,innerCode,Mom(空)
    dic = {StockConst.INNERCODE: planSellList}
    sortedSellDf = pd.DataFrame(data=dic)
    sortedSellDf.insert(1, StockConst.MOM, Series())
    #print(sortedSellList)
    #从信号数据中获取Mom用于排序
    for innerCode in planSellList:
        signalEntity = SourceDataDao.select_signal_by_date_and_inner_code(
            signalData, tradingDate, innerCode)
        #entity = signalData.ix[(tradingDate, innerCode)]
        sortedSellDf.loc[(sortedSellDf[StockConst.INNERCODE] == innerCode),
                         [StockConst.MOM]] = signalEntity[StockConst.MOM]
    #按Mom倒序排序
    sortedSellDf = sortedSellDf.sort_values(by=StockConst.MOM, ascending=False)

    #卖出列表中保留的股票
    toKeepInSellList = []
    #保留的股票: 停牌或一字跌停股
    #if len(toKeepInSellList) < numOfToKeepInSellList:
    for index, row in sortedSellDf.iterrows():
        innerCode = row[StockConst.INNERCODE]
        #try:
        isCannotSell = SourceDataDao.check_if_cannot_sell(
            dailyQuote, tradingDate, innerCode)
        #except:
        #print('getToSellInSellList '+DateUtil.datetime2Str(tradingDate)+' '+str(innerCode))
        #print(sortedSellDf)
        #print(sellList)
        #print(currHoldSet)
        #print(dailyQuoteRow)
        #退市的股票:卖出

        #不能卖
        if isCannotSell:
            toKeepInSellList.append(innerCode)
            cannotSellList.append(innerCode)

    # 保留的股票:按sortedSellDf的顺序加入
    for index, row in sortedSellDf.iterrows():
        if len(toKeepInSellList) < numOfToKeepInSellList:
            innerCode = row[StockConst.INNERCODE]
            if (innerCode not in toKeepInSellList):
                toKeepInSellList.append(innerCode)

    #去掉需要保留的股票
    actualSellList = sortedSellDf[~(
        sortedSellDf[StockConst.INNERCODE].isin(toKeepInSellList))][
            StockConst.INNERCODE].values
    #print('toSellInSellList')
    #print(toSellInSellList)

    return actualSellList
コード例 #3
0
def sort_by_tech(planSellList, signalData, tradingDay, tech):
    techDict = {}
    for innerCode in planSellList:
        signalEntity = SourceDataDao.select_signal_by_date_and_inner_code(signalData, tradingDay, innerCode)
        techDict.setdefault(innerCode, signalEntity[tech])  # TODO

    dict = sorted(techDict.items(), key=lambda d: d[1], reverse=True)
    # print(dict)
    planSellList2 = []
    for x in dict: planSellList2.append(x[0])
    return planSellList2
コード例 #4
0
def getActualSellList(planSellList,tradingDate,signalData,dailyQuote,numOfToKeepInSellList,cannotSellList):
    if len(planSellList) == 0:
        return planSellList

    if StockConst.IS_DEBUG:
        start_1 = time.clock()

    # #创建2列DF: innerCode,Mom(空)
    # dic = {StockConst.InnerCode: planSellList}
    # sortedSellDf = pd.DataFrame(data=dic)
    # sortedSellDf.insert(1, StockConst.Mom, Series())
    # sortedSellDf = sortedSellDf.set_index([StockConst.InnerCode])
    # # print(sortedSellDf)
    #
    # # sortedSellDf = sortedSellDf.groupby(level=0).apply(setMom,tradingDate,signalData)#tradingDate,signalData
    # # print(sortedSellDf)
    #
    # for index, row in sortedSellDf.iterrows():
    #     innerCode = index
    #     signalEntity = SourceDataDao.selectSignalByDateAndInnerCode2(signalData, tradingDate, innerCode, StockConst.Mom)
    #     # sortedSellDf.loc[index, [StockConst.Mom]] = signalEntity[StockConst.Mom]
    #     sortedSellDf.loc[index, [StockConst.Mom]] = signalEntity

    techDict = {}
    for innerCode in planSellList:
        signalEntity = SourceDataDao.select_signal_by_date_and_inner_code(signalData, tradingDate, innerCode)
        techDict.setdefault(innerCode, signalEntity[StockConst.MOM])#TODO

    dict = sorted(techDict.items(), key=lambda d: d[1], reverse=True)
    # print(dict)
    planSellList = []
    for x in dict: planSellList.append(x[0])

    #print(sortedSellList)
    #从信号数据中获取Mom用于排序
    # for innerCode in planSellList:
    #     # signalEntity = SourceDataDao.selectSignalByDateAndInnerCode(signalData, tradingDate, innerCode)
    #     #entity = signalData.ix[(tradingDate, innerCode)]
    #     sortedSellDf.loc[(sortedSellDf[StockConst.InnerCode] == innerCode), [StockConst.Mom]] = 1 # signalEntity[StockConst.Mom]

    # sortedSellDf = signalData[(signalData.index.get_level_values(0) == tradingDate) & (signalData.index.get_level_values(1).isin(planSellList))]

    #按Mom倒序排序
    # sortedSellDf = sortedSellDf.sort_values(by=StockConst.Mom, ascending=False)
    # print(sortedSellDf)

    if StockConst.IS_DEBUG:
        end_1 = time.clock()
        print("节点1花费时间:%f s" % (end_1 - start_1))

    if StockConst.IS_DEBUG:
        start_2 = time.clock()

    #卖出列表中保留的股票
    toKeepInSellList = []
    #保留的股票: 停牌或一字跌停股
    #if len(toKeepInSellList) < numOfToKeepInSellList:
    for innerCode in planSellList:
    # for index,row in sortedSellDf.iterrows():
        # innerCode = row[StockConst.InnerCode]
        # innerCode = index
        #try:
        isCannotSell = SourceDataDao.check_if_cannot_sell(dailyQuote, tradingDate, innerCode)
        # isCannotSell = False
        #except:
             #print('getToSellInSellList '+DateUtil.datetime2Str(tradingDate)+' '+str(innerCode))
             #print(sortedSellDf)
             #print(sellList)
             #print(currHoldSet)
             #print(dailyQuoteRow)
             #退市的股票:卖出

        #不能卖
        if isCannotSell:
            toKeepInSellList.append(innerCode)
            cannotSellList.append(innerCode)

    if StockConst.IS_DEBUG:
        end_2 = time.clock()
        print("节点2花费时间:%f s" % (end_2 - start_2))

    if StockConst.IS_DEBUG:
        start_3 = time.clock()

    # 保留的股票:按sortedSellDf的顺序加入
    # for index,row in sortedSellDf.iterrows():
    for innerCode in planSellList:
        if len(toKeepInSellList) < numOfToKeepInSellList:
            # innerCode = row[StockConst.InnerCode]
            # innerCode = index
            if(innerCode not in toKeepInSellList) :
                toKeepInSellList.append(innerCode)

    #去掉需要保留的股票
    # actualSellList = sortedSellDf[~(sortedSellDf.index.get_level_values(1).isin(toKeepInSellList))].index.get_level_values(1)
    # actualSellList = sortedSellDf[~(sortedSellDf[StockConst.InnerCode].isin(toKeepInSellList))][StockConst.InnerCode].values
    actualSellList = list(set(planSellList).difference(set(toKeepInSellList)))
    #print('toSellInSellList')
    #print(toSellInSellList)

    if StockConst.IS_DEBUG:
        end_3 = time.clock()
        print("节点3花费时间:%f s" % (end_3 - start_3))

    return actualSellList