Beispiel #1
0
def save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    props = {'start_date': 20150101, 'end_date': 20170930, 'universe': '000905.SH',
             'fields': ('turnover,float_mv,close_adj,pe,pb'),
             'freq': 1}

    dv.init_from_config(props, ds)
    dv.prepare_data()

    factor_formula = 'Cutoff(Standardize(turnover / 10000 / float_mv), 2)'
    dv.add_formula('TO', factor_formula, is_quarterly=False)

    factor_formula = 'Cutoff(Standardize(1/pb), 2)'
    dv.add_formula('BP', factor_formula, is_quarterly=False)

    factor_formula = 'Cutoff(Standardize(Return(close_adj, 20)), 2)'
    dv.add_formula('REVS20', factor_formula, is_quarterly=False)

    factor_formula = 'Cutoff(Standardize(Log(float_mv)), 2)'
    dv.add_formula('float_mv_factor', factor_formula, is_quarterly=False)

    factor_formula = 'Delay(Return(close_adj, 1), -1)'
    dv.add_formula('NextRet', factor_formula, is_quarterly=False)

    dv.save_dataview(folder_path=dataview_dir_path)
Beispiel #2
0
def save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)

    dv = DataView()

    props = {
        'start_date':
        20170101,
        'end_date':
        20171030,
        'universe':
        '000300.SH',
        'fields': (
            'open,high,low,close,vwap,volume,turnover,sw1,'
            # + 'pb,net_assets,'
            + 'eps_basic,total_mv,tot_profit,int_income'),
        'freq':
        1
    }

    dv.init_from_config(props, ds)
    dv.prepare_data()

    factor_formula = 'close >= Delay(Ts_Max(close, 20), 1)'  # 20 days new high
    factor_name = 'new_high'
    dv.add_formula(factor_name, factor_formula, is_quarterly=False)

    dv.add_formula('total_profit_growth',
                   formula='Return(tot_profit, 4)',
                   is_quarterly=True)

    dv.save_dataview(folder_path=dataview_dir_path)
def test_save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    props = {
        'start_date': 20170101,
        'end_date': 20171001,
        'universe': '000300.SH',
        'fields': ('float_mv,pb,pe_ttm,sw2'),
        'freq': 1
    }

    dv.init_from_config(props, ds)
    dv.prepare_data()

    factor_formula = 'GroupQuantile(-float_mv, sw2, 10)'
    dv.add_formula('rank_mv', factor_formula, is_quarterly=False)

    factor_formula = 'GroupQuantile(If(pb >= 0.2, pb, 100), sw2, 10)'
    dv.add_formula('rank_pb', factor_formula, is_quarterly=False)

    factor_formula = 'GroupQuantile(If(pe_ttm >= 3, pe_ttm, 9999.0), sw2, 10)'
    dv.add_formula('rank_pe', factor_formula, is_quarterly=False)

    dv.save_dataview(folder_path=dataview_dir_path)
Beispiel #4
0
def save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    props = {
        'start_date': 20150101,
        'end_date': 20171001,
        'universe': '000300.SH',
        'fields': 'volume,turnover,float_mv,pb,total_mv',
        'freq': 1
    }

    dv.init_from_config(props, ds)
    dv.prepare_data()

    trade_status = dv.get_ts('trade_status')
    mask_sus = trade_status == '停牌'
    dv.append_df(mask_sus, 'suspended', is_quarterly=False)

    dv.add_formula('not_index_member', '!index_member', is_quarterly=False)

    dv.add_formula('limit_reached',
                   'Abs((open - Delay(close, 1)) / Delay(close, 1)) > 0.095',
                   is_quarterly=False)

    dv.save_dataview(dataview_folder)
def save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    props = {
        'start_date': 20150101,
        'end_date': 20171001,
        'universe': '000300.SH',
        'fields': 'volume,turnover,float_mv,pb,total_mv',
        'freq': 1
    }

    dv.init_from_config(props, ds)
    dv.prepare_data()

    # for convenience to check limit reachers
    dv.add_formula('limit_reached',
                   'Abs((open - Delay(close, 1)) / Delay(close, 1)) > 0.095',
                   is_quarterly=False)

    dv.add_formula('random', 'StdDev(volume, 20)', is_quarterly=False)
    dv.add_formula('momentum', 'Return(close_adj, 20)', is_quarterly=False)
    # dv.add_formula('size', '', is_quarterly=False)

    dv.save_dataview(dataview_folder)
def save_data():
    """
    This function fetches data from remote server and stores them locally.
    Then we can use local data to do back-test.
    """
    dataview_props = {'start_date': 20170101,  # Start and end date of back-test
                      'end_date': 20171030,
                      'universe': UNIVERSE,    # Investment universe and performance benchmark
                      'benchmark': '000905.SH',
                      'fields': 'high,low,close', # Data fields that we need
                      'freq': 1   # freq = 1 means we use daily data. Please do not change this.
                      }

    # RemoteDataService communicates with a remote server to fetch data
    ds = RemoteDataService()

    # Use username and password in data_config to login
    ds.init_from_config(data_config)
    
    # DataView utilizes RemoteDataService to get various data and store them
    dv = DataView()
    dv.init_from_config(dataview_props, ds)
    dv.prepare_data()

    # 以9日为周期的KD线为例。首先须计算出最近9日的RSV值,即未成熟随机值, 
    # 计算公式为 
    # 9日RSV=(C-L9)÷(H9-L9)×100 
    # 式中,C为第9日的收盘价;L9为9日内的最低价;H9为9日内的最高价。 
    # K值=2/3×前一日K值+1/3×当日RSV 
    # D值=2/3×前一日K值+1/3×当日RSV 
    # J指标的计算公式为: J=3D—2K 
    factor_formula = '2/3*50 + (close-Ts_Min(low,5))/(Ts_Max(high,5)-Ts_Min(low,5)*100)'
    dv.add_formula()

    dv.save_dataview(folder_path=dataview_store_folder)
