def rebalance(context, data): # Pipeline data will be a dataframe with boolean columns named 'longs' and # 'shorts'. pipeline_data = context.pipeline_data all_assets = pipeline_data.index longs = all_assets[pipeline_data.longs] shorts = all_assets[pipeline_data.shorts] record(universe_size=len(all_assets)) # Build a 2x-leveraged, equal-weight, long-short portfolio. one_third = 1.0 / 3.0 for asset in longs: order_target_percent(asset, one_third) for asset in shorts: order_target_percent(asset, -one_third) # Remove any assets that should no longer be in our portfolio. portfolio_assets = longs | shorts positions = context.portfolio.positions for asset in viewkeys(positions) - set(portfolio_assets): # This will fail if the asset was removed from our portfolio because it # was delisted. if data.can_trade(asset): order_target_percent(asset, 0)
def handle_data_api(context, data): if context.incr == 0: assert 0 not in context.portfolio.positions else: assert context.portfolio.positions[0].amount == \ context.incr, "Orders not filled immediately." assert context.portfolio.positions[0].last_sale_price == \ data.current(sid(0), "price"), \ "Orders not filled at current price." context.incr += 1 order(sid(0), 1) record(incr=context.incr)
def handle_data(context, data): # Skip first 300 days to get full windows context.i += 1 if context.i < 300: return # Compute averages # history() has to be called with the same params # from above and returns a pandas dataframe. short_mavg = data.history(context.sym, 'price', 100, '1d').mean() long_mavg = data.history(context.sym, 'price', 300, '1d').mean() # Trading logic if short_mavg > long_mavg: # order_target orders as many shares as needed to # achieve the desired number of shares. order_target(context.sym, 100) elif short_mavg < long_mavg: order_target(context.sym, 0) # Save values for later inspection record(AAPL=data.current(context.sym, "price"), short_mavg=short_mavg, long_mavg=long_mavg)
def handle_data(context, data): trailing_window = data.history(context.asset, 'price', 40, '1d') if trailing_window.isnull().values.any(): return short_ema = EMA(trailing_window.values, timeperiod=20) long_ema = EMA(trailing_window.values, timeperiod=40) buy = False sell = False if (short_ema[-1] > long_ema[-1]) and not context.invested: order(context.asset, 100) context.invested = True buy = True elif (short_ema[-1] < long_ema[-1]) and context.invested: order(context.asset, -100) context.invested = False sell = True record(AAPL=data.current(context.asset, "price"), short_ema=short_ema[-1], long_ema=long_ema[-1], buy=buy, sell=sell)
def handle_data(self, data): self.incr += 1 self.record(incr=self.incr) name = 'name' self.record(name, self.incr) record(name, self.incr, 'name2', 2, name3=self.incr)
def handle_data(context, data): order(context.asset, 10) record(AAPL=data.current(context.asset, 'price'))