Notebook

Rank of Last Close Price vs Previous Prices

Two ways to get the ran of the last close price compared to the previous n close prices. The window length is the 'n'.

In [29]:
#Import things we'll need
from quantopian.pipeline import Pipeline, CustomFactor  
from quantopian.research import run_pipeline

from quantopian.pipeline.data.builtin import USEquityPricing

import numpy as np
import pandas as pd
In [33]:
# Class using a Pandas dataframe
class RankOfLastPrice_pd(CustomFactor):  
    inputs = [USEquityPricing.close]  
    window_length = 1
    
    def compute(self, today, assets, out, prices):
        # first change the numpy array into a dataframe then use rank method
        prices_df = pd.DataFrame(prices)
        out[:] = prices_df.rank(axis=0).tail(1)
In [34]:
# Class using Numpy methods
class RankOfLastPrice_np(CustomFactor):  
    inputs = [USEquityPricing.close]  
    window_length = 2
    
    def compute(self, today, assets, out, prices):
        # This doesn't handle duplicates, NaNs, and special case of n=1 well
        out[:] = prices.argsort(axis=0).argsort(axis=0)[-1] + 1
In [36]:
# Create a pipeline showing our two versions of ranking

p = Pipeline()
p.add(RankOfLastPrice_pd(window_length = 3), 'rank_pd') 
p.add(RankOfLastPrice_np(window_length = 3), 'rank_np') 

results = run_pipeline(p, '2016-03-01', '2016-03-01')
results
Out[36]:
rank_np rank_pd
2016-03-01 00:00:00+00:00 Equity(2 [ARNC]) 3.0 3.0
Equity(21 [AAME]) 1.0 1.0
Equity(24 [AAPL]) 1.0 1.0
Equity(25 [ARNC_PR]) 3.0 NaN
Equity(31 [ABAX]) 1.0 1.0
Equity(39 [DDC]) 3.0 3.0
Equity(41 [ARCB]) 2.0 2.0
Equity(52 [ABM]) 2.0 2.0
Equity(53 [ABMD]) 1.0 1.0
Equity(62 [ABT]) 1.0 1.0
Equity(64 [ABX]) 3.0 3.0
Equity(66 [AB]) 3.0 3.0
Equity(67 [ADSK]) 3.0 3.0
Equity(69 [ACAT]) 3.0 3.0
Equity(70 [VBF]) 3.0 3.0
Equity(76 [TAP]) 2.0 2.0
Equity(84 [ACET]) 1.0 1.0
Equity(86 [ACG]) 2.0 1.5
Equity(100 [IEP]) 3.0 3.0
Equity(106 [ACU]) 3.0 3.0
Equity(110 [ACXM]) 2.0 2.0
Equity(112 [ACY]) 3.0 3.0
Equity(114 [ADBE]) 1.0 1.0
Equity(117 [AEY]) 3.0 3.0
Equity(122 [ADI]) 1.0 1.0
Equity(128 [ADM]) 3.0 3.0
Equity(134 [SXCL]) 1.0 1.0
Equity(149 [ADX]) 1.0 1.0
Equity(153 [AE]) 1.0 1.0
Equity(154 [AEM]) 2.0 2.0
... ... ...
Equity(49737 [BGNE]) 2.0 2.0
Equity(49738 [CUBI_PRD]) 3.0 3.0
Equity(49742 [BANC_PRE]) 3.0 2.0
Equity(49743 [MLPQ]) 3.0 3.0
Equity(49744 [MLPZ]) 2.0 2.0
Equity(49745 [OIIL]) 3.0 3.0
Equity(49746 [C_PRS]) 2.0 1.5
Equity(49747 [GTO]) 3.0 NaN
Equity(49748 [PTI]) 2.0 1.5
Equity(49750 [FRC_PRG]) 2.0 2.0
Equity(49751 [AVXS]) 1.0 1.0
Equity(49753 [FIEE]) 1.0 1.0
Equity(49754 [HES_PRA]) 3.0 3.0
Equity(49757 [KLREU]) 3.0 NaN
Equity(49758 [OSB]) 3.0 2.5
Equity(49760 [MFS]) 2.0 2.0
Equity(49761 [MTW_WI]) 3.0 3.0
Equity(49763 [OILX]) 3.0 3.0
Equity(49764 [FUT]) 3.0 NaN
Equity(49769 [FIHD]) 1.0 1.0
Equity(49770 [SNHN_L]) 3.0 3.0
Equity(49771 [SOVB]) 3.0 3.0
Equity(49773 [JSMD]) 3.0 3.0
Equity(49774 [JSML]) 2.0 2.0
Equity(49775 [SRAQ_U]) 1.0 1.0
Equity(49778 [GCOW]) 2.0 2.0
Equity(49779 [PUTW]) 1.0 1.0
Equity(49780 [EVSTC]) 2.0 1.5
Equity(49781 [GS_PRN]) 1.0 1.0
Equity(49782 [DRIO_W]) 3.0 NaN

8349 rows × 2 columns

In [ ]: