def findEvents(symbols, startday,endday,weeks, marketSymbol,verbose=False):

        # week calc
        week=dt.timedelta(weeks=weeks)
        time = startday.time()
        lookbackday=dt.datetime.combine(startday,time)-week
        # week cal

        # Reading the Data for the list of Symbols.
        timeofday=dt.timedelta(hours=16)

        closefield = "close"
        lookbackTimestamps = du.getNSEdays(lookbackday,startday,timeofday)
        analyzeTimestamps=du.getNSEdays(startday,endday,timeofday)
        timestamps=lookbackTimestamps+analyzeTimestamps

        np_eventmat=pandas.DataFrame(index=timestamps, columns=symbols)

        dataobj = da.DataAccess('NSEData')

        close = dataobj.get_data(timestamps, symbols, closefield)

        close = (close.fillna(method='ffill')).fillna(method='backfill')
##        close.to_csv('res.csv',sep=',')

        for i in range(0, len(analyzeTimestamps)):
            print 'Iteration : ',i+1
            currentDates = [close.index[j] for j in range(i,len(lookbackTimestamps)+1+i)]

            subDataframe=close.ix[currentDates]

            eventDate= currentDates[len(currentDates)-1]

            maxValue=subDataframe.idxmax()
            minValue=subDataframe.idxmin()

            for stockname, date in maxValue.T.iteritems():
                value=(close[stockname][eventDate]/close[stockname][date])-1
                if(value<=0.00 and value>-0.02):
                    np_eventmat[stockname][eventDate]='52wk+++,'+str(close[stockname][eventDate])+','+str(close[stockname][date])+','+str(date.date())+','+str(value*100)+','+str(currentDates[0].date())+' - '+str(eventDate.date())
                elif(value<-0.02 and value>-0.05):
                    np_eventmat[stockname][eventDate]='52wk++,'+str(close[stockname][eventDate])+','+str(close[stockname][date])+','+str(date.date())+','+str(value*100)+','+str(currentDates[0].date())+' - '+str(eventDate.date())
                elif(value<-0.05 and value>-0.07):
                    np_eventmat[stockname][eventDate]='52wk+,'+str(close[stockname][eventDate])+','+str(close[stockname][date])+','+str(date.date())+','+str(value*100)+','+str(currentDates[0].date())+' - '+str(eventDate.date())


            for stockname, date in minValue.T.iteritems():
                value=(close[stockname][eventDate]/close[stockname][date])-1
                if(value>=0.00 and value<0.02):
                    np_eventmat[stockname][eventDate]='52wk---,'+str(close[stockname][eventDate])+','+str(close[stockname][date])+','+str(date.date())+','+str(value*100)+','+str(currentDates[0].date())+' - '+str(eventDate.date())
                elif(value>0.02 and value<0.05):
                    np_eventmat[stockname][eventDate]='52wk--,'+str(close[stockname][eventDate])+','+str(close[stockname][date])+','+str(date.date())+','+str(value*100)+','+str(currentDates[0].date())+' - '+str(eventDate.date())
                elif(value>0.05 and value<0.07):
                    np_eventmat[stockname][eventDate]='52wk-,'+str(close[stockname][eventDate])+','+str(close[stockname][date])+','+str(date.date())+','+str(value*100)+','+str(currentDates[0].date())+' - '+str(eventDate.date())

        return np_eventmat
コード例 #2
0
        def __init__(self,eventMatrix,startday,endday,\
            lookback_days = 20, lookforward_days =20,\
            verbose=False):

            """ Event Profiler class construtor 
                Parameters : evenMatrix
                           : startday
                           : endday
                (optional) : lookback_days ( default = 20)
                (optional) : lookforward_days( default = 20)

                eventMatrix is a pandas DataMatrix
                eventMatrix must have the following structure:
                    |IBM |GOOG|XOM |MSFT| GS | JP |
                (d1)|nan |nan | 1  |nan |nan | 1  |
                (d2)|nan | 1  |nan |nan |nan |nan |
                (d3)| 1  |nan | 1  |nan | 1  |nan |
                (d4)|nan |  1 |nan | 1  |nan |nan |
                ...................................
                ...................................
                Also, d1 = start date
                nan = no information about any event.
                 = status bit(positively confirms the event occurence)
            """

            self.eventMatrix = eventMatrix
            self.startday = startday
            self.endday = endday
            self.symbols = eventMatrix.columns
            self.lookback_days = lookback_days
            self.lookforward_days = lookforward_days
            self.total_days = lookback_days + lookforward_days + 1
     
