コード例 #1
0
ファイル: _data_generator.py プロジェクト: fagan2888/Bigfish
    def __init__(self, process, finish=None, maxsize=500, parent=None):
        """

        Parameters
        ----------
        config: BfConfig对象
        process: 每个数据bar事件来时的回调方法
        finish: 数据结束的回调方法
        maxsize: 缓存大小,默认500
        """
        LoggerInterface.__init__(self, parent=parent)
        ConfigInterface.__init__(self, parent=parent)
        self.__check_tf(self.config.time_frame)
        self.__maxsize = maxsize
        self.__dq = Queue(maxsize=maxsize * 2)  # 数据缓存器,避免数据在内存里过大,造成内存不足的错误
        self.__receiver = TickDataReceiver(parent=self)
        self.__receiver.register_event(self.config.symbols[0], self.product)
        self.__symbol = self.config.symbols[0]
        self.__handle = process  # 行情数据监听函数(可以想象成java的interface)
        self.__finish = finish  # 数据结束函数
        self._finished = False
        self.logger_name = "TickDataGenerator"
コード例 #2
0
ファイル: _data_generator.py プロジェクト: testmana2/Bigfish
    def __init__(self, config, process, finish=None, maxsize=500):
        """

        Parameters
        ----------
        config: BfConfig对象
        process: 每个数据bar事件来时的回调方法
        finish: 数据结束的回调方法
        maxsize: 缓存大小,默认500
        """
        # assert isinstance(config, Config)
        self.__check_tf(config.time_frame)
        self.__maxsize = maxsize
        self.__dq = Queue(maxsize=maxsize * 2)  # 数据缓存器,避免数据在内存里过大,造成内存不足的错误
        self.__config = config
        self.__receiver = TickDataReceiver()
        self.__receiver.register_event(config.symbols[0], self.product)
        self.__symbol = config.symbols[0]
        self.__handle = process  # 行情数据监听函数(可以想象成java的interface)
        self.__finish = finish  # 数据结束函数
        self._finished = False
コード例 #3
0
ファイル: _data_generator.py プロジェクト: xingetouzi/Bigfish
    def __init__(self, process, finish=None, maxsize=500, parent=None):
        """

        Parameters
        ----------
        config: BfConfig对象
        process: 每个数据bar事件来时的回调方法
        finish: 数据结束的回调方法
        maxsize: 缓存大小,默认500
        """
        LoggerInterface.__init__(self, parent=parent)
        ConfigInterface.__init__(self, parent=parent)
        self.__check_tf(self.config.time_frame)
        self.__maxsize = maxsize
        self.__dq = Queue(maxsize=maxsize * 2)  # 数据缓存器,避免数据在内存里过大,造成内存不足的错误
        self.__receiver = TickDataReceiver(parent=self)
        self.__receiver.register_event(self.config.symbols[0], self.product)
        self.__symbol = self.config.symbols[0]
        self.__handle = process  # 行情数据监听函数(可以想象成java的interface)
        self.__finish = finish  # 数据结束函数
        self._finished = False
        self.logger_name = "TickDataGenerator"
