예제 #1
0
    def _load_data(self, strpcons, dt_start, dt_end, n, spec_date):
        all_data = OrderedDict()
        max_window = -1
        log.info("loading data...")
        pcontracts = [PContract.from_string(s) for s in strpcons]
        pcontracts = sorted(pcontracts, key=PContract.__str__, reverse=True)
        for i, pcon in enumerate(pcontracts):
            strpcon = str(pcon)
            if strpcon in spec_date:
                dt_start = spec_date[strpcon][0]
                dt_end = spec_date[strpcon][1]
            assert (dt_start < dt_end)
            if n:
                raw_data = self._data_manager.get_last_bars(strpcon, n)
            else:
                raw_data = self._data_manager.get_bars(strpcon, dt_start,
                                                       dt_end)
            if len(raw_data) == 0:
                continue
            all_data[strpcon] = raw_data
            max_window = max(max_window, len(raw_data))

        if n:
            assert (max_window <= n)
        if len(all_data) == 0:
            assert (False)
            # @TODO raise
        return all_data, max_window
예제 #2
0
 def _load_data(self, strpcons, dt_start, dt_end, n, spec_date):
     all_data = OrderedDict()
     max_window = -1
     logger.info("loading data...")
     pbar = ProgressBar().start()
     pcontracts = [PContract.from_string(s) for s in strpcons]
     pcontracts = sorted(pcontracts, reverse=True)
     for i, pcon in enumerate(pcontracts):
         strpcon = str(pcon)
         if strpcon in spec_date:
             dt_start = spec_date[strpcon][0]
             dt_end = spec_date[strpcon][1]
         assert (dt_start < dt_end)
         if n:
             wrapper = self._data_manager.get_last_bars(strpcon, n)
         else:
             wrapper = self._data_manager.get_bars(strpcon, dt_start,
                                                   dt_end)
         if len(wrapper) == 0:
             continue
         all_data[strpcon] = DataContext(wrapper)
         max_window = max(max_window, len(wrapper))
         pbar.update(i * 100.0 / len(strpcons))
         # progressbar.log('')
     if n:
         assert (max_window <= n)
     pbar.finish()
     if len(all_data) == 0:
         assert (False)
         # @TODO raise
     return all_data, max_window
예제 #3
0
 def _load_data(self, strpcons, dt_start, dt_end, n, spec_date):
     all_data = OrderedDict()
     max_window = -1
     logger.info("loading data...")
     pbar = ProgressBar().start()
     pcontracts = [PContract.from_string(s) for s in strpcons]
     pcontracts = sorted(pcontracts, reverse=True)
     for i, pcon in enumerate(pcontracts):
         strpcon = str(pcon)
         if strpcon in spec_date:
             dt_start = spec_date[strpcon][0]
             dt_end = spec_date[strpcon][1]
         assert(dt_start < dt_end)
         if n:
             wrapper = self._data_manager.get_last_bars(strpcon, n)
         else:
             wrapper = self._data_manager.get_bars(strpcon, dt_start, dt_end)
         if len(wrapper) == 0:
             continue
         all_data[strpcon] = DataContext(wrapper)
         max_window = max(max_window, len(wrapper))
         pbar.update(i*100.0/len(strpcons))
         # progressbar.log('')
     if n:
         assert(max_window <= n)
     pbar.finish()
     if len(all_data) == 0:
         assert(False)
         # @TODO raise
     return all_data, max_window
예제 #4
0
def stock(code, period='1.Day'):
    """ 构建周期合约结构的便捷方式。
    
       :param str code: 股票代码。
       :param str period: 回测周期。
       :return: 周期合约。
       :rtype: PContract
    """
    from quantdigger.datastruct import PContract, Contract, Period
    return PContract(Contract('%s.stock' % code), Period(period))
예제 #5
0
def pcontract(contract, period):
    """ 构建周期合约结构的便捷方式。
    
       :param str contract: 合约如:'IF000.SHEF'
       :param str Period: 周期如:'10.Minute' 
       :return: 周期合约
       :rtype: PContract
    """
    from quantdigger.datastruct import PContract, Contract, Period
    return PContract(Contract(contract), Period(period))
