0% ont trouvé ce document utile (0 vote)
160 vues8 pages

Guide de l'API Python XTB

Ce document décrit comment utiliser l'API XTB pour récupérer et analyser des données de bougies historiques, détecter des extrêmes, calculer des niveaux de retracement de Fibonacci et créer des graphiques de bougies annotés.

Transféré par

nicolas
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
160 vues8 pages

Guide de l'API Python XTB

Ce document décrit comment utiliser l'API XTB pour récupérer et analyser des données de bougies historiques, détecter des extrêmes, calculer des niveaux de retracement de Fibonacci et créer des graphiques de bougies annotés.

Transféré par

nicolas
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

XTB API

April 14, 2024

1 XTB Python API


[1]: from API import XTB
import pandas as pd
import numpy as np
import [Link] as plt
import mplfinance as mpf
from [Link] import find_peaks

1.0.1 Récupération et filtrage de la liste des symbols


[ ]: API = XTB("2597922", "Jx5*7+q+qNMzY9$")
resp = API.get_AllSymbols()['returnData']

# conversion en dataframe pandas


resp = [Link](resp)
pd.set_option('display.max_rows', len(resp)) # afficher toutes les lignes

# afficher la liste de tous les symboles


#print([Link])

# afficher la liste des indices


#print([Link]("categoryName == 'IND'"))

# afficher la liste des paires forex


#print([Link]("categoryName == 'FX'"))

# afficher la liste des ETF


#print([Link]("categoryName == 'ETF'"))

# afficher la liste des cryptos


#print([Link]("categoryName == 'CRT'"))

# afficher la liste des actions


#print([Link]("categoryName == 'STC'"))

# afficher la liste des matières premières

1
#print([Link]("categoryName == 'CMD'"))

1.0.2 Obtenir les données des bougies d’un symbole


[3]: from [Link] import find_peaks

# connexion à XTB
API = XTB(2597922, "Jx5*7+q+qNMzY9$")

# obtenir la liste des bougies de l'historique d'un symbol (Weekly W1 ou␣


↪Monthly MN1 seulement)

symbol = "COFFEE"
#resp = API.get_Candles("M1", symbol, days=330000)

resp = API.get_Candles("M30", symbol, qty_candles=2000)

# calcul du décallage de la virgule par rapport au nombre de digits


digits = resp[0]['digits']
decalage = 10 ** digits

# conversion en dataframe pandas


resp = [Link](resp)
# suppression des colonnes en trop
resp = [Link](["digits", "qty_candles"], axis=1)
# suppression des doublons
resp = resp.drop_duplicates(keep='first')

# calcul des open high close low par rapport au open + décallage de la virgule
resp['open'] = resp['open'] / decalage
resp['close'] = resp['open'] + (resp['close'] / decalage)
resp['high'] = resp['open'] + (resp['high'] / decalage)
resp['low'] = resp['open'] + (resp['low'] / decalage)

# détermination de l'interval de prix mini et maxi de la série


proportion_peaks_prominance = 0.15
# détection des highs et des lows selon la proéminence
min_close_price = [Link]()
max_close_price = [Link]()
price_interval = max_close_price - min_close_price
peaks_prominance = price_interval * proportion_peaks_prominance

highs = find_peaks([Link], prominence=peaks_prominance)[0]


highs_last_peak = find_peaks([Link])[0][-1]
highs = [Link](highs , highs_last_peak)
lows = find_peaks(-[Link], prominence=peaks_prominance)[0]

2
# Calculer les niveaux de retracement de Fibonacci
levels = [0, 0.141, 0.21, 0.3141, 0.4141, 0.5151, 0.5859, 0.6859, 0.83, 1]
fibonacci_levels = {}
for level in levels:
fib_level = round(max_close_price + level * (min_close_price -␣
↪max_close_price), 5)

fibonacci_levels[level] = fib_level

print(fibonacci_levels[0.3141])

# création d'un graphique


[Link](figsize=(15, 10))
[Link]([Link], resp['close'], label='Values')
# affichage des highs et des low détectés précédemments
[Link]([Link][highs], resp['close'][highs], 'ro', markersize=3)
[Link]([Link][lows], resp['close'][lows], 'ro', markersize=3)
[Link](symbol)
[Link]('Date')
[Link]('Prix')
# Tracer les lignes de retracement de Fibonacci
for level in fibonacci_levels:
[Link](fibonacci_levels[level], linestyle='--', color='gray', alpha=0.
↪7)

[Link](10.2, fibonacci_levels[level], f'Niveau : {level}␣


↪({fibonacci_levels[level]})', va='baseline', ha='left', color='black',␣

↪fontsize=11)

[Link]()

216.61771

3
- mettre en bougies - calculer par rapports aux niveaux extrêmes - ajouter tous les fibos

1.0.3 Chargement et traitement des données


[5]: # connexion à XTB
API = XTB("2597922", "Jx5*7+q+qNMzY9$")

# obtenir la liste des bougies de l'historique d'un symbol (Weekly W1 ou␣


↪Monthly MN1 seulement)

symbol = "FRA40"
timeframe= "M30"
source="XTB"
#resp = API.get_Candles("M1", symbol, days=330000)

resp = API.get_Candles(timeframe, symbol, qty_candles=200)

# calcul du décallage de la virgule par rapport au nombre de digits


digits = resp[0]['digits']
decalage = 10 ** digits

# conversion en dataframe pandas


resp = [Link](resp)
# suppression des colonnes en trop
resp = [Link](["digits", "qty_candles"], axis=1)

4
resp = [Link](0, axis=0)
# suppression des doublons
resp = resp.drop_duplicates(keep='first')

# on fait savoir à pandas que la colonne datetime est de type datetime


resp['datetime'] = pd.to_datetime(resp['datetime'], format='%b %d, %Y, %I:%M:
↪%S %p')

resp.sort_values(by=['datetime'], inplace=True)
resp.set_index('datetime', inplace=True)

# calcul des open high close low par rapport au open + décallage de la virgule
resp['open'] = resp['open'] / decalage
resp['close'] = resp['open'] + (resp['close'] / decalage)
resp['high'] = resp['open'] + (resp['high'] / decalage)
resp['low'] = resp['open'] + (resp['low'] / decalage)

1.0.4 Détection des extrêmes de la série de données


[6]: # détermination de l'interval de prix mini et maxi de la série
proportion_peaks_prominance = 0.15
# détection des highs et des lows selon la proéminence
min_close_price = [Link]()
max_close_price = [Link]()
price_interval = max_close_price - min_close_price
peaks_prominance = price_interval * proportion_peaks_prominance

highs = find_peaks([Link], prominence=peaks_prominance)[0]


lows = find_peaks(-[Link], prominence=peaks_prominance)[0]

1.0.5 Calculs des niveaux de retracement


[7]: # Calculer les niveaux de retracement
levels = [0, 0.141, 0.21, 0.3141, 0.4141, 0.5151, 0.5859, 0.6859, 0.83, 1]
fibonacci_levels = {}
for level in levels:
fib_level = round(max_close_price + level * (min_close_price -␣
↪max_close_price), 5)

fibonacci_levels[level] = fib_level

1.0.6 Création et affichage d’un graphique


[8]: # configuration du graphique
config_graph = dict(
type='candle',
figratio=(11,8),
figscale=2,

5
returnfig=True,
ylabel="Prix",
xlabel="Date",
)

# définition du thème pour le graphique


nmicinvest_theme = {
"base_mpl_style": "default",
"title_fontcolor" : "white",
"tick_fontweight" : "bold",
"ylabel_weight": 'bold',
"xlabel_weight": 'bold',
"marketcolors": {
"candle": {"up": "#ffffff", "down": "#ffffff"},
"edge": {"up": "#ffffff", "down": "#ffffff"},
"wick": {"up": "#ffffff", "down": "#ffffff"},
"ohlc": {"up": "white", "down": "white"},
"volume": {"up": "#ffffff", "down": "#ffffff"},
"vcedge": {"up": "white", "down": "white"},
"vcdopcod": True,
"alpha": 1,
},
"mavcolors": "#ffffff",
"facecolor": "#000000",
"gridcolor": "#515151",
"gridstyle": ":",
"y_on_right": False,
"rc": {
"[Link]": 'white',
"[Link]": 'white',
"[Link]": 'white',
"[Link]": 'white',
"[Link]": True,
"[Link]": "y",
"[Link]": "#000000",
"[Link]": "red",
"[Link]": "#000000",
"[Link]": "x-large",
"[Link]": "semibold",
}
}

# création du graphique
fig, ax = [Link](resp, **config_graph, style=nmicinvest_theme,␣
↪datetime_format='%d-%m-%Y %H:%M:%S')

6
# Ajouter un titre à la figure
[Link]('\n' + symbol + ' ' + timeframe, color='white', fontsize=16,␣
↪fontweight='bold')

# Ajouter la source des données en bas à droite


datasource_text = "source des données : " + source # Texte du datasource
datasource_fontsize = 7 # Taille de la police du datasource
datasource_color = 'white' # Couleur du datasource

# Coordonnées pour placer le datasource en bas à droite


datasource_x = 0.87 # Position X (0.0 à 1.0)
datasource_y = 0.21 # Position Y (0.0 à 1.0)

# Ajout du datasource sur la figure


[Link](datasource_x, datasource_y, datasource_text,␣
↪fontsize=datasource_fontsize,

color=datasource_color, ha='right', va='bottom', alpha=0.8)

# affichage du graphique
[Link]()

7
[ ]:

Vous aimerez peut-être aussi