Beispiel #7
0
def save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    props = {'start_date': 20160101, 'end_date': 20171001, 'universe': '000300.SH',
             'fields': 'volume,turnover',
             'freq': 1}
    
    dv.init_from_config(props, ds)
    dv.prepare_data()
    
    # for convenience to check limit reachers
    dv.add_formula('limit_reached', 'Abs((open - Delay(close, 1)) / Delay(close, 1)) > 0.095', is_quarterly=False)
    dv.add_formula('mask_limit_reached', 'limit_reached > 0', is_quarterly=False)
    
    dv.add_formula('mask_index_member', '!(index_member > 0)', is_quarterly=False)
    
    trade_status = dv.get_ts('trade_status')
    mask_sus = trade_status == u'停牌'
    dv.append_df(mask_sus, 'mask_sus', is_quarterly=False)
    
    # dv.add_formula('size', '', is_quarterly=False)
    
    dv.save_dataview(dataview_folder)
Beispiel #8
0
def save_data():
    """
    This function fetches data from remote server and stores them locally.
    Then we can use local data to do back-test.

    """
    dataview_props = {
        'start_date': 20170101,  # Start and end date of back-test
        'end_date': 20171030,
        'universe': UNIVERSE,  # Investment universe and performance benchmark
        'benchmark': '000300.SH',
        'fields': 'total_mv,turnover',  # Data fields that we need
        'freq':
        1  # freq = 1 means we use daily data. Please do not change this.
    }

    # RemoteDataService communicates with a remote server to fetch data
    ds = RemoteDataService()

    # Use username and password in data_config to login
    ds.init_from_config(data_config)

    # DataView utilizes RemoteDataService to get various data and store them
    dv = DataView()
    dv.init_from_config(dataview_props, ds)
    dv.prepare_data()
    dv.save_dataview(folder_path=dataview_store_folder)
Beispiel #9
0
def prepare_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    
    symbols = ['600036.SH', '000001.SZ']
    dv_props = {'symbol': ','.join(symbols),
                'start_date': backtest_props['start_date'],
                'end_date': backtest_props['end_date'],
                'benchmark': '000300.SH'}
    dv = EventDataView()
    
    dv.init_from_config(dv_props, ds)
    dv.prepare_data()

    import pandas as pd
    # target security
    diff_cols = ['open', 'high', 'low', 'close']
    df0 = dv.get_symbol(symbols[0], fields=','.join(diff_cols))
    df1 = dv.get_symbol(symbols[1], fields=','.join(diff_cols))
    df_diff = df0 - df1
    
    # calculate signal
    df_signal = pd.concat([df0[['close']], df1[['close']], df_diff[['close']]], axis=1)
    df_signal.columns = symbols + ['diff']
    roll = df_signal['diff'].rolling(window=10)
    df_signal.loc[:, 'signal'] = (df_signal['diff'] - roll.mean()) / roll.std()
    
    dv.append_df_symbol(df_diff, '001.JZ')
    dv.data_custom = df_signal
    dv.save_dataview(dataview_dir_path)
Beispiel #10
0
def test_save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    props = {'start_date': 20150101, 'end_date': 20170930, 'universe': '000905.SH',
             'fields': ('tot_cur_assets,tot_cur_liab,inventories,pre_pay,deferred_exp,'
                        'eps_basic,ebit,pe,pb,float_mv,sw1'),
             'freq': 1}
    
    dv.init_from_config(props, ds)
    dv.prepare_data()
    
    factor_formula = 'pe < 30'
    dv.add_formula('pe_condition', factor_formula, is_quarterly=False)
    factor_formula = 'pb < 3'
    dv.add_formula('pb_condition', factor_formula, is_quarterly=False)
    factor_formula = 'Return(eps_basic, 4) > 0'
    dv.add_formula('eps_condition', factor_formula, is_quarterly=True)
    factor_formula = 'Return(ebit, 4) > 0'
    dv.add_formula('ebit_condition', factor_formula, is_quarterly=True)
    factor_formula = 'tot_cur_assets/tot_cur_liab > 2'
    dv.add_formula('current_condition', factor_formula, is_quarterly=True)
    factor_formula = '(tot_cur_assets - inventories - pre_pay - deferred_exp)/tot_cur_liab > 1'
    dv.add_formula('quick_condition', factor_formula, is_quarterly=True)
    
    dv.add_formula('mv_rank', 'Rank(float_mv)', is_quarterly=False)
    
    dv.save_dataview(folder_path=dataview_dir_path)
