def create(self): CSV = csvFile( folder="/data/csv", filename="rate_%s_%s.csv" % ('SZ', '05'), headers=["code", "name", "count", "avg", "rate", 'firstday']) # 查询sql,获取code列表 res = self.Sql.getCodes() i = 0 for item in res: #if item[0] not in ["601601","002142","601238","601211","601818"]: continue # 计算波动率 _f, _c, _m, _sd = self.calc(item[0]) doc = { "code": str(item[0]), "name": item[1], "count": _c, "avg": _m, # 均值 "rate": _sd, # 标准差 "firstday": _f } #print(doc) #if i% 100==0: print(i, doc) CSV.writeLine(doc) i += 1 CSV.close()
def getWave(self, market='HK', stock_type="STOCK", autype='qfq'): date = public.getDate(diff=0) CSV = csvFile(folder="/data/csv", filename="rate_%s_%s_%s.csv" % (market, autype, date), headers=["code", "name", "count", "avg", "rate"]) df = self.getStockInfo(market, stock_type) i = 0 for index, row in df.iterrows(): _c, _m, _s = self.getHistory(row["code"], autype) doc = { "code": row["code"], "name": row["name"], "count": _c, "avg": _m, "rate": _s } #print(doc) #break if i % 100 == 0: print(i, doc) i += 1 CSV.writeLine(doc) CSV.close()
def order(self, docs, type='stock_order', param=None): if docs is None: exit() # 策略名称 stage = self.param_map["stage"] if param is not None: stage = param["stage"] maps = self.matic_csv_map[type] # 文件夹对应文件 filename = maps["filename"] % (stage, self.getTime()) CSV = csvFile(folder=self.iniKey("orders"), filename=filename, headers=[n[0] for n in maps["columns"]]) # 生成csv文件 No = self.getIndex() # 日期内唯一序号 for doc in docs: rec = self.parseDoc(doc, "stock_order", No) CSV.writeLine(rec) No += 1 # 执行完回写index self.setIndex(No) CSV.close()
def order(self, docs, type='stock_order', callback=None): if not docs or len(docs) == 0: return None maps = self.matic_csv_map[type] # 文件夹对应文件 filename = maps["filename"] % ( self.stage, str(public.getDatetime(style=self.timeStyle))[:-3]) CSV = csvFile(folder=self.Folder, filename=filename, headers=[n[0] for n in maps["columns"]]) orders = [] for doc in docs: order = copy.deepcopy(doc) c = doc['code'] order.update({ "code": c[:c.find('.')], "market": 'SZ' if c.find('XSHE') > -1 else 'SH' if c.find('XSHG') > -1 else '', 'mode': doc['isBuy'], 'type': "stock", 'volume': doc['vol'], 'createtime': public.getDatetime() }) # 检查资金和持仓 if not self.check(order): continue rec = self.parseDoc(order, "stock_order") CSV.writeLine(rec) doc.update({ "orderID": rec["local_report_no"], "returnid": rec["local_report_no"], }) orders.append(doc) CSV.close() # ftp 上传 if self.ftpUsed: self.ftpUpload(filename) # 保存序号, 待bug修复后 改为uuid self.setIndex(self.recordIndex) # 检查操作结果,回写数据库 return self.result(orders)
def getBase(self, code): df = self.getH(code) CSV = csvFile(folder="/data/csv", filename="k_%s.csv" % (code), headers=df.columns.tolist()) for index, row in df.iterrows(): doc = {} for key in df.columns.tolist(): doc[key] = row[key] CSV.writeLine(doc) CSV.close()
def check(self): time0 = time.time() CSV = csvFile(folder="/data/csv", filename="history.csv", headers=[ "代码", "正股", "名称", "最低点时间", "最低点价格", "最高价时间", "最高点", '行使价', '换股比率', '到期日', '初始日low', '初始日high', '购后最低价', '购后最低价时间', '购后最高价', '购后最高价时间' ]) doc_list = [] i = 0 for code, owner, name, res in self.getK(): if res: na = np.array((res)) # 检查存在0.01的标的 # n = np.where((na[1,:]<= 0.010) & (na[1,:]> 0.0)) n = np.where(na[1, :] == 0.010) if n[0].size > 0: nw = na[:, n[0][0]:] imax = np.max(nw[2]) # 取最高价 if imax > 0.0: # 查询最大值所在时间 nmax = np.where(nw[2, :] == imax) doc = { "代码": code, "code": code, "正股": owner, "owner": owner, "名称": name, "最低点时间": na[0][n[0][0]], "starttime": na[0][n[0][0]], "最低点价格": na[1][n[0][0]], "最高价时间": nw[0][nmax[0][0]], "endtime": nw[0][nmax[0][0]], "最高点": imax } doc_list.append(doc) # 添加其他信息 #CSV.writeLine(doc) if i % 100 == 0: print(i, code, time.time() - time0) i += 1 # 添加其他信息 doc_list = self.updateDoclist(doc_list) # 添加正股信息 for doc in doc_list: for key in ['endtime', 'starttime', 'owner', 'code']: del doc[key] CSV.writeLine(doc) CSV.close()
def getWave(self, market='HK', autype='qfq'): CSV = csvFile(folder="/data/csv", filename="rate_%s_%s.csv" % (market, autype), headers=["code", "name", "rate"]) df = self.getStockInfo(market) i = 0 for index, row in df.iterrows(): i += 1 doc = { "code": row["code"], "name": row["name"], "rate": self.getHistory(row["code"], autype) } if i % 200 == 0: print(i, doc) if i > 2: return CSV.writeLine(doc) CSV.close()