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)
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
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
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