Пример #1
0
def main():
    # Prevent truncating display of DataFrame
    pd.set_option('display.width', None)
    goog_data = data.get_google_data('data/goog_data_large.pkl',
                                     start_date='2001-01-01',
                                     end_date='2018-01-01')
    # Features are open - close price and high - low price
    # Target is difference in daily close price
    goog_data, x, y = finml.create_regression_trading_condition(goog_data)

    # Split into train (80%) and test data sets
    x_train, x_test, y_train, y_test = finml.create_train_split_group(x, y)

    # Ridge regression model with regularisation parameter 0.1
    ridge = linear_model.Ridge(alpha=10000)
    ridge.fit(x_train, y_train)
    print('Coefficients:\n', ridge.coef_)

    # Evaluate model on training data
    print(f'Mean squared error on training data: '
          f'{mean_squared_error(y_train, ridge.predict(x_train))}')
    # Explained variance score: 1 is perfect prediction
    print(f'Variance score on training data: '
          f'{r2_score(y_train, ridge.predict(x_train))}')
    # Evaluate model on test data
    print(f'Mean squared error on test data: '
          f'{mean_squared_error(y_test, ridge.predict(x_test))}')
    # Explained variance score: 1 is perfect prediction
    print(f'Variance score on test data: '
          f'{r2_score(y_test, ridge.predict(x_test))}')

    # LASSO regression model to predict prices and calculate strategy returns
    goog_data['Predicted_signal'] = ridge.predict(x)
    goog_data['GOOG_Returns'] = \
        np.log(goog_data['Close'] / goog_data['Close'].shift(1))
    print(goog_data)

    # Calculate cumulative returns for the test data (train data onwards)
    cum_goog_return = \
        finml.calculate_return(goog_data, split_value=len(x_train),
                               symbol='GOOG')

    cum_strategy_return = \
        finml.calculate_strategy_return(goog_data, split_value=len(x_train))

    finml.plot_chart(cum_goog_return, cum_strategy_return, symbol='GOOG')

    sharpe = finml.sharpe_ratio(cum_strategy_return, cum_goog_return)
    print(f'Sharpe ratio: {sharpe}')

    # Display plots and block
    plt.show()
Пример #2
0
def main():
    # Prevent truncating display of DataFrame
    pd.set_option('display.width', None)
    goog_data = data.get_google_data('data/goog_data_large.pkl',
                                     start_date='2001-01-01',
                                     end_date='2018-01-01')
    # Features are open - close price and high - low price
    # Target is based on difference in daily close price and is +1 if future
    # close price is higher than the current close price and -1 if the future
    # close price is lower than the current close price.
    goog_data, x, y = finml.create_classification_trading_condition(goog_data)

    # Split into train (80%) and test data sets
    x_train, x_test, y_train, y_test = finml.create_train_split_group(x, y)

    # KNN classification model using K=15
    knn = KNeighborsClassifier(n_neighbors=15)
    y_train_array = y_train.to_numpy().ravel()
    knn.fit(x_train, y_train_array)
    accuracy_train = accuracy_score(y_train, knn.predict(x_train))
    print('Training accuracy:', accuracy_train)
    accuracy_test = accuracy_score(y_test, knn.predict(x_test))
    print('Test accuracy:', accuracy_test)

    # Predict whether the price goes up or down
    goog_data['Predicted_signal'] = knn.predict(x)
    goog_data['GOOG_Returns'] = \
        np.log(goog_data['Close'] / goog_data['Close'].shift(1))
    print(goog_data)

    # Calculate cumulative returns for the test data (train data onwards)
    cum_goog_return = \
        finml.calculate_return(goog_data, split_value=len(x_train),
                               symbol='GOOG')
    cum_strategy_return = \
        finml.calculate_strategy_return(goog_data, split_value=len(x_train))

    finml.plot_chart(cum_goog_return, cum_strategy_return, symbol='GOOG')

    sharpe = finml.sharpe_ratio(cum_strategy_return, cum_goog_return)
    print(f'Sharpe ratio: {sharpe}')

    # Display plots and block
    plt.show()