Tableau of Forex Quotes in Real Time on Raspberry Pi and RGB Matrix 32x64

by victoruni in Circuits > Raspberry Pi

3551 Views, 6 Favorites, 0 Comments

Tableau of Forex Quotes in Real Time on Raspberry Pi and RGB Matrix 32x64

16.jpg

Tableau of Forex Quotes in Real Time on Raspberry Pi and RGB Matrix 32x64

FOREX

Forex (Forex) is an international currency market, the commodity on which the currency serves. Here they buy dollars for euros, euros for dollars, and so on. Thus, each currency pair is a separate instrument. Forex works around the clock during the working week.


Let's create a scoreboard to display in real time some Forex quotes, as well as stock quotes and futures contracts.



Components

In the project we use the following components:


1) RGB matrix HUB75 


2) Raspberry pi zero W microcomputer 


3) RGB matrix driver for Raspberry pi 


4) Power supply 5V 2-5A

RGB Matrix HUB75

01.png
04.png
05.png

2048 RGB LEDs are assembled into a panel with a diagonal of 11 inches. The panel's LEDs shine with a brightness of up to 1200 cd/m2, which allows you to see the image on the matrix in detail even in bright lighting. On the reverse side, the control circuit is soldered and screw fasteners are provided.


There is no microcontroller and memory chips on the matrix itself. The LEDs are connected via shift registers and drivers. The LED matrix is powered from 5 V and consumes up to 4 A.


A 16-wire loop is used to connect the matrix


Raspberry Pi Zero W Microcomputer

02.png
06.png

Raspberry Pi Zero W is the second model of a miniature single-board computer from the Raspberry Pi line. Compared to Raspberry Pi Zero Version 1.3, Zero W has not undergone any other changes, except for the addition of the Cypress CYW43438 wireless communication chip, which supports Wi-Fi networks of the 802.11n standard and Bluetooth 4.1 (Bluetooth Classic and LE)


Installation of the operating system and connection to a local network can be carried out without using a monitor and keyboards, in headless mode. Download a fresh Raspbian image from the official website from the page https://www.raspberrypi.org/downloads/raspbian . We record the downloaded image on a microSD card. You can use, for example, the Win32DiskImager program. Before installing a microSD card into the slot of the Raspberry Pi Zero W microcomputer and powering it, we will set up a network connection. After recording the image, you need to open the microSD card and create two files in the root folder: ssh (without extension) and wpa_supplicant.conf. We leave the ssh file empty (it is needed in order to activate SSH access, which is disabled by default in Raspbian). We add the following contents to the wpa_supplicant.conf file by changing the values of the ssid and psk parameters to our own.


ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

update_config=1

country=RU

network={

ssid="my_DLink"

psk="********"

key_mgmt=WPA-PSK

}


We install the microSD card into the slot of the Raspberry Pi Zero W microcomputer and supply power to it. If the name of the Wi-Fi access point and its password are specified correctly, then the Raspberry Pi Zero W should automatically connect to the local network when booting and get a local IP address that can be viewed on the router.


Knowing the IP address, we can connect to the microcomputer via ssh (from Windows with the putty program). Login pi, password raspberry

RGB Matrix Driver for Raspberry Pi

03.png
07.jpg
08.jpg

RGB Matrix driver for Raspberry pi - bought here - https://www.chipdip.ru/product/rgb-led-matrix-driver-cap


Used to connect the matrix to the Raspberry pi

It is installed on top of the Raspberry Pi by the sandwich method.


We connect the signal lines between the driver and the LED matrix through a loop. One pin of the loop leads to the output connector on the controller, and the other to the input data connector on the DATA IN matrix. We connect the power from the driver to the LED matrix with a power wire. One end of the wire is inserted into the PWR OUT terminal block on the controller, and the other into the POWER connector on the matrix. Connect the power to the module via an external connector "DC Barrel jack". We use a 5V power supply. Current consumption is up to 5A, but this is when all LEDs are turned on to the maximum (white). When connecting several LED panels, the current margin increases accordingly by N-times, text information will be displayed on a black background in the project, so you can limit yourself to a 2A power supply.