コード例 #4
0
ファイル: _data_generator.py プロジェクト: xingetouzi/Bigfish
class TickDataGenerator(LoggerInterface, ConfigInterface):
    """
    这个对象包括两个线程,一个生产者,一段一段的不断从数据库中查询记录,并存入缓存队列.
    另一个消费者,不断的从缓存队列中取数据,这样做的好处是避免一次回测的数据太多占用太多的内存
    基本使用:
    dg = DataGenerator(config, self.process, self.finished)  # 数据生成器
    dg.start()
    """

    def __init__(self, process, finish=None, maxsize=500, parent=None):
        """

        Parameters
        ----------
        config: BfConfig对象
        process: 每个数据bar事件来时的回调方法
        finish: 数据结束的回调方法
        maxsize: 缓存大小,默认500
        """
        LoggerInterface.__init__(self, parent=parent)
        ConfigInterface.__init__(self, parent=parent)
        self.__check_tf(self.config.time_frame)
        self.__maxsize = maxsize
        self.__dq = Queue(maxsize=maxsize * 2)  # 数据缓存器,避免数据在内存里过大,造成内存不足的错误
        self.__receiver = TickDataReceiver(parent=self)
        self.__receiver.register_event(self.config.symbols[0], self.product)
        self.__symbol = self.config.symbols[0]
        self.__handle = process  # 行情数据监听函数(可以想象成java的interface)
        self.__finish = finish  # 数据结束函数
        self._finished = False
        self.logger_name = "TickDataGenerator"

    @property
    def finished(self):
        return self._finished

    def empty(self):
        return self.__dq.empty()

    def consume(self):
        """
        从缓存队列中消费数据(生产行情信号)
        :return:
        """
        try:
            data = self.__dq.get(timeout=0.5)
            self.__handle(data)
        except Empty:
            pass
        except:
            self.logger.error("\n" + traceback.format_exc())
            self.stop()

    def start(self):
        self._finished = False
        # 启动生产者
        t1 = threading.Thread(target=self.__receiver.start)
        # t1.setDaemon(True)
        # 启动消费者
        t2 = threading.Thread(target=consume, args=(self,))
        # t2.setDaemon(True)
        t1.start()
        t2.start()

    def stop(self):
        if not self._finished:
            self._finished = True
            self.__receiver.stop()

    def finish(self):
        if self.__finish is not None:
            self.__finish()

    def product(self, tick):
        if not self._finished:
            try:
                self.__dq.put(tick, timeout=0.5)
            except Full:
                pass
            except:
                self.logger.error("\n" + traceback.format_exc())
                self.stop()

    @classmethod
    def __check_tf(cls, time_frame):
        check_time_frame(time_frame)
コード例 #5
0
ファイル: _data_generator.py プロジェクト: fagan2888/Bigfish
class TickDataGenerator(LoggerInterface, ConfigInterface):
    """
    这个对象包括两个线程,一个生产者,一段一段的不断从数据库中查询记录,并存入缓存队列.
    另一个消费者,不断的从缓存队列中取数据,这样做的好处是避免一次回测的数据太多占用太多的内存
    基本使用:
    dg = DataGenerator(config, self.process, self.finished)  # 数据生成器
    dg.start()
    """
    def __init__(self, process, finish=None, maxsize=500, parent=None):
        """

        Parameters
        ----------
        config: BfConfig对象
        process: 每个数据bar事件来时的回调方法
        finish: 数据结束的回调方法
        maxsize: 缓存大小,默认500
        """
        LoggerInterface.__init__(self, parent=parent)
        ConfigInterface.__init__(self, parent=parent)
        self.__check_tf(self.config.time_frame)
        self.__maxsize = maxsize
        self.__dq = Queue(maxsize=maxsize * 2)  # 数据缓存器,避免数据在内存里过大,造成内存不足的错误
        self.__receiver = TickDataReceiver(parent=self)
        self.__receiver.register_event(self.config.symbols[0], self.product)
        self.__symbol = self.config.symbols[0]
        self.__handle = process  # 行情数据监听函数(可以想象成java的interface)
        self.__finish = finish  # 数据结束函数
        self._finished = False
        self.logger_name = "TickDataGenerator"

    @property
    def finished(self):
        return self._finished

    def empty(self):
        return self.__dq.empty()

    def consume(self):
        """
        从缓存队列中消费数据(生产行情信号)
        :return:
        """
        try:
            data = self.__dq.get(timeout=0.5)
            self.__handle(data)
        except Empty:
            pass
        except:
            self.logger.error("\n" + traceback.format_exc())
            self.stop()

    def start(self):
        self._finished = False
        # 启动生产者
        t1 = threading.Thread(target=self.__receiver.start)
        # t1.setDaemon(True)
        # 启动消费者
        t2 = threading.Thread(target=consume, args=(self, ))
        # t2.setDaemon(True)
        t1.start()
        t2.start()

    def stop(self):
        if not self._finished:
            self._finished = True
            self.__receiver.stop()

    def finish(self):
        if self.__finish is not None:
            self.__finish()

    def product(self, tick):
        if not self._finished:
            try:
                self.__dq.put(tick, timeout=0.5)
            except Full:
                pass
            except:
                self.logger.error("\n" + traceback.format_exc())
                self.stop()

    @classmethod
    def __check_tf(cls, time_frame):
        check_time_frame(time_frame)