• Sun. Jul 7th, 2024

Bitcoin Price Prediction: Machine Learning in Python

In this blog post, we delve into cryptocurrency price prediction using CoinGecko API and machine learning – the ability to learn patterns from data and make informed predictions. 

We’ll be leveraging CoinGecko API to fetch historical and current crypto market data, which will serve as the foundation for our machine learning model. Trained on this data, our model will then predict future cryptocurrency prices, providing valuable insights for investment strategies and market trend analysis.

Disclaimer: While this guide covers machine learning techniques for crypto price prediction, any use or reliance on our content is solely at your own risk and discretion. Do conduct your own research, review, analyze and verify our content before relying on them. Trading is a highly risky activity that can lead to major losses, please therefore consult your financial advisor before making any decisions.

Bitcoin Price Prediction using Machine Learning in Python Guide - CoinGecko API

Level of Functionality

We’ll first examine the key functionalities of our Python program:

  • Fetching Data: The program fetches real-time and historical data from the CoinGecko API. This includes the current market data, historical data, and OHLC (Open, High, Low, Close) data for a specific coin.
  • Data Processing: The program processes the fetched data to prepare it for the machine learning model. This includes selecting relevant features, scaling the data, and formatting it into the appropriate shape.
  • Machine Learning Model: The program uses a Linear Regression model from the Scikit-learn library to learn from the processed data.
  • Price Prediction: The program uses the trained model to predict future prices of the selected cryptocurrency.
  • Displaying Predictions: The program displays the predicted prices to the user in a simple and intuitive web interface. The user can select a coin and the number of days for which they want to predict prices, and the program will display the predictions in a table.
  • User Interaction: The program provides an interactive form for the user to input their preferences. It also handles invalid inputs gracefully by displaying an error message.
  • Security Measures: The program ensures the security of sensitive data such as API keys and private keys. It uses secure connections and encrypts sensitive data.

Which machine learning model is best for crypto price prediction?

Among the various machine learning models for crypto price prediction, the Linear Regression model is most optimal for predicting crypto prices because it is simple to understand and implement, and works well with linearly separable data. This model assumes a linear relationship between the input variables (independent variables) and a single output variable (dependent variable).

When this assumption holds true, Linear Regression can provide a good baseline model for crypto price prediction. However, it’s important to note that crypto prices are influenced by a multitude of factors and may not always exhibit a linear relationship. Therefore, more complex models may sometimes offer better predictive performance. Always remember to validate the assumptions of your model and test its performance using appropriate metrics.


Prerequisites

Before we start, ensure you have the following:

  • Python 3.7 or higher installed on your system. Python is a powerful, easy-to-learn programming language that we will use to build our bot.
  • A basic understanding of Python programming. While this guide will be detailed, having a basic understanding of Python syntax and programming concepts will be beneficial.
  • A text editor: You will need a text editor or an Integrated Development Environment (IDE) to write your code. Some popular options include Visual Studio Code, Sublime Text, and Atom.
  • CoinGecko API (Demo): We will be using CoinGecko API to fetch the market chart data for cryptocurrencies. The CoinGecko API has a free Demo plan accessible to all users with a 30 calls/min rate limit and a monthly cap of 10,000 calls. This guide shows you how to generate your Demo API key.

Do note that the API key used in this guide is a placeholder and not a real API key. Please replace it with your own CoinGecko API key for the code to work.

The Python Program

The program is a Flask web application. It starts by importing necessary libraries and initializing a Flask app:

In this section, we’ll break down the Python code for our Cryptocurrency prediction to understand each part and its role in the overall functionality of the predictor:

  1. Importing Necessary Libraries and Modules: The program commences by importing the necessary libraries and modules. These include Flask, a micro web framework written in Python that provides tools, technologies, and possibilities for web application development. It also imports requests, a Python module used for making various types of HTTP requests like GET and POST.

  2. Setting Up Flask Application and API Key: The Flask application is set up, creating an instance of the Flask class which is our WSGI application. The API key for accessing the CoinGecko API, a comprehensive cryptocurrency API that provides access to a wide range of data, is defined.

  3. Defining the Main Route: The main route (/) is defined, which supports both GET and POST methods. When a GET request is made, it fetches the list of available coins from the CoinGecko API. This is done by making a GET request to the CoinGecko API endpoint, which returns a list of all available cryptocurrencies.

  4. Handling POST Requests: If a POST request is made, it gets the coin_id and days from the form data. If the coin_id is valid, it calls the get_market_chart function with coin_id and days as parameters. This function fetches the market chart data for the given coin over the specified number of days.

  5. Defining the get_market_chart Function: This function does several things, namely, it calculates the start and end timestamps based on the number of days, fetches the OHLC (Open, High, Low, Close) data for the given coin_id and days, and fetches the historical data for a specific date and the current market data from the CoinGecko API. Next, it prepares the feature matrix X and target vector y for the linear regression model, and scales the data using MinMaxScaler, a feature scaling technique that transforms features by scaling each feature to a given range. Thereafter, it trains the LinearRegression model with X and y and makes predictions using the trained model. It creates a list of dates for the predictions and combines the dates and predictions into a dictionary, and finally, it returns the predictions.

  6. Running the Flask Application: Finally, if the script is run directly, it starts the Flask development server. This server is a built-in, lightweight WSGI web server and provides a quick way to run the application. It is however not recommended for production environments.

HTML Structure of the Crypto Price Predictons

This application allows users to select a cryptocurrency and a number of days, and then predicts the price of the selected cryptocurrency for the specified number of days. The predictions are displayed in a table format.

