예제 #1
0
def ensure_correctness():
    d = get_pickle('tiingo', 'SPY')['SPY_AdjClose']
    m = get_pickle('tiingo', 'SPY_1M', basic=False)['SPY_1M_AdjClose']
    w = get_pickle('tiingo', 'SPY_1W', basic=False)['SPY_1W_AdjClose']
    assert d.tail(1).values == m.tail(1).values == w.tail(
        1).values, 'Ending resampled prices not match'
    print(colored.green('Seems OK.'))
예제 #2
0
def see_portfolios():
    data = get_pickle('tiingo', 'SPY')
    data = normalize('tiingo', data)
    bench = data['Adjusted_close'].pct_change()

    ports = []
    names = []
    for p in PORTFOLIOS:
        total_alloc = 0
        print(p.name)
        data['Adjusted_close'] = 0
        data = data['Adjusted_close']
        for s in p.alloc:
            tmp = get_pickle('tiingo', s[0])
            tmp = normalize('tiingo', tmp)
            data += tmp['Adjusted_close'].pct_change() * s[1]
            total_alloc += s[1]
        ports.append(data)
        names.append(p.name)
        print(total_alloc)

    df = concat(ports + [bench], axis=1).dropna()
    df.columns = names + ['Benchmark']
    df.cumsum().plot()
    plt.show()
예제 #3
0
def reconstruct_returns(name, symbols):
    fs = [f for f in listdir(join(STORAGE_PATH, 'portfolios', 'weights', 'returns')) if (name in f) & (f != '.gitkeep')]
    adjfs = [f for f in listdir(join(STORAGE_PATH, 'portfolios', 'weights', 'adj_returns')) if (name in f) & (f != '.gitkeep')]
    dfs = []
    adjdfs = []
    for f in fs:
        _name = f.split('.')[0]
        d = get_pickle(join('portfolios', 'weights', 'returns'), _name, as_is=True)
        dfs.append(d)
    for f in adjfs:
        _name = f.split('.')[0]
        d = get_pickle(join('portfolios', 'weights', 'adj_returns'), _name, as_is=True)
        adjdfs.append(d)
    df = concat(dfs, axis=1).sum(axis=1)
    adjdf = concat(adjdfs, axis=1).sum(axis=1)
    return df, adjdf, get_latest_allocs(name=name)
예제 #4
0
def latest_date_foreeach(symbols):
    for s in symbols:
        try:
            d = get_pickle('tiingo', s)
            ensure_latest(d, symbol=s)
        except Exception as err:
            print(colored.red('{}: {}'.format(s, err)))
예제 #5
0
def get_latest_allocs(name):
    tot = len([f for f in listdir(join(STORAGE_PATH, 'portfolios', 'weights')) if (name in f) & (f != '.gitkeep')]) - 1
    weights = get_pickle(join('portfolios', 'weights'), '{}_{}'.format(name, tot), as_is=True)
    del weights['Returns']
    del weights['Volatility']
    del weights['Ratio']
    return [weights.iloc[0].to_dict()]
예제 #6
0
def get_current_weights(SELECTED_PORTFOLIOS, SELECTED_STRATEGIES):
    path = join('portfolios', 'tradeable')
    fs = filenames(path, resampled=True)
    fs += filenames(path, resampled=False)
    selected = SELECTED_PORTFOLIOS + SELECTED_STRATEGIES
    SELECTED_LST = [s['name'] for s in SELECTED_PORTFOLIOS] + [s['name'] for s in SELECTED_STRATEGIES]

    res = []
    total_weights = []
    for f in fs:
        name = f.split('.')[0]
        if name in SELECTED_LST:
            d = get_pickle(path, name, as_is=True)
            for s in selected:
                if s['name'] == name:
                    if s['type'] == 'cash':
                        arr = d * s['weight']
                    elif s['type'] == 'ports':
                        arr = d * s['weight'] / len([s['name'] for s in SELECTED_PORTFOLIOS if s['type'] == 'ports'])
                    elif s['type'] == 'strats':
                        arr = d * s['weight'] / len([s['name'] for s in SELECTED_STRATEGIES if s['type'] == 'strats'])
                    res.append(arr.T)
                    total_weights += list(arr.values[0])

    out = concat(res, axis=0)
    out.columns = ['W']
    out = out.groupby(out.index).sum()
    assert round(sum(total_weights), 2) == 1.0, 'Total index weights are not equal 100%!'
    print('% Weights')
    print(out)
    print('$ Weights')
    print(round(out * 100000, 2)) # Use defined capital if not via Trader API
