def ProcessQuarterPaper(self, year, position): if 'sjltz' in self.checkPoint[year][position]: speed = -11 try: # 存在这个值为“-”的情形 speed = float(self.checkPoint[year][position]['sjltz']) self.checkPoint[year][position]['sjltz'] = speed except Exception as e: pass if speed < -10: self.dangerousPoint.append( (util.Quater2Date(year, position), self.MAXEND, year, position, speed)) elif speed > 0: # 增速转正,如果之前有负的,要结合负的计算出冷冻区间(此区间不开仓) if len(self.dangerousPoint) > 0: # 找到所有没有填充终止的条目,全部填上当前时间点 dirtyFlag = False for index in range(len(self.dangerousPoint)): if self.dangerousPoint[index][1] == self.MAXEND: dirtyFlag = True self.dangerousPoint[index] = ( self.dangerousPoint[index][0], util.Quater2Date(year, position), self.dangerousPoint[index][2], self.dangerousPoint[index][3], self.dangerousPoint[index][4]) # 清理在起始时间小于终止时间的区间(比如从2011年2季度开始,2,3,4季度都是负,2012年一季度转正) # 此时dangerousPoint里面有多个条目:(2011-2,2012-1),(2011-3,2012-1),(2011-4,2012-1) # 其中(2011-3,2012-1),(2011-4,2012-1)是没有意义的,需要删除 if dirtyFlag: tmp = [] have = set() for index in range(len(self.dangerousPoint)): if self.dangerousPoint[index][1] not in have: have.add(self.dangerousPoint[index][1]) tmp.append(self.dangerousPoint[index]) else: pass self.dangerousPoint = tmp
def __init__(self, code, name, startYear, startDate, endDate): self.code = code self.name = name self.startYear = startYear self.startDate = startDate self.endDate = endDate self.checkPoint = {} # 所有的年报季报除权等影响买卖点的特殊时点 self.dangerousPoint = [] # 利润同比下滑超过10%的位置 self.dividendPoint = [] # 除权的日期 self.MAXEND = util.Quater2Date(2099, 'first') # 默认的冻结开仓截止日期 self.dividendAdjust = {} # 除权日,调整买入卖出价格 self.statisticsYears = None # 参与统计的总年数 self.dividendYears = 0 # 有过分红的年数