예제 #6
0
    def import_bars(self, data_iter, strpcon):
        """ 导入交易数据

        Args:
            data_iter (iteratorable object): 数据['datetime', 'open', 'close',
            'high', 'low', 'volume']
            strpcon (str): 周期合约字符串如, 'AA.SHFE-1.Minute'

        """
        pcontract = PContract.from_string(strpcon)
        self._src.import_bars(data_iter, pcontract)
예제 #7
0
파일: data.py 프로젝트: wocclyl/quantdigger
    def import_bars(self, data_iter, strpcon):
        """ 导入交易数据    
        
        Args:
            data_iter (iteratorable object): 数据['datetime', 'open', 'close',
            'high', 'low', 'volume']
            strpcon (str): 周期合约字符串如, 'AA.SHFE-1.Minute' 

        """
        pcontract = PContract.from_string(strpcon)
        self._src.import_bars(data_iter, pcontract)
예제 #8
0
    def __getitem__(self, strpcon):
        """ 获取跨品种合约 """
        ## @TODO 
        #if type(strpcon) == str:
            #pass 
        #self._cur_data_context = self._data_contexts[pcon]

        ## @TODO 字典,str做key
        tt = PContract.from_string(strpcon)
        for key, value in self._data_contexts.iteritems():
            if str(key) == str(tt):
                return value
예제 #9
0
def stock(code, period='1.Day'):
    """ 构建周期合约结构的便捷方式。
    
    Args:
        code (str) : 股票代码
        period(str): 回测周期

    Returns:
        PContract. 周期合约
    """
    from quantdigger.datastruct import PContract, Contract, Period
    return PContract(Contract('%s.stock' % code), Period(period))
예제 #10
0
파일: data.py 프로젝트: wocclyl/quantdigger
    def get_bars(self, strpcon, dt_start, dt_end):
        """ 获取本地历史数据    
        
        Args:
            strpcon (str): 周期合约
            dt_start (datetime): 数据的开始时间
            dt_end (datetime): 数据的结束时间

        Returns:
            SourceWrapper. 数据
        """
        pcontract = PContract.from_string(strpcon)
        return self._src.get_bars(pcontract, dt_start, dt_end)
예제 #11
0
 def data(self, strpcon=None):
     """ 周期合约数据, 只有向量运行才有意义。
     
     Args:
         strpcon (str): 周期合约,如'BB.SHFE-1.Minute' 
     
     Returns:
         pd.DataFrame. 数据
     """
     pcon = self._main_pcontract
     if strpcon:
         pcon = PContract.from_string(strpcon)
     return self._dcontexts[pcon].raw_data
예제 #12
0
    def get_bars(self, strpcon, dt_start, dt_end):
        """ 获取本地历史数

        Args:
            strpcon (str): 周期合约
            dt_start (datetime): 数据的开始时间
            dt_end (datetime): 数据的结束时间

        Returns:
            SourceWrapper. 数据
        """
        pcontract = PContract.from_string(strpcon)
        return self._src.get_bars(pcontract, dt_start, dt_end)
예제 #13
0
 def data(self, strpcon=None):
     """ 周期合约数据
     
     Args:
         strpcon (str): 周期合约,如'BB.SHFE-1.Minute' 
     
     Returns:
         pd.DataFrame. 数据
     """
     pcon = self._main_pcontract
     if strpcon:
         pcon = PContract.from_string(strpcon) 
     return self._dcontexts[pcon].raw_data
예제 #14
0
 def data(self, strpcon=None):
     """ 周期合约数据, 只有向量运行才有意义。
     
     Args:
         strpcon (str): 周期合约,如'BB.SHFE-1.Minute' 
     
     Returns:
         pd.DataFrame. 数据
     """
     if series.g_rolling:
         assert(False and '只有向量运行才存在数据') 
     pcon = self._main_pcontract
     if strpcon:
         pcon = PContract.from_string(strpcon) 
     return self._dcontexts[pcon].raw_data