#     original code
#           self.dataobj = da.DataAccess('Yahoo')
#     original code

#   modified code to access NSE data  
            self.dataobj = da.DataAccess('NSEData')         
#   modified code 
         
            self.timeofday = dt.timedelta(hours=16)
     
#     original code
#           self.timestamps = du.getNYSEdays(startday,endday,self.timeofday)
#     original code

#     modified code  
            self.timestamps = du.getNSEdays(startday,endday,self.timeofday)
#     modified code

            self.verbose = verbose
            if verbose:
                print __name__ + " reading historical data"
            self.close = self.dataobj.get_data(self.timestamps,\
                self.symbols, "close", verbose=self.verbose)
            self.close = (self.close.fillna()).fillna(method='backfill')
コード例 #3
0
def findEvents(symbols, startday,endday, marketSymbol,verbose=False):

        # Reading the Data for the list of Symbols.     
        timeofday=dt.timedelta(hours=16)
        timestamps = du.getNSEdays(startday,endday,timeofday)


        endOfQuarter=getQuarterEndDates(timestamps)
         
     
        dataobj = da.DataAccess('NSEData')
        if verbose:
            print __name__ + " reading data"
        # Reading the Data
        
        close = dataobj.get_data(timestamps, symbols, closefield)

        # Completing the Data - Removing the NaN values from the Matrix
        close = (close.fillna(method='ffill')).fillna(method='backfill')

        
        # Calculating Daily Returns for the Market
        tsu.returnize0(close.values)


        # Calculating the Returns of the Stock Relative to the Market 
        # So if a Stock went up 5% and the Market rised 3%. The the return relative to market is 2% 
        mktneutDM = close - close[marketSymbol]

        np_eventmat = copy.deepcopy(mktneutDM)

        for sym in symbols:
                for time in timestamps:

                        np_eventmat[sym][time]=np.NAN

        
        
        if verbose:
            print __name__ + " finding events"

        # Generating the Event Matrix
        # Event described is : Analysis Quarter End prices of stocks

        for symbol in symbols:
                for i in endOfQuarter:                       

                        np_eventmat[symbol][i] = 1.0  #overwriting by the bit, marking the event
     
                        
        return np_eventmat
def findEvents(data, startday,endday, marketSymbol,verbose=False):

        # Reading the Data for the list of Symbols.     
        timeofday=dt.timedelta(hours=16)
        timestamps = du.getNSEdays(startday,endday,timeofday)
        
        dataobj = da.DataAccess('NSEData')
        if verbose:
            print __name__ + " reading data"
        # Reading the Data
        symbols=getSymbols(data, marketSymbol)
        
        eventDetails=getDates(data)
        
        close = dataobj.get_data(timestamps, symbols, closefield)   
        
        #Completing the Data - Removing the NaN values from the Matrix
        close = (close.fillna(method='ffill')).fillna(method='backfill')

        
        # Calculating Daily Returns for the Market
        tsu.returnize0(close.values)

        # Calculating the Returns of the Stock Relative to the Market 
        # So if a Stock went up 5% and the Market rised 3%. The the return relative to market is 2% 
        mktneutDM = close - close[marketSymbol]
        np_eventmat = copy.deepcopy(mktneutDM)

        
        for sym in symbols:
                for time in timestamps:
                        np_eventmat[sym][time]=np.NAN

        if verbose:
            print __name__ + " finding events"

        # Generating the Event Matrix
        # Event described is : Analysing Stock Prices before and after the occurence of an event.
        # Stocks are analysed on specific dates as per data provided in csv files.

        for stock in eventDetails:      
            stockName=stock[0]
                        
            for i in range(1,len(stock)):
                np_eventmat[stockName][stock[i]] = 1.0  #overwriting by the bit, marking the event
     
                        
        return np_eventmat
