Exemple #1
0
def generate_signals(context, data):
    try:
        pipeline_results = pipeline_output('strategy_pipeline')
    except NoFurtherDataError:
        context.long_securities = []
        context.short_securities = []
        return

    p = context.params['percentile']
    momentum = pipeline_results

    long_candidates = momentum[momentum > 0].dropna().sort_values('momentum')
    short_candidates = momentum[momentum < 0].dropna().sort_values('momentum')

    n_long = len(long_candidates)
    n_short = len(short_candidates)
    n = int(min(n_long, n_short) * p)

    if n == 0:
        print("{}, no signals".format(get_datetime()))
        context.long_securities = []
        context.short_securities = []

    context.long_securities = long_candidates.index[-n:]
    context.short_securities = short_candidates.index[:n]
def generate_signals(context, data):
    try:
        pipeline_results = pipeline_output('strategy_pipeline')
    except NoFurtherDataError:
        context.weights = {}
        return
    
    # return if the filtered universe is too short
    n = int(context.params['universe'])
    rets = pipeline_results.dropna()
    if len(rets) < n:
        context.weights = {}
        return

    # select top n assets as universe by liquidity factor
    rets = rets.sort_values('liquidity')
    rets = rets.iloc[-n:]

    # calculate the 1-week broad market return
    spx = data.history(symbol('SPY'),'close',10,'1d').dropna()
    mkt_ret = spx[-1]/spx[-5] - 1

    # calculate mean reversion weights
    rets['weight'] = -(rets['momentum']-mkt_ret)
    rets['weight'] = rets['weight']/rets['weight'].abs().sum()
    context.weights = rets['weight'].to_dict()
def generate_signals(context, data):
    try:
        pipeline_results = pipeline_output('strategy_pipeline')
    except NoFurtherDataError:
        context.long_securities = []
        context.short_securities = []
        return

    p = context.params['percentile']
    pipeline_results = pipeline_results[pipeline_results.vol > 0].dropna()
    vol_threshold_hi = pipeline_results.vol.quantile(0.75)
    vol_threshold_lo = pipeline_results.vol.quantile(0.25)
    high_vol = pipeline_results[pipeline_results.vol > vol_threshold_hi]
    low_vol = pipeline_results[pipeline_results.vol < vol_threshold_lo]

    long_candidates = high_vol.sort_values('skew', ascending=True)
    short_candidates = low_vol.sort_values('skew', ascending=True)
    available = min(len(long_candidates), len(short_candidates))

    n = int(available * p)
    print('total candidates {}'.format(n))

    if n == 0:
        print("{}, no signals".format(get_datetime()))
        context.long_securities = []
        context.short_securities = []

    context.long_securities = long_candidates.index[:n]
    context.short_securities = short_candidates.index[:n]
def generate_signals(context, data):
    try:
        results = pipeline_output('strategy_pipeline')
    except:
        return

    # use other columns to print other indicators scanning results
    results = results.sort_values('rsi', ascending=True)
    print('{}{}'.format(get_datetime(), '-' * 30))
    print(results.head())
    print(results.tail())
def compute_signal(context,data):
    try:
        pipeline_results = pipeline_output('strategy_pipeline')
    except NoFurtherDataError:
        print(f'{get_datetime()}: error in pipeline output.')
        context.candidates = []
        return

    momentum = pipeline_results
    momentum['z_score'] = momentum['momentum']/momentum['vol']
    candidates = momentum[momentum['z_score'] > 0].dropna().sort_values('momentum')

    if len(candidates) < context.size:
        print(f'{get_datetime()}:no assets passed screening.')
        context.candidates = []

    context.candidates = candidates.index[-context.size:].tolist()
Exemple #6
0
def generate_signals(context, data):
    try:
        pipeline_results = pipeline_output('strategy_pipeline')
    except NoFurtherDataError:
        context.long_securities = []
        context.short_securities = []
        return

    p = context.params['percentile']
    momentum = pipeline_results.dropna().sort_values('momentum')
    n = int(len(momentum) * p)

    if n == 0:
        print("{}, no signals".format(get_datetime()))
        context.long_securities = []
        context.short_securities = []

    context.long_securities = momentum.index[-n:]
    context.short_securities = momentum.index[:n]
def generate_signals(context, data):
    try:
        pipeline_results = pipeline_output('strategy_pipeline')
    except:
        context.long_securities = []
        context.short_securities = []
        return

    p = context.params['percentile']
    rsi_factor = pipeline_results
    candidates = rsi_factor[rsi_factor > 0].dropna().sort_values('rsi')
    n = int(len(candidates) * p)

    if n == 0:
        print("{}, no signals".format(get_datetime()))
        context.long_securities = []
        context.short_securities = []

    context.long_securities = candidates.index[-n:]
    context.short_securities = candidates.index[:n]
Exemple #8
0
def generate_signals(context, data):
    try:
        pipeline_results = pipeline_output('strategy_pipeline')
    except NoFurtherDataError:
        context.long_securities = []
        context.short_securities = []
        return

    p = context.params['percentile']
    vol_factor = pipeline_results
    candidates = vol_factor[vol_factor > 0].dropna().sort_values('vol')
    n = int(len(candidates) * p)

    if n == 0:
        print("{}, no signals".format(data.current_dt))
        context.long_securities = []
        context.short_securities = []

    context.long_securities = candidates.index[:n]
    context.short_securities = candidates.index[-n:]
Exemple #9
0
def compute_signal(context, data):
    try:
        pipeline_results = pipeline_output('strategy_pipeline')
    except NoFurtherDataError:
        print(f'{get_datetime()}: error in pipeline output.')
        context.candidates = []
        return

    candidates = pipeline_results.dropna()

    if len(candidates) < context.size:
        print(f'{get_datetime()}:no assets passed screening.')
        context.candidates = []

    candidates = candidates.tail(context.size)
    candidates['weight'] = 1 / candidates.vol
    total = candidates.weight.sum()
    candidates['weight'] = candidates['weight'] / total

    # naive risk parity - inverse vol weights
    context.weight = candidates['weight'].to_dict()
    context.candidates = candidates.index.tolist()