from zipline import run_algorithm
from zipline.api import *
from zipline.pipeline import CustomFactor, Pipeline
from zipline.pipeline.data import USEquityPricing
from zipline.pipeline.factors import Returns, SimpleMovingAverage
from zipline.pipeline.engine import PipelineEngine
import zipline.pipeline.filters as Filters
def initialize(context):
attach_pipeline(make_pipeline(), 'my_pipeline')
def make_pipeline():
"""
Create our pipeline.
"""
base_universe = Filters.StaticAssets(symbols('IBM', 'AAPL'))
# 10-day close price average.
mean_10 = SimpleMovingAverage(
inputs=[USEquityPricing.close],
window_length=10,
mask=base_universe
)
# 30-day close price average.
mean_30 = SimpleMovingAverage(
inputs=[USEquityPricing.close],
window_length=30,
mask=base_universe
)
percent_difference = (mean_10 - mean_30) / mean_30
# Filter to select securities to short.
shorts = percent_difference.top(75)
# Filter to select securities to long.
longs = percent_difference.bottom(75)
# Filter for all securities that we want to trade.
securities_to_trade = (shorts | longs)
return Pipeline(
columns={
'longs': longs,
'shorts': shorts
},
screen=(securities_to_trade),
)
def before_trading_start(context, data):
global pipe_results
pipe_results = pipeline_output('my_pipeline')
run_algorithm ...
pipe_results