def detect(self, df0, period=14, uid=''): docs = self.stageApply(df0, period=period, uid=uid) res = pd.DataFrame(docs) if len(res) > 0: if self.saveDetail: self.Train.insertAll(docs) diff = res[res['diff'] > 0]['diff'].mean() self.testDays = public.dayDiff(self.endDate, self.startDate) # 计算最大回测 sum = res['income'].cumsum() + self.iniAmount inr = res['income'] / self.iniAmount # 计算夏普指数 sha = (res['income'].sum() / self.iniAmount - 0.02 * self.testDays / 252) / inr.std() doc = { "count": int(len(docs) / 2), "amount": self.iniAmount, "price": res['price'].mean(), "income": res["income"].sum(), # "delta": res['delta'].mean(), "maxdown": ((sum.shift(1) - sum) / sum.shift(1)).max(), "sharprate": sha, "timediff": int(0 if np.isnan(diff) else diff) } #print(self.code, doc['count'], doc['income']) return doc else: return None
def record(self): # 510050 行情 stock = self.Int.get510050() stock["datetime"] = public.getDatetime() self.Owner.insert(stock) # 期权行情 etfs = self.Int.get_price() spys = [] self.price_owner = float(stock["price"]) for i in range(0, len(etfs), 2): # 计算剩余天数 r = public.dayDiff(self.Int.expireMap[etfs[i]["code"]], public.getDate()) rec0 = self.calc(etfs[i], etfs[i + 1], r, mode=0) spys.append(rec0) rec1 = self.calc(etfs[i + 1], etfs[i], r, mode=1) spys.append(rec1) # inform 通知 try: self.inform(spys) except: logger.error("ws disconnect") # 写入数据库 self.sPrice.insertAll(etfs) self.Spy.insertAll(spys)
def main(): action = { "kline": 1, "area":0 } if action["kline"] == 1: obj = train_future_jump_sg() obj.Pool() if action["area"] == 1: obj = train_future_jump_sg() Rice = interface_Rice() for t in [1, 2]: lists = obj.getList(t) df = pd.DataFrame(lists) if t==1: df['diff'] = df.apply(lambda r: public.timeDiff(r['enddate'], r['startdate'])//86400, axis=1) else: df['diff'] = df.apply(lambda r: public.dayDiff(r['enddate'], r['startdate']), axis=1) file = Rice.basePath + 'area_%s_sg.csv' % (t) df.to_csv(file, index=0, columns=['code', 'name', 'startdate', 'enddate', 'diff'])