Exemplo n.º 1
0
def test_china_stock_reader():
    data_reader = DataReader(codes=['002572', '000338'],
                             data_schema=Stock1dKdata,
                             entity_schema=Stock,
                             start_timestamp='2019-01-01',
                             end_timestamp='2019-06-10',
                             entity_provider='eastmoney')

    categories = data_reader.data_df.index.levels[0].to_list()

    df = data_reader.data_df

    assert 'stock_sz_002572' in categories
    assert 'stock_sz_000338' in categories

    assert ('stock_sz_002572', '2019-01-02') in df.index
    assert ('stock_sz_000338', '2019-01-02') in df.index
    assert ('stock_sz_002572', '2019-06-10') in df.index
    assert ('stock_sz_000338', '2019-06-10') in df.index

    for timestamp in iterate_timestamps(entity_type='stock',
                                        exchange='sz',
                                        level=IntervalLevel.LEVEL_1DAY,
                                        start_timestamp='2019-06-11',
                                        end_timestamp='2019-06-14'):
        data_reader.move_on(to_timestamp=timestamp)

        df = data_reader.data_df

        assert ('stock_sz_002572', timestamp) in df.index
        assert ('stock_sz_000338', to_time_str(timestamp)) in df.index
Exemplo n.º 2
0
def update_data_table(n_clicks, provider, schema_name, columns, codes: str, start_date, end_date):
    if n_clicks and provider and columns and schema_name:
        # TODO:better way to get time_field
        if has_report_period(schema_name=schema_name):
            time_field = 'report_date'
        else:
            time_field = 'timestamp'

        data_reader = DataReader(data_schema=get_schema_by_name(schema_name), provider=provider, codes=codes,
                                 columns=columns, start_timestamp=start_date, end_timestamp=end_date,
                                 time_field=time_field)
        if data_reader.is_empty():
            return 'no data,please reselect!', '', [{'label': 'compare_self', 'value': 'compare_self'}], 'compare_self'

        data_table = data_reader.data_drawer().draw_data_table(id='data_table_content')

        intents = data_reader.normal_data.get_intents()

        intent_options = [
            {'label': intent.value, 'value': intent.value} for intent in intents
        ]

        intent_value = intents[0].value

        return data_table, data_reader.normal_data.get_table_type(), intent_options, intent_value

    raise dash.exceptions.PreventUpdate()
Exemplo n.º 3
0
def test_china_stock_reader():
    data_reader = DataReader(codes=['002572', '000338'], data_schema=Stock1dKdata, provider='joinquant',
                             start_timestamp='2019-01-01',
                             end_timestamp='2019-06-10')

    categories = data_reader.get_categories()

    df = data_reader.get_data_df()

    assert 'stock_sz_002572' in categories
    assert 'stock_sz_000338' in categories

    assert ('stock_sz_002572', '2019-01-02') in df.index
    assert ('stock_sz_000338', '2019-01-02') in df.index
    assert ('stock_sz_002572', '2019-06-10') in df.index
    assert ('stock_sz_000338', '2019-06-10') in df.index

    for timestamp in iterate_timestamps(entity_type='stock', exchange='sz',
                                        level=IntervalLevel.LEVEL_1DAY,
                                        start_timestamp='2019-06-11',
                                        end_timestamp='2019-06-14'):
        data_reader.move_on(to_timestamp=timestamp, timeout=0)

        df = data_reader.get_data_df()

        assert ('stock_sz_002572', timestamp) in df.index
        assert ('stock_sz_000338', to_time_str(timestamp)) in df.index

    data_reader.data_drawer().draw_table()
    data_reader.data_drawer().draw_kline()
Exemplo n.º 4
0
def properties_to_readers(properties, codes, start_date,
                          end_date) -> List[DataReader]:
    provider_schema_map_cols = {}

    for prop in properties:
        provider = prop['provider']
        schema_name = prop['schema']
        key = (provider, schema_name)
        if key not in provider_schema_map_cols:
            provider_schema_map_cols[key] = []

        provider_schema_map_cols[key].append(prop['column'])

    readers = []
    for item, columns in provider_schema_map_cols.items():
        provider = item[0]
        schema_name = item[1]

        schema = get_schema_by_name(schema_name)

        readers.append(
            DataReader(data_schema=schema,
                       provider=provider,
                       codes=codes,
                       columns=columns,
                       start_timestamp=start_date,
                       end_timestamp=end_date,
                       time_field=schema.time_field()))

    return readers
