Notebook

Enter your backtest ID.

Note: the backtest needs to be longer than 2 years in order to receive a score.

In [1]:
# Replace the string below with your backtest ID.
bt = get_backtest('5a70ffcb0da48847ea9d6c6e')
100% Time: 0:00:11|###########################################################|
In [2]:
import empyrical as ep
import pyfolio as pf
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from quantopian.research import returns
In [3]:
from quantopian.pipeline import Pipeline
from quantopian.research import run_pipeline
from quantopian.pipeline.filters import QTradableStocksUS

def get_tradable_universe(start, end):
    """
    Gets the tradable universe in a format that can be compared to the positions
    of a backtest.
    """
    pipe = Pipeline(
        columns={'qtu':QTradableStocksUS()}
    )
    df = run_pipeline(pipe, start, end)
    df = df.unstack()
    df.columns = df.columns.droplevel()
    df = df.astype(float).replace(0, np.nan)
    return df
In [4]:
def volatility_adjusted_daily_return(trailing_algorithm_returns):
    """
    Normalize the last daily return in `trailing_algorithm_returns` by the annualized
    volatility of `trailing_algorithm_returns`.
    """
    
    todays_return = trailing_algorithm_returns[-1]
    # Volatility is floored at 2%.
    volatility = max(ep.annual_volatility(trailing_algorithm_returns), 0.02)
    score = (todays_return / volatility)
    
    return score
In [5]:
def compute_score(algorithm_returns):
    """
    Compute the score of a backtest from its algorithm_returns.
    """
    
    result = []
    
    cumulative_score = 0
    count = 0
    
    daily_scores = roll(
        algorithm_returns,
        function=volatility_adjusted_daily_return,
        window=63
    )
    
    cumulative_score = np.cumsum(daily_scores[441:])
    latest_score = cumulative_score[-1]
    
    print ''
    print 'Score computed between %s and %s.' % (cumulative_score.index[0].date(), daily_scores.index[-1].date())
    
    plt.plot(cumulative_score)
    plt.title('Out-of-Sample Score Over Time')
    print 'Cumulative Score: %f' % latest_score
    
    return cumulative_score
In [6]:
# This code is copied from the empyrical repository.
# Source: https://github.com/quantopian/empyrical/blob/master/empyrical/utils.py#L49
# Includes a fix to the bug reported here: https://github.com/quantopian/empyrical/issues/79
def roll(*args, **kwargs):
    """
    Calculates a given statistic across a rolling time period.
    Parameters
    ----------
    returns : pd.Series or np.ndarray
        Daily returns of the strategy, noncumulative.
        - See full explanation in :func:`~empyrical.stats.cum_returns`.
    factor_returns (optional): float / series
        Benchmark return to compare returns against.
    function:
        the function to run for each rolling window.
    window (keyword): int
        the number of periods included in each calculation.
    (other keywords): other keywords that are required to be passed to the
        function in the 'function' argument may also be passed in.
    Returns
    -------
    np.ndarray, pd.Series
        depends on input type
        ndarray(s) ==> ndarray
        Series(s) ==> pd.Series
        A Series or ndarray of the results of the stat across the rolling
        window.
    """
    func = kwargs.pop('function')
    window = kwargs.pop('window')
    if len(args) > 2:
        raise ValueError("Cannot pass more than 2 return sets")

    if len(args) == 2:
        if not isinstance(args[0], type(args[1])):
            raise ValueError("The two returns arguments are not the same.")

    if isinstance(args[0], np.ndarray):
        return _roll_numpy(func, window, *args, **kwargs)
    return _roll_pandas(func, window, *args, **kwargs)

def _roll_ndarray(func, window, *args, **kwargs):
    data = []
    for i in range(window, len(args[0]) + 1):
        rets = [s[i-window:i] for s in args]
        data.append(func(*rets, **kwargs))
    return np.array(data)


def _roll_pandas(func, window, *args, **kwargs):
    data = {}
    for i in range(window, len(args[0]) + 1):
        rets = [s.iloc[i-window:i] for s in args]
        data[args[0].index[i - 1]] = func(*rets, **kwargs)
    return pd.Series(data)
In [7]:
SECTORS = [
    'basic_materials', 'consumer_cyclical', 'financial_services',
    'real_estate', 'consumer_defensive', 'health_care', 'utilities',
    'communication_services', 'energy', 'industrials', 'technology'
]

STYLES = [
    'momentum', 'size', 'value', 'short_term_reversal', 'volatility'
]

POSITION_CONCENTRATION_98TH_MAX = 0.05
POSITION_CONCENTRATION_100TH_MAX = 0.1
LEVERAGE_0TH_MIN = 0.7
LEVERAGE_2ND_MIN = 0.8
LEVERAGE_98TH_MAX = 1.1
LEVERAGE_100TH_MAX = 1.2
DAILY_TURNOVER_0TH_MIN = 0.03
DAILY_TURNOVER_2ND_MIN = 0.05
DAILY_TURNOVER_98TH_MAX = 0.65
DAILY_TURNOVER_100TH_MAX = 0.8
NET_EXPOSURE_LIMIT_98TH_MAX = 0.1
NET_EXPOSURE_LIMIT_100TH_MAX = 0.2
BETA_TO_SPY_98TH_MAX = 0.3
BETA_TO_SPY_100TH_MAX = 0.4
SECTOR_EXPOSURE_98TH_MAX = 0.2
SECTOR_EXPOSURE_100TH_MAX = 0.25
STYLE_EXPOSURE_98TH_MAX = 0.4
STYLE_EXPOSURE_100TH_MAX = 0.5
TRADABLE_UNIVERSE_0TH_MIN = 0.9
TRADABLE_UNIVERSE_2ND_MIN = 0.95


