Bien démarrer
Exécutez des backtests par programmation avec l'API Open Backtest.
L'API Open Backtest vous permet de récupérer des bougies de marché, de créer
des sessions de backtest, d'envoyer des trades et de lire les statistiques
calculées. Tout ce qui est visible dans l'application peut ainsi être piloté
par un script. Les sessions créées par l'API apparaissent dans votre espace de
travail comme les autres, avec les étiquettes api/sdk.
Authentification
L'API fait partie de l'offre Pro. Créez une clé dans
Paramètres → API dans l'application. La clé complète (obk_…) n'est
affichée qu'une seule fois. Transmettez-la avec chaque requête dans l'en-tête
x-api-key :
curl https://api.openbacktest.fefe-du-973.fr/api/v1/me \
-H "x-api-key: obk_votre_cle_ici"URL de base de ce déploiement : https://api.openbacktest.fefe-du-973.fr/api/v1. Elle est résolue depuis
l'environnement afin que les documentations locale et de production restent
cohérentes.
Erreurs et limites de débit
Chaque réponse qui n'est pas de type 2xx utilise la même enveloppe :
{ "error": { "code": "NOT_FOUND", "message": "Session not found" } }Codes : UNAUTHORIZED, PRO_REQUIRED, RATE_LIMITED, NOT_FOUND,
UNKNOWN_SYMBOL, SESSION_NOT_ACTIVE, VALIDATION_ERROR,
MARKET_DATA_UNAVAILABLE, INTERNAL.
Les clés sont limitées à 1 000 requêtes par heure. Au-delà, l'API répond
avec le statut HTTP 429 et un en-tête Retry-After. Les requêtes de bougies
utilisent aussi un budget par utilisateur, partagé avec l'application : chaque
compte dispose d'un seul quota auprès de la source de données.
Une exécution complète avec curl
BASE=https://api.openbacktest.fefe-du-973.fr/api/v1
KEY=obk_votre_cle_ici
# 1. Vérifier l'identité associée à la clé
curl -s $BASE/me -H "x-api-key: $KEY"
# 2. Créer un projet
PROJECT=$(curl -s -X POST $BASE/projects -H "x-api-key: $KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Ma stratégie","symbol":"BTCUSDT","timeframe":"1h"}')
PROJECT_ID=$(echo "$PROJECT" | jq -r .project.id)
# 3. Ouvrir une session (frais en pourcentage, pour chaque côté)
SESSION_PAYLOAD=$(jq -nc \
--arg projectId "$PROJECT_ID" \
--arg name "Exécution 1" \
'{projectId:$projectId,name:$name,initialBalance:10000,
feesConfig:{entryFee:0.1,exitFee:0.1,type:"percent"}}')
SESSION=$(curl -s -X POST $BASE/sessions -H "x-api-key: $KEY" \
-H "Content-Type: application/json" \
-d "$SESSION_PAYLOAD")
SID=$(echo $SESSION | jq -r .session.id)
# 4. Envoyer des trades clôturés (par lots de 500 au maximum)
curl -s -X POST $BASE/sessions/$SID/trades -H "x-api-key: $KEY" \
-H "Content-Type: application/json" \
-d '{"trades":[{"side":"long","qty":0.1,"entryPrice":60000,
"entryTime":1751000000000,"exitPrice":61000,"exitTime":1751003600000}]}'
# 5. Terminer la session et lire les statistiques
curl -s -X POST $BASE/sessions/$SID/finish -H "x-api-key: $KEY" | jq .statsToutes les dates sont des timestamps Unix en millisecondes. Les trades sont envoyés une fois clôturés (entrée et sortie dans le même enregistrement). Les métriques, notamment les frais, le P&L et le multiple R, sont calculées côté serveur puis figées lors de l'enregistrement.
Vous préférez Python ? Le SDK encapsule tout ce cycle de vie en quelques lignes et expose les bougies sous forme de DataFrames pandas.