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()
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]
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:]
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()