def draw_one_fitted_picture(data, name, epco_num, time): Close = data['Close'] Open = data['Open'] max_error = 0.01 max_val = Close[1] min_val = Close[1] #adapt the max_error for val in Close: if val > max_val: max_val = val if val < min_val: min_val = val for val in Open: if val > max_val: max_val = val if val < min_val: min_val = val adapted_error = max_error * (max_val - min_val) * (max_val - min_val) #bottom-up with simple interpolation segments = segment.topdownsegment(Close, fit.interpolate, fit.sumsquared_error, adapted_error) segments1 = segment.topdownsegment(Open, fit.interpolate, fit.sumsquared_error, adapted_error) draw_plot(data, name) draw_segments(segments, segments1) #save figure file_name = r'../fitted_figures/' + name + '/' + name + '_' + str( time) + 'Y_' + str(epco_num) + '.jpg' plt.savefig(file_name, bbox_inches='tight') #plt.show() plt.close()
def printError(my_dpi, data): """ All data contanining the stock price info are retrieved from the database given the stock name :param my_dpi: dpi screen :param data: data to be plot :param max_error: maximum error allowed """ try: stockFile = [] try: for eachLine in data: splitLine = eachLine.split(',') if len(splitLine) == 2: if 'values' not in eachLine: stockFile.append(eachLine) except Exception as e: print(str(e), 'failed to organize pulled data.') except Exception as e: print(str(e), 'failed to pull pricing data') try: date, closep_raw = np.loadtxt( stockFile, delimiter=',', unpack=True, converters={0: mdates.bytespdate2num('%Y%m%d')}) closep = closep_raw[::-1] max_error = 0.1 while max_error < float(2 * max(closep)): segments1 = segment.slidingwindowsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) segments2 = segment.slidingwindowsegment(closep, fit.regression, fit.sumsquared_error, max_error) err1 = str(evaluate_MSE(closep, segments1)) err4 = str(evaluate_MSE(closep, segments2)) segments1 = segment.topdownsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) segments2 = segment.topdownsegment(closep, fit.regression, fit.sumsquared_error, max_error) err2 = str(evaluate_MSE(closep, segments1)) err5 = str(evaluate_MSE(closep, segments2)) segments1 = segment.bottomupsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) segments2 = segment.bottomupsegment(closep, fit.regression, fit.sumsquared_error, max_error) err3 = str(evaluate_MSE(closep, segments1)) err6 = str(evaluate_MSE(closep, segments2)) print( str(max_error) + " " + err1 + " " + err2 + " " + err3 + " " + err4 + " " + err5 + " " + err6) max_error += 0.1 except e: print("Error")
def model_run(name): msft = db[name] msft_cursor = msft.find({}) data = [] time = datetime.datetime(2020, 6, 15, 9, 30, 00) for i in msft_cursor: if i['time'] >= time: data.append(float(i['price'].replace(',', ''))) data = np.array(data) segments = segment.topdownsegment(data, fit.interpolate, fit.sumsquared_error, max_error) box_feature = build_box_feature(segments, data) print(box_feature) train_data, test_data = train_test_split(box_feature, test_size=0.33, shuffle=False) feature_vector = feature_extract(train_data) print(feature_vector) hmm = GaussianHMM(n_components=4) hmm.fit(feature_vector) possibile_outcomes = compute_all_possible_outcomes(n_steps_frac_low, n_steps_frac_high, n_steps_frac_change) predict = predict_close_price_for_days(500, name) # for stock in stocks: # msft = db[stock] # msft_cursor = msft.find({}) # # data = [] # time = datetime.datetime(2020, 6, 15, 9, 30, 00) # for i in msft_cursor: # if i['time'] >= time: # data.append(float(i['price'].replace(',', ''))) # # data = np.array(data) # segments = segment.topdownsegment(data, fit.interpolate, fit.sumsquared_error, max_error) # box_feature = build_box_feature(segments, data) # print(box_feature) # train_data, test_data = train_test_split(box_feature, test_size=0.33, shuffle=False) # feature_vector = feature_extract(train_data) # print(feature_vector) # # hmm = GaussianHMM(n_components=4) # hmm.fit(feature_vector) # possibile_outcomes = compute_all_possible_outcomes(n_steps_frac_low, n_steps_frac_high, n_steps_frac_change) # predict = predict_close_price_for_days(500,stock)
def seg_extract(data_name): client = MongoClient(port=27017) print('Connect MongoDB Successful') db = client.StockAnalyze msft = db[data_name] cursor = msft.find({}) data = [] for i in cursor: data.append(float(i['price'].replace(',', ''))) data = np.array(data) segments = segment.topdownsegment(data, fit.interpolate, fit.sumsquared_error, max_error) input = feature_extract(segments) output = extract_new_y_feature(segments) size = int(input.shape[0] * 0.95) train_x = input[:size] train_y = output[1:size + 1] test_x = input[size:-1] test_y = output[size + 1:] return train_x, train_y, test_x, test_y
def draw_window_API(my_dpi, max_error, stockToFetch): """ All data contanining the stock price info are retrieved from the database given the stock name :param my_dpi: dpi screen :param data: data to be plot :param max_error: maximum error allowed """ fig = plt.figure(figsize=(1000 / my_dpi, 700 / my_dpi), dpi=96, edgecolor='k', facecolor='black') fig.suptitle("PIECEWISE SEGMENTATION INTERPOLATION", fontsize="15", color="white", fontweight='bold', bbox={ 'facecolor': 'red', 'alpha': 0.5, 'pad': 10 }) try: print('Currently Pulling', stockToFetch) urlToVisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/' + stockToFetch + '/chartdata;type=quote;range=5y/csv' stockFile = [] try: sourceCode = urllib.request.urlopen(urlToVisit).read().decode() splitSource = sourceCode.split('\n') for eachLine in splitSource: splitLine = eachLine.split(',') if len(splitLine) == 6: if 'values' not in eachLine: stockFile.append(eachLine) except Exception as e: print(str(e), 'failed to organize pulled data.') except Exception as e: print(str(e), 'failed to pull pricing data') try: date, closep, highp, lowp, openp, volume = np.loadtxt( stockFile, delimiter=',', unpack=True, converters={0: mdates.bytespdate2num('%Y%m%d')}) SP = len(date) # First subplot ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3) segments = segment.slidingwindowsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) draw_plot(closep, plt, ax1, "Sliding window with interpolation") draw_segments(segments, 'red') plt.ylabel('Stock Price') plt.title("Sliding window", color='w') # Second subplot ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=3) segments = segment.topdownsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) draw_plot(closep, plt, ax2, "Sliding window with interpolation") draw_segments(segments, 'green') plt.ylabel('Stock Price') plt.title("Top down", color='w') # Third subplot ax3 = plt.subplot2grid((3, 3), (2, 0), colspan=3) segments = segment.bottomupsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) draw_plot(closep, plt, ax3, "Sliding window with interpolation") draw_segments(segments, 'blue') plt.ylabel('Stock Price') plt.title("Bottom up", color='w') plt.subplots_adjust(hspace=0.3) plt.show() except e: print("Error")
def draw_window(my_dpi, data, max_error): """ All data contanining the stock price info are retrieved from the database given the stock name :param my_dpi: dpi screen :param data: data to be plot :param max_error: maximum error allowed """ fig = plt.figure(figsize=(1000 / my_dpi, 700 / my_dpi), dpi=96, facecolor='black') fig.suptitle("PIECEWISE SEGMENTATION INTERPOLATION", fontsize="15", color="white", fontweight='bold', bbox={ 'facecolor': 'red', 'alpha': 0.5, 'pad': 10 }) try: stockFile = [] try: for eachLine in data: splitLine = eachLine.split(',') if len(splitLine) == 2: if 'values' not in eachLine: stockFile.append(eachLine) except Exception as e: print(str(e), 'failed to organize pulled data.') except Exception as e: print(str(e), 'failed to pull pricing data') try: date, closep_raw = np.loadtxt( stockFile, delimiter=',', unpack=True, converters={0: mdates.bytespdate2num('%Y%m%d')}) closep = closep_raw[::-1] print(max(closep)) max_error = max(closep) * 2.5 # First subplot ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3) segments = segment.slidingwindowsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) draw_plot(closep, plt, ax1, "Sliding window with interpolation") draw_segments(segments, 'red') plt.ylabel('Stock Price') plt.title("SLIDING WINDOW - ERROR " + str(evaluate_global_error(closep, segments)), color='Yellow', fontweight='bold') # Second subplot ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=3) segments = segment.topdownsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) draw_plot(closep, plt, ax2, "Sliding window with interpolation") draw_segments(segments, 'green') plt.ylabel('Stock Price') plt.title("TOP DOWN - ERROR " + str(evaluate_global_error(closep, segments)), color='Yellow', fontweight='bold') # Third subplot ax3 = plt.subplot2grid((3, 3), (2, 0), colspan=3) segments = segment.bottomupsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) segments = segment.bottomupsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) draw_plot(closep, plt, ax3, "Sliding window with interpolation") draw_segments(segments, 'blue') plt.ylabel('Stock Price') plt.title("BOTTOM UP - ERROR " + str(evaluate_global_error(closep, segments)), color='Yellow', fontweight='bold') plt.subplots_adjust(hspace=0.3) plt.show() except e: print("Error")
if start_price < end_price: tmp = 0 elif start_price == end_price: tmp = 1 else: tmp = 2 for i in range(start, end): label.append(tmp) label.append(tmp) return label def draw_plot(data, plot_title): plot(range(len(data)), data, alpha=0.8, color='red') title(plot_title) xlabel("Time seres in 5 second skip(s)") ylabel("Price($)") xlim((0, len(data) - 1)) legend() figure() segments = segment.topdownsegment(data, fit.interpolate, fit.sumsquared_error, max_error) label = add_label(segments) print(label) draw_plot(data, 'top-down with simple interpolation') draw_segments(segments, data) savefig('status box.png') show()
# sliding window with regression figure() segments = segment.slidingwindowsegment(data, fit.regression, fit.sumsquared_error, max_error) draw_plot(data, "Sliding window with regression") draw_segments(segments) # bottom-up with regression figure() segments = segment.bottomupsegment(data, fit.regression, fit.sumsquared_error, max_error) draw_plot(data, "Bottom-up with regression") draw_segments(segments) # top-down with regression figure() segments = segment.topdownsegment(data, fit.regression, fit.sumsquared_error, max_error) draw_plot(data, "Top-down with regression") draw_segments(segments) # sliding window with simple interpolation figure() segments = segment.slidingwindowsegment(data, fit.interpolate, fit.sumsquared_error, max_error) draw_plot(data, "Sliding window with simple interpolation") draw_segments(segments) # bottom-up with simple interpolation figure() segments = segment.bottomupsegment(data, fit.interpolate, fit.sumsquared_error, max_error) draw_plot(data, "Bottom-up with simple interpolation") draw_segments(segments)
my_dpi=96 #sliding window with regression fig = plt.figure(num=None, figsize=(800/my_dpi, 800/my_dpi), dpi=80, facecolor='w', edgecolor='k') segments = segment.slidingwindowsegment(closep, fit.regression, fit.sumsquared_error, max_error) draw_plot(closep,plt,"Sliding window with regression") draw_segments(segments) #bottom-up with regression segments = segment.bottomupsegment(closep, fit.regression, fit.sumsquared_error, max_error) draw_plot(closep,plt,"Bottom-up with regression") draw_segments(segments) #top-down with regression #figure() segments = segment.topdownsegment(closep, fit.regression, fit.sumsquared_error, max_error) draw_plot(closep,plt,"Top-down with regression") draw_segments(segments) #sliding window with simple interpolation #figure() segments = segment.slidingwindowsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) draw_plot(closep,plt,"Sliding window with simple interpolation") draw_segments(segments) #bottom-up with simple interpolation #figure() segments = segment.bottomupsegment(closep, fit.interpolate, fit.sumsquared_error, max_error) draw_plot(closep,plt,"Bottom-up with simple interpolation")
def draw_window_API(my_dpi, max_error, stockToFetch): """ All data contanining the stock price info are retrieved from the database given the stock name :param my_dpi: dpi screen :param data: data to be plot :param max_error: maximum error allowed """ fig = plt.figure(figsize=(1000/my_dpi, 700/my_dpi), dpi=96, edgecolor='k', facecolor='black') fig.suptitle("PIECEWISE SEGMENTATION REGRESSION", fontsize="15", color="white", fontweight='bold', bbox={'facecolor':'red', 'alpha':0.5, 'pad':10}) try: print('Currently Pulling',stockToFetch) urlToVisit = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stockToFetch+'/chartdata;type=quote;range=5y/csv' stockFile =[] try: sourceCode = urllib.request.urlopen(urlToVisit).read().decode() splitSource = sourceCode.split('\n') for eachLine in splitSource: splitLine = eachLine.split(',') if len(splitLine) == 6: if 'values' not in eachLine: stockFile.append(eachLine) except Exception as e: print(str(e), 'failed to organize pulled data.') except Exception as e: print(str(e), 'failed to pull pricing data') try: date, closep, highp, lowp, openp, volume = np.loadtxt(stockFile, delimiter=',', unpack=True, converters={0: mdates.bytespdate2num('%Y%m%d')}) SP = len(date) # First subplot ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3) segments = segment.slidingwindowsegment(closep, fit.regression, fit.sumsquared_error, max_error) draw_plot(closep,plt,ax1,"Sliding window with regression") draw_segments(segments,'red') plt.ylabel('Stock Price') plt.title("Sliding window", color='w') # Second subplot ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=3) segments = segment.topdownsegment(closep, fit.regression, fit.sumsquared_error, max_error) draw_plot(closep, plt, ax2, "Sliding window with regression") draw_segments(segments,'green') plt.ylabel('Stock Price') plt.title("Top down", color='w') # Third subplot ax3 = plt.subplot2grid((3, 3), (2, 0), colspan=3) segments = segment.bottomupsegment(closep, fit.regression, fit.sumsquared_error, max_error) draw_plot(closep, plt, ax3, "Sliding window with regression") draw_segments(segments,'blue') plt.ylabel('Stock Price') plt.title("Bottom up", color='w') plt.subplots_adjust(hspace=0.3) plt.show() except e: print("Error")
def draw_window(my_dpi, data): """ All data contanining the stock price info are retrieved from the database given the stock name :param my_dpi: dpi screen :param data: data to be plot :param max_error: maximum error allowed """ fig = plt.figure(figsize=(1000/my_dpi, 700/my_dpi), dpi=96, facecolor='black') fig.suptitle("PIECEWISE SEGMENTATION REGRESSION", fontsize="15", color="white", fontweight='bold', bbox={'facecolor':'red', 'alpha':0.5, 'pad':10}) try: stockFile = [] try: for eachLine in data: splitLine = eachLine.split(',') if len(splitLine) == 2: if 'values' not in eachLine: stockFile.append(eachLine) except Exception as e: print(str(e), 'failed to organize pulled data.') except Exception as e: print(str(e), 'failed to pull pricing data') try: date, closep_raw = np.loadtxt(stockFile, delimiter=',', unpack=True, converters={0: mdates.bytespdate2num('%Y%m%d')}) closep = closep_raw[::-1] max_closep = max(closep) if(max_closep > 2.0): max_error = max(closep)*2.7; else: max_error = max(closep)/2.5; print(max_error) # First subplot ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3) segments = segment.slidingwindowsegment(closep, fit.regression, fit.sumsquared_error, max_error) draw_plot(closep,plt,ax1,"Sliding window with regression") draw_segments(segments,'red') plt.ylabel('Stock Price') plt.title("SLIDING WINDOW - ERROR "+str(evaluate_global_error(closep, segments)), color='Yellow', fontweight='bold') # Second subplot ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=3) segments = segment.topdownsegment(closep, fit.regression, fit.sumsquared_error, max_error) draw_plot(closep, plt, ax2, "Sliding window with regression") draw_segments(segments,'green') plt.ylabel('Stock Price') plt.title("TOP DOWN - ERROR "+str(evaluate_global_error(closep, segments)), color='Yellow', fontweight='bold') # Third subplot ax3 = plt.subplot2grid((3, 3), (2, 0), colspan=3) segments = segment.bottomupsegment(closep, fit.regression, fit.sumsquared_error, max_error) draw_plot(closep, plt, ax3, "Sliding window with regression") draw_segments(segments,'blue') plt.ylabel('Stock Price') plt.title("BOTTOM UP - ERROR "+str(evaluate_global_error(closep, segments)), color='Yellow', fontweight='bold') plt.subplots_adjust(hspace=0.3) plt.show() except e: print("Error")
figure() segments = segment.slidingwindowsegment(data, fit.regression, fit.sumsquared_error_regr, max_error) draw_plot(data, "Sliding window with regression") draw_segments(segments) #bottom-up with regression figure() segments = segment.bottomupsegment(data, fit.regression, fit.sumsquared_error_regr, max_error) draw_plot(data, "Bottom-up with regression") draw_segments(segments) #top-down with regression figure() segments = segment.topdownsegment(data, fit.regression, fit.sumsquared_error_regr, max_error) draw_plot(data, "Top-down with regression") draw_segments(segments) #sliding window with simple interpolation figure() segments = segment.slidingwindowsegment(data, fit.interpolate, fit.sumsquared_error_int, max_error) draw_plot(data, "Sliding window with simple interpolation") draw_segments(segments) #bottom-up with simple interpolation figure() segments = segment.bottomupsegment(data, fit.interpolate, fit.sumsquared_error_int, max_error) draw_plot(data, "Bottom-up with simple interpolation")