Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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")
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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")
Exemplo n.º 7
0
        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()
Exemplo n.º 8
0
# 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)
Exemplo n.º 9
0
    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")
Exemplo n.º 12
0
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")