예제 #7
0
def pickle_to_csv_all(folder='tiingo'):
    fs = filenames(folder)
    for f in fs:
        if '.p' in f:
            try:
                name = f.split('.')[0]
                df = get_pickle(folder, name)
                df.to_csv(join(STORAGE_PATH, folder, '{}.csv'.format(name)))
                print(colored.green('Converted {}'.format(name)))
            except Exception as err:
                print(colored.red(err))
예제 #8
0
def coinapi_collect_all_coins(api):
    coins = get_pickle('coinapi', 'symbols')
    filtered_coins = coins.loc[coins['symbol_type'] == 'SPOT'].loc[
        coins['exchange_id'] == 'BITTREX'].reset_index()
    for i in range(0, len(filtered_coins)):
        d = filtered_coins.ix[i]['data_start'].split('-')
        start_data = date(int(d[0]), int(d[1]), int(d[2])).isoformat()
        conapi_data(api=api,
                    symbol_id=filtered_coins.ix[i]['symbol_id'],
                    period='1HRS',
                    start_data=start_data)
        print('{}/{}'.format(i, len(filtered_coins)))
예제 #9
0
파일: bt.py 프로젝트: tonylibing/blueblood
def run_bt_multiple():
    cerebro = Cerebro()
    df = get_pickle('tiingo', 'SPY')
    data = PandasData(dataname=df)
    cerebro.adddata(data)
    cerebro.addanalyzer(Returns)
    cerebro.optstrategy(StrategyFetcher, idx=[0, 1])
    results = cerebro.run()

    strats = [x[0] for x in results]
    for i, strat in enumerate(strats):
        rets = strat.analyzers.returns.get_analysis()
        print('Strategy {} Name {}:\n  - analyzer: {}\n'.format(
            i, strat.__class__.__name__, rets))
예제 #10
0
def resample_all(folder='tiingo'):
    pers = ['1W', '1M']
    symbols = [
        f.split('.')[0] for f in filenames(folder)
        if (('.p' in f) & ('_' not in f))
    ]
    for s in symbols:
        try:
            df = get_pickle(folder=folder, name=s, resampler=True)
            for p in pers:
                df = resample_df(folder=folder, df=df, period=p)
                write_resampled_df(df=df, folder=folder, s=s, p=p)
        except Exception as err:
            print(colored.red(err))
예제 #11
0
def compare(val, title, lim=None):
    df = get_pickle('tiingo', 'SPY')
    market = df['SPY_AdjClose'].pct_change().cumsum()
    if lim is not None:
        market = market.loc[lim:]

    fig = plt.figure(figsize=(16,10))
    ax1 = fig.add_subplot(111)
    ax1.plot(val, color=BLUE1)
    ax1.set_ylabel('Indicator')

    ax2 = ax1.twinx()
    ax2.plot(market, 'r-')
    ax2.set_ylabel('S&P500', color='r')
    for tl in ax2.get_yticklabels():
        tl.set_color('r')
    plt.title(title)
    return plt
예제 #12
0
def run_alpha_strategy(model):
    try:
        model = int(model)
    except:
        model = None
        pass
    BASKET = BASKETS[1].symbols

    initial = get_pickle(DATA_SOURCE, BASKET[0])
    initial = transform_multi_data(data=initial, symbol=BASKET[0])
    data = join_data(primary=initial, folder=DATA_SOURCE, symbols=BASKET[1:])
    data = clean_prices(data=data, symbols=BASKET, d_type='eod')

    if model is None:
        for i in all_alphas():
            print('Alpha %s' % i)
            run_factor(data, i, BASKET)
    else:
        run_factor(data, model, BASKET)