Beispiel #11
0
def test_dataview_universe():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    props = {'start_date': 20170227, 'end_date': 20170327, 'universe': '000016.SH',
             # 'symbol': 'rb1710.SHF,rb1801.SHF',
             'fields': ('open,high,low,close,vwap,volume,turnover,'
                        + 'sw1,zz2,'
                        + 'roe,net_assets,'
                        + 'total_oper_rev,oper_exp,tot_profit,int_income'
                        ),
             'freq': 1}
    
    dv.init_from_config(props, ds)
    dv.prepare_data()
    
    data_bench = dv.data_benchmark.copy()
    dv.data_benchmark = data_bench
    
    try:
        dv.data_benchmark = data_bench.iloc[3:]
    except ValueError:
        pass
    
    dv.remove_field('roe,net_assets')
    dv.remove_field('close')
Beispiel #12
0
def save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    props = {
        'start_date': 20160101,
        'end_date': 20171001,
        'universe': '000300.SH',
        'fields': 'volume,turnover',
        'freq': 1
    }

    dv.init_from_config(props, ds)
    dv.prepare_data()

    # for convenience to check limit reachers
    dv.add_formula('limit_reached',
                   'Abs((open - Delay(close, 1)) / Delay(close, 1)) > 0.095',
                   is_quarterly=False)
    dv.add_formula('mask_limit_reached',
                   'limit_reached > 0',
                   is_quarterly=False)

    dv.add_formula('mask_index_member',
                   '!(index_member > 0)',
                   is_quarterly=False)

    trade_status = dv.get_ts('trade_status')
    mask_sus = trade_status == u'停牌'
    dv.append_df(mask_sus, 'mask_sus', is_quarterly=False)

    # dv.add_formula('size', '', is_quarterly=False)

    dv.save_dataview(dataview_folder)
Beispiel #13
0
def save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    props = {
        'start_date': 20150101,
        'end_date': 20170930,
        'universe': '000905.SH',
        'fields': ('turnover,float_mv,close_adj,pe,pb'),
        'freq': 1
    }

    dv.init_from_config(props, ds)
    dv.prepare_data()

    factor_formula = 'Cutoff(Standardize(turnover / 10000 / float_mv), 2)'
    dv.add_formula('TO', factor_formula, is_quarterly=False)

    factor_formula = 'Cutoff(Standardize(1/pb), 2)'
    dv.add_formula('BP', factor_formula, is_quarterly=False)

    factor_formula = 'Cutoff(Standardize(Return(close_adj, 20)), 2)'
    dv.add_formula('REVS20', factor_formula, is_quarterly=False)

    factor_formula = 'Cutoff(Standardize(Log(float_mv)), 2)'
    dv.add_formula('float_mv_factor', factor_formula, is_quarterly=False)

    factor_formula = 'Delay(Return(close_adj, 1), -1)'
    dv.add_formula('NextRet', factor_formula, is_quarterly=False)

    dv.save_dataview(folder_path=dataview_dir_path)
Beispiel #14
0
def test_dataview_universe():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    props = {
        'start_date':
        20170227,
        'end_date':
        20170327,
        'universe':
        '000016.SH',
        # 'symbol': 'rb1710.SHF,rb1801.SHF',
        'fields':
        ('open,high,low,close,vwap,volume,turnover,' + 'sw1,zz2,' +
         'roe,net_assets,' + 'total_oper_rev,oper_exp,tot_profit,int_income'),
        'freq':
        1
    }

    dv.init_from_config(props, ds)
    dv.prepare_data()

    data_bench = dv.data_benchmark.copy()
    dv.data_benchmark = data_bench

    try:
        dv.data_benchmark = data_bench.iloc[3:]
    except ValueError:
        pass

    dv.remove_field('roe,net_assets')
    dv.remove_field('close')
Beispiel #15
0
def test_write():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    secs = '600030.SH,000063.SZ,000001.SZ'
    props = {
        'start_date': 20160601,
        'end_date': 20170601,
        'symbol': secs,
        'fields': 'open,close,high,low,volume,pb,net_assets,pcf_ncf',
        'freq': 1
    }

    dv.init_from_config(props, data_api=ds)
    dv.prepare_data()
    assert dv.data_d.shape == (281, 48)
    assert dv.dates.shape == (281, )
    # TODO
    """
    PerformanceWarning:
    your performance may suffer as PyTables will pickle object types that it cannot
    map directly to c-types [inferred_type->mixed,key->block1_values] [items->[('000001.SZ', 'int_income'), ('000001.SZ', 'less_handling_chrg_comm_exp'), ('000001.SZ', 'net_int_income'), ('000001.SZ', 'oper_exp'), ('000001.SZ', 'symbol'), ('000063.SZ', 'int_income'), ('000063.SZ', 'less_handling_chrg_comm_exp'), ('000063.SZ', 'net_int_income'), ('000063.SZ', 'oper_exp'), ('000063.SZ', 'symbol'), ('600030.SH', 'int_income'), ('600030.SH', 'less_handling_chrg_comm_exp'), ('600030.SH', 'net_int_income'), ('600030.SH', 'oper_exp'), ('600030.SH', 'symbol')]]
    """

    dv.save_dataview(folder_path=daily_path)
Beispiel #16
0
def test_livetrade():
    props = {'symbol': 'rb1801.SHF', 'strategy_no': 46}
    tapi = RealTimeTradeApi(trade_config)
    ins = EventLiveTradeInstance()

    props.update(data_config)
    props.update(trade_config)

    ds = RemoteDataService()
    strat = DoubleMaStrategy()
    pm = PortfolioManager()

    context = model.Context(data_api=ds,
                            trade_api=tapi,
                            instance=ins,
                            strategy=strat,
                            pm=pm)

    ins.init_from_config(props)
    ds.subscribe(props['symbol'])

    ins.run()
    time.sleep(3)
    ins.stop()
    ins.save_results(result_dir_path)
    do_analyze()