def check_constraints(positions, transactions, algorithm_returns, risk_exposures):
    
    sector_constraints = True
    style_constraints = True
    constraints_met = 0
    num_constraints = 9
    
    # Position Concentration Constraint
    print 'Checking positions concentration limit...'
    try:
        percent_allocations = pf.pos.get_percent_alloc(positions[5:])
        daily_absolute_percent_allocations = percent_allocations.abs().drop('cash', axis=1)
        daily_max_absolute_position = daily_absolute_percent_allocations.max(axis=1)
        
        position_concentration_98 = daily_max_absolute_position.quantile(0.98)
        position_concentration_100 = daily_max_absolute_position.max()
        
    except IndexError:
        position_concentration_98 = -1
        position_concentration_100 = -1
        
    if (position_concentration_98 > POSITION_CONCENTRATION_98TH_MAX):
        print 'FAIL: 98th percentile position concentration of %.2f > %.1f.' % (
        position_concentration_98*100,
        POSITION_CONCENTRATION_98TH_MAX*100
    )
    elif (position_concentration_100 > POSITION_CONCENTRATION_100TH_MAX):
        print 'FAIL: 100th percentile position concentration of %.2f > %.1f.' % (
        position_concentration_100*100,
        POSITION_CONCENTRATION_100TH_MAX*100
    )
    else:
        print 'PASS: Max position concentration of %.2f%% <= %.1f%%.' % (
            position_concentration_98*100,
            POSITION_CONCENTRATION_98TH_MAX*100
        )
        constraints_met += 1

        
    # Leverage Constraint
    print ''
    print 'Checking leverage limits...'
    leverage = pf.timeseries.gross_lev(positions[5:])
    leverage_0 = leverage.min()
    leverage_2 = leverage.quantile(0.02)
    leverage_98 = leverage.quantile(0.98)
    leverage_100 = leverage.max()
    leverage_passed = True
    
    if (leverage_0 < LEVERAGE_0TH_MIN):
        print 'FAIL: Minimum leverage of %.2fx is below %.1fx' % (
            leverage_0,
            LEVERAGE_0TH_MIN
        )
        leverage_passed = False
    if (leverage_2 < LEVERAGE_2ND_MIN):
        print 'FAIL: 2nd percentile leverage of %.2fx is below %.1fx' % (
            leverage_2,
            LEVERAGE_2ND_MIN
        )
        leverage_passed = False
    if (leverage_98 > LEVERAGE_98TH_MAX):
        print 'FAIL: 98th percentile leverage of %.2fx is above %.1fx' % (
            leverage_98,
            LEVERAGE_98TH_MAX
        )
        leverage_passed = False
    if (leverage_100 > LEVERAGE_100TH_MAX):
        print 'FAIL: Maximum leverage of %.2fx is above %.1fx' % (
            leverage_0,
            LEVERAGE_0TH_MAX
        )
        leverage_passed = False
    if leverage_passed:
        print 'PASS: Leverage range of %.2fx-%.2fx is between %.1fx-%.1fx.' % (
            leverage_2,
            leverage_98,
            LEVERAGE_2ND_MIN,
            LEVERAGE_98TH_MAX
        )
        constraints_met += 1
      
    # Turnover Constraint
    print ''
    print 'Checking turnover limits...'
    turnover = pf.txn.get_turnover(positions, transactions, denominator='portfolio_value')
    # Compute mean rolling 63 trading day turnover.
    rolling_mean_turnover = roll(
        turnover, 
        function=pd.Series.mean,
        window=63)[62:]
    rolling_mean_turnover_0 = rolling_mean_turnover.min()
    rolling_mean_turnover_2 = rolling_mean_turnover.quantile(0.02)
    rolling_mean_turnover_98 = rolling_mean_turnover.quantile(0.98)
    rolling_mean_turnover_100 = rolling_mean_turnover.max()  
    rolling_mean_turnover_passed = True
    
    if (rolling_mean_turnover_0 < DAILY_TURNOVER_0TH_MIN):
        print 'FAIL: Minimum turnover of %.2f%% is below %.1f%%.' % (
            rolling_mean_turnover_0*100,
            DAILY_TURNOVER_0TH_MIN*100
        )
        rolling_mean_turnover_passed = False
    if (rolling_mean_turnover_2 < DAILY_TURNOVER_2ND_MIN):
        print 'FAIL: 2nd percentile turnover of %.2f%% is below %.1fx' % (
            rolling_mean_turnover_2*100,
            DAILY_TURNOVER_2ND_MIN*100
        )
        rolling_mean_turnover_passed = False
    if (rolling_mean_turnover_98 > DAILY_TURNOVER_98TH_MAX):
        print 'FAIL: 98th percentile turnover of %.2f%% is above %.1fx' % (
            rolling_mean_turnover_98*100,
            DAILY_TURNOVER_98TH_MAX*100
        )
        rolling_mean_turnover_passed = False
    if (rolling_mean_turnover_100 > DAILY_TURNOVER_100TH_MAX):
        print 'FAIL: Maximum turnover of %.2f%% is above %.1fx' % (
            rolling_mean_turnover_100*100,
            DAILY_TURNOVER_100TH_MAX*100
        )
        rolling_mean_turnover_passed = False
    if rolling_mean_turnover_passed:
        print 'PASS: Mean turnover range of %.2f%%-%.2f%% is between %.1f%%-%.1f%%.' % (
            rolling_mean_turnover_2*100,
            rolling_mean_turnover_98*100,
            DAILY_TURNOVER_2ND_MIN*100,
            DAILY_TURNOVER_98TH_MAX*100
        )
        constraints_met += 1

        
    # Net Exposure Constraint
    print ''
    print 'Checking net exposure limit...'
    net_exposure = pf.pos.get_long_short_pos(positions[5:])['net exposure'].abs()
    net_exposure_98 = net_exposure.quantile(0.98)
    net_exposure_100 = net_exposure.max()
    
    if (net_exposure_98 > NET_EXPOSURE_LIMIT_98TH_MAX):
        print 'FAIL: 98th percentile net exposure (absolute value) of %.2f > %.1f.' % (
        net_exposure_98*100,
        NET_EXPOSURE_LIMIT_98TH_MAX*100
    )
    elif (net_exposure_100 > NET_EXPOSURE_LIMIT_100TH_MAX):
        print 'FAIL: 100th percentile net exposure (absolute value) of %.2f > %.1f.' % (
        net_exposure_100*100,
        NET_EXPOSURE_LIMIT_100TH_MAX*100
    )
    else:
        print 'PASS: Net exposure (absolute value) of %.2f%% <= %.1f%%.' % (
            net_exposure_98*100,
            NET_EXPOSURE_LIMIT_98TH_MAX*100
        )
        constraints_met += 1
    
        
    # Beta Constraint
    print ''
    print 'Checking beta-to-SPY limit...'
    spy_returns = returns(
        symbols('SPY'),
        algorithm_returns.index[0],
        algorithm_returns.index[-1],
    )
    beta = roll(
        algorithm_returns,
        spy_returns,
        function=ep.beta,
        window=126
    ).reindex_like(algorithm_returns).fillna(0).abs()
    beta_98 = beta.quantile(0.98)
    beta_100 = beta.max()
    if (beta_98 > BETA_TO_SPY_98TH_MAX):
            print 'FAIL: 98th percentile absolute beta of %.3f > %.1f.' % (
            beta_98,
            BETA_TO_SPY_98TH_MAX
        )
    elif (beta_100 > BETA_TO_SPY_100TH_MAX):
        print 'FAIL: 100th percentile absolute beta of %.3f > %.1f.' % (
            beta_100,
            BETA_TO_SPY_100TH_MAX
        )
    else:
        print 'PASS: Max absolute beta of %.3f <= %.1f.' % (
            beta_98,
            BETA_TO_SPY_98TH_MAX
        )
        constraints_met += 1
        
    # Risk Exposures
    rolling_mean_risk_exposures = risk_exposures.rolling(63, axis=0).mean()[62:].fillna(0)
    
    # Sector Exposures
    print ''
    print 'Checking sector exposure limits...'
    for sector in SECTORS:
        absolute_mean_sector_exposure = rolling_mean_risk_exposures[sector].abs()
        abs_mean_sector_exposure_98 = absolute_mean_sector_exposure.quantile(0.98)
        abs_mean_sector_exposure_100 = absolute_mean_sector_exposure.max()
        if (abs_mean_sector_exposure_98 > SECTOR_EXPOSURE_98TH_MAX):
            print 'FAIL: 98th percentile %s exposure of %.3f (absolute value) is greater than %.2f.' % (
                sector,
                abs_mean_sector_exposure_98,
                SECTOR_EXPOSURE_98TH_MAX
            )
            sector_constraints = False
        elif (abs_mean_sector_exposure_100 > SECTOR_EXPOSURE_100TH_MAX):
            max_sector_exposure_day = absolute_mean_sector_exposure.idxmax()
            print 'FAIL: Max %s exposure of %.3f (absolute value) on %s is greater than %.2f.' % (
                sector,
                abs_mean_sector_exposure_100,
                max_sector_exposure_day,
                SECTOR_EXPOSURE_100TH_MAX
            )
            sector_constraints = False
    if sector_constraints:
        print 'PASS: All sector exposures were between +/-%.2f.' % SECTOR_EXPOSURE_98TH_MAX
        constraints_met += 1
        
    # Style Exposures
    print ''
    print 'Checking style exposure limits...'
    for style in STYLES:
        absolute_mean_style_exposure = rolling_mean_risk_exposures[style].abs()
        abs_mean_style_exposure_98 = absolute_mean_style_exposure.quantile(0.98)
        abs_mean_style_exposure_100 = absolute_mean_style_exposure.max()
        if (abs_mean_style_exposure_98 > STYLE_EXPOSURE_98TH_MAX):
            print 'FAIL: 98th percentile %s exposure of %.3f (absolute value) is greater than %.2f.' % (
                style, 
                abs_mean_style_exposure_98, 
                STYLE_EXPOSURE_98TH_MAX
            )
            style_constraints = False
        elif (abs_mean_style_exposure_100 > STYLE_EXPOSURE_100TH_MAX):
            max_style_exposure_day = absolute_mean_style_exposure.idxmax()
            print 'FAIL: Max %s exposure of %.3f (absolute value) on %s is greater than %.2f.' % (
                style, 
                abs_mean_style_exposure_100, 
                max_style_exposure_day.date(),
                STYLE_EXPOSURE_100TH_MAX
            )
            style_constraints = False
    if style_constraints:
        print 'PASS: All style exposures were between +/-%.2f.' % STYLE_EXPOSURE_98TH_MAX
        constraints_met += 1
    
    
    # Tradable Universe
    print ''
    print 'Checking investment in tradable universe...'
    positions_wo_cash = positions.drop('cash', axis=1)
    positions_wo_cash = positions_wo_cash.abs()
    total_investment = positions_wo_cash.fillna(0).sum(axis=1)
    daily_qtu_investment = universe.multiply(positions_wo_cash).fillna(0).sum(axis=1)
    percent_in_qtu = daily_qtu_investment / total_investment
    percent_in_qtu = percent_in_qtu[5:].fillna(0)
    
    percent_in_qtu_0 = percent_in_qtu.min()
    percent_in_qtu_2 = percent_in_qtu.quantile(0.02)
        
    if percent_in_qtu_0 < TRADABLE_UNIVERSE_0TH_MIN:
        min_percent_in_qtu_date = percent_in_qtu.argmin()
        print 'FAIL: Minimum investment in QTradableStocksUS of %.2f%% on %s is < %.1f%%.' % (
            percent_in_qtu_0*100, 
            min_percent_in_qtu_date.date(),
            TRADABLE_UNIVERSE_0TH_MIN*100
        )
    elif percent_in_qtu_2 < TRADABLE_UNIVERSE_2ND_MIN:
        print 'FAIL: Investment in QTradableStocksUS (2nd percentile) of %.2f%% is < %.1f%%.' % (
            percent_in_qtu_2*100, 
            TRADABLE_UNIVERSE_2ND_MIN*100
        )
    else:
        print 'PASS: Investment in QTradableStocksUS is >= %.1f%%.' % (
            TRADABLE_UNIVERSE_2ND_MIN*100
        )
        constraints_met += 1
        
        
    # Total algorithm_returns Constraint
    print ''
    print 'Checking that algorithm has positive algorithm_returns...'
    cumulative_algorithm_returns = ep.cum_returns_final(algorithm_returns)
    if (cumulative_algorithm_returns > 0):
        print 'PASS: Cumulative algorithm_returns of %.2f is positive.' % (
            cumulative_algorithm_returns
        )
        constraints_met += 1
    else:
        print 'FAIL: Cumulative algorithm_returns of %.2f is negative.' % (
            cumulative_algorithm_returns
        )
    
    print ''
    print 'Results:'
    if constraints_met == num_constraints:
        print 'All constraints met!'
    else:
        print '%d/%d tests passed.' % (constraints_met, num_constraints)