If there’s an error, such as an invalid coin ID, the application displays an error message. The application uses Jinja templating for dynamic content rendering, which allows it to display different content based on the user’s input and the results of the price prediction.

Installing Required Python Libraries

Before running the Python program, it’s important to ensure that all the necessary Python libraries are installed. Here’s a brief explanation of the libraries used in the program and how to install them:

  1. Flask: Flask is a lightweight web application framework. It’s used to create the web interface for the program. Install it with pip: pip install flask
  2. requests: Requests is a library for making HTTP requests. It’s used to fetch data from the CoinGecko API. Install it with pip: pip install requests
  3. json: The json module is used to parse the JSON data returned by the CoinGecko API. It’s included in the standard Python library, so you don’t need to install it separately.
  4. NumPy: NumPy is a library for numerical computing. It’s used to manipulate the data fetched from the API. Install it with pip: pip install numpy
  5. scikit-learn: Scikit-learn is a library for machine learning. It’s used to create the linear regression model for price prediction. Install it with pip: pip install scikit-learn
  6. time: The time module is used to work with timestamps. It’s included in the standard Python library, so you don’t need to install it separately.
  7. datetime: The datetime module is used to work with dates and times. It’s included in the standard Python library, so you don’t need to install it separately.

To install all these libraries at once, you can use the following command:

pip install flask requests numpy scikit-learn

Remember to run these commands in your virtual environment if you’re using one. This will keep your global Python environment clean and manage dependencies for this project separately. If you’re not using a virtual environment, you might need to use pip3 instead of pip and add sudo at the beginning of the commands to install the libraries globally.

Testing the Cryptocurrency Prediction

To test the predictor, follow these steps:

  1. Run the Python script in your terminal using python <your_file>.py, in this case python predictor.py

  2. Open the Web Application: Once the Flask server is running, open a web browser and navigate to the local server’s address (usually http://localhost:5000).

  3. Select a Cryptocurrency: You’ll see a form with a dropdown list of cryptocurrencies. Select the cryptocurrency you’re interested in.

  4. Enter the Number of Days: In the ‘Days’ input field, enter the number of days for which you want to predict prices.

  5. Submit the Form: Click the ‘Predict’ button to submit the form. The program will now fetch the relevant data, train the machine learning model, and make predictions.

  6. View the Predictions: The predicted prices will be displayed in a table on the webpage. Each row in the table represents one day, with the date and the predicted price.

  7. Test Different Cryptocurrencies and Timeframes: Try selecting different cryptocurrencies and entering different numbers of days. Check whether the program returns reasonable predictions and handles edge cases well (e.g., a very large number of days).

Remember, the accuracy of the predictions depends on many factors, including the volatility of the cryptocurrency market and the amount of historical data available. Always use such predictions as just one of many tools in your cryptocurrency trading toolkit. 

💡 Pro-Tip: This is a basic implementation and does not include error handling or robustness that production-level crypto predictions might require. Always ensure to handle exceptions and edge cases when writing your own program. Also, be aware of the API rate limits when making requests to CoinGecko’s Demo API – alternatively, consider subscribing for an Analyst API plan.

Advanced Functionalities and Useful Endpoints

While the guide above covers the basic development of a cryptocurrency price prediction program, CoinGecko API offers a wealth of endpoints that can be used to add more advanced functionalities. Here are some possibilities:

  1. Historical Snapshots: The ‘/coins/{id}/history’ endpoint provides historical data for a specific date. This could be used to add a feature that allows users to view ‘snapshots’ of the market at different points in the past.
  2. Anomaly Detection: By using the ‘/coins/markets’ endpoint to fetch real-time market data, you could implement an anomaly detection feature, which alerts users to sudden significant changes in a coin’s price or trading volume.
  3. Coin Information: The ‘/coins/{id}’ endpoint returns detailed information about a specific coin, from tickers, market data, community data, metadata and more. This could provide users with information on development status, community strength, public interest and more.
  4. Trending Coins: The ‘/search/trending’ endpoint provides information about trending coins in the last 24 hours. This data point can keep users informed about which coins are currently popular in the market.
💡Pro-tip: Developing advanced features requires familiarizing yourself with the API documentation and understanding which endpoint you can query what kind of data from. Always prioritize the accuracy of your prediction data and adhere to best practices in the crypto industry.
 
Why should you subscribe to a CoinGecko API plan
 

Conclusion

In conclusion, this Python program demonstrates the power of machine learning and APIs in predicting cryptocurrency prices. By leveraging the CoinGecko API, the program fetches real-time and historical market data, which is then used to train a linear regression model for Bitcoin price predictions. The program also provides an intuitive web interface for users to interact with, making it a practical tool for anyone interested in cryptocurrencies.

Moreover, the CoinGecko API offers a wealth of endpoints that can be used to add more advanced functionalities to the program, such as sentiment analysis, anomaly detection, historical snapshots, coin information, and trending coins. These functionalities can provide users with deeper insights and a more comprehensive understanding of the cryptocurrency market.

Testing the program is a crucial step to ensure its accuracy and reliability. By following the step-by-step guide provided, users can test different cryptocurrencies and timeframes, and check the program’s performance under various scenarios.

Remember, while such a program can provide valuable predictions and insights, it should be used as just one of many tools in your cryptocurrency trading toolkit. Always consider multiple factors, sources of information and do your own research when making trading decisions. Happy coding and trading!


If you found this tutorial useful, check out other similar API Guides.