from quantopian.pipeline.factors import AverageDollarVolume, RSI, SimpleMovingAverage, CustomFactor, BollingerBands
from quantopian.pipeline.filters import QTradableStocksUS
from quantopian.pipeline.data.builtin import USEquityPricing
from quantopian.research import run_pipeline
import numpy as np
from quantopian.pipeline import Pipeline
from quantopian.pipeline.data.factset import EquityMetadata, Fundamentals, RBICSFocus
from quantopian.pipeline.classifiers.morningstar import Sector
from sklearn.svm import SVC, OneClassSVM, LinearSVC
from quantopian.pipeline.data.factset.estimates import (PeriodicConsensus, Actuals, ConsensusRecommendations as Consensus, LongTermConsensus, Guidance)
from quantopian.pipeline.data.psychsignal import aggregated_twitter_withretweets_stocktwits as st
from quantopian.pipeline.factors import Latest, DailyReturns, Returns
import pandas as pd
from sklearn.preprocessing import MinMaxScaler #, StandardScaler
from quantopian.pipeline.data.sentdex import sentiment
from sklearn import preprocessing
from scipy.stats.mstats import winsorize
import statsmodels.api as smx
class Value_N_Days_Ago(CustomFactor):
"""
Finds the value of the input N days ago. The input can be either a dataset or a factor.
Set the window_length to the number of days N to look back.
"""
def compute(self, today, assets, out, inputs):
out[:] = inputs[0]
def make_pipeline():
#Built-in
rets25d = Returns(window_length=25, mask=QTradableStocksUS())
#Manual
close_latest = USEquityPricing.close.latest
close_25d_ago = Value_N_Days_Ago(inputs=[USEquityPricing.close], window_length=25)
rets = (close_latest - close_25d_ago) / (close_25d_ago)
# Rank Returns in Ascending Order (False) or Decending Order (True)
ranked_rets = rets25d.rank(ascending=False , mask = QTradableStocksUS())
#Test for Difference between methods
difference = rets25d - rets
pipe = Pipeline(
columns={
'rets25d': rets25d,
'ranked_rets': ranked_rets,
'rets_manual': rets,
'difference': difference
},
screen = QTradableStocksUS()
)
return pipe
#Run the pipeline to view output securities:
run_pipeline(make_pipeline(), '2017-01-24', '2017-05-24')