Beispiel #17
0
def save_data():
    """
    This function fetches data from remote server and stores them locally.
    Then we can use local data to do back-test.

    """
    dataview_props = {# Start and end date of back-test
                      'start_date': 20170101, 'end_date': 20171030,
                      # Investment universe and performance benchmark
                      'universe': UNIVERSE, 'benchmark': '000300.SH',
                      # Data fields that we need
                      'fields': 'total_mv,turnover',
                      # freq = 1 means we use daily data. Please do not change this.
                      'freq': 1}

    # RemoteDataService communicates with a remote server to fetch data
    ds = RemoteDataService()
    # Use username and password in data_config to login
    ds.init_from_config(data_config)
    
    # DataView utilizes RemoteDataService to get various data and store them
    dv = DataView()
    dv.init_from_config(dataview_props, ds)
    dv.prepare_data()
    dv.save_dataview(folder_path=dataview_store_folder)
Beispiel #18
0
def analyze():
    ta = ana.EventAnalyzer()

    ds = RemoteDataService()
    ds.init_from_config(data_config)

    ta.initialize(data_server_=ds, file_folder=result_dir_path)
    ta.do_analyze(result_dir=result_dir_path, selected_sec=[])
Beispiel #19
0
def analyze():
    ta = ana.EventAnalyzer()
    
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    
    ta.initialize(data_server_=ds, file_folder=result_dir_path)
    
    ta.do_analyze(result_dir=result_dir_path, selected_sec=props['symbol'].split(','))
Beispiel #20
0
def run_strategy():
    '''
    universe可以自己定义吗,就是从我筛选的一组股票里面挑选
    把universe改成symbol,然后值设置成一系列代码的字符串,用逗号隔开
    :return:
    '''
    if is_backtest:
        """
        回测模式
        """
        props = {
            "symbol": '600519.SH',
            # "symbol": '002050.SZ',
            # "benchmark": '002050.SZ',
            "benchmark": '000300.SH',
            "start_date": 20170101,
            "end_date": 20171219,
            "fast_ma_length": 3,
            "slow_ma_length": 8,
            "live_ma_length": 34,
            "bar_type": "1d",  # '1d'
            "init_balance": 50000}

        tapi = BacktestTradeApi()
        ins = EventBacktestInstance()

    else:
        """
        实盘/仿真模式
        """
        props = {'symbol': '600519.SH',
                 "fast_ma_length": 3,
                 "slow_ma_length": 5,
                 "live_ma_length": 34,
                 'strategy.no': 1062}
        tapi = RealTimeTradeApi(trade_config)
        ins = EventLiveTradeInstance()

    props.update(data_config)
    props.update(trade_config)

    ds = RemoteDataService()
    strat = TripleMaStrategy()
    pm = PortfolioManager()

    context = model.Context(data_api=ds, trade_api=tapi, instance=ins,
                            strategy=strat, pm=pm)

    ins.init_from_config(props)
    if not is_backtest:
        ds.subscribe(props['symbol'])

    ins.run()
    if not is_backtest:
        time.sleep(9999)
    ins.save_results(folder_path=result_dir_path)
Beispiel #21
0
def test_add_field():
    dv = DataView()
    dv.load_dataview(folder_path=daily_path)
    nrows, ncols = dv.data_d.shape
    n_securities = len(dv.data_d.columns.levels[0])
    
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv.add_field('total_share', ds)
    assert dv.data_d.shape == (nrows, ncols + 1 * n_securities)
Beispiel #22
0
def test_add_field():
    dv = DataView()
    dv.load_dataview(folder_path=daily_path)
    nrows, ncols = dv.data_d.shape
    n_securities = len(dv.data_d.columns.levels[0])

    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv.add_field('total_share', ds)
    assert dv.data_d.shape == (nrows, ncols + 1 * n_securities)
Beispiel #23
0
def test_bar():
    from jaqs.data import RemoteDataService
    from jaqs.trade.common import QUOTE_TYPE
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    
    df_quotes, msg = ds.bar(symbol='rb1710.SHF,hc1710.SHF', start_time=200000, end_time=160000,
                            trade_date=20170704, freq=QUOTE_TYPE.MIN)
    bar_list = Bar.create_from_df(df_quotes)
    bar = bar_list[0]
    print(str(bar))
Beispiel #24
0
def test_inst_manager():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    
    mgr = InstManager(ds)
    mgr.load_instruments()
    sym = '000001.SZ'
    inst_obj = mgr.get_instrument(sym)
    assert inst_obj.market == 'SZ'
    assert inst_obj.symbol == sym
    assert inst_obj.multiplier == 1
    assert inst_obj.inst_type == 1
Beispiel #25
0
def test_inst_manager():
    ds = RemoteDataService()
    ds.init_from_config(data_config)

    mgr = InstManager(ds)
    mgr.load_instruments()
    sym = '000001.SZ'
    inst_obj = mgr.get_instrument(sym)
    assert inst_obj.market == 'SZ'
    assert inst_obj.symbol == sym
    assert inst_obj.multiplier == 1
    assert inst_obj.inst_type == 1
