def getDailyFuturesDetails(self, BegDate, EndDate, symbol): detailsDF = pd.DataFrame( self.tsbytestostr( ts.RemoteExecute( '''N:=TradeDays(StrToDate('%s'),StrToDate('%s')); return nday(N, 'DATE', datetimetostr(sp_time()), 'CLOSE', close(), 'HIGH', high(), 'LOW', low(), 'OPEN',open(), 'AMOUNT',amount(), "SETTLEMENT",Settlement(), "OPENINT",OpenInterest(), "VOL",vol(), 'CONTRACT',base(703001), 'COMMODITY',base(703003), 'MARGIN',FuturesTradingMarginRate(sp_time(),0));''' % (BegDate, EndDate), { 'StockID': symbol, "CurrentDate": ts.LocalCallFunc( "StrToDate", [EndDate])[1] }))[1]) try: detailsDF['COMMODITY'] = [ x.upper() for x in detailsDF['COMMODITY'] ] except Exception as e: print('-------------------') print(e) print('%s合约没有数据!!!' % symbol) print('-------------------') return detailsDF
def getTickDetails(self, BegDate, EndDate, contract_code, symbol): # tick_details = pd.DataFrame(self.tsbytestostr(ts.RemoteExecute( '''a:=select ["StockID"],["StockName"],["date"],["price"],["vol"],["amount"],["cjbs"],["yclose"],["syl1"],["syl2"],["buy1"],["sale1"],["bc1"],["sc1"] from tradetable datekey %s+21/24 to %s+16/24 of '%s' end;b:=update a set ['date']=datetimetostr(['date']) end;return a;''' % ( # ts.LocalCallFunc("StrToDate", [BegDate])[1], ts.LocalCallFunc("StrToDate", [EndDate])[1], contract_code),{}))[1]) # tick_details.to_csv('%s%s_%s.csv'%(path,symbol,EndDate),index=False) # return tick_details # tick_details = pd.DataFrame(self.tsbytestostr(ts.RemoteExecute( # '''a:=select ["StockID"],["StockName"],["date"],["price"],["vol"],["amount"],["cjbs"],["yclose"],["syl1"],["syl2"],["buy1"],["sale1"],["bc1"],["sc1"] from tradetable datekey %s+21/24 to %s+16/24 of '%s' end;b:=update a set ['date']=datetimetostr(['date']) end;return a;''' % ( # ts.LocalCallFunc("StrToDate", [BegDate])[1], ts.LocalCallFunc("StrToDate", [EndDate])[1], contract_code), # {}))[1]) if self.mc is None: # self.mc = mongodb_client() self.mc.dbConnect() # dateList=self.getTradeDays( # (datetime.datetime.strptime(BegDate, '%Y-%m-%d') - datetime.timedelta(3)).strftime('%Y-%m-%d'), EndDate) # BegDateAdj=dateList[max(0,dateList.index(BegDate)-1)] tick_dict = self.tsbytestostr( ts.RemoteExecute( '''a:=select ["StockID"],["StockName"],["date"],["price"],["vol"],["amount"],["cjbs"],["yclose"],["syl1"],["syl2"],["buy1"],["sale1"],["bc1"],["sc1"] from tradetable datekey %s to %s+0.9999999 of '%s' end;b:=update a set ['date']=datetimetostr(['date']) end;return a;''' % (ts.LocalCallFunc("StrToDate", [BegDate])[1], ts.LocalCallFunc("StrToDate", [EndDate])[1], contract_code), {}))[1] # datetime.datetime.strptime(tick_dict['date'][0], '%Y-%m-%d %H:%M:%S').replace(microsecond=500000) last_tick_datetime = None count = 0 for d in tick_dict: tick = CtaTickData() tick.vtSymbol = d['StockName'] tick.symbol = d['StockID'] # 合约代码 CF1705 StockID # tick.exchange = EMPTY_STRING # 交易所代码 # 成交数据 tick.lastPrice = d['price'] # 最新成交价 tick.volume = d['vol'] #最新成交量 tick.amount = d['amount'] # 成交金额 tick.cjbs = d['cjbs'] # 周期内成交笔数 tick.yclose = d['yclose'] # 上一收盘价 tick.preSettlement = d['syl2'] # 上一日结算价 # tick的时间 # 转换为datetime格式 try: if len(d['date']) > 10: tick.datetime = datetime.datetime.strptime( d['date'], '%Y-%m-%d %H:%M:%S') # python的datetime时间对象 else: tick.datetime = datetime.datetime.strptime( d['date'], '%Y-%m-%d') tick.date = tick.datetime.strftime('%Y-%m-%d') # 日期 tick.time = tick.datetime.strftime('%H:%M:%S') # 时间 # tick.tradingDay = d['price'] # 交易日期 except Exception as ex: # 抛弃本tick print('日期转换错误:%s,error:%s' % (d['date'], ex)) continue # 1档行情 tick.bidPrice1 = d['buy1'] tick.askPrice1 = d['sale1'] tick.bidVolume1 = d['bc1'] tick.askVolume1 = d['sc1'] # 修正毫秒 if tick.datetime.replace(microsecond=0) == last_tick_datetime: # 与上一个tick的时间(去除毫秒后)相同,修改为500毫秒 tick.datetime = tick.datetime.replace(microsecond=500000) tick.time = tick.datetime.strftime('%H:%M:%S.%f') else: tick.datetime = tick.datetime.replace(microsecond=0) tick.time = tick.datetime.strftime('%H:%M:%S.%f') # 记录最新tick的时间 last_tick_datetime = tick.datetime if symbol == 'TC': symbol = 'ZC' if symbol == 'RO': symbol = 'OI' if symbol == 'ER': symbol = 'RI' if symbol == 'WS': symbol = 'WH' if symbol == 'ME': symbol = 'MA' self.mc.dbInsert('FUTURE_TICK_DB', 'TS_%s_TickDatas' % symbol, d=tick.__dict__) count = count + 1 print('写入合约%s完成,共%d条' % (contract_code, count)) return