Exemplo n.º 5
0
def update_table_and_graph(page_current, page_size, filter, chart, provider, schema_name, columns, codes, start_date,
                           end_date):
    if provider and columns and schema_name and chart:

        if has_report_period(schema_name=schema_name):
            time_field = 'report_date'
        else:
            time_field = 'timestamp'

        schema = get_schema_by_name(schema_name)
        # <class 'list'>: ['{report_period} = year']
        filters = None

        if filter:
            filters = []
            print(filter)
            filtering_expressions = filter.split(' && ')

            for filter_part in filtering_expressions:
                col_name, operator, filter_value = split_filter_part(filter_part)
                s = f'schema.{col_name} {operator} "{filter_value}"'
                filter = eval(s)
                filters.append(filter)

        data_reader = DataReader(data_schema=schema, provider=provider, codes=codes,
                                 columns=columns, start_timestamp=start_date, end_timestamp=end_date,
                                 time_field=time_field, filters=filters)

        dff = data_reader.data_df.reset_index()

        graph_data, graph_layout = data_reader.data_drawer().draw(chart=chart, render=None)

        return dff.to_dict('records'), dcc.Graph(
            id='chart-content',
            figure={
                'data': graph_data,
                'layout': graph_layout
            }
        )

    raise dash.exceptions.PreventUpdate()
Exemplo n.º 6
0
def test_reader_move_on():
    data_reader = DataReader(codes=['002572', '000338'], data_schema=Stock1dKdata, provider='joinquant',
                             start_timestamp='2019-06-13',
                             end_timestamp='2019-06-14')

    data_reader.move_on(to_timestamp='2019-06-15', timeout=0)
    assert ('stock_sz_002572', '2019-06-15') not in data_reader.get_data_df().index
    assert ('stock_sz_000338', '2019-06-15') not in data_reader.get_data_df().index

    start_time = time.time()
    changed = data_reader.move_on(to_timestamp='2019-06-16', timeout=5)
    assert changed == False
    assert time.time() - start_time > 5
Exemplo n.º 7
0
def test_reader_move_on():
    data_reader = DataReader(codes=['002572', '000338'],
                             data_schema=Stock1dKdata,
                             entity_schema=Stock,
                             start_timestamp='2019-06-13',
                             end_timestamp='2019-06-14',
                             entity_provider='eastmoney')

    data_reader.move_on(to_timestamp='2019-06-15')
    assert ('stock_sz_002572', '2019-06-15') not in data_reader.data_df.index
    assert ('stock_sz_000338', '2019-06-15') not in data_reader.data_df.index

    start_time = time.time()
    data_reader.move_on(to_timestamp='2019-06-20', timeout=5)
    assert time.time() - start_time < 5
Exemplo n.º 8
0
def test_reader_draw():
    data_reader = DataReader(codes=['002572', '000338'], data_schema=Stock1dKdata, provider='joinquant',
                             start_timestamp='2019-01-01',
                             end_timestamp='2019-06-14')
    data_reader.data_drawer().draw_table()
    data_reader.data_drawer().draw_kline()
Exemplo n.º 9
0
                            showarrow=True,
                            align='center',
                            arrowhead=2,
                            arrowsize=1,
                            arrowwidth=2,
                            # arrowcolor='#030813',
                            ax=-10,
                            ay=-30,
                            bordercolor='#c7c7c7',
                            borderwidth=1,
                            bgcolor=color,
                            opacity=0.8))

    return annotations


if __name__ == '__main__':
    data_reader1 = DataReader(codes=['002223'],
                              data_schema=Stock1dKdata,
                              entity_schema=Stock)
    data_reader2 = DataReader(
        codes=['002223'],
        data_schema=Stock1dMaStateStats,
        entity_schema=Stock,
        columns=['ma5', 'ma10', 'current_count', 'current_pct'])

    drawer = Drawer(main_df=data_reader1.data_df,
                    factor_df=data_reader2.data_df[['ma5', 'ma10']],
                    sub_df=data_reader2.data_df[['current_pct']])
    drawer.draw_kline()