Beispiel #26
0
def test_bar():
    from jaqs.data import RemoteDataService
    from jaqs.trade.common import QUOTE_TYPE
    ds = RemoteDataService()
    ds.init_from_config(data_config)

    df_quotes, msg = ds.bar(symbol='rb1710.SHF,hc1710.SHF',
                            start_time=200000,
                            end_time=160000,
                            trade_date=20170704,
                            freq=QUOTE_TYPE.MIN)
    quotes_list = Bar.create_from_df(df_quotes)
Beispiel #27
0
def run_strategy():
    if is_backtest:
        """
        回测模式
        """
        props = {
            "symbol": '600519.SH',
            "start_date": 20170101,
            "end_date": 20171104,
            "fast_ma_length": 5,
            "slow_ma_length": 15,
            "bar_type": "1d",  # '1d'
            "init_balance": 50000
        }

        tapi = BacktestTradeApi()
        ins = EventBacktestInstance()

    else:
        """
        实盘/仿真模式
        """
        props = {
            'symbol': '600519.SH',
            "fast_ma_length": 5,
            "slow_ma_length": 15,
            'strategy.no': 1062
        }
        tapi = RealTimeTradeApi(trade_config)
        ins = EventLiveTradeInstance()

    props.update(data_config)
    props.update(trade_config)

    ds = RemoteDataService()
    strat = DoubleMaStrategy()
    pm = PortfolioManager()

    context = model.Context(data_api=ds,
                            trade_api=tapi,
                            instance=ins,
                            strategy=strat,
                            pm=pm)

    ins.init_from_config(props)
    if not is_backtest:
        ds.subscribe(props['symbol'])

    ins.run()
    if not is_backtest:
        time.sleep(9999)
    ins.save_results(folder_path=result_dir_path)
Beispiel #28
0
def test_write_future():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    secs = 'rb1710.SHF,j1710.DCE'
    props = {'start_date': 20170401, 'end_date': 20170901, 'symbol': secs,
             'fields': 'open,close,high,low,volume,oi',
             'freq': 1, 'all_price': False}
    
    dv.init_from_config(props, data_api=ds)
    dv.prepare_data()
    assert dv.data_d.shape == (145, 14)
Beispiel #29
0
def save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    props = {'start_date': 20160101, 'end_date': 20171001, 'universe': '000300.SH',
             'fields': 'volume,turnover',
             'freq': 1}
    
    dv.init_from_config(props, ds)
    dv.prepare_data()
    
    dv.save_dataview(dataview_folder)
Beispiel #30
0
def test_save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    print(DataView)
    props = {'start_date': 20170501, 'end_date': 20171001, 'universe': '000016.SH',
             'fields': 'volume,pb,pe,ps,float_mv,sw1',
             'freq': 1}

    dv.init_from_config(props, ds)
    dv.prepare_data()

    dv.save_dataview(dataview_folder)
Beispiel #31
0
def test_q_add_field():
    dv = DataView()
    dv.load_dataview(folder_path=quarterly_path)
    nrows, ncols = dv.data_q.shape
    n_securities = len(dv.data_d.columns.levels[0])

    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv.add_field('net_inc_other_ops', ds)
    """
    dv.add_field('oper_rev', ds)
    dv.add_field('turnover', ds)
    """
    assert dv.data_q.shape == (nrows, ncols + 1 * n_securities)
def do_analyze():
    from jaqs.trade.analyze.analyze import TradeRecordEmptyError
    ta = ana.EventAnalyzer()
    
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    
    try:
        ta.initialize(data_server_=ds, file_folder=result_dir_path)
        
        ta.do_analyze(result_dir=result_dir_path, selected_sec=[])
        
    except TradeRecordEmptyError:
        pass
Beispiel #33
0
def test_add_formula_directly():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    secs = '600030.SH,000063.SZ,000001.SZ'
    props = {'start_date': 20160601, 'end_date': 20170601, 'symbol': secs,
             'fields': 'open,close',
             'freq': 1}
    dv.init_from_config(props, data_api=ds)
    dv.prepare_data()
    
    dv.add_formula("myfactor", 'close / open', is_quarterly=False)
    assert dv.data_d.shape == (281, 39)
Beispiel #34
0
def test_q_add_field():
    dv = DataView()
    dv.load_dataview(folder_path=quarterly_path)
    nrows, ncols = dv.data_q.shape
    n_securities = len(dv.data_d.columns.levels[0])
    
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv.add_field('net_inc_other_ops', ds)
    """
    dv.add_field('oper_rev', ds)
    dv.add_field('turnover', ds)
    """
    assert dv.data_q.shape == (nrows, ncols + 1 * n_securities)