Installing Software on Raspberry Pi.

10.png
09.png
11.png

We connect to Raspberry pi zero W via ssh.

Download and run the script to configure the software to work with Raspberry LED panels.

wget https://raw.githubusercontent.com/amperka/scriptsRPI/master/amperka-rpi-rgb-matrix.sh

sudo bash amperka-rpi-rgb-matrix.sh

The program will offer a choice of image output:


1 - High Quality - the image is displayed on the matrix without flickering and glare. But then you need to disable the audio driver on Raspberry pi zero W.

2 - Convenience - flickering may occur when displaying images. But the sound will remain on.


(For mode 1, you need to install a jumper on the driver).

Select mode 2 (do not install the jumper).


The installation and compilation process will begin, then after the reboot, the rpi-rgb-led-matrix folder should appear in the root folder.


Examples of working with a matrix in python are in the folder ./home/pi/rpi-rgb-led-matrix/bindings/python/samples.

API Forex

12.png
13.png
14.png

To get quotes, we will use the API of the website of one of the FOREX brokers -

https://www.instaforex.com/

Information on getting quotes can be viewed on the page

https://partners.instaforex.com/ru/quotes_description.php/

When contacting the address

https://quotes.instaforex.com/api/quotes

Tick we get information about current quotes


symbol - symbol of the currency pair

bid - the bid

ask value - the ask

change value - the value showing the change relative to the previous price of the currency pair

digits - the value showing the rounded price of the currency pair to the number of decimal places

lasttime - the value of the time of the last change in the price of the currency pair

change24h - the change relative to the close of the previous day


To get only the necessary currency pairs, you need to pass the q= parameter with a comma-separated list of currency pairs.


Request example:

https://quotes.instaforex.com/api/quotesTick?q=eurusd,gold,%23bitcoin


The list of pairs can be viewed on the page https://www.instaforex.com/ru/trading_symbols, where there are currency pairs, precious metals, stocks, cryptocurrencies, oil futures and so on.


Select the necessary pairs and start writing the program.

Programming.

Create a forex file in the folder /home page/pi/rpi-rgb-led-matrix/bindings/python/samples.py


Connecting the necessary libraries

import json

import requests

import time

from rgbmatrix import RGBMatrix, RGBMatrixOptions

from rgbmatrix import graphics


For the matrix, you need to set the settings


# Configuration for the matrix

options = RGBMatrixOptions()

 

options.rows = 32

options.cols = 64

options.chain_length = 1

options.parallel = 1

options.row_address_type = 0

options.multiplexing = 0

options.pwm_bits = 11

options.brightness = 100

options.pwm_lsb_nanoseconds = 130

options.led_rgb_sequence = "RGB"

options.pixel_mapper_config = ""


To store the received data, we will create a dictionary. Dictionaries in python are unordered collections of arbitrary objects with key access.


arr={'symbolurl':{0:'Forex',1:'EURUSD',2:'%23AAPL',3:'GOLD',4:'%23FB'},

   'symbol':{0:'Forex',1:' EUR/USD',2:'Apple inc',3:' GOLD',4:'Facebook'},

   'ask':{0:' ',1:'0',2:'0',3:'0',4:'0'},

   'bid':{0:' ',1:'0',2:'0',3:'0',4:'0'},

   'change':{0:0, 1:0, 2:0 ,3:0 ,4:0},

   'lasttime':{0:' ',1:'0',2:'0',3:'0',4:'0'}

   }


Every 10 seconds we form an address for receiving data from one of the pairs and save the received data in the dictionary. The data from the dictionary is displayed on the screen and in the terminal.

File Сontents Forex.py

#!/usr/bin/env python
 
import json
import requests
import time
from rgbmatrix import RGBMatrix, RGBMatrixOptions
from rgbmatrix import graphics
 
# Configuration for the matrix
options = RGBMatrixOptions()
 