예제 #15
0
 def data(self, strpcon=None):
     """ 周期合约数据, 只有向量运行才有意义。
     
     Args:
         strpcon (str): 周期合约,如'BB.SHFE-1.Minute' 
     
     Returns:
         pd.DataFrame. 数据
     """
     if series.g_rolling:
         assert (False and '只有向量运行才存在数据')
     pcon = self._main_pcontract
     if strpcon:
         pcon = PContract.from_string(strpcon)
     return self._dcontexts[pcon].raw_data
예제 #16
0
    def get_bars(self, strpcon, dt_start, dt_end):
        """ 获取本地历史数据    
        
        Args:
            strpcon (str): 周期合约
            dt_start (datetime): 数据的开始时间
            dt_end (datetime): 数据的结束时间

        Returns:
            SourceWrapper. 数据
        """
        pcontract = PContract.from_string(strpcon)
        if pcontract.contract.exchange == 'stock':
            return []
        else:
            return self._src.get_bars(pcontract, dt_start, dt_end)
예제 #17
0
    def indicators(self, j=None, strpcon=None):
        """ 返回第j个策略的指标, 默认返回组合的所有指标。
        
        Args:
            j (int): 第j个策略

            strpcon (str): 周期合约
        
        Returns:
            dict. {指标名:指标}
        """
        pcon = PContract.from_string(strpcon) if strpcon else self._main_pcontract
        if j != None:
            return self._dcontexts[pcon].indicators[self.i][j]
        rst = { }
        for j in range(0, len(self._blts)):
            rst.update(self._dcontexts[pcon].indicators[self.i][j])
        return rst
예제 #18
0
 def _tranform_data(self, data: "Dict((strpcon, DataFrame))"):
     for s_pcontract, raw_data in six.iteritems(data):
         original = OriginalData(PContract.from_string(s_pcontract),
                                 raw_data)
         derived = DerivedData()
         pcontract_data = PContractData(s_pcontract, original, derived)
         self._all_pcontract_data[s_pcontract] = pcontract_data
         # PContract -- 'IF000.SHEF-10.Minutes'
         # 简化策略用户的合约输入。
         symbol_exchange = s_pcontract.split('-')[0]
         same_contracts = list(
             filter(lambda x: x.startswith(symbol_exchange), data.keys()))
         if len(same_contracts) == 1:
             self._all_pcontract_data[symbol_exchange] = pcontract_data
         symbol = s_pcontract.split('.')[0]
         num_same_contract = list(
             filter(lambda x: x.startswith(symbol), data.keys()))
         if len(same_contracts) == 1:
             self._all_pcontract_data[symbol] = pcontract_data
예제 #19
0
    def get_bars(self, strpcon, dt_start, dt_end, window_size):
        """ 获取本地历史数据    
        
        Args:
            strpcon (str): 周期合约

            dt_start (datetime): 数据的开始时间

            dt_end (datetime): 数据的结束时间

            window_size (int): 窗口大小,0表示大小为数据长度。
        
        Returns:
            SourceWrapper. 数据
        """
        pcontract = PContract.from_string(strpcon)
        if pcontract.contract.exchange == 'stock':
            return []
        else:
            return self._src.get_bars(pcontract, dt_start, dt_end, window_size)
예제 #20
0
파일: data.py 프로젝트: face08/quantdigger
    def load_bars(self, strpcon, dt_start, dt_end, window_size):
        """ 获取本地历史数据    
        
        Args:
            strpcon (str): 周期合约

            dt_start (datetime): 数据的开始时间

            dt_end (datetime): 数据的结束时间

            window_size (int): 窗口大小,0表示大小为数据长度。
        
        Returns:
            SourceWrapper. 数据
        """
        pcontract = PContract.from_string(strpcon)
        if pcontract.contract.exch_type == 'stock':
            return []
        else:
            return self._src.load_bars(pcontract, dt_start, dt_end, window_size);