Beispiel #35
0
def test_align():
    # -------------------------------------------------------------------------------------
    # input and pre-process demo data
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    raw, msg = ds.query_lb_fin_stat('income', '600000.SH', 20151225, 20170501, 'oper_rev')
    assert msg == '0,'
    
    idx_list = ['report_date', 'symbol']
    raw_idx = raw.set_index(idx_list)
    raw_idx.sort_index(axis=0, level=idx_list, inplace=True)
    
    df_ann = raw_idx.loc[pd.IndexSlice[:, :], 'ann_date']
    df_ann = df_ann.unstack(level=1)

    df_value = raw_idx.loc[pd.IndexSlice[:, :], 'oper_rev']
    df_value = df_value.unstack(level=1)
    
    date_arr = ds.query_trade_dates(20160101, 20170501)
    df_close = pd.DataFrame(index=date_arr, columns=df_value.columns, data=1e3)
    
    # -------------------------------------------------------------------------------------
    # demo usage of parser
    parser = Parser()
    parser.register_function('Myfunc', lambda x: x * 0 + 1)  # simultaneously test register function and align
    expr_formula = 'signal / Myfunc(close)'
    expression = parser.parse(expr_formula)
    for i in range(100):
        df_res = parser.evaluate({'signal': df_value, 'close': df_close}, df_ann, date_arr)
    
    # -------------------------------------------------------------------------------------
    sec = '600000.SH'
    """
    # print to validate results
    print "\n======Expression Formula:\n{:s}".format(expr_formula)
    
    print "\n======Report date, ann_date and evaluation value:"
    tmp = pd.concat([df_ann.loc[:, sec], df_value.loc[:, sec]], axis=1)
    tmp.columns = ['df_ann', 'df_value']
    print tmp
    
    print "\n======Selection of result of expansion:"
    print "20161028  {:.4f}".format(df_res.loc[20161028, sec])
    print "20161031  {:.4f}".format(df_res.loc[20161031, sec])
    print "20170427  {:.4f}".format(df_res.loc[20170427, sec])
    
    """
    assert abs(df_res.loc[20161028, sec] - 82172000000) < 1
    assert abs(df_res.loc[20161031, sec] - 120928000000) < 1
    assert abs(df_res.loc[20170427, sec] - 42360000000) < 1
Beispiel #36
0
def do_analyze():
    from jaqs.trade.analyze.analyze import TradeRecordEmptyError
    ta = ana.EventAnalyzer()

    ds = RemoteDataService()
    ds.init_from_config(data_config)

    try:
        ta.initialize(data_server_=ds, file_folder=result_dir_path)

        ta.do_analyze(result_dir=result_dir_path, selected_sec=[])

    except TradeRecordEmptyError:
        pass
Beispiel #37
0
def run_strategy():
    """
                    回测模式
    """
    props = {"symbol": '510300.SH',
             "start_date": 20160201,
             "end_date": 20171231,
             "fast_ma_length": 10,
             "slow_ma_length": 20,
             "bar_type": "1d",
             "benchmark" : '000300.SH',
             "init_balance": 50000}

    tapi = BacktestTradeApi()
    ins = EventBacktestInstance()
        
    props.update(data_config)
    props.update(trade_config)
    
    ds = RemoteDataService()
    strat = DoubleMaStrategy()
    pm = PortfolioManager()
    
    context = model.Context(data_api=ds, trade_api=tapi, instance=ins,
                            strategy=strat, pm=pm)
    
    ins.init_from_config(props)

    ins.run()

    ins.save_results(folder_path=result_dir_path)
Beispiel #38
0
def test_backtest():
    props = {
        "symbol": "rb1710.SHF",
        "start_date": 20170710,
        "end_date": 20170730,
        "bar_type": "1M",  # '1d'
        "init_balance": 2e4
    }

    tapi = BacktestTradeApi()
    ins = EventBacktestInstance()

    props.update(data_config)
    props.update(trade_config)

    ds = RemoteDataService()
    strat = DoubleMaStrategy()
    pm = PortfolioManager()

    context = model.Context(data_api=ds,
                            trade_api=tapi,
                            instance=ins,
                            strategy=strat,
                            pm=pm)

    ins.init_from_config(props)

    ins.run()
    ins.save_results(result_dir_path)
    do_analyze()
def test_save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    props = {'start_date': 20170901, 'end_date': 20171129, 'universe': BENCHMARK,
             'fields': 'close,volume,sw1',
             'freq': 1}

    dv.init_from_config(props, ds)
    dv.prepare_data()

    dv.add_formula('ret', 'Return(close_adj, 20)', is_quarterly=False)
    dv.add_formula('rank_ret', 'Rank(ret)', is_quarterly=False)

    dv.save_dataview(folder_path=dataview_dir_path)
Beispiel #40
0
def test_save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    props = {'start_date': 20170201, 'end_date': 20171001, 'universe': '000300.SH',
             'fields': ('float_mv,sw2,sw1'),
             'freq': 1}

    dv.init_from_config(props, ds)
    dv.prepare_data()

    factor_formula = 'GroupQuantile(float_mv, sw1, 10)'
    dv.add_formula('gq30', factor_formula, is_quarterly=False)

    dv.save_dataview(folder_path=dataview_dir_path)
Beispiel #41
0
def do_livetrade():
    dv = DataView()
    dv.load_dataview(folder_path=dataview_store_folder)

    props = {"period": "day", "strategy_no": 1044, "init_balance": 1e6}
    props.update(data_config)
    props.update(trade_config)

    strategy = AlphaStrategy(pc_method='market_value_weight')
    pm = PortfolioManager()

    bt = AlphaLiveTradeInstance()
    trade_api = RealTimeTradeApi(props)
    ds = RemoteDataService()

    context = model.Context(dataview=dv,
                            instance=bt,
                            strategy=strategy,
                            trade_api=trade_api,
                            pm=pm,
                            data_api=ds)

    bt.init_from_config(props)
    bt.run_alpha()

    goal_positions = strategy.goal_positions
    print("Length of goal positions:", len(goal_positions))
    task_id, msg = trade_api.goal_portfolio(goal_positions)
    print(task_id, msg)
