Statistics & Analytics
Endpoints pour accéder aux statistiques et analyses de trading.
Authentification
Toutes les routes supportent deux méthodes d'authentification :
| Méthode | Header | Format |
|---|---|---|
| JWT (session) | Authorization | Bearer <jwt_token> |
| API Key | X-API-Key | ik_live_xxx ou ik_test_xxx |
GET /stats/trades
Récupère les statistiques globales de trading.
Scope requis
stats:readParamètres de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
profileId | string | ❌ | Filtrer par profil de trading |
Exemple de requête
javascript
const response = await fetch('https://api.insightrades.com/stats/trades?profileId=abc123', {
headers: {
'X-API-Key': 'ik_live_xxx'
}
});Réponse (200 OK)
json
{
"totalTrades": 150,
"openTrades": 12,
"closedTrades": 138,
"winningTrades": 90,
"losingTrades": 48,
"totalPnL": 15420.50,
"winRate": 65.22,
"avgWin": 250.30,
"avgLoss": 180.40,
"profitFactor": 2.15,
"bestTrade": 1250.00,
"worstTrade": -850.00,
"grossProfit": 22530.00,
"grossLoss": 7109.50,
"avgRiskReward": 2.3,
"expectancy": 102.80
}Champs de réponse
| Champ | Type | Description |
|---|---|---|
totalTrades | number | Nombre total de trades |
openTrades | number | Trades actuellement ouverts |
closedTrades | number | Trades clôturés |
winningTrades | number | Nombre de trades gagnants |
losingTrades | number | Nombre de trades perdants |
totalPnL | number | Profit/perte total |
winRate | number | Taux de réussite (%) |
avgWin | number | Gain moyen par trade gagnant |
avgLoss | number | Perte moyenne par trade perdant |
profitFactor | number | Ratio gains/pertes |
bestTrade | number | Meilleur trade (P&L) |
worstTrade | number | Pire trade (P&L) |
grossProfit | number | Total des gains |
grossLoss | number | Total des pertes |
avgRiskReward | number | Ratio risque/récompense moyen |
expectancy | number | Espérance de gain par trade |
Erreurs possibles
| Code | Description |
|---|---|
| 401 | API Key invalide ou expirée |
| 403 | Scope stats:read manquant |
| 500 | Erreur serveur interne |
GET /stats/symbols
Récupère les statistiques par symbole/instrument.
Scope requis
stats:readParamètres de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
profileId | string | ❌ | Filtrer par profil de trading |
Exemple de requête
javascript
const response = await fetch('https://api.insightrades.com/stats/symbols?profileId=abc123', {
headers: {
'X-API-Key': 'ik_live_xxx'
}
});Réponse (200 OK)
json
[
{
"symbol": "EUR/USD",
"totalTrades": 45,
"winningTrades": 28,
"losingTrades": 17,
"winRate": 62.22,
"totalPnL": 2450.75,
"avgPnL": 54.46,
"bestTrade": 350.00,
"worstTrade": -180.00
},
{
"symbol": "GBP/USD",
"totalTrades": 32,
"winningTrades": 22,
"losingTrades": 10,
"winRate": 68.75,
"totalPnL": 1890.50,
"avgPnL": 59.08,
"bestTrade": 420.00,
"worstTrade": -150.00
},
{
"symbol": "XAU/USD",
"totalTrades": 28,
"winningTrades": 18,
"losingTrades": 10,
"winRate": 64.29,
"totalPnL": 3200.00,
"avgPnL": 114.29,
"bestTrade": 850.00,
"worstTrade": -320.00
}
]Champs de réponse
| Champ | Type | Description |
|---|---|---|
symbol | string | Symbole de l'instrument |
totalTrades | number | Nombre total de trades sur ce symbole |
winningTrades | number | Nombre de trades gagnants |
losingTrades | number | Nombre de trades perdants |
winRate | number | Taux de réussite (%) |
totalPnL | number | P&L total sur ce symbole |
avgPnL | number | P&L moyen par trade |
bestTrade | number | Meilleur trade |
worstTrade | number | Pire trade |
Erreurs possibles
| Code | Description |
|---|---|
| 401 | API Key invalide ou expirée |
| 403 | Scope stats:read manquant |
| 500 | Erreur serveur interne |
GET /stats/trading-analytics
Récupère des analyses avancées de trading.
Scope requis
analytics:readParamètres de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
profileId | string | ✅ | ID du profil à analyser |
startDate | string | ❌ | Date de début (ISO 8601) |
endDate | string | ❌ | Date de fin (ISO 8601) |
strategyId | string | ❌ | Filtrer par stratégie |
lang | string | ❌ | Langue: en, fr, es, pt, de, it |
Exemple de requête
javascript
const response = await fetch('https://api.insightrades.com/stats/trading-analytics?profileId=abc123&startDate=2024-01-01&endDate=2024-01-31&lang=fr', {
headers: {
'X-API-Key': 'ik_live_xxx'
}
});Réponse (200 OK)
json
{
"period": {
"start": "2024-01-01T00:00:00Z",
"end": "2024-01-31T23:59:59Z"
},
"overview": {
"totalTrades": 45,
"netPnL": 2850.50,
"winRate": 64.44,
"profitFactor": 2.35
},
"performanceByInstrument": [
{
"instrument": "EUR/USD",
"totalTrades": 20,
"winningTrades": 14,
"losingTrades": 6,
"pnlTotal": 1250.00,
"pnlAverage": 62.50,
"winRate": 70.00
},
{
"instrument": "GBP/USD",
"totalTrades": 15,
"winningTrades": 9,
"losingTrades": 6,
"pnlTotal": 890.50,
"pnlAverage": 59.37,
"winRate": 60.00
}
],
"performanceBySession": {
"London": { "trades": 25, "pnl": 1500.00, "winRate": 68.00 },
"NewYork": { "trades": 15, "pnl": 950.50, "winRate": 60.00 },
"Tokyo": { "trades": 5, "pnl": 400.00, "winRate": 60.00 }
},
"performanceByDay": {
"Monday": { "trades": 10, "pnl": 450.00, "winRate": 70.00 },
"Tuesday": { "trades": 12, "pnl": 680.00, "winRate": 66.67 },
"Wednesday": { "trades": 8, "pnl": 520.00, "winRate": 62.50 },
"Thursday": { "trades": 9, "pnl": 700.50, "winRate": 66.67 },
"Friday": { "trades": 6, "pnl": 500.00, "winRate": 50.00 }
},
"drawdownAnalysis": {
"maxDrawdown": -850.00,
"maxDrawdownPercent": 5.2,
"currentDrawdown": -120.00,
"recoveryFactor": 3.35
},
"consistencyScore": 78.5
}Erreurs possibles
| Code | Description |
|---|---|
| 400 | profileId requis |
| 401 | API Key invalide ou expirée |
| 403 | Scope analytics:read manquant |
| 404 | Profil non trouvé |
| 500 | Erreur serveur interne |
GET /stats/insights
Récupère des insights et recommandations basés sur l'IA.
Scope requis
analytics:readParamètres de requête
| Paramètre | Type | Requis | Description |
|---|---|---|---|
profileId | string | ✅ | ID du profil à analyser |
startDate | string | ❌ | Date de début (ISO 8601) |
endDate | string | ❌ | Date de fin (ISO 8601) |
strategyId | string | ❌ | Filtrer par stratégie |
lang | string | ❌ | Langue: en, fr, es, pt, de, it |
Exemple de requête
javascript
const response = await fetch('https://api.insightrades.com/stats/insights?profileId=abc123&lang=fr', {
headers: {
'X-API-Key': 'ik_live_xxx'
}
});Réponse (200 OK)
json
{
"generatedAt": "2024-01-20T15:30:00Z",
"insights": [
{
"type": "strength",
"category": "session",
"title": "Performance exceptionnelle en session de Londres",
"description": "Votre taux de réussite est de 68% pendant la session de Londres, supérieur à votre moyenne globale de 64%.",
"impact": "high",
"recommendation": "Concentrez davantage vos trades sur la session de Londres pour optimiser vos résultats."
},
{
"type": "weakness",
"category": "risk",
"title": "Ratio risque/récompense à améliorer",
"description": "Votre ratio R:R moyen est de 1.2, ce qui est inférieur à la recommandation de 2:1 minimum.",
"impact": "medium",
"recommendation": "Visez des take profits plus ambitieux ou réduisez vos stop loss pour améliorer ce ratio."
},
{
"type": "pattern",
"category": "behavior",
"title": "Tendance à overtrade le vendredi",
"description": "Vos performances baissent significativement le vendredi avec un winrate de 50% contre 66% les autres jours.",
"impact": "medium",
"recommendation": "Envisagez de réduire votre activité le vendredi ou d'être plus sélectif."
}
],
"summary": {
"strengths": 3,
"weaknesses": 2,
"patterns": 4,
"overallScore": 72
}
}Types d'insights
| Type | Description |
|---|---|
strength | Point fort identifié |
weakness | Point faible à améliorer |
pattern | Comportement ou tendance détecté |
opportunity | Opportunité d'amélioration |
warning | Alerte ou risque identifié |
Niveaux d'impact
| Impact | Description |
|---|---|
high | Impact significatif sur les performances |
medium | Impact modéré |
low | Impact mineur |
Erreurs possibles
| Code | Description |
|---|---|
| 400 | profileId requis |
| 401 | API Key invalide ou expirée |
| 403 | Scope analytics:read manquant |
| 404 | Profil non trouvé |
| 500 | Erreur serveur interne |
Codes d'erreur communs
json
{
"statusCode": 403,
"errorCode": "FORBIDDEN",
"message": "Insufficient permissions. Missing scopes: analytics:read"
}json
{
"statusCode": 400,
"errorCode": "VALIDATION_ERROR",
"message": "profileId is required"
}