Esempio n. 1
0
    def getHistoryBars(self, code, cycle='1m', limit=100, inc_last=False):
        """获取历史k线
        剔除最后一根活动k线(盘中不能使用最后一根k线,或许是未完成计算的中间结果)
        result 以时间升序排列
        """
        # if self.bar_nums.get(ktype,0) == 0:
        #     return ()

        stock = self.product.getOrNewTradeObject(code)
        stk = stock.stk
        bars = {
            '1m': stk.MinuteData1,
            '5m': stk.MinuteData5,
            '15m': stk.MinuteData15,
            '30m': stk.MinuteData30,
            'd': stk.DailyData,
            'w': stk.WeeklyData,
            'm': stk.MonthlyData,
            'q': stk.QuarterlyData,
            'y': stk.YearlyData
        }
        result = []
        kdata = bars.get(cycle)
        max = kdata.Count
        offset = 0
        if not inc_last:
            offset = -1
        # print max - limit + offset, max + offset
        for num in range(max - limit + offset, max + offset):  # 不包含最后一根
            d = kdata[num]
            bar = stbase.BarData()
            bar.close = d.Close
            result.append(bar)
            # print d.Close
        return result
Esempio n. 2
0
    def on_bar_triggered(self, stock, cycle, kdata, num):
        """k线数据触发"""
        bar = kdata[num]
        data = stbase.BarData()
        data.amount = bar.Amount
        data.open = bar.Open
        data.high = bar.High
        data.low = bar.Low
        data.close = bar.Close
        data.vol = bar.Vol

        year,mon,day,hour,min,sec = bar.DateTime[:4],\
                                    bar.DateTime[4:6],\
                                    bar.DateTime[6:8],\
                                    bar.DateTime[8:10],\
                                    bar.DateTime[10:12],\
                                    bar.DateTime[12:14]

        data.time = datetime.datetime(int(year), int(mon), int(day), int(hour),
                                      int(min), int(sec))

        data.sys_time = datetime.datetime.now()
        data.code = stock.code
        data.trade_object = stock

        data.cycle = cycle
        data.num = num  # bar的最大流水
        self.putData(data)
Esempio n. 3
0
    def getHistoryBars(self, code, cycle, limit, now=None):
        """
		获取历史k线记录

		cycle:  k线周期类型
		limit:  最大返回记录
		now :  当前时间,  dataset[now-limit:now]

		:return:
		"""
        kmap = {'5m': '5', '15m': '15', '30m': '30', '60m': '60', 'd': 'D'}
        ktype = kmap.get(cycle)
        if not ktype:
            print 'Error: cycle({}) not match in getHistoryBars()'.format(
                cycle)
            return []
        result = []

        # 帅选出 指定时间 now 之前的 limit根 k线
        df = self.df[:now]
        print len(df)

        for time, close in df.close.to_dict().items():
            bar = stbase.BarData()
            bar.code = self.cfgs.get('code')
            bar.cycle = ktype
            bar.time = time
            bar.close = close
            result.append(bar)
        return result
Esempio n. 4
0
    def open(self):
        """加载历史行情,开始播放"""
        df = self.df

        st = self.cfgs.get('play_start')
        et = self.cfgs.get('play_end')

        # 过滤回放时间段的记录
        df = df[st:et]

        rows = zip(df.index, df.close)
        # for time_,close in rows.items():
        for _ in rows:
            time_, close = _
            bar = stbase.BarData()
            bar.code = self.cfgs.get('code')
            bar.time = parse(time_)
            bar.close = close

            if self.cfgs.get('wait_sec'):
                time.sleep(self.cfgs.get('wait_sec'))
            if self.market:

                if self.cfgs.get('async_send'):  # 异步发送推入 market的接收队列
                    self.market.putData(bar)
                else:  # 否则直接调用 行情 处罚处理接口
                    self.market.onBar(bar)
            else:
                print bar.dict()
Esempio n. 5
0
    def open(self):
        """开始播放"""

        st = self.cfgs.get('play_start')
        if not st:
            st = datetime.datetime.now()
            st = st.replace(hour=9, minute=20, second=0)
        else:
            st = parse(self.cfgs.get('play_start'))

        et = None
        if self.cfgs.get('play_end'):
            et = parse(self.cfgs.get('play_end'))
        if not et:
            et = datetime.datetime.now()
            et = et.replace(hour=15, minute=20, second=0)

        if self.cfgs.get('ktype'):
            collname = '{}_{}'.format(self.cfgs.get('code'),
                                      self.cfgs.get('ktype'))
        else:  # tick 数据
            collname = self.cfgs.get('code')

        coll = self.db[collname]
        rs = coll.find({'time': {'$gte': st, '$lte': et}}).sort('time', 1)
        rs = list(rs)

        if self.onStart:
            self.onStart()
        # rs.append({})
        for r in rs:
            if self.cfgs.get('ktype'):
                data = stbase.BarData()
            else:
                data = stbase.TickData()

            # object_assign(data,r)
            data.assign(r)
            # if not data.code:
            # 	print data
            if self.cfgs.get('wait_sec'):
                time.sleep(self.cfgs.get('wait_sec'))

            if self.market:
                if self.cfgs.get('async_send'):
                    self.market.putData(data)
                else:
                    if self.cfgs.get('ktype'):
                        self.market.onBar(data)
                    else:
                        self.market.onTick(data)
            else:
                print data.dict()

        if self.onEnd:
            self.onEnd()