예제 #13
0
def portfolio_returns(data, adj_data, symbols, name, comms, min_var=False):
    weights = get_pickle(join('portfolios', 'weights'), name, as_is=True)
    if min_var:
        best_ratio = weights.loc[weights['Volatility'] == weights['Volatility'].min()]
    best_ratio = weights.iloc[0]

    data['combined'] = 0
    adj_data['adj_combined'] = 0
    w = 0
    for s in symbols:
        w += best_ratio['{}'.format(s)]
        filtered_comms = comms[s].fillna(0.0) / len(comms[s].index) * 2
        data['comm'] = filtered_comms
        data['combined'] += best_ratio['{}'.format(s)] * data['{}_ret'.format(s)] - best_ratio['{}'.format(s)] * data['comm']
        adj_data['adj_combined'] += best_ratio['{}'.format(s)] * adj_data['{}_ret'.format(s)] - best_ratio['{}'.format(s)] * data['comm']

    assert round(w, 2) == 1.0, 'Allocations {}'.format(w)
    data['combined'].to_pickle(join(STORAGE_PATH, 'portfolios', 'weights', 'returns', '{}.p'.format(name)))
    adj_data['adj_combined'].to_pickle(join(STORAGE_PATH, 'portfolios', 'weights', 'adj_returns', '{}.p'.format(name)))
예제 #14
0
def optimize(data, r, op, factor='sortino', rev=False):
    ''' Finds average of three best by give metric.'''
    df = get_pickle(folder='tiingo', name='SPY')
    market = df['SPY_AdjClose'].pct_change()
    c = concat([market, data], axis=1)
    c.columns = ['market', 'subject']
    c['ret'] = c['subject'].pct_change()

    res = []
    for i in r:
        try:
            c['func'] = c['subject'].rolling(window=i, min_periods=i).mean()
            c['action'] = where(op(c['subject'].shift(), c['func'].shift()),
                                c['ret'], 0)
            c = c.dropna()
            r = stats_values(returns=c['action'], market=c['market'])[factor]
            res.append([i, r])
        except Exception as err:
            pass
    if len(res) > 0:
        res = sorted(res, key=lambda x: x[1], reverse=rev)
        res = [r[0] for r in res][:3]
    return sum(res) / 3.0
예제 #15
0
def run_analyze(model):
    try:
        model = int(model)
    except:
        model = None
        pass
    '''
    BASKET = ['BSX', 'AIG', 'INTU', 'INTC', 'HON', 'DUK', 'NTAP', 'COL', 'ABT', 'ADSK', 'NUE',
        'MU', 'TIF', 'ADBE', 'FDX', 'NKE', 'TAP', 'SCHW', 'STI', 'CIT', 'LNC', 'MAT', 'ARNC',
        'ADI', 'AFL', 'KEY', 'HD', 'OKE', 'LOW', 'RF', 'OI', 'AES', 'LUV', 'TXT', 'UNH', 'DVN',
        'CCL', 'MRO', 'EOG', 'T', 'AVY', 'CI', 'BK', 'CSR', 'AAPL', 'ZBH', 'CTXS', 'ALL', 'SHW',
        'COF', 'SNA', 'AET', 'SYY', 'UNM', 'GTE', 'GWW', 'BVSN', 'BLL', 'COST', 'CS', 'HPQ',
        'CTAS', 'AMAT', 'WFC', 'EFU', 'HRB', 'ADM', 'NWL', 'EFX', 'PGR', 'BBT', 'NVDA', 'ARC',
        'SGI', 'JPM', 'GIS', 'PHM', 'PCAR', 'PKI', 'NOC', 'SUB', 'APD', 'ITW', 'OXY', 'FMC',
        'BDX', 'AXP', 'SLB', 'TX', 'TWX', 'AGN', 'ZION', 'CMA', 'A', 'TKR', 'FISV', 'CCK',
        'AEE', 'APA', 'TJX', 'CSCO', 'GRA', 'AMGN', 'DOV', 'WMT', 'EQR', 'LMT', 'BAC', 'NC',
        'PH', 'VMC', 'VO', 'EMR', 'HAS', 'ECL', 'CINF', 'C', 'DNB', 'AGC', 'BGG', 'TMK', 'SWK',
        'BFO', 'APC', 'LLY', 'NEM', 'NEE', 'VZ', 'PBY', 'SMI', 'PNC', 'MSFT', 'H', 'CMS',
        'BAX', 'ADP', 'CAH', 'SYK', 'EMN', 'PCH', 'ABC', 'KSU', 'IFF', 'CA', 'CLX', 'TGT',
        'JNJ', 'SRV', 'AON', 'VFC', 'MMC', 'FLR', 'ORCL', 'BBY', 'CBS', 'MAS', 'CAG', 'RAD',
        'GPC', 'HES', 'RHI', 'AZO', 'CNP', 'CTL', 'XLNX', 'MCD', 'LB', 'CSX', 'YUM', 'USB',
        'GPS', 'PX', 'CHA', 'MDT', 'WMB', 'JWN', 'CMI', 'IPG', 'DIS']
    '''
    BASKET = ['QQQ', 'SPY', 'IWM', 'EEM', 'TLT']

    initial = get_pickle(DATA_SOURCE, BASKET[0])
    initial = transform_multi_data(data=initial, symbol=BASKET[0])
    data = join_data(primary=initial, folder=DATA_SOURCE, symbols=BASKET[1:])
    data = clean_prices(data=data, symbols=BASKET, d_type='eod')

    if model is None:
        for i in all_alphas():
            print('Alpha %s' % i)
            run_factor(data, i, BASKET)
    else:
        run_factor(data, model, BASKET)