In [8]:
def evaluate_backtest(positions, transactions, algorithm_returns, risk_exposures):
    if len(positions.index) > 504:
        check_constraints(positions, transactions, algorithm_returns, risk_exposures)
        score = compute_score(algorithm_returns[start:end])
    else:
        print 'ERROR: Backtest must be longer than 2 years to be evaluated.'

Transform some of the data.

In [9]:
positions = bt.pyfolio_positions
transactions = bt.pyfolio_transactions
algorithm_returns = bt.daily_performance.returns
factor_exposures = bt.factor_exposures

start = positions.index[0]
end = positions.index[-1]
universe = get_tradable_universe(start, end)
universe.columns = universe.columns.map(lambda x: '%s-%s' % (x.symbol, x.sid))

Run this to evaluate your algorithm. Note that the new contest will require all filters to pass before a submission is eligible to participate.

In [10]:
evaluate_backtest(positions, transactions, algorithm_returns, factor_exposures)
Checking positions concentration limit...
PASS: Max position concentration of 1.34% <= 5.0%.

Checking leverage limits...
PASS: Leverage range of 0.95x-1.05x is between 0.8x-1.1x.

Checking turnover limits...
PASS: Mean turnover range of 19.15%-28.04% is between 5.0%-65.0%.

Checking net exposure limit...
PASS: Net exposure (absolute value) of 1.29% <= 10.0%.

Checking beta-to-SPY limit...
PASS: Max absolute beta of 0.151 <= 0.3.

Checking sector exposure limits...
PASS: All sector exposures were between +/-0.20.

Checking style exposure limits...
PASS: All style exposures were between +/-0.40.

Checking investment in tradable universe...
PASS: Investment in QTradableStocksUS is >= 95.0%.

Checking that algorithm has positive algorithm_returns...
PASS: Cumulative algorithm_returns of 0.38 is positive.

Results:
All constraints met!

Score computed between 2013-01-04 and 2014-12-12.
Cumulative Score: 4.520568
In [11]:
bt.create_full_tear_sheet()
Start date2011-01-05
End date2014-12-12
Total months47
Backtest
Annual return 8.6%
Cumulative returns 38.5%
Annual volatility 5.1%
Sharpe ratio 1.63
Calmar ratio 1.80
Stability 0.87
Max drawdown -4.8%
Omega ratio 1.32
Sortino ratio 2.58
Skew 0.32
Kurtosis 2.54
Tail ratio 1.13
Daily value at risk -0.6%
Gross leverage 0.99
Daily turnover 24.4%
Alpha 0.10
Beta -0.09
Worst drawdown periods Net drawdown in % Peak date Valley date Recovery date Duration
0 4.79 2011-10-14 2012-05-01 2013-02-07 345
1 3.98 2014-03-26 2014-06-30 2014-09-22 129
2 2.72 2011-08-08 2011-08-15 2011-09-23 35
3 2.20 2013-07-05 2013-07-23 2013-10-21 77
4 2.19 2013-03-05 2013-03-18 2013-04-16 31
/usr/local/lib/python2.7/dist-packages/numpy/lib/function_base.py:3834: RuntimeWarning: Invalid value encountered in percentile
  RuntimeWarning)
