def getPreMarketChange( symbol, list_GapDate, folder_30min='/Users/yutaasano/Documents/PyCharm/StockData/HistStkPrice_30min_Russell3000_Kibot_20150912' ): """ Return pre-market change for a given stock symbol for given dates list_GapDate is a nx3 numpy array, each row: year, month, day. It has to be sorted from old to new dates for faster process Pre-market change [%] is defined as (O(k_30-1) - C(k_day-1)) / C(k_day-1) * 100 O(k_30-1): open price at 9:00 C(k_day-1): close price at previous day's 15:30 """ # Check if list_GapDate is sorted list_GapDate_sorted = m.sortrowsByMultiCol(list_GapDate, [0,1,2], isAscending=1) if np.sum(np.abs(list_GapDate_sorted-list_GapDate)) != 0: raise ValueError('list_GapDate has to be sorted from old to new dates!') n_date = list_GapDate.shape[0] data_30min = fi.getHistStkPrice30min(symbol, folder_30min) t_row_GapDateInit = 0 change_PreMarket = np.zeros((n_date)) for k_date in range(0,n_date): t_GapDate = list_GapDate[k_date,:] # Look for a row where t_GapDate first occurs while t_row_GapDateInit<data_30min.shape[0]: t_30minDate = np.int64(data_30min[t_row_GapDateInit,0:3]) if sum(np.abs(t_30minDate - t_GapDate)) == 0: break else: t_row_GapDateInit += 1 if t_row_GapDateInit!=data_30min.shape[0]: t_row_ub = t_row_GapDateInit # upper bound row (open price 30 min before market open, typically row for 9:00) if np.int64(data_30min[t_row_ub,3]) >= 900: pass else: while np.int64(data_30min[t_row_ub,3]) < 900: t_row_ub += 1 t_row_lb = t_row_GapDateInit-1 # lower bound row (previous day's market close, typically row for 15:30) if np.int64(data_30min[t_row_lb,3]) < 1600: pass else: while np.int64(data_30min[t_row_lb,3]) >= 1600: t_row_lb -= 1 # Record only if the upper bound is at 9:00 if int(data_30min[t_row_ub,3]) == 900: change_PreMarket[k_date] = ( data_30min[t_row_ub,4]-data_30min[t_row_lb,7] ) / data_30min[t_row_lb,7] * 100 else: change_PreMarket[k_date] = np.nan else: change_PreMarket[k_date] = np.nan # no gap date found for this stock t_row_GapDateInit = 0 # re-initialize the gap date location return change_PreMarket
def loadRebFile(file_rebound, list_sortCol=[]): data_raw = np.genfromtxt(file_rebound, dtype=None, delimiter=',') data_raw = data_raw[1:,:] # remove first row n_data = data_raw.shape[0] if list_sortCol: print('sorting...') data_raw = m.sortrowsByMultiCol(data_raw, list_sortCol) data_StkSize = [] # Stock Size (e.g., 'L', 'M', 'S', 'N') data_Symbol = [] # Stock Symbol data_Date = np.zeros((n_data,3), dtype='int64') # Year, Month, Day data_Vol = np.zeros((n_data,2), dtype='int64') # Daily Volume, Average Volume data_Gap_Rebound = np.zeros((n_data,6)) # Gap, Rebounds at Five Timings for k_row in range(0,n_data): data_StkSize.append(data_raw[k_row,0].decode('UTF-8')) data_Symbol.append(data_raw[k_row,1].decode('UTF-8').strip()) # str.strip() is used to remove white space: ' INTC' -> 'INTC' data_Date[k_row,:] = np.int_(np.float_([k_elm.decode('UTF-8') for k_elm in data_raw[k_row,2:5]])) data_Vol[k_row,:] = np.int_(np.float_([k_elm.decode('UTF-8') for k_elm in data_raw[k_row,5:7]])) data_Gap_Rebound[k_row,:] = np.float_([k_elm.decode('UTF-8') for k_elm in data_raw[k_row,7:]]) data_StkSize = np.array(data_StkSize) data_Symbol = np.array(data_Symbol) return data_StkSize, data_Symbol, data_Date, data_Vol, data_Gap_Rebound