예제 #16
0
def stats_values(returns):
    market = get_pickle('tiingo', 'SPY')['SPY_AdjClose'].pct_change()
    df = concat([returns, market], axis=1)
    df.columns = ['returns', 'market']
    df = df.dropna()
    returns = df['returns']
    market = df['market']
    c = returns.cumsum()

    vv = vol(returns=returns) * 100.0
    amr = average_month_return(returns=returns)
    # trade_count(signals)
    at = average_trade(returns=returns) * 100.0
    aw = average_win(returns=returns) * 100.0
    al = average_loss(returns=returns) * 100.0
    w = total_wins(returns=returns)
    l = total_losses(returns=returns)
    pf = profit_factor(returns=returns)
    wr = win_rate(returns=returns) * 100.0
    acor = correlation(returns=returns)
    sr = sharpe_ratio(returns, rf=0.0)
    b = beta(returns=returns, benchmark=market)
    a = alpha(returns=returns, rf=0.0, market_return=market)
    tr = treynor(returns=returns, benchmark=market, rf=0.0)
    infr = ir(returns=returns, benchmark=market)
    mod = modigliani(returns=returns, benchmark=market, rf=0.0)
    ora = omega_ratio(returns=returns, rf=0.0, target=0.0)
    so = sortino(returns=returns, rf=0.0, target=0)
    kt = kappa_three(returns=returns, rf=0.0, target=0.05)
    up = upside_potential(returns=returns, target=0.0)
    cal = calmar(returns=returns, rf=0.0)
    ui = ulcer_index(cumulative=c)
    upi = ulcer_performance_index(cumulative=c, r=returns.mean(), rf=0.0)
    stra = sterling_ration(returns=returns, rf=0.0)
    br = burke_ratio(returns=returns, cumulative=c, rf=0.0)
    v = var(returns=returns, alpha=a)
    cvv = cvar(returns=returns, alpha=a)
    ev = excess_var(returns=returns, rf=0.0, alpha=a)
    cs = conditional_sharpe(returns=returns, rf=0.0, alpha=a)
    mdd = max_dd(returns=returns) * 100.0
    add = average_dd(cumulative=c) * 100.0
    adds = average_dd_squared(cumulative=c) * 100.0
    mdddur = max_dd_duration(cumulative=c)
    dp = drawdown_probability(cumulative=c)
    rp = return_probability(returns=returns)
    cs = common_sense(returns=returns)
    wlr = win_loss_ratio(returns=returns)
    cpc = cpc_index(returns=returns)
    tailr = tail_ratio(returns=returns)
    owr = outlier_win_ratio(returns=returns)
    olr = outlier_loss_ratio(returns=returns)
    start = get_start(returns=returns)
    end = get_end(returns=returns)
    ys = get_years_count(returns=returns)
    tret = total_return(returns=returns)
    cgr = cagr(returns=returns)
    _ytd = ytd(returns=returns)
    _mtd = mtd(returns=returns)
    three_month = mos(returns=returns, m=3)
    six_month = mos(returns=returns, m=6)
    three_year = mos(returns=returns, m=36)
    dailyskew = daily_skew(returns=returns)
    daily_kurt = daily_kurtosis(returns=returns)
    bestday = best_day(returns)
    worstday = worst_day(returns)
    monthlyvol = monthly_vol(returns=returns)
    monthlyskew = monthly_skew(returns=returns)
    monthlykurt = monthly_skew(returns=returns)
    bestmonth = best_month(returns=returns)
    worstmonth = worst_month(returns=returns)
    bestyear = best_year(returns=returns)
    worstyear = worst_year(returns=returns)
    yearlymean = yearly_mean(returns=returns)
    yearlyvol = yearly_vol(returns=returns)
    yearlyskew = yearly_skew(returns=returns)
    yearly_kurt = yearly_kurtosis(returns=returns)
    avg_down_month = average_down_month(returns=returns)
    avg_up_month = average_up_month(returns=returns)
    win_year_perc = win_years_percent(returns=returns) * 100.0
    win_mo_perc = win_months_percent(returns=returns) * 100.0
    win_w_perc = win_weeks_percent(returns=returns) * 100.0

    return {
        'volatility': vv,
        'average_month': amr,
        'average_trade': at,
        'average_win': aw,
        'average_loss': al,
        'total_wins': w,
        'total_losses': l,
        'win_rate': wr,
        'autocorrelation': acor,
        'sharpe': sr,
        'beta': b,
        'alpha': a,
        'treynor': tr,
        'information': infr,
        'win_rate': wr,
        'modigliani': mod,
        'omega': ora,
        'sortino': so,
        'kappa': kt,
        'upside': up,
        'calmar': cal,
        'ulcer_index': ui,
        'ulcer_performance_index': upi,
        'sterling': stra,
        'burke': br,
        'VaR': v,
        'cVaR': cvv,
        'eVaR': ev,
        'conditional_sharpe': cs,
        'max_dd': mdd,
        'average_dd': add,
        'average_dd_squared': adds,
        'max_dd_duration': mdddur,
        'dd_prob': up,
        'return_prob': rp,
        'profit_factor': pf,
        'common_sense': cs,
        'win_loss_ratio': wlr,
        'cpc_index': cpc,
        'tail_ratio': tailr,
        'outlier_win_ratio': owr,
        'outlier_loss_ratio': olr,
        'start': start,
        'end': end,
        'years': ys,
        'total_return': tret,
        'cagr': cgr,
        'ytd': _ytd,
        'mtd': _mtd,
        'three_month': three_month,
        'six_month': six_month,
        'three_year': three_year,
        'daily_skew': dailyskew,
        'daily_kurt': daily_kurt,
        'best_day': bestday,
        'worst_day': worstday,
        'monthly_vol': monthlyvol,
        'monthly_skew': monthlyskew,
        'monthly_kurt': monthlykurt,
        'best_month': bestmonth,
        'worst_month': worstmonth,
        'best_year': bestyear,
        'worst_year': worstyear,
        'yearly_mean': yearlymean,
        'yearly_vol': yearlyvol,
        'yearly_skew': yearlyskew,
        'yearly_kurt': yearly_kurt,
        'avg_down_month': avg_down_month,
        'avg_up_month': avg_up_month,
        'win_year_perc': win_year_perc,
        'win_months_perc': win_mo_perc,
        'win_weeks_perc': win_w_perc
    }