예제 #21
0
def set_symbols(pcons, window_size,
                    dt_start=datetime(1980,1,1),
                    dt_end=datetime(2100,1,1)):
    """ 添加数据

    Args:
        pcons ([str,]): 周期合约数组

        dt_start (str): 开始时间

        dt_end (str): 结束

        window_size (int): 序列数据的窗口大小
    
    """
    global g_simulator
    new_pcons = []
    for pcon in pcons:
        new_pcons.append(PContract.from_string(pcon))
    g_simulator = ExecuteUnit(new_pcons, window_size, dt_start, dt_end)
    return g_simulator
예제 #22
0
파일: data.py 프로젝트: face08/quantdigger
 def load_bars(self, strpcon, dt_start, dt_end):
     pcontract = PContract.from_string(strpcon)
     if pcontract.contract.exch_type == 'stock':
         return self.load_tushare_bars(pcontract, dt_start, dt_end)
     else:
         return []
예제 #23
0
 def pcontract(self):
     return PContract(self._contract, self._period)
예제 #24
0
 def get_all_pcontracts(self):
     # 模拟接口
     data = ['CC.SHFE-1.MINUTE', 'BB.SHFE-1.MINUTE']
     pcontracts = [PContract.from_string(d) for d in data]
     return serialize_all_pcontracts(pcontracts)
예제 #25
0
 def get_all_pcontracts(self):
     # 模拟接口
     data = ['CC.SHFE-1.MINUTE', 'BB.SHFE-1.MINUTE']
     pcontracts =  [PContract.from_string(d) for d in data]
     return serialize_all_pcontracts(pcontracts)
예제 #26
0
 def get_last_bars(self, strpcon, n):
     pcontract = PContract.from_string(strpcon)
     return self._src.get_last_bars(pcontract, n)
예제 #27
0
 def get_bars(self,
              strpcon,
              dt_start=DEFAULT_DT_START,
              dt_end=DEFAULT_DT_END):
     pcontract = PContract.from_string(strpcon)
     return self._src.get_bars(pcontract, dt_start, dt_end)
예제 #28
0
 def get_bars(self, strpcon,
              dt_start=DEFAULT_DT_START, dt_end=DEFAULT_DT_END):
     pcontract = PContract.from_string(strpcon)
     return self._src.get_bars(pcontract, dt_start, dt_end)
예제 #29
0
def deserialize_all_pcontracts(pcontracts):
    return [PContract.from_string(strpcon) for strpcon in pcontracts]
예제 #30
0
 def get_bars(self, strpcon, dt_start, dt_end):
     pcontract = PContract.from_string(strpcon)
     if pcontract.contract.exchange == 'stock':
         return self.get_tushare_bars(pcontract, dt_start, dt_end)
     else:
         return []
예제 #31
0
 def setUp(self):
     cache = LocalFsCache(TestCache.CACHE_PATH)
     self.src = _MockSource()
     self.ds = CachedDatasource(self.src, cache)
     self.pcontract = PContract.from_string('000001.SH-1.DAY')
예제 #32
0
 def get_last_bars(self, strpcon, n):
     pcontract = PContract.from_string(strpcon)
     return self._src.get_last_bars(pcontract, n)
예제 #33
0
 def load_bars(self, strpcon, dt_start, dt_end):
     pcontract = PContract.from_string(strpcon)
     if pcontract.contract.exch_type == 'stock':
         return self.load_tushare_bars(pcontract, dt_start, dt_end)
     else:
         return []
예제 #34
0
def deserialize_all_pcontracts(pcontracts):
    return [PContract.from_string(strpcon) for strpcon in pcontracts]
예제 #35
0
파일: data.py 프로젝트: wocclyl/quantdigger
 def get_bars(self, strpcon, dt_start, dt_end):
     pcontract = PContract.from_string(strpcon)
     if pcontract.contract.exchange == 'stock':
         return self.get_tushare_bars(pcontract, dt_start, dt_end)
     else:
         return []
예제 #36
0
 def get_all_contracts(self):
     # 模拟接口
     data = ['CC.SHFE-1.MINUTE', 'BB.SHFE-1.MINUTE']
     pcons =  [PContract.from_string(d) for d in data]
     contracts =  [pcon.contract for pcon in pcons]
     return serialize_all_contracts(contracts)