def get_fi_p1_data(database, table_name_raw, table_name_clean, point_number_arn_list=[5, 10, 25], n_tr = 5, n_tp = 5, n_wcp = 5): ''' Extract information from table_name_raw and insert important information into table_name_clean Important information includes: highest, lowest, closing, mean, and std in previous n_period days average value of the highest, lowest, closing, mean, and std based on previous 2, 3, 4, and 5 days Slope of closing rate predicted by Taylor expansion based on previous 2, 3, 4, and 5 days. Input: database: the pointer of the database table_name_raw: table name with raw data table_name_clean: table name with result to put in n_period: important information based on previous n_period days Output: All the information will be output to table_name_clean ''' ##--create pointer to the database database_pt = database.cursor() ##--get number of data from table and maximum number needed for the linear regression sql_comm = 'select count(*) from %(table_name)s'%{'table_name': table_name_raw} database_pt.execute(sql_comm) data_num = int(database_pt.fetchone()[0]) ##--create column for the aroon up and down in previous several days point_number_max = max(point_number_arn_list) for idx in point_number_arn_list: sql_comm = 'alter table %(table_name)s add pre_fi_arnup%(idx)s float' \ %{'table_name': table_name_clean, 'idx': idx} try: database_pt.execute(sql_comm) except: pass database.commit() for idx in point_number_arn_list: sql_comm = 'alter table %(table_name)s add pre_fi_arndown%(idx)s float' \ %{'table_name': table_name_clean, 'idx': idx} try: database_pt.execute(sql_comm) except: pass database.commit() ##--insert data into database for idx in xrange(1,data_num+1): sql_comm = 'select * from %(table_name)s where tradeID = %(id)s'%{'table_name': table_name_raw, 'id': idx} database_pt.execute(sql_comm) line = database_pt.fetchone() if idx == 1: preC = nlist(point_number_max,line[6]) else: preC.add(line[6]) arn_list = get_arn(preC, point_number_arn_list) for i_idx in xrange(len(arn_list)): value = arn_list[i_idx][0] sql_comm = 'update %(table_name)s set pre_fi_arnup%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'idx': idx, \ 'i_idx': point_number_arn_list[i_idx], 'value': value} database_pt.execute(sql_comm) value = arn_list[i_idx][1] sql_comm = 'update %(table_name)s set pre_fi_arndown%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'idx': idx, \ 'i_idx': point_number_arn_list[i_idx], 'value': value} database_pt.execute(sql_comm) database.commit() ##--create column for true range in previous several days for idx in xrange(n_tr): sql_comm = 'alter table %(table_name)s add pre_fi_tr%(idx)s float' \ %{'table_name': table_name_clean, 'idx': idx} try: database_pt.execute(sql_comm) except: pass database.commit() ##--insert data into database for idx in xrange(1,data_num+1): sql_comm = 'select * from %(table_name)s where tradeID = %(id)s'%{'table_name': table_name_raw, 'id': idx} database_pt.execute(sql_comm) line = database_pt.fetchone() if idx == 1: preC = line[6] else: curH = line[2] curL = line[3] if idx == 2: preTR = nlist(n_tr, get_tr(curH, curL, preC)) else: preTR.add(get_tr(curH, curL, preC)) for i_idx in xrange(min(n_tr, len(preTR.element))): sql_comm = 'update %(table_name)s set pre_fi_tr%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'idx': idx, \ 'i_idx': i_idx, 'value': preTR.element[i_idx]} database_pt.execute(sql_comm) preC = line[6] database.commit() ##--create column for true price in previous several days for idx in xrange(n_tp): sql_comm = 'alter table %(table_name)s add pre_fi_tp%(idx)s float' \ %{'table_name': table_name_clean, 'idx': idx} try: database_pt.execute(sql_comm) except: pass database.commit() ##--insert data into database for idx in xrange(1,data_num+1): sql_comm = 'select * from %(table_name)s where tradeID = %(id)s'%{'table_name': table_name_raw, 'id': idx} database_pt.execute(sql_comm) line = database_pt.fetchone() curC = line[6] curH = line[2] curL = line[3] if idx == 1: preTP = nlist(n_tp, get_tp(curH, curL, curC)) else: preTP.add(get_tp(curH, curL, curC)) for i_idx in xrange(min(n_tp, len(preTP.element))): sql_comm = 'update %(table_name)s set pre_fi_tp%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'idx': idx, \ 'i_idx': i_idx, 'value': preTP.element[i_idx]} database_pt.execute(sql_comm) database.commit() ##--create column for weighted closing price in previous several days for idx in xrange(n_wcp): sql_comm = 'alter table %(table_name)s add pre_fi_wcp%(idx)s float' \ %{'table_name': table_name_clean, 'idx': idx} try: database_pt.execute(sql_comm) except: pass database.commit() ##--insert data into database for idx in xrange(1,data_num+1): sql_comm = 'select * from %(table_name)s where tradeID = %(id)s'%{'table_name': table_name_raw, 'id': idx} database_pt.execute(sql_comm) line = database_pt.fetchone() curC = line[6] curH = line[2] curL = line[3] if idx == 1: preWCP = nlist(n_wcp, get_wcp(curH, curL, curC)) else: preWCP.add(get_wcp(curH, curL, curC)) for i_idx in xrange(min(n_wcp, len(preWCP.element))): sql_comm = 'update %(table_name)s set pre_fi_wcp%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'idx': idx, \ 'i_idx': i_idx, 'value': preWCP.element[i_idx]} database_pt.execute(sql_comm) database.commit()
def get_lr_fft_data(database, table_name_raw, table_name_clean, point_number_lr_list=[3, 4, 5, 10, 20, 30], point_number_fft_list=[2, 4, 6, 8, 10, 20, 30]): ''' Extract information from table_name_raw and insert feature into table_name_clean Feature includes: Amplitude and wave phase from FFT based on previous points in point_number_fft_list Slope from linear regression based on previous points in point_number_lr_list Input: database: the pointer of the database table_name_raw: table name with raw data table_name_clean: table name with result to put in n_period: important information based on previous n_period days Output: All the information will be output to table_name_clean ''' ##--create pointer to the database database_pt = database.cursor() ##--get number of data from table and maximum number needed for the linear regression sql_comm = 'select count(*) from %(table_name)s'%{'table_name': table_name_raw} database_pt.execute(sql_comm) data_num = int(database_pt.fetchone()[0]) ##--create column for the slopes of linear regression in previous several days point_number_max = max(point_number_lr_list) for idx in point_number_lr_list: sql_comm = 'alter table %(table_name)s add pre_lr_slope_C%(idx)s float' \ %{'table_name': table_name_clean, 'idx': idx} try: database_pt.execute(sql_comm) except: pass database.commit() ##--insert data into database for idx in xrange(1,data_num+1): sql_comm = 'select * from %(table_name)s where tradeID = %(id)s'%{'table_name': table_name_raw, 'id': idx} database_pt.execute(sql_comm) line = database_pt.fetchone() if idx == 1: preC = nlist(point_number_max,line[6]) else: preC.add(line[6]) lr_slope_list = get_lr_slope(preC, point_number_lr_list) for i_idx in xrange(len(lr_slope_list)): value = lr_slope_list[i_idx] sql_comm = 'update %(table_name)s set pre_lr_slope_C%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'idx': idx, \ 'i_idx': point_number_lr_list[i_idx], 'value': value} database_pt.execute(sql_comm) database.commit() ##--create column for the slopes of linear regression in previous several days point_number_max = max(point_number_fft_list) for idx in point_number_fft_list: sql_comm = 'alter table %(table_name)s add pre_fft_amp%(idx)s float' \ %{'table_name': table_name_clean, 'idx': idx} try: database_pt.execute(sql_comm) except: pass sql_comm = 'alter table %(table_name)s add pre_fft_theta%(idx)s float' \ %{'table_name': table_name_clean, 'idx': idx} try: database_pt.execute(sql_comm) except: pass database.commit() ##--insert data into database for idx in xrange(1,data_num+1): sql_comm = 'select * from %(table_name)s where tradeID = %(id)s'%{'table_name': table_name_raw, 'id': idx} database_pt.execute(sql_comm) line = database_pt.fetchone() if idx == 1: preC = nlist(point_number_max,line[6]) else: preC.add(line[6]) fft_result = get_fft(preC, point_number_fft_list) for i_idx in xrange(len(fft_result)): value = fft_result[i_idx] sql_comm = 'update %(table_name)s set pre_fft_amp%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'idx': idx, \ 'i_idx': point_number_fft_list[i_idx], 'value': value[0]} database_pt.execute(sql_comm) sql_comm = 'update %(table_name)s set pre_fft_theta%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'idx': idx, \ 'i_idx': point_number_fft_list[i_idx], 'value': value[1]} database_pt.execute(sql_comm) database.commit()
def get_previous_data(database, table_name_raw, table_name_clean, n_period = 5): ''' Extract information from table_name_raw and insert important information into table_name_clean Important information includes: highest, lowest, closing, mean, and std in previous n_period days average value of the highest, lowest, closing, mean, and std based on previous 2, 3, 4, and 5 days Slope of closing rate predicted by Taylor expansion based on previous 2, 3, 4, and 5 days. Input: database: the pointer of the database table_name_raw: table name with raw data table_name_clean: table name with result to put in n_period: important information based on previous n_period days Output: All the information will be output to table_name_clean ''' ##--create pointer to the database database_pt = database.cursor() ##--get number of data from table sql_comm = 'select count(*) from %(table_name)s'%{'table_name': table_name_raw} database_pt.execute(sql_comm) data_num = int(database_pt.fetchone()[0]) ##--create column for high, low, mean, close, and std in previous several days pre_name_list = ['H', 'L', 'M', 'C', 'Std', 'HL'] for pre_name in pre_name_list: for idx in xrange(n_period): sql_comm = 'alter table %(table_name)s add pre%(pre_name)s%(idx)s float' \ %{'table_name': table_name_clean, 'pre_name': pre_name, 'idx': idx} database_pt.execute(sql_comm) database.commit() ##--Create column for the average high, low, mean ,close, and std in previous several days for pre_name in pre_name_list[:-2]: for idx in xrange(2, n_period+1): sql_comm = 'alter table %(table_name)s add pre_avg_%(pre_name)s%(idx)s float' \ %{'table_name': table_name_clean, 'pre_name': pre_name, 'idx': idx} database_pt.execute(sql_comm) database.commit() ##--Create slope of close using rates in previous 2, 3, 4, and 5 days for idx in xrange(2, n_period+1): sql_comm = 'alter table %(table_name)s add pre_slope_C%(idx)s float' \ %{'table_name': table_name_clean, 'idx': idx} database_pt.execute(sql_comm) database.commit() ##--insert date to table sql_comm = 'insert into %(table_name)s (trade_date) select trade_date from %(old_table)s'%{'table_name': table_name_clean, \ 'old_table': table_name_raw} database_pt.execute(sql_comm) database_pt.execute('select * from %(table_name)s'%{'table_name': table_name_clean}) database.commit() ##--insert data into database for idx in xrange(1,data_num+1): sql_comm = 'select * from %(table_name)s where tradeID = %(id)s'%{'table_name': table_name_raw, 'id': idx} database_pt.execute(sql_comm) line = database_pt.fetchone() if idx == 1: preH = nlist(n_period,line[2]) preL = nlist(n_period,line[3]) preM = nlist(n_period,line[4]) preStd = nlist(n_period,line[5]) preC = nlist(n_period,line[6]) preHL = nlist(n_period,(line[2]+line[3])/2.) else: preH.add(line[2]) preL.add(line[3]) preM.add(line[4]) preStd.add(line[5]) preC.add(line[6]) preHL.add((line[2]+line[3])/2.) length_pre = min(n_period,idx) for pre_name in pre_name_list: for i_idx in xrange(length_pre): if pre_name == 'H': value = preH.element[i_idx] elif pre_name == 'L': value = preL.element[i_idx] elif pre_name == 'M': value = preM.element[i_idx] elif pre_name == 'Std': value = preStd.element[i_idx] elif pre_name == 'C': value = preC.element[i_idx] elif pre_name == 'HL': value = preHL.element[i_idx] sql_comm = 'update %(table_name)s set pre%(pre_name)s%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'pre_name': pre_name, 'idx': idx, \ 'i_idx': i_idx, 'value': value} database_pt.execute(sql_comm) database.commit() ##--insert average values pre_avg_H = get_average(preH, n_period) pre_avg_L = get_average(preL, n_period) pre_avg_M = get_average(preM, n_period) pre_avg_Std = get_average(preStd, n_period) pre_avg_C = get_average(preC, n_period) length_pre = min(n_period-1,idx-1) for pre_name in pre_name_list[:-2]: for i_idx in xrange(length_pre): if pre_name == 'H': value = pre_avg_H[i_idx] elif pre_name == 'L': value = pre_avg_L[i_idx] elif pre_name == 'M': value = pre_avg_M[i_idx] elif pre_name == 'Std': value = pre_avg_Std[i_idx] elif pre_name == 'C': value = pre_avg_C[i_idx] sql_comm = 'update %(table_name)s set pre_avg_%(pre_name)s%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'pre_name': pre_name, 'idx': idx, \ 'i_idx': i_idx + 2, 'value': value} database_pt.execute(sql_comm) database.commit() ##--insert taylor-expansion based slope pre_slope_C = get_talyer_slope(preC) length_pre = min(4,idx-1) for i_idx in xrange(length_pre): value = pre_slope_C[i_idx] sql_comm = 'update %(table_name)s set pre_slope_C%(i_idx)s = %(value)s \ where tradeID = %(idx)s'%{'table_name': table_name_clean, 'idx': idx, \ 'i_idx': i_idx + 2, 'value': value} database_pt.execute(sql_comm) database.commit()