
Python WebSocket Client - Real-Time Forex
09 March 2021
Learn how to use a Python WebSocket client using real-time forex data. This tutorial will help improve your understanding of live streaming forex data and WebSockets.
Initially, you need to register for a WebSocket Trial Account with TraderMade. Please sign up for a WebSocket key. Try our Java API for WebSocket for free for the first two weeks. Our subscription plans start at a reasonable cost of £100 PCM.
So, let’s begin!
It is essential to set up the coding environment before we start coding. Let’s do this in 3 easy steps as follows:
Arrangement
- Setting up Python
- Installing Pip
- Project Set-up
Step 1. Installing Python
I recommend Python 3.9.1 wherever possible, as this is the latest and most stable version.
For Windows: You can download the windows installer from python.org or alternatively use the python app from the windows app store. For Linux: It's best to update apt-get before the install so run $sudo apt-get update $sudo apt-get install python3.9
Step 2. Installing Pip
For Windows: pip is installed by defualt For Linux: $sudo apt-get install python3-pip
Step 3. Project Set-up
To begin with, you need to create a directory to store your program. Here, I’ve created a dir named /WebSocketTestClient.
Now, we need to install the required library. We need an external library, WebSocket Client, for this example.
For Windows and Linux pip install websocket_client
Now, write some code, shall we?
Generate a new file, testClient.py, within your directory. To do that, you can use your editor or Notepad/VI if you are a beginner.
The program we write should continue running when we establish a live connection. We should use the thread class and the WebSocket run_forever() option.
Importing the libraries
import websocket import time try: import thread except ImportError: import _thread as thread f = open("webSocketTester.log", "a")
Creating the required functions
It is essential to create functions to handle the callbacks from the WebSocket-Client class. Notably, these are standard handlers and would be identical for any WebSocket. Please sign up for a free WebSocket Trial at http://tradermade.com/signup. You can submit your login details to get TraderMade WebSocket on_open.
def on_message(ws, message): print(message) f.write("Live fx rates" + message + " " ) f.flush() def on_error(ws, error): print(error) def on_close(ws): print("### closed ###") def on_open(ws): def run(*args): ws.send("{"userKey":"USER_KEY", "symbol":"GBPUSD"}") thread.start_new_thread(run, ()) I
At this stage, we have the logger and the handler. We need to create the WebSocket through the primary function of the program.
if __name__ == "__main__": ws = websocket.WebSocketApp("wss://marketdata.tradermade.com/feedadv", on_message = on_message, on_error = on_error, on_close = on_close) ws.on_open = on_open ws.run_forever()
Run the program now
For Windows: $python testClient.py For Linux: $sudo python3 testClient.py
Voila! Now, you can obtain Live Forex Rates in the log and the console.
Connected Live fx rates GBPUSD 1.36897 1.36897 1.368970 20210208-10:31:32.156 Live fx rates GBPUSD 1.36897 1.36898 1.368975 20210208-10:31:32.502 Live fx rates GBPUSD 1.36897 1.36897 1.368970 20210208-10:31:32.757 Live fx rates GBPUSD 1.36904 1.36904 1.369040 20210208-10:31:33.057 Live fx rates GBPUSD 1.36904 1.36905 1.369045 20210208-10:31:33.948 Live fx rates GBPUSD 1.36904 1.36904 1.369040 20210208-10:31:34.860 Live fx rates GBPUSD 1.36904 1.36905 1.369045 20210208-10:31:35.156
You can also watch our video on the same topic.
I am giving the complete set of codes below. Also, you can download the code pre-populated with your user key from this link:
https://tradermade.com/docs/streaming-data-api#examples
import websocket import time try: import thread except ImportError: import _thread as thread f = open("webSocketTester.log", "a") def on_message(ws, message): print(message) f.write(message + " " ) f.flush() def on_error(ws, error): print(error) def on_close(ws): print("### closed ###") def on_open(ws): def run(*args): ws.send("{"userKey":"USER_KEY", "symbol":"GBPUSD"}") thread.start_new_thread(run, ()) if __name__ == "__main__": ws = websocket.WebSocketApp("wss://marketdata.tradermade.com/feedadv", on_message = on_message, on_error = on_error, on_close = on_close) ws.on_open = on_open ws.run_forever()