Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Can use pipeline with bar data from yahoo in zipline evn ?

HI:
I try manually run zipline algo - date from load_bars_from_yahoo , pipeline with dataframeloader . but failed
below is my code ,very simple , it seem get_pipeline_loader not use right ! ( customfactor compute function receive nan input -- print("---",today,assets,highs,lows) #highs ,lows is nan)
please give me some advices . thansk

from zipline import TradingAlgorithm

from zipline.api import (
attach_pipeline,
date_rules,
order_target_percent,
pipeline_output,
record,
schedule_function,
symbol,
)

from zipline.pipeline import Pipeline
from zipline.pipeline.factors import RSI
from zipline.pipeline.data import USEquityPricing
from zipline.pipeline.data import Column
from zipline.pipeline.data import DataSet
from zipline.pipeline.engine import SimplePipelineEngine
from zipline.pipeline.loaders.frame import DataFrameLoader

from itertools import chain
import numpy as np

import pandas.io.data as web

import pandas_datareader.data as web
from pandas.stats.api import ols
import pandas as pd
import math
import pytz
from datetime import timedelta, date, datetime
from zipline.pipeline.factors import AverageDollarVolume, CustomFactor, Latest

dates = pd.date_range('2014-01-01', '2014-01-31')
my_stock = ['AMD', 'CERN']

test_start = datetime(2014, 1, 1, 0, 0, 0, 0, pytz.utc)
test_end = datetime(2014, 1, 31, 0, 0, 0, 0, pytz.utc)

from zipline.utils.factory import load_bars_from_yahoo
panel = load_bars_from_yahoo(stocks=my_stock, start=test_start, end=test_end)

loaders = {
USEquityPricing.open: DataFrameLoader(USEquityPricing.open, panel.minor_xs('open')),
USEquityPricing.high: DataFrameLoader(USEquityPricing.high, panel.minor_xs('high')),
USEquityPricing.low: DataFrameLoader(USEquityPricing.low, panel.minor_xs('low')),
USEquityPricing.close: DataFrameLoader(USEquityPricing.close, panel.minor_xs('close')),
USEquityPricing.volume: DataFrameLoader(USEquityPricing.volume, panel.minor_xs('volume'))
}

def my_dispatcher(column):
return loaders[column]

class TenDayRange(CustomFactor):
inputs = [USEquityPricing.high, USEquityPricing.low]
window_length = 2
def compute(self, today, assets, out, highs, lows):
print("---",today,assets,highs,lows) #highs ,lows is nan
from numpy import nanmin, nanmax

    highest_highs = nanmax(highs, axis=0)  
    lowest_lows = nanmin(lows, axis=0)  
    out[:] = highest_highs - lowest_lows

def make_pipeline():
tdr = TenDayRange()
return Pipeline(
columns={
'longs': tdr.top(2),
'shorts': tdr.bottom(2),
},
)

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
print("-----------------",pipeline_data,all_assets)

def initialize(context):
attach_pipeline(make_pipeline(), 'my_pipeline')
schedule_function(rebalance, date_rules.every_day())

def handle_data(context, data):
pass

def before_trading_start(context, data):
context.pipeline_data = pipeline_output('my_pipeline')
pass

if name == 'main':

algo = TradingAlgorithm(initialize=initialize,  
                        handle_data=handle_data,  
                        before_trading_start=before_trading_start,  
                        get_pipeline_loader=my_dispatcher,  
                        capital_base = 100000)  
results = algo.run(panel)