Beispiel #42
0
def test_save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    props = {'start_date': 20170101, 'end_date': 20171001, 'universe': '000300.SH',
             'fields': 'pe_ttm,net_profit_incl_min_int_inc',
             'freq': 1}
    
    dv.init_from_config(props, ds)
    dv.prepare_data()
    
    factor_formula = 'Return(net_profit_incl_min_int_inc, 4)'
    factor_name = 'net_profit_growth'
    dv.add_formula(factor_name, factor_formula, is_quarterly=True)
    
    dv.save_dataview(folder_path=dataview_dir_path)
Beispiel #43
0
def download_data():
    dataview_props = {
        'start_date': 20080101,
        'end_date': 20180731,
        'universe': '000016.SH',
        'fields': 'open,close,high,low',
        'freq': 1
    }

    ds = RemoteDataService()
    ds.init_from_config(data_config)

    # DataView utilizes RemoteDataService to get various data and store them
    dv = DataView()
    dv.init_from_config(dataview_props, ds)
    dv.prepare_data()
    dv.save_dataview(folder_path=dataview_store_folder)
Beispiel #44
0
    def save_data(self):
        """
        This function fetches data from remote server and stores them locally.
        Then we can use local data to do back-test.

        """
        # RemoteDataService communicates with a remote server to fetch data
        ds = RemoteDataService()

        # Use username and password in data_config to login
        ds.init_from_config(self.data_config)

        # DataView utilizes RemoteDataService to get various data and store them
        dv = DataView()
        dv.init_from_config(self.dataview_props, ds)
        dv.prepare_data()
        dv.save_dataview(folder_path=self.dataview_store_folder)
Beispiel #45
0
def test_q():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    secs = '600030.SH,000063.SZ,000001.SZ'
    props = {'start_date': 20160609, 'end_date': 20170601, 'symbol': secs,
             'fields': ('open,close,'
                        + 'pb,net_assets,'
                        + 'total_oper_rev,oper_exp,'
                        + 'cash_paid_invest,'
                        + 'capital_stk,'
                        + 'roe'), 'freq': 1}
    
    dv.init_from_config(props, data_api=ds)
    dv.prepare_data()
    dv.save_dataview(folder_path=quarterly_path)
Beispiel #46
0
def run_strategy():
    if is_backtest:
        """
        回测模式
        """
        props = {"symbol": '600519.SH',
                 "start_date": 20170101,
                 "end_date": 20171104,
                 "fast_ma_length": 5,
                 "slow_ma_length": 15,
                 "bar_type": "1d",  # '1d'
                 "init_balance": 50000}

        tapi = BacktestTradeApi()
        ins = EventBacktestInstance()
        
    else:
        """
        实盘/仿真模式
        """
        props = {'symbol': '600519.SH',
                 "fast_ma_length": 5,
                 "slow_ma_length": 15,
                 'strategy.no': 1062}
        tapi = RealTimeTradeApi(trade_config)
        ins = EventLiveTradeInstance()

    props.update(data_config)
    props.update(trade_config)
    
    ds = RemoteDataService()
    strat = DoubleMaStrategy()
    pm = PortfolioManager()
    
    context = model.Context(data_api=ds, trade_api=tapi, instance=ins,
                            strategy=strat, pm=pm)
    
    ins.init_from_config(props)
    if not is_backtest:
        ds.subscribe(props['symbol'])

    ins.run()
    if not is_backtest:
        time.sleep(9999)
    ins.save_results(folder_path=result_dir_path)
Beispiel #47
0
def run_strategy():

    start_date = 20150501
    end_date = 20171030
    index = '399975.SZ'
    
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    symbol_list = ds.query_index_member(index, start_date, start_date)

    # add the benchmark index to the last position of symbol_list
    symbol_list.append(index)
    props = {"symbol": ','.join(symbol_list),
             "start_date": start_date,
             "end_date": end_date,
             "bar_type": "1d",
             "init_balance": 1e7,
             "std multiplier": 1.5,
             "m": 10,
             "n": 60,
             "commission_rate": 2E-4}
    props.update(data_config)
    props.update(trade_config)

    tapi = BacktestTradeApi()
    ins = EventBacktestInstance()

    strat = SectorRolling()
    pm = PortfolioManager()

    context = model.Context(data_api=ds, trade_api=tapi, instance=ins,
                            strategy=strat, pm=pm)

    ins.init_from_config(props)
    ins.run()
    ins.save_results(folder_path=result_dir_path)

    ta = ana.EventAnalyzer()

    ta.initialize(data_server_=ds, file_folder=result_dir_path)
    df_bench, _ = ds.daily(index, start_date=start_date, end_date=end_date)
    ta.data_benchmark = df_bench.set_index('trade_date').loc[:, ['close']]

    ta.do_analyze(result_dir=result_dir_path, selected_sec=props['symbol'].split(',')[:2])
Beispiel #48
0
def test_save_dataview(sub_folder='test_dataview'):
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    props = {'start_date': 20150101, 'end_date': 20170930, 'universe': '000905.SH',
             'fields': ('float_mv,tot_shrhldr_eqy_excl_min_int,deferred_tax_assets,sw2'),
             'freq': 1}
    
    dv.init_from_config(props, ds)
    dv.prepare_data()
    
    factor_formula = 'Quantile(-float_mv,5)'
    dv.add_formula('rank_mv', factor_formula, is_quarterly=False)
    
    factor_formula = 'Quantile(float_mv/(tot_shrhldr_eqy_excl_min_int+deferred_tax_assets), 5)'
    dv.add_formula('rank_pb', factor_formula, is_quarterly=False)
    
    dv.save_dataview(folder_path=dataview_dir_path)
def save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    props = {'start_date': 20150101, 'end_date': 20171001, 'universe': '000300.SH',
             'fields': 'volume,turnover,float_mv,pb,total_mv',
             'freq': 1}
    
    dv.init_from_config(props, ds)
    dv.prepare_data()

    trade_status = dv.get_ts('trade_status')
    mask_sus = trade_status == '停牌'
    dv.append_df(mask_sus, 'suspended', is_quarterly=False)

    dv.add_formula('not_index_member', '!index_member', is_quarterly=False)

    dv.add_formula('limit_reached', 'Abs((open - Delay(close, 1)) / Delay(close, 1)) > 0.095', is_quarterly=False)
    
    dv.save_dataview(dataview_folder)
Beispiel #50
0
def test_write():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()
    
    secs = '600030.SH,000063.SZ,000001.SZ'
    props = {'start_date': 20160601, 'end_date': 20170601, 'symbol': secs,
             'fields': 'open,close,high,low,volume,pb,net_assets,pcf_ncf',
             'freq': 1}

    dv.init_from_config(props, data_api=ds)
    dv.prepare_data()
    assert dv.data_d.shape == (281, 48)
    assert dv.dates.shape == (281, )
    # TODO
    """
    PerformanceWarning:
    your performance may suffer as PyTables will pickle object types that it cannot
    map directly to c-types [inferred_type->mixed,key->block1_values] [items->[('000001.SZ', 'int_income'), ('000001.SZ', 'less_handling_chrg_comm_exp'), ('000001.SZ', 'net_int_income'), ('000001.SZ', 'oper_exp'), ('000001.SZ', 'symbol'), ('000063.SZ', 'int_income'), ('000063.SZ', 'less_handling_chrg_comm_exp'), ('000063.SZ', 'net_int_income'), ('000063.SZ', 'oper_exp'), ('000063.SZ', 'symbol'), ('600030.SH', 'int_income'), ('600030.SH', 'less_handling_chrg_comm_exp'), ('600030.SH', 'net_int_income'), ('600030.SH', 'oper_exp'), ('600030.SH', 'symbol')]]
    """
    
    dv.save_dataview(folder_path=daily_path)
def test_save_dataview():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    dv = DataView()

    props = {'start_date': 20170101, 'end_date': 20171001, 'universe': '000300.SH',
             'fields': ('float_mv,pb,pe_ttm,sw2'),
             'freq': 1}

    dv.init_from_config(props, ds)
    dv.prepare_data()

    factor_formula = 'GroupQuantile(-float_mv, sw2, 10)'
    dv.add_formula('rank_mv', factor_formula, is_quarterly=False)

    factor_formula = 'GroupQuantile(If(pb >= 0.2, pb, 100), sw2, 10)'
    dv.add_formula('rank_pb', factor_formula, is_quarterly=False)

    factor_formula = 'GroupQuantile(If(pe_ttm >= 3, pe_ttm, 9999.0), sw2, 10)'
    dv.add_formula('rank_pe', factor_formula, is_quarterly=False)

    dv.save_dataview(folder_path=dataview_dir_path)
Beispiel #52
0
def test_calendar():
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    
    res1 = ds.query_trade_dates(20121224, 20130201)
    assert len(res1) == 27
    
    day_zero = 20170102
    res2 = ds.query_next_trade_date(day_zero)
    assert res2 == 20170103
    res2_last = ds.query_last_trade_date(res2)
    assert res2_last == 20161230
    
    res3 = ds.query_next_trade_date(20170104)
    assert res3 == 20170105
    res4 = ds.query_last_trade_date(res3)
    assert res4 == 20170104
    
    res11 = ds.query_trade_dates(20161224, 20170201)
    assert len(res11) == 23
    
    assert not ds.is_trade_date(20150101)
    assert not ds.is_trade_date(20130501)
def test_livetrade():
    props = {'symbol': 'rb1801.SHF',
             'strategy_no': 1044}
    tapi = RealTimeTradeApi(trade_config)
    ins = EventLiveTradeInstance()
    
    props.update(data_config)
    props.update(trade_config)
    
    ds = RemoteDataService()
    strat = DoubleMaStrategy()
    pm = PortfolioManager()
    
    context = model.Context(data_api=ds, trade_api=tapi, instance=ins,
                            strategy=strat, pm=pm)
    
    ins.init_from_config(props)
    ds.subscribe(props['symbol'])
    
    ins.run()
    time.sleep(3)
    ins.stop()
    ins.save_results(result_dir_path)
    do_analyze()
Beispiel #54
0
def my_globals(request):
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    
    request.function.__globals__.update({'ds': ds})
Beispiel #55
0
        raise exc

'''


@pytest.fixture(autouse=True)
def my_globals(request):
    ds = RemoteDataService()
    ds.init_from_config(data_config)
    
    request.function.__globals__.update({'ds': ds})


if __name__ == "__main__":
    import time
    t_start = time.time()

    ds = RemoteDataService()
    ds.init_from_config(data_config)
    
    g = globals()
    g = {k: v for k, v in g.items() if k.startswith('test_') and callable(v)}

    for test_name, test_func in g.items():
        print("\n==========\nTesting {:s}...".format(test_name))
        test_func()
    print("Test Complete.")
    
    t3 = time.time() - t_start
    print("\n\n\nTime lapsed in total: {:.1f}".format(t3))