コード例 #1
0
 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
コード例 #2
0
    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