Stress Events mean min max
US downgrade/European Debt Crisis 0.02% -0.97% 1.05%
Fukushima -0.04% -0.41% 0.51%
EZB IR Event -0.00% -0.46% 0.51%
Apr14 -0.08% -0.47% 0.49%
Oct14 0.26% -0.89% 1.17%
Recovery 0.02% -0.97% 1.36%
New Normal 0.05% -1.45% 2.06%
Top 10 long positions of all time max
FSLR-32902 1.45%
STX-24518 1.33%
RBN-6529 1.29%
GTAT-36628 1.27%
WDC-8132 1.26%
AMD-351 1.24%
AOL-38989 1.24%
BIG-22657 1.23%
CRUS-1882 1.22%
CAB-26412 1.22%
Top 10 short positions of all time max
HGSI-10409 -1.98%
LNG-22096 -1.95%
AMLN-374 -1.60%
NAV-5199 -1.51%
OPEN-38418 -1.50%
DF-24814 -1.44%
SHLD-26169 -1.43%
MCP-39960 -1.39%
AMD-351 -1.34%
REGN-6413 -1.34%
Top 10 positions of all time max
HGSI-10409 1.98%
LNG-22096 1.95%
AMLN-374 1.60%
NAV-5199 1.51%
OPEN-38418 1.50%
FSLR-32902 1.45%
DF-24814 1.44%
SHLD-26169 1.43%
MCP-39960 1.39%
AMD-351 1.34%
All positions ever held max
HGSI-10409 1.98%
LNG-22096 1.95%
AMLN-374 1.60%
NAV-5199 1.51%
OPEN-38418 1.50%
FSLR-32902 1.45%
DF-24814 1.44%
SHLD-26169 1.43%
MCP-39960 1.39%
AMD-351 1.34%
REGN-6413 1.34%
JCP-4118 1.33%
STX-24518 1.33%
SVU-7233 1.32%
CAR-17991 1.30%
RBN-6529 1.29%
BBG-26865 1.29%
MWW-24923 1.28%
DRYS-26994 1.27%
CSC-1898 1.27%
GTAT-36628 1.27%
WDC-8132 1.26%
ODP-5583 1.26%
KCG-19127 1.26%
IOC-26617 1.26%
BB-19831 1.25%
FRO-22983 1.25%
VRUS-33752 1.25%
SD-35006 1.25%
AOL-38989 1.24%
OPK-23120 1.24%
NG-25781 1.24%
RMBS-16945 1.23%
KBH-4199 1.23%
TRQ-25660 1.23%
USG-7844 1.23%
WLT-13771 1.23%
URI-18113 1.23%
CRK-1663 1.23%
BIG-22657 1.23%
ALR-15575 1.22%
LEAP-27411 1.22%
CRUS-1882 1.22%
ANV-33832 1.22%
SINA-21448 1.22%
CAB-26412 1.22%
CLF-1595 1.21%
TSLA-39840 1.21%
WYNN-24124 1.21%
PVAC-6258 1.21%
CRZO-17358 1.20%
AKS-10897 1.20%
CIEN-16453 1.20%
BBY-754 1.20%
XCO-28083 1.20%
ACI-88 1.20%
CYH-21608 1.20%
LCC-27653 1.20%
UAL-28051 1.20%
CLWR-33480 1.20%
GRPN-42118 1.20%
BTU-22660 1.20%
BYD-9888 1.20%
SFY-6825 1.20%
ARIA-11880 1.20%
CTB-1942 1.19%
CF-27558 1.19%
FST-2935 1.19%
COL-22880 1.19%
NRF-26740 1.19%
EXPR-39626 1.19%
LINE-27993 1.19%
CHK-8461 1.18%
TER-7401 1.18%
TSCO-10869 1.18%
MYGN-13698 1.18%
AMSC-393 1.18%
TECK-31886 1.18%
CJES-41770 1.18%
LVLT-18587 1.18%
WCRX-32619 1.18%
ITMN-21284 1.18%
DAN-35359 1.18%
TC-35140 1.18%
TEX-7408 1.18%
INCY-10187 1.18%
TTWO-16820 1.18%
EXK-33236 1.18%
PHM-5969 1.18%
SIG-9774 1.18%
HOS-26150 1.18%
IPG-3990 1.18%
OAS-39797 1.18%
LPS-36448 1.18%
LPX-4531 1.18%
AEM-154 1.18%
NXPI-39994 1.18%
CAVM-33776 1.17%
VLO-7990 1.17%
CSIQ-32856 1.17%
PBI-5773 1.17%
SFSF-35114 1.17%
MMR-19497 1.17%
MNKD-26524 1.17%
GNC-41182 1.17%
BC-755 1.17%
AABA-14848 1.17%
VVUS-11224 1.17%
ARUN-33588 1.17%
MHR-32541 1.17%
WNR-27997 1.16%
QCOR-20914 1.16%
ZNGA-42277 1.16%
MGM-4831 1.16%
OSK-5719 1.16%
BAS-27886 1.16%
BRE-1082 1.16%
RVBD-32618 1.16%
OTEX-14277 1.16%
HOT-3642 1.16%
KGC-9189 1.16%
ENTR-35230 1.16%
FFIV-20208 1.16%
NSM-42611 1.16%
PPC-39111 1.16%
VMED-26491 1.16%
WPX-42251 1.16%
ASH-559 1.15%
JBL-8831 1.15%
HFC-3620 1.15%
BZH-10728 1.15%
ONXX-14986 1.15%
WCG-26440 1.15%
NRG-26143 1.15%
ULTA-34953 1.15%
WCC-20163 1.15%
GDP-13363 1.15%
WTW-23269 1.15%
VRTX-8045 1.15%
ATVI-9883 1.15%
SNDK-13940 1.15%
CRR-14700 1.15%
IGT-3840 1.15%
MDRX-20394 1.15%
VSH-8050 1.15%
AVNR-19445 1.15%
WBC-34226 1.15%
HPQ-3735 1.15%
CZR-42461 1.15%
NDAQ-27026 1.14%
UPL-22406 1.14%
MDR-4752 1.14%
CBST-15769 1.14%
UBNT-42027 1.14%
CVI-22766 1.14%
VAR-7904 1.14%
EXXI-34443 1.14%
INFA-19990 1.14%
HBI-32497 1.14%
MAS-4665 1.14%
CLD-38971 1.14%
SIRI-11901 1.14%
SGY-9458 1.14%
EW-21382 1.14%
IAC-26470 1.14%
PTEN-10254 1.14%
CBI-1287 1.14%
ROC-27572 1.14%
ROSE-28091 1.14%
ALK-300 1.14%
DDS-2126 1.14%
GS-20088 1.14%
WAC-18431 1.14%
UHS-7749 1.14%
PPO-34117 1.14%
ANDV-7612 1.14%
GT-3384 1.14%
CNQR-19575 1.14%
GMCR-9736 1.14%
CERN-1419 1.14%
TMUS-33698 1.14%
RIG-9038 1.13%
GME-23438 1.13%
GLNG-24489 1.13%
RAD-6330 1.13%
ESS-11465 1.13%
HLX-17180 1.13%
WYN-32393 1.13%
CIE-39073 1.13%
ATGE-2371 1.13%
NOG-35961 1.13%
BID-869 1.13%
MU-5121 1.13%
ICPT-43505 1.13%
VECO-12267 1.13%
AXL-19672 1.13%
KLAC-4246 1.13%
AGN-8572 1.13%
DAL-33729 1.13%
JNS-24556 1.13%
FANG-43512 1.13%
FCX-13197 1.13%
MNST-3450 1.13%
HMA-3596 1.13%
ESI-24831 1.13%
FLIR-9156 1.13%
SFD-6803 1.13%
DSW-27409 1.13%
EWBC-19787 1.13%
NBR-5214 1.13%
HOLX-3629 1.13%
IAG-24491 1.13%
BKS-9693 1.13%
ARO-23650 1.12%
PENN-11361 1.12%
SLXP-22269 1.12%
APKT-32724 1.12%
JAZZ-33959 1.12%
IVR-38531 1.12%
FHN-26204 1.12%
SEE-6769 1.12%
CDNS-1385 1.12%
HCBK-20374 1.12%
HERO-27747 1.12%
FNSR-20866 1.12%
TOL-7530 1.12%
WPRT-36763 1.12%
HRI-32887 1.12%
TRN-7583 1.12%
CIT-39053 1.12%
HK-31032 1.12%
JOY-22996 1.12%
CROX-28078 1.12%
NUS-16059 1.12%
TRW-25948 1.12%
MOH-25349 1.12%
JEC-4120 1.12%
SPWR-27817 1.12%
XEC-24125 1.12%
VMW-34545 1.12%
HAL-3443 1.12%
BSX-1131 1.12%
PDCE-5907 1.12%
THC-5343 1.12%
EOG-2564 1.12%
TFM-40376 1.12%
HZNP-41766 1.12%
ARCO-41242 1.12%
KOG-32283 1.12%
HLF-26892 1.12%
PBF-43713 1.12%
CPX-28340 1.12%
ABX-64 1.12%
JLL-19898 1.12%
CAA-7050 1.12%
DISH-13017 1.12%
LXK-13891 1.12%
TQNT-10545 1.12%
VC-40159 1.12%
OXY-5729 1.11%
UTHR-20306 1.11%
URS-7828 1.11%
EHC-3661 1.11%
SWC-12362 1.11%
CVC-2000 1.11%
PDS-5855 1.11%
CYS-38477 1.11%
DHI-2298 1.11%
ANF-15622 1.11%
PSS-15005 1.11%
WPM-27437 1.11%
SPR-32921 1.11%
CPA-27908 1.11%
EAT-2404 1.11%
CSOD-41098 1.11%
TZOO-25805 1.11%
IPGP-33033 1.11%
PNR-6082 1.11%
MPC-41636 1.11%
RGLD-6455 1.11%
OVTI-21799 1.11%
IP-3971 1.11%
PSA-24962 1.11%
HCA-41047 1.11%
FLR-24833 1.11%
DB-23113 1.11%
ARNC-2 1.11%
EGO-24547 1.11%
ARNA-21724 1.11%
SNBR-19559 1.11%
HST-9947 1.11%
CNC-23283 1.11%
KEY-4221 1.11%
BYI-19759 1.11%
LUK-4580 1.11%
RRD-2248 1.11%
SGEN-22563 1.11%
NVLS-5509 1.11%
QLIK-39921 1.11%
SM-4664 1.11%
GDI-11130 1.11%
NFX-10231 1.11%
AEO-11086 1.11%
NVDA-19725 1.11%
RRC-19249 1.11%
CLH-1597 1.11%
NFLX-23709 1.11%
THOR-15228 1.11%
CRI-25576 1.11%
VHC-30464 1.11%
CHS-8612 1.11%
MON-22140 1.11%
FL-8383 1.11%
ZION-8399 1.11%
STEC-7145 1.11%
ACC-26553 1.10%
SYNA-23398 1.10%
DTV-26111 1.10%
CLNE-33924 1.10%
KBR-32880 1.10%
ILMN-21774 1.10%
APOL-24829 1.10%
RGC-23722 1.10%
PCYC-13711 1.10%
LYB-39546 1.10%
ETFC-15474 1.10%
DEI-32770 1.10%
SN-42264 1.10%
AGNC-36243 1.10%
SCCO-14284 1.10%
BCEI-42272 1.10%
OC-32608 1.10%
LAZ-27223 1.10%
GLOG-42746 1.10%
GM-40430 1.10%
SHAW-10509 1.10%
ENDP-21750 1.10%
PSX-42788 1.10%
FLS-17207 1.10%
HTS-36111 1.10%
CSTM-44780 1.10%
BAC-700 1.10%
PLCM-14784 1.10%
MAKO-35763 1.10%
GNTX-3286 1.10%
HRB-3660 1.10%
CXO-34440 1.10%
CHKP-15101 1.10%
WLK-26563 1.10%
LNCR-4501 1.10%
SSRM-15591 1.10%
SWY-7254 1.10%
MSFT-5061 1.10%
HBAN-3472 1.10%
SKX-20284 1.10%
GES-24811 1.10%
SWN-7244 1.10%
PAY-27206 1.10%
BRY-1103 1.10%
EMN-10594 1.10%
GOGO-44965 1.10%
CTRX-32301 1.10%
SOA-35174 1.10%
SU-10533 1.10%
STRZ_A-32045 1.10%
AVB-18834 1.10%
OBE-32293 1.10%
RHI-6465 1.10%
AGU-12856 1.10%
JPM-25006 1.10%
NEM-5261 1.10%
FAST-2696 1.10%
OIS-22464 1.10%
ROK-6536 1.10%
MRO-5035 1.10%
WFT-19336 1.10%
QEP-39778 1.09%
DS-24099 1.09%
GWW-3421 1.09%
SWKS-23821 1.09%
CRM-26401 1.09%
ACM-33831 1.09%
ERF-22215 1.09%
TDW-7364 1.09%
ORCL-5692 1.09%
MDC-4736 1.09%
TSN-7684 1.09%
HAS-3460 1.09%
ATML-607 1.09%
LEA-38921 1.09%
CLR-33856 1.09%
TMO-7493 1.09%
PKI-20774 1.09%
DWA-26750 1.09%
RF-34913 1.09%
RYL-6612 1.09%
CP-1792 1.09%
CDE-1374 1.09%
SOHU-21813 1.09%
FBHS-41928 1.09%
COCO-19773 1.09%
SDRL-39495 1.09%
SPPI-24517 1.09%
WBA-8089 1.09%
PAAS-13083 1.09%
UFS-2329 1.09%
LIFE-19800 1.09%
COF-12160 1.09%
SUN-7211 1.09%
MTH-16385 1.09%
UNH-7792 1.09%
JCI-4117 1.09%
DRIV-19209 1.09%
AMT-24760 1.09%
LEN-4417 1.09%
AUY-25714 1.09%
CVH-2010 1.09%
PLUG-20776 1.09%
DECK-9909 1.09%
WRC-24631 1.09%
TIVO-20662 1.09%
TPX-25802 1.09%
CVE-38896 1.09%
RFMD-17107 1.09%
SIVB-6897 1.09%
WTI-26986 1.09%
VPHM-16140 1.09%
NUE-5488 1.09%
PRGO-6161 1.09%
ARBA-20171 1.09%
EBIX-18693 1.09%
TWTC-20160 1.09%
TLRD-7203 1.09%
AMG-17800 1.09%
STJ-7156 1.09%
MXIM-5149 1.09%
TKR-7467 1.09%
EXPE-27543 1.08%
WP-42699 1.08%
TCF-7334 1.08%
FCS-20486 1.08%
MDVN-28160 1.08%
ALV-16838 1.08%
DRE-2293 1.08%
APC-455 1.08%
KMT-4271 1.08%
SAVE-41498 1.08%
UNP-7800 1.08%
DELL-25317 1.08%
AMZN-16841 1.08%
IONS-4031 1.08%
RDC-6392 1.08%
PMT-38630 1.08%
LO-36346 1.08%
HUN-27030 1.08%
JOE-6904 1.08%
KNX-40606 1.08%
STLD-16108 1.08%
WY-8326 1.08%
HCN-3488 1.08%
KSS-4313 1.08%
BLOX-42821 1.08%
ADT-43399 1.08%
EA-2602 1.08%
AGP-23179 1.08%
DO-13635 1.08%
FLEX-10953 1.08%
KMX-16511 1.08%
SRPT-16999 1.08%
TW-22183 1.08%
NCLH-43981 1.08%
FCEL-24853 1.08%
HCP-3490 1.08%
BEN-812 1.08%
ETN-2633 1.08%
DFS-34011 1.08%
VCI-7921 1.08%
RHT-20541 1.08%
PBYI-42689 1.08%
AXE-13500 1.08%
PH-5956 1.08%
UIS-7761 1.08%
CSCO-1900 1.08%
ITT-14081 1.08%
AVGO-38650 1.08%
LULU-34395 1.08%
DOW-2263 1.08%
FRAN-41737 1.08%
FIRE-33490 1.08%
MIPS-18940 1.08%
SBGI-13098 1.08%
TRMB-7580 1.08%
CBS-7962 1.08%
CLVS-42166 1.08%
AET-168 1.08%
COP-23998 1.08%
MGA-4823 1.08%
LL-35036 1.08%
DFT-34886 1.08%
CTXS-14014 1.08%
MCO-22139 1.08%
SYMC-7272 1.08%
ECA-23021 1.08%
PWER-17735 1.08%
EGN-2470 1.08%
GRMN-22316 1.08%
CPHD-21603 1.08%
PXD-17436 1.08%
BCE-766 1.08%
ROST-6546 1.08%
XPO-26287 1.08%
SSYS-12107 1.08%
CME-24475 1.08%
BPOP-1062 1.08%
SBAC-20281 1.08%
CVLT-32622 1.08%
ATI-24840 1.08%
AMCX-41594 1.08%
STI-7152 1.08%
SRCL-15581 1.08%
AL-41280 1.08%
ARW-538 1.08%
EQT-2587 1.08%
CNX-24758 1.08%
CE-26960 1.08%
PII-6992 1.08%
LII-24767 1.08%
ANN-430 1.07%
CACI-1218 1.07%
BWA-9514 1.07%
FNFG-24551 1.07%
NLY-17702 1.07%
MRX-13692 1.07%
LSI-4553 1.07%
PNRA-20133 1.07%
KR-4297 1.07%
RES-6426 1.07%
EQR-9540 1.07%
OFC-18404 1.07%
MPW-27443 1.07%
JWN-5382 1.07%
HP-3647 1.07%
ADS-22747 1.07%
LVS-26882 1.07%
INTC-3951 1.07%
BRCM-18529 1.07%
INTU-8655 1.07%
DNR-15789 1.07%
ALNY-26335 1.07%
CMC-1636 1.07%
CBG-26367 1.07%
AGCO-197 1.07%
JBHT-4108 1.07%
ALB-10898 1.07%
QGEN-15206 1.07%
AMAT-337 1.07%
ADSK-67 1.07%
MAN-4654 1.07%
APA-448 1.07%
SPLS-7061 1.07%
BAX-734 1.07%
SYK-7178 1.07%
OCLR-21366 1.07%
STRA-15397 1.07%
PEG-5862 1.07%
BMRN-20330 1.07%
JNPR-20239 1.07%
GD-3136 1.07%
ALXN-14328 1.07%
HSP-26243 1.07%
MTZ-4667 1.07%
MTW-4656 1.07%
BKD-27830 1.07%
LM-4488 1.07%
TEN-7422 1.07%
RYN-11044 1.07%
TROX-40530 1.07%
POT-6109 1.07%
IDTI-3808 1.07%
SLM-6935 1.07%
RSH-21550 1.07%
TXN-7671 1.07%
NSR-27413 1.07%
SODA-40353 1.07%
BAP-13612 1.07%
MRVL-21666 1.07%
RKT-11042 1.07%
AN-410 1.07%
LNCO-43513 1.07%
BMR-26548 1.07%
RS-11955 1.07%
CLB-13508 1.07%
AER-32916 1.07%
BBT-16850 1.07%
GNRC-39208 1.07%
ATHN-34692 1.07%
TUP-15041 1.07%
PWR-6269 1.07%
MAC-10984 1.07%
CCJ-14479 1.07%
WBMD-27669 1.07%
CMI-1985 1.07%
XLNX-8344 1.07%
SBUX-6683 1.07%
TWX-357 1.07%
PIR-6000 1.07%
LGF-19491 1.07%
AMBA-43495 1.07%
FINL-2845 1.07%
SPN-14141 1.07%
LLY-4487 1.07%
ABBV-43694 1.07%
IDCC-3801 1.07%
LH-12909 1.07%
WHR-8178 1.06%
FITB-2855 1.06%
BRCD-20061 1.06%
HOG-3499 1.06%
MTD-17895 1.06%
HIW-11492 1.06%
WDAY-43510 1.06%
FOXA-12213 1.06%
AES-166 1.06%
VNO-8014 1.06%
MDT-4758 1.06%
PNW-6090 1.06%
INT-3950 1.06%
BLK-20689 1.06%
SNH-20799 1.06%
USB-25010 1.06%
ACN-25555 1.06%
FOSL-8816 1.06%
BCR-779 1.06%
IR-4010 1.06%
DGX-16348 1.06%
LEG-4415 1.06%
NGD-27323 1.06%
ICE-27809 1.06%
RL-24832 1.06%
CTSH-18870 1.06%
LLL-18738 1.06%
MUR-5126 1.06%
NCR-16389 1.06%
SAFM-6624 1.06%
VRX-10908 1.06%
HS-28057 1.06%
RH-43599 1.06%
DPZ-26466 1.06%
NTRS-5479 1.06%
OI-5626 1.06%
NVR-5513 1.06%
IM-16022 1.06%
FWLT-3076 1.06%
NUAN-19926 1.06%
EQIX-24482 1.06%
MELI-34525 1.06%
PETM-9435 1.06%
NWL-5520 1.06%
AVT-661 1.06%
MWV-23380 1.06%
INVN-42165 1.06%
SIX-39612 1.06%
STZ-24873 1.06%
OMX-764 1.06%
SWK-7242 1.06%
PVH-6257 1.06%
VAL-7895 1.06%
LUV-4589 1.06%
BIIB-3806 1.06%
GPOR-28116 1.06%
OLN-5643 1.06%
KEG-29964 1.06%
BA-698 1.06%
VIAB-27872 1.06%
JCI-7679 1.06%
AUXL-26500 1.06%
DCT-33026 1.06%
IBM-3766 1.06%
ORLY-8857 1.06%
CBL-9890 1.06%
IL-39990 1.06%
RGR-6458 1.06%
GGP-8817 1.06%
KRC-16374 1.06%
SFLY-32660 1.06%
DLR-26758 1.06%
TWI-9066 1.06%
AVY-663 1.06%
PX-6272 1.06%
MCHP-8677 1.06%
BWLD-25642 1.06%
MRC-42786 1.06%
MLM-10796 1.06%
ADBE-114 1.06%
TD-15596 1.06%
GLW-3241 1.06%
CAH-1376 1.06%
WLL-25707 1.06%
TDG-28161 1.06%
KSU-4315 1.06%
GE-3149 1.06%
CMG-28016 1.06%
AEP-161 1.06%
MEOH-4795 1.06%
AUQ-25510 1.06%
KEX-4220 1.06%
TLM-17767 1.06%
GPC-3306 1.06%
SBH-32866 1.06%
SCHW-6704 1.06%
CODE-39640 1.06%
AIV-11598 1.06%
ES-5484 1.06%
TIF-7447 1.06%
KMR-22697 1.06%
HNT-22231 1.06%
VFC-7949 1.06%
PXP-24112 1.06%
GPRE-28159 1.06%
PEP-5885 1.06%
CHD-1482 1.06%
FTNT-38965 1.06%
HII-41111 1.06%
FDO-2760 1.06%
NXST-25679 1.06%
DOV-2262 1.06%
EL-13841 1.06%
MSCI-35078 1.06%
UDR-7715 1.06%
SNA-6976 1.06%
BXP-17009 1.05%
ACOM-38912 1.05%
KATE-4479 1.05%
OUTR-24791 1.05%
ISRG-25339 1.05%
RCL-8863 1.05%
PM-35902 1.05%
LPNT-20105 1.05%
OII-5629 1.05%
BF_B-822 1.05%
DISC_A-36930 1.05%
MTOR-21723 1.05%
NI-5310 1.05%
EMR-2530 1.05%
APTV-42173 1.05%
GPS-3321 1.05%
SNPS-6994 1.05%
CCI-19258 1.05%
BPO-20177 1.05%
SLCA-42436 1.05%
WDR-18508 1.05%
CNP-24064 1.05%
TECD-7372 1.05%
NOV-24809 1.05%
ALTR-328 1.05%
TBL-7323 1.05%
ROP-6543 1.05%
MO-4954 1.05%
XOM-8347 1.05%
ITW-4080 1.05%
NUVA-26291 1.05%
KCI-26003 1.05%
WU-32603 1.05%
TROW-7590 1.05%
PCAR-5787 1.05%
GG-22226 1.05%
CCL-24692 1.05%
SRE-24778 1.05%
NFG-5284 1.05%
LHO-18582 1.05%
MHS-25445 1.05%
LMCA-43919 1.05%
AYI-23276 1.05%
BMO-12002 1.05%
LRCX-4537 1.05%
CNI-16178 1.05%
CRL-21605 1.05%
SPXC-7086 1.05%
ZBRA-8388 1.05%
DK-32042 1.05%
ZTS-44060 1.05%
DE-2127 1.05%
ISBC-27703 1.05%
INVA-26676 1.05%
TLAB-7468 1.05%
DHR-2170 1.05%
STT-7139 1.05%
ADM-128 1.05%
NE-5249 1.05%
FISV-2853 1.05%
MSI-4974 1.05%
MTB-5117 1.05%
PLCE-24789 1.05%
ESV-2621 1.05%
IPI-36093 1.05%
COG-1746 1.05%
HES-216 1.05%
NOC-5387 1.05%
BNS-1010 1.05%
PAL-10245 1.05%
XRX-8354 1.05%
PFE-5923 1.05%
PAYX-5767 1.05%
HRS-3676 1.05%
BK-903 1.05%
WIN-27019 1.05%
CAKE-1234 1.05%
MCK-12350 1.05%
IVZ-16589 1.05%
IRBT-27780 1.05%
PLL-6030 1.05%
DDR-8468 1.05%
DRC-27534 1.05%
WMT-8229 1.05%
CCK-1343 1.05%
ST-39347 1.05%
AOBC-24519 1.05%
SIAL-6872 1.05%
FIO-41554 1.05%
UAA-27822 1.05%
CMA-1620 1.05%
DVN-2368 1.05%
PHH-26956 1.05%
LPI-42263 1.05%
ACAD-26322 1.05%
DLTR-12652 1.05%
VTR-18821 1.05%
NWSA-44931 1.05%
CMCS_A-1637 1.05%
GAS-595 1.05%
SO-7011 1.05%
FE-17850 1.05%
PPS-9438 1.05%
WFM-8158 1.05%
BG-22959 1.05%
RTN-6583 1.05%
WFC-8151 1.05%
MAT-4668 1.05%
TIE-15230 1.05%
EXR-26566 1.05%
UGI-7739 1.05%
CVX-23112 1.05%
CCE-1332 1.05%
EXPD-2663 1.05%
MCRS-4727 1.05%
NYX-28145 1.05%
DXCM-27173 1.05%
JBLU-23599 1.05%
WMB-8214 1.05%
WRI-8267 1.05%
EFX-2465 1.05%
ABC-22954 1.05%
AXP-679 1.05%
ADTN-11718 1.05%
EBAY-24819 1.05%
DKS-24070 1.05%
CNH-28276 1.05%
LBTY_K-27608 1.05%
ATU-484 1.05%
CHRW-17632 1.05%
WEN-10293 1.05%
REG-10027 1.05%
BDX-794 1.05%
DRQ-17646 1.05%
PLD-24785 1.05%
RLGY-43500 1.05%
TDC-34661 1.05%
DPS-36118 1.04%
ADP-630 1.04%
CKH-1581 1.04%
FIS-22876 1.04%
RBC-6352 1.04%
LOW-4521 1.04%
CAM-13176 1.04%
SLB-6928 1.04%
ASNA-2105 1.04%
WAT-13962 1.04%
DLB-27046 1.04%
NBL-5213 1.04%
JEF-25093 1.04%
FRC-40573 1.04%
CBE-1283 1.04%
ED-2434 1.04%
CAG-1228 1.04%
MJN-38084 1.04%
EMC-2518 1.04%
BEAV-799 1.04%
AMGN-368 1.04%
ICO-27824 1.04%
TGI-15905 1.04%
PACW-21624 1.04%
DVA-22110 1.04%
IRM-14388 1.04%
OMC-5651 1.04%
VZ-21839 1.04%
OGE-5607 1.04%
BBBY-739 1.04%
FRX-3014 1.04%
JAH-23784 1.04%
FTR-2069 1.04%
MS-17080 1.04%
ABT-62 1.04%
LKQ-25598 1.04%
LUFK-4579 1.04%
ALSN-42637 1.04%
GIS-3214 1.04%
CY-2043 1.04%
TPH-44053 1.04%
SHW-6868 1.04%
CPT-9348 1.04%
TJX-7457 1.04%
PMCS-17098 1.04%
NVE-7107 1.04%
TXT-7674 1.04%
BRO-1097 1.04%
RJF-6482 1.04%
BHI-858 1.04%
EXC-22114 1.04%
SEAS-44541 1.04%
TSS-7616 1.04%
CLX-1616 1.04%
DRI-12882 1.04%
WAB-13135 1.04%
HL-3585 1.04%
PCP-5822 1.04%
ITC-27492 1.04%
GCO-3131 1.04%
WM-19181 1.04%
QLGC-10829 1.04%
IT-9930 1.04%
CSE-25410 1.04%
TEL-34014 1.04%
GLPI-45656 1.04%
DOX-18875 1.04%
REE-40037 1.04%
ALKS-301 1.04%
URBN-10303 1.04%
SCG-6701 1.04%
RMD-13089 1.04%
CPB-1795 1.04%
FDX-2765 1.04%
INGR-18142 1.04%
EIX-14372 1.04%
PDCO-26437 1.04%
PPG-6116 1.04%
TPR-22099 1.04%
EXEL-21383 1.04%
DD-2119 1.04%
GPN-22443 1.04%
SPG-10528 1.04%
OHI-5621 1.04%
ISIL-21166 1.04%
NXY-22247 1.04%
LMT-12691 1.04%
IMAX-11498 1.04%
MSM-5066 1.04%
RAX-36714 1.04%
CREE-8459 1.04%
CNW-1696 1.04%
STWD-38668 1.04%
NKE-5328 1.04%
IHS-27791 1.04%
SNI-36372 1.04%
POM-6098 1.04%
RESI-43712 1.04%
HSY-3695 1.04%
HAIN-10649 1.04%
SYY-7285 1.04%
ETR-2637 1.04%
CAT-1267 1.04%
AME-353 1.04%
BSFT-39782 1.04%
TGT-21090 1.04%
FSL-41491 1.04%
AROC-34575 1.04%
MCD-4707 1.04%
PRXL-13918 1.04%
UTX-7883 1.04%
TE-7369 1.04%
MOS-41462 1.04%
COO-1769 1.04%
BLL-939 1.04%
FTI-22784 1.04%
DNKN-41759 1.04%
MD-13557 1.04%
ADI-122 1.04%
CVS-4799 1.04%
DMND-27474 1.04%
OCR-5575 1.04%
HSIC-13862 1.04%
PNC-6068 1.04%
AKAM-20680 1.04%
CFR-1427 1.03%
LQDT-28107 1.03%
FMER-12662 1.03%
MFA-18590 1.03%
XRAY-8352 1.03%
GILD-3212 1.03%
PBCT-5769 1.03%
EXP-11120 1.03%
MA-32146 1.03%
CONN-25646 1.03%
COV-34010 1.03%
CL-1582 1.03%
AVP-660 1.03%
KIM-4238 1.03%
LAMR-15516 1.03%
VMC-7998 1.03%
SWI-38388 1.03%
CHSI-20984 1.03%
TAP-76 1.03%
KMI-40852 1.03%
UMPQ-18634 1.03%
YNDX-41484 1.03%
PCG-5792 1.03%
IDXX-3810 1.03%
ENB-19374 1.03%
CFFN-19962 1.03%
MYL-5166 1.03%
CPN-35531 1.03%
NTAP-13905 1.03%
NSC-5442 1.03%
PDE-6151 1.03%
MLNX-33316 1.03%
MSTR-23889 1.03%
LLTC-4485 1.03%
CFN-38691 1.03%
ODFL-5582 1.03%
AAN-523 1.03%
APD-460 1.03%
SE-33030 1.03%
CVD-25396 1.03%
MAR-25920 1.03%
TIBX-20438 1.03%
LDOS-32714 1.03%
RAH-11189 1.03%
ARRS-25134 1.03%
CA-1209 1.03%
DTE-2330 1.03%
RSG-19147 1.03%
KNX-12067 1.03%
RAI-20277 1.03%
CNK-33716 1.03%
AEE-24783 1.03%
MDLZ-22802 1.03%
TWC-33133 1.03%
CSX-1937 1.03%
TK-13289 1.03%
CXW-22102 1.03%
CELG-1406 1.03%
FMC-2893 1.03%
CMS-1665 1.03%
PDLI-5847 1.03%
KS-30759 1.03%
BLMN-43283 1.03%
ITRI-10192 1.03%
NST-20642 1.03%
RCII-24827 1.03%
LZ-4620 1.03%
KRG-26562 1.03%
AWK-36098 1.03%
ESRX-2618 1.03%
CTL-1960 1.03%
QCOM-6295 1.03%
PCLN-19917 1.03%
MAA-10639 1.03%
RDWR-20658 1.03%
AZO-693 1.03%
JNJ-4151 1.03%
IFF-3822 1.03%
KRFT-43405 1.03%
SNV-7007 1.03%
ZAGG-32502 1.03%
GXP-23126 1.03%
RY-13732 1.03%
HXL-3738 1.03%
MOLX-4965 1.03%
EP-2568 1.03%
HD-3496 1.03%
QSFT-20539 1.03%
STR-7171 1.03%
HOV-3645 1.03%
OKE-5634 1.03%
KMB-4263 1.03%
KKD-21410 1.03%
SJM-21935 1.03%
AOS-6949 1.03%
APH-465 1.03%
FRT-3010 1.03%
DPL-2270 1.03%
BR-33562 1.03%
AJG-266 1.03%
NNN-5376 1.03%
WERN-8147 1.03%
AON-438 1.03%
SCI-7110 1.03%
WETF-31288 1.03%
CST-44508 1.03%
DGI-38374 1.03%
MMC-4914 1.03%
ATHL-45211 1.03%
CNVR-21346 1.03%
EV-2407 1.03%
MKC-4705 1.02%
LNKD-41451 1.02%
CNQ-21735 1.02%
XEL-21964 1.02%
BMY-980 1.02%
WSM-8284 1.02%
YUM-17787 1.02%
HME-11654 1.02%
CVA-2169 1.02%
NLSN-40755 1.02%
SRC-43414 1.02%
PCL-5813 1.02%
PPL-6119 1.02%
ATW-624 1.02%
VRSN-18221 1.02%
DIS-2190 1.02%
GWRE-42402 1.02%
TIVO-16661 1.02%
COST-1787 1.02%
CFX-36176 1.02%
BAM-21475 1.02%
MRK-5029 1.02%
PF-44375 1.02%
WSO-8288 1.02%
SBNY-26132 1.02%
CPRT-10931 1.02%
TMH-39076 1.02%
WEC-8140 1.02%
CEPH-1416 1.02%
RCI-14298 1.02%
HPT-13373 1.02%
DUK-2351 1.02%
HRL-3668 1.02%
WLTW-22857 1.02%
DG-38936 1.02%
FLO-2876 1.02%
BEE-26410 1.02%
AAPL-24 1.02%
VMI-7897 1.02%
BKE-915 1.02%
VRSK-38817 1.02%
BEAM-338 1.02%
PRAA-24440 1.02%
GPRO-24003 1.02%
BMS-975 1.02%
FNV-41886 1.02%
PKG-20773 1.02%
SANM-8869 1.02%
BJ-17167 1.02%
ALGN-22355 1.02%
SIRO-17289 1.02%
CBOE-39773 1.02%
AMTD-16586 1.02%
HRC-3471 1.02%
SFM-45199 1.02%
WPC-21713 1.02%
TEG-8264 1.02%
IEX-3816 1.02%
FDS-15129 1.02%
WOOF-23267 1.02%
XYL-42023 1.02%
CZZ-34560 1.02%
SKS-15019 1.02%
HSH-6930 1.02%
BEXP-16853 1.02%
ACOR-28077 1.02%
ARE-16843 1.02%
ECL-2427 1.02%
AWI-32690 1.02%
KO-4283 1.01%
VSI-38882 1.01%
MMM-4922 1.01%
TRI-23825 1.01%
GRA-3328 1.01%
LOGI-16649 1.01%
WWAV-43572 1.01%
UPS-20940 1.01%
POST-42407 1.01%
CHTR-39095 1.01%
HNZ-3617 1.01%
PSEC-26517 1.01%
HMSY-3607 1.01%
PG-5938 1.01%
RHP-3175 1.01%
THO-7433 1.01%
SLG-17448 1.01%
CYT-10590 1.01%
LBTY_A-27357 1.01%
MIC-26898 1.01%
SKT-9052 1.01%
AMH-45197 1.01%
GHL-26265 1.01%
DNB-2237 1.01%
NEE-2968 1.01%
CTAS-1941 1.01%
ANSS-15071 1.01%
MHK-4963 1.01%
WCN-18822 1.01%
TRIP-42230 1.01%
HON-25090 1.01%
ASIA-21237 1.01%
ASPS-38633 1.00%
GTI-23687 1.00%
ARCC-26672 1.00%
CENX-14484 1.00%
CLNY-38760 1.00%
JOSB-11321 1.00%
TCBI-25467 1.00%
WR-8265 1.00%
BEC-801 1.00%
ELS-8516 1.00%
AAL-45971 1.00%
GEO-11710 1.00%
THRM-19666 1.00%
GTLS-32433 1.00%
TGB-7465 1.00%
DGIT-14363 1.00%
MDP-4751 1.00%
DBD-2100 1.00%
GWR-15139 1.00%
PRLB-42546 1.00%
DCI-2109 1.00%
SNTS-26164 1.00%
CRS-1874 1.00%
MSGN-39171 1.00%
PFCB-19614 1.00%
LNT-18584 1.00%
GIL-18902 1.00%
SMG-6736 1.00%
LCI-23602 1.00%
RPM-6557 1.00%
TRGP-40547 0.99%
BGC-3129 0.99%
DDD-12959 0.99%
GPK-25429 0.99%
ALLE-45874 0.99%
WWW-8321 0.99%
FLT-40597 0.99%
FTO-18561 0.99%
MNK-44917 0.99%
KERX-21789 0.99%
GOOG_L-26578 0.99%
SVM-36964 0.98%
OREX-33742 0.98%
XLS-42021 0.98%
KORS-42270 0.97%
GSIC-23686 0.97%
DYN-43462 0.97%
GBX-11645 0.97%
BDN-9096 0.97%
RLD-39918 0.97%
JNY-4152 0.94%
ACTG-24465 0.92%
INFI-21744 0.80%
EVHC-45269 0.69%
SALE-45114 0.58%
AAXN-22846 0.55%
IDIX-26502 0.54%
MIDD-4695 0.50%
NOW-43127 0.49%
LLNW-33989 0.48%
CLDX-19187 0.36%
CLI-11752 0.30%
FIVE-43201 0.18%
OLED-14774 0.04%

Performance Relative to Common Risk Factors

Summary Statistics
Annualized Specific Return 7.40%
Annualized Common Return 1.15%
Annualized Total Return 8.62%
Specific Sharpe Ratio 1.83
Exposures Summary Average Risk Factor Exposure Annualized Return Cumulative Return
basic_materials -0.03 -0.56% -2.20%
consumer_cyclical 0.04 0.75% 3.00%
financial_services 0.02 0.48% 1.90%
real_estate -0.04 -0.73% -2.83%
consumer_defensive 0.02 0.35% 1.39%
health_care 0.01 0.01% 0.02%
utilities -0.00 -0.13% -0.52%
communication_services -0.00 -0.00% -0.01%
energy -0.11 -1.09% -4.21%
industrials 0.02 0.75% 3.00%
technology 0.05 0.44% 1.75%
momentum 0.08 0.25% 0.97%
size 0.28 -0.42% -1.66%
value -0.07 0.18% 0.71%
short_term_reversal -0.18 -0.43% -1.69%
volatility -0.34 1.30% 5.21%