예제 #17
0
def stats_printout(returns, tf=1440):
    if tf == 1440:
        market = get_pickle('tiingo', 'SPY')['SPY_AdjClose'].pct_change()
        df = concat([returns, market], axis=1)
        df.columns = ['returns', 'market']
        df = df.dropna()
        returns = df['returns']
        market = df['market']
    c = returns.cumsum()

    print('Basics -----------------------')
    start = get_start(returns=returns)
    print('Start: %s' % start)
    end = get_end(returns=returns)
    print('End: %s' % end)
    ys = get_years_count(returns=returns)
    print('Years: %.0f' % ys)
    tret = total_return(returns=returns)
    print('Total return: %.2f%%' % tret)
    # @TODO initial valeus should be already reinvested
    cgr = cagr(returns=returns)
    print('CAGR: %.2f%%' % cgr)
    _ytd = ytd(returns=returns)
    print('YTD: %.2f%%' % _ytd)
    _mtd = mtd(returns=returns)
    print('Month to date: %.2f%%' % _mtd)
    three_month = mos(returns=returns, m=3)
    print('3 months: %.2f%%' % three_month)
    six_month = mos(returns=returns, m=6)
    print('6 months: %.2f%%' % six_month)
    three_year = mos(returns=returns, m=36)
    print('3 years: %.2f%%' % three_year)
    dailyskew = daily_skew(returns=returns)
    print('Daily skew: %.2f' % dailyskew)
    daily_kurt = daily_kurtosis(returns=returns)
    print('Daily kurtosis: %.2f' % daily_kurt)
    bestday = best_day(returns)
    print('Best day: %.2f%%' % bestday)
    worstday = worst_day(returns)
    print('Worst day: %.2f%%' % worstday)
    monthlyvol = monthly_vol(returns=returns)
    print('Monthly volatility: %.2f%%' % monthlyvol)
    monthlyskew = monthly_skew(returns=returns)
    print('Monthly skew: %.2f' % monthlyskew)
    monthlykurt = monthly_skew(returns=returns)
    print('Monthly kurtosis: %.2f' % monthlykurt)
    bestmonth = best_month(returns=returns)
    print('Best month: %.2f%%' % bestmonth)
    worstmonth = worst_month(returns=returns)
    print('Worst month: %.2f%%' % worstmonth)
    bestyear = best_year(returns=returns)
    print('Best year: %.2f%%' % bestyear)
    worstyear = worst_year(returns=returns)
    print('Worst year: %.2f%%' % worstyear)
    yearlymean = yearly_mean(returns=returns)
    print('Yearly average: %.2f%%' % yearlymean)
    yearlyvol = yearly_vol(returns=returns)
    print('Yearly volatility: %.2f%%' % yearlyvol)
    yearlyskew = yearly_skew(returns=returns)
    print('Yearly skew: %.2f' % yearlyskew)
    yearly_kurt = yearly_kurtosis(returns=returns)
    print('Yearly kurtosis: %.2f' % yearly_kurt)
    avg_down_month = average_down_month(returns=returns)
    print('Average down month %.2f%%' % avg_down_month)
    avg_up_month = average_up_month(returns=returns)
    print('Average up month: %.2f%%' % avg_up_month)
    win_year_perc = win_years_percent(returns=returns) * 100.0
    print('Win years: %.2f%%' % win_year_perc)
    win_mo_perc = win_months_percent(returns=returns) * 100.0
    print('Win months: %.2f%%' % win_mo_perc)
    win_w_perc = win_weeks_percent(returns=returns) * 100.0
    print('Win weeks: %.2f%%' % win_w_perc)
    vv = vol(returns=returns)
    print('Volatility %.3f%%' % (vv * 100.0))
    amr = average_month_return(returns=returns)
    print('Average month return %.3f%%' % amr)
    pf = profit_factor(returns=returns)
    print('Profit factor %.2f' % pf)
    at = average_trade(returns=returns) * 100.0
    print('Average trade %.2f%%' % at)
    aw = average_win(returns=returns) * 100.0
    print('Average win %.2f%%' % aw)
    al = average_loss(returns=returns) * 100.0
    print('Average loss %.2f%%' % al)
    w = total_wins(returns=returns)
    print('Wins %s' % w)
    l = total_losses(returns=returns)
    print('Losses %s' % l)
    wr = win_rate(returns=returns) * 100.0
    print('Win rate %.3f%%' % wr)
    acor = correlation(returns=returns)
    print('Autocorrelation %.3f' % acor)

    print()
    print('Ratios -----------------------')
    print('Sharpe* %.3f' % (sharpe_ratio(returns, rf=0.0)))
    monthlysharpe = monthly_sharpe(returns=returns)
    print('Monthly Sharpe: %.2f' % monthlysharpe)
    weeklysharpe = weekly_sharpe(returns=returns)
    print('Weekly Sharpe: %.2f' % weeklysharpe)
    yearlysharpe = yearly_sharpe(returns=returns)
    print('yearly Sharpe: %.2f' % yearlysharpe)
    cs = common_sense(returns=returns)
    print('Common Sense Ratio: %.2f' % cs)
    if tf == 1440:
        b = beta(returns=returns, benchmark=market)
        print('Beta %.3f' % b)
        a = alpha(returns=returns, rf=0.0, market_return=market)
        print('Alpha %.3f' % a)
        tr = treynor(returns=returns, benchmark=market, rf=0.0)
        print('Treynor* %.3f' % tr)
        infr = ir(returns=returns, benchmark=market)
        print('Information ratio %.3f' % infr)
        mod = modigliani(returns=returns, benchmark=market, rf=0.0)
        print('Modigliani ratio* %.3f' % mod)
    ora = omega_ratio(returns=returns, rf=0.0, target=0.0)
    print('Omega Ratio* %.3f' % ora)
    so = sortino(returns=returns, rf=0.0, target=0)
    print('Sortino Ratio* %.3f' % so)
    kt = kappa_three(returns=returns, rf=0.0, target=0.05)
    print('Kappa Three %.3f' % kt)
    up = upside_potential(returns=returns, target=0.0)
    print('Upside potential ratio %.3f' % up)
    cal = calmar(returns=returns, rf=0.0)
    print('Calmar Ratio* %.3f' % cal)
    ui = ulcer_index(cumulative=c)
    print('Ulcer Index %.3f' % ui)
    upi = ulcer_performance_index(cumulative=c, r=returns.mean(), rf=0.0)
    print('Ulcer Performance Index* %.3f' % upi)
    stra = sterling_ration(returns=returns, rf=0.0)
    if stra is not None:
        print('Sterling Ratio* %.3f' % stra)
    br = burke_ratio(returns=returns, cumulative=c, rf=0.0)
    print('Burke Ratio* %.3f' % br)
    wlr = win_loss_ratio(returns=returns)
    print('Win-Loss Ratio %.2f' % wlr)
    cpc = cpc_index(returns=returns)
    print('CPC Index %.3f' % cpc)
    tailr = tail_ratio(returns=returns)
    print('Tail ratio %.3f' % tailr)
    owr = outlier_win_ratio(returns=returns)
    print('Outlier win ratio %.3f' % owr)
    olr = outlier_loss_ratio(returns=returns)
    print('Outlier loss ratio %.3f' % olr)

    if tf == 1440:
        print()
        print('VaR --------------------------')
        v = var(returns=returns, alpha=a)
        print('VaR %.3f' % v)
        cvv = cvar(returns=returns, alpha=a)
        print('Conditional VaR %.3f' % cvv)
        ev = excess_var(returns=returns, rf=0.0, alpha=a)
        print('Excess VaR* %.3f' % ev)
        cs = conditional_sharpe(returns=returns, rf=0.0, alpha=a)
        print('Conditional Sharpe* %.3f' % (cs * sqrt(252)))

    print()
    print('DD ---------------------------')
    mdd = max_dd(returns=returns) * 100.0
    print('Max DD %.3f%%' % mdd)
    add = average_dd(cumulative=c) * 100.0
    print('Average DD %.2f%%' % add)
    adds = average_dd_squared(cumulative=c) * 100.0
    print('Average DD Squared %.3f%%' % adds)
    mdddur = max_dd_duration(cumulative=c)
    print('Max DD duration %s' % mdddur)
    dp = drawdown_probability(cumulative=c)
    print('Drawdown probability %.3f' % dp)
    rp = return_probability(returns=returns)
    print('Return probability %.3f' % rp)

    print('* Values are annualized.')
예제 #18
0
def get_tfs(e):
    try:
        return [s[0] for s in get_pickle(join('ccxt', 'tfs'), e[0], as_is=True).values]
    except FileNotFoundError:
        pass