def findEvents(symbols, startday,endday, marketSymbol,verbose=False):

	# Reading the Data for the list of Symbols.	
	timeofday=dt.timedelta(hours=16)
	timestamps = du.getNSEdays(startday,endday,timeofday)
	dataobj = da.DataAccess('NSEData')
	if verbose:
            print __name__ + " reading data"
	# Reading the Data
	close = dataobj.get_data(timestamps, symbols, closefield)
	
	# Completing the Data - Removing the NaN values from the Matrix
	close = (close.fillna(method='ffill')).fillna(method='backfill')

	
	# Calculating Daily Returns for the Market
	tsu.returnize0(close.values)
	SPYValues=close[marketSymbol]

	# Calculating the Returns of the Stock Relative to the Market 
	# So if a Stock went up 5% and the Market rised 3%. The the return relative to market is 2% 
	mktneutDM = close - close[marketSymbol] 

	np_eventmat = copy.deepcopy(mktneutDM)
	for sym in symbols:
		for time in timestamps:
			np_eventmat[sym][time]=np.NAN

	if verbose:
            print __name__ + " finding events"

	# Generating the Event Matrix
	# Event described is : Analysis of events occuring when stock price falls to a certain value

	for symbol in symbols:
		
	    for i in range(1,len(mktneutDM[symbol])):
	        if SPYValues[i]<-0.01 and mktneutDM[symbol][i] < -0.02 : # When market fall is more than 3% and also the stock compared to market is also fell by more than 5%.
             		np_eventmat[symbol][i] = 1.0  #overwriting by the bit, marking the event
			
	return np_eventmat
コード例 #6
0
import qstkutil.DataAccess as da
import datetime as dt
import matplotlib.pyplot as plt
from pylab import *
import pandas

print pandas.__version__

#
# Prepare to read the data
#
symbols = ["NSE","ABB.NS","ACC.NS","TCS.NS"]
startday = dt.datetime(2008,1,1)
endday = dt.datetime(2011,12,31)
timeofday=dt.timedelta(hours=16)
timestamps = du.getNSEdays(startday,endday,timeofday)

#dataobj = da.DataAccess('Yahoo')

dataobj = da.DataAccess('NSEData')

voldata = dataobj.get_data(timestamps, symbols, "volume",verbose=True)
close = dataobj.get_data(timestamps, symbols, "close",verbose=True)
actualclose = dataobj.get_data(timestamps, symbols, "actual_close",verbose=True)
#
# Plot the adjusted close data
#
plt.clf()
newtimestamps = close.index
pricedat = close.values # pull the 2D ndarray out of the pandas object
plt.plot(newtimestamps,pricedat)
コード例 #7
0
    def findEvents(self, symbols, columnIndexes, verbose=False):

        eventDetails=self.eventDetailsData

        # Reading the Data for the list of Symbols.
        timeofday=dt.timedelta(hours=16)

        timestamps = du.getNSEdays(self.startday,self.endday,timeofday)

        stockDates=self.getDates(eventDetails, timestamps, columnIndexes)

        dataobj = da.DataAccess('NSEData')
        if verbose:
            print __name__ + " reading data"
        # Reading the Data

        close = dataobj.get_data(timestamps, symbols, self.closefield)

        #Completing the Data - Removing the NaN values from the Matrix
        close = (close.fillna(method='ffill')).fillna(method='backfill')


        # Calculating Daily Returns for the Market
        tsu.returnize0(close.values)
        NSEValues=close[self.marketSymbol]

        # Calculating the Returns of the Stock Relative to the Market
        # So if a Stock went up 5% and the Market rised 3%. The the return relative to market is 2%
        mktneutDM = close - close[self.marketSymbol]
        np_eventmat = copy.deepcopy(mktneutDM)


        for sym in symbols:
                for time in timestamps:
                        np_eventmat[sym][time]=np.NAN

        if verbose:
            print __name__ + " finding events"

        # Generating the Event Matrix
        # Event described is : Analysing Stock Prices before and after the occurence of an event.
        # Stocks are analysed on specific dates as per data provided in csv files accessed from Google Docs.

        if(self.analyzeLookbackDays):
            for stock in stockDates:
                stockName=stock[0]
                for i in range(1,len(stock)):
                    if(self.analyzeStock(stockName, stock[i], mktneutDM)):
                        np_eventmat[stockName][stock[i]] = 1.0  #overwriting by the bit, marking the event

        else:

            if((self.marketChangeMin!='NA' and self.marketChangeMax!='NA') or (self.stockChangeMin!='NA' and self.stockChangeMax!='NA')):
                np_eventmat=self.getRangeChangeMatrix(stockDates, NSEValues, mktneutDM, np_eventmat)

            elif(self.marketValueChange!='NA' or self.stockValueChange!='NA'):
                np_eventmat=self.getValueChangeMatrix(stockDates, NSEValues, mktneutDM, np_eventmat)

            else:
                for stock in stockDates:
                    stockName=stock[0]
                    for i in range(1,len(stock)):
                        np_eventmat[stockName][stock[i]] = 1.0  #overwriting by the bit, marking the event

        return np_eventmat