#adafruit-hat
#options.hardware_mapping = 'regular'
options.rows = 32
options.cols = 64
options.chain_length = 1
options.parallel = 1
options.row_address_type = 0
options.multiplexing = 0
options.pwm_bits = 11
options.brightness = 100
options.pwm_lsb_nanoseconds = 130
options.led_rgb_sequence = "RGB"
options.pixel_mapper_config = ""
 
 
matrix = RGBMatrix(options = options)
 
#
link="https://quotes.instaforex.com/api/quotesTick?q=";
arr={'symbolurl':{0:'Forex',1:'EURUSD',2:'%23AAPL',3:'GOLD',4:'%23FB'},
     'symbol':{0:'Forex',1:' EUR/USD',2:'Apple inc',3:'  GOLD',4:'Facebook'},
     'ask':{0:' ',1:'0',2:'0',3:'0',4:'0'},
     'bid':{0:' ',1:'0',2:'0',3:'0',4:'0'},
     'change':{0:0, 1:0, 2:0 ,3:0 ,4:0},
     'lasttime':{0:' ',1:'0',2:'0',3:'0',4:'0'}
      }
 
pos=0
offset=0;
 
matrix.Clear()
canvas=matrix
font1 = graphics.Font()
font1.LoadFont("../../../fonts/7x13.bdf")
font2 = graphics.Font()
font2.LoadFont("../../../fonts/5x7.bdf")
font3 = graphics.Font()
font3.LoadFont("../../../fonts/4x6.bdf")
textColor1 = graphics.Color(0, 255, 0)
textColor2 = graphics.Color(0, 0, 255)
textColor3 = graphics.Color(0, 0, 255)
textColor4 = graphics.Color(0, 255, 0)
textColor5 = graphics.Color(255, 0, 0)
 
s = graphics.DrawText(canvas, font2, 0, 15, textColor1, "instaforex.com")
time.sleep(2)   #
 
ipos=arr.keys()
ipos=sorted(ipos)
for i in range(len(ipos)):
   print(ipos[i],"=",arr[ipos[i]][0])
   print(ipos[i],"=",arr[ipos[i]][1])
   print(ipos[i],"=",arr[ipos[i]][2])
   print(ipos[i],"=",arr[ipos[i]][3])
   print(ipos[i],"=",arr[ipos[i]][4])
 
while True:
   #
   matrix.Clear()
   graphics.DrawText(canvas, font1, 0, 10, textColor2, arr['symbol'][pos])
   graphics.DrawText(canvas, font2, 5, 20, textColor2, str(arr['ask'][pos]))
   if arr['change'][pos]>0:
      graphics.DrawText(canvas, font2, 10, 30, textColor4, "+"+str(arr['change'][pos]))
   elif arr['change'][pos]<0:
      graphics.DrawText(canvas, font2, 10, 30, textColor5, str(arr['change'][pos]))
   else :
      graphics.DrawText(canvas, font2, 10, 30, textColor3, "")
   #
   pos=max(1,(pos+1)%5)
   print("pos=",pos)
 
   responce=requests.get("https://quotes.instaforex.com/api/quotesTick?q="+arr['symbolurl'][pos])
   data1=json.loads(responce.text)
   print("data1=",data1)
   i=0
   for rec in data1:
      print(pos)
      arr['ask'][pos]=rec['ask']
      arr['bid'][pos]=rec['bid']
      arr['change'][pos]=rec['change']
      #print("pos=",pos,"  ask=",arr['ask'][pos],"  bid=",rec['bid'], "  change=",rec['change'])
      i=i+1
 
   for rec in data1:
      #print(rec)
      ipos=rec.keys()
      ipos=sorted(ipos)
      for i in range(len(ipos)):
         print(ipos[i],"=",rec[ipos[i]])
      print("----------------")
   #
   time.sleep(10)

Run

15.png
16.jpg
17.jpg
18.jpg
19.jpg

Starting the file

sudo python3 /home/pi/rpi-rgb-led-matrix/bindings/python/samples/forex.py