Exemple #1
0
 def __init__(self):
     self.field = [
         'open', 'high', 'low', 'close', 'volume', 'amount', 'match_items'
     ]
     self.end = ''
     self.calendar_SZ = []
     self.adj_factor_obj = GetAdjFactor()
Exemple #2
0
class GetKlineData(object):
    def __init__(self):
        self.field = ['open', 'high', 'low', 'close', 'volume', 'amount', 'match_items']
        self.end = ''
        self.calendar_SZ = []
        self.adj_factor_obj = GetAdjFactor()

    def cache_all_stock_data(self, period=Period.DAILY.value, dividend_type=RightsAdjustment.NONE.value):
        folder_name = LocalDataFolderName.MARKET_DATA.value
        sub_folder_name = LocalDataFolderName.KLINE_DAILY.value
        sub_sub_folder_name = LocalDataFolderName.A_SHARE.value
        path = LocalDataPath.path + folder_name + '/' + sub_folder_name + '/' + sub_sub_folder_name + '/'
        all_market_date = {}
        adj_factor = 1
        if dividend_type == RightsAdjustment.FROWARD.value:
            adj_factor = self.adj_factor_obj.get_adj_factor(RightsAdjustment.FROWARD.value)
        elif dividend_type == RightsAdjustment.BACKWARD.value:
            adj_factor = self.adj_factor_obj.get_adj_factor(RightsAdjustment.BACKWARD.value)
        for i in self.field:
            data_name = i + '.h5'
            data = pd.read_hdf(path + data_name)
            if isinstance(adj_factor, int):
                all_market_date[i] = data
            else:
                if i in ['open', 'high', 'low', 'close']:
                    all_market_date[i] = data.multiply(adj_factor)
                else:
                    all_market_date[i] = data
        return all_market_date

    def get_market_data(self, market_data, stock_code=None, field=None, start=None, end=None, count=-1):
        result = None
        if len(stock_code) == 1 and len(field) == 1 and start < end and count == -1:
            result = market_data[field[0]][stock_code[0]][start: end]
        elif len(stock_code) == 1 and len(field) == 1 and start == end and count == -1:
            result = market_data[field[0]][stock_code[0]][start]
        elif len(stock_code) > 1 and (start == end and start is not None) and count == -1:
            result = {i: market_data[i].reindex(columns=stock_code).loc[start] for i in field}
        elif len(stock_code) > 1 and (end is None and start is None) and count == -1:
            result = {i: market_data[i].reindex(columns=stock_code) for i in field}
        elif start != end and count == -1:
            result = {i: market_data[i].reindex(columns=stock_code).loc[start: end] for i in field}
        return result

    def cache_all_index_data(self, period=Period.DAILY.value):
        folder_name = LocalDataFolderName.MARKET_DATA.value
        sub_folder_name = LocalDataFolderName.KLINE_DAILY.value
        sub_sub_folder_name = LocalDataFolderName.INDEX.value
        path = LocalDataPath.path + folder_name + '/' + sub_folder_name + '/' + sub_sub_folder_name + '/'
        index_date = {}
        for i in self.field:
            data_name = i + '.h5'
            index_date[i] = pd.read_hdf(path + data_name)
        return index_date
    
    def get_index_data(self, index_data, index_code=None, field=None, start=None, end=None, period=Period.DAILY.value, count=-1):
        return self.get_market_data(index_data, stock_code=index_code, field=field, start=start, end=end, count=count)