Spécifications des Scénarios de Workflow - Swing Positions
🎯 Vue d’ensemble
Ce document définit tous les scénarios de workflow possibles pour les positions swing, permettant de vérifier le bon comportement de l’implémentation centralisée dansprocessBuy2.
📝 TERMINOLOGIE
”Montant” = Quantité (Amount)
Quand on parle de “montant” dans ce document, cela fait référence à la quantité de tokens, pas au prix :buy1Amount= quantité de tokens achetés avec BUY1buy2Amount= quantité de tokens achetés avec BUY2tp1Amount= quantité de tokens à vendre avec TP1tp2Amount= quantité de tokens à vendre avec TP2relativeAmount= quantité totale de tokens (buy1 + buy2)
Prix vs Quantité
- Prix :
buy1Price,buy2Price,tp1Price,tp2Price(en USDT par token) - Quantité :
buy1Amount,buy2Amount,tp1Amount,tp2Amount(en tokens)
Logique TP1/TP2
- TP1 a un prix plus bas que TP2 (pour LONG)
- TP1 est donc toujours fermé avant TP2
- TP2 ne peut jamais être fermé avant TP1
💰 ÉVOLUTION DES PRIX ET CALCULS FINANCIERS
Calcul des Prix TP1/TP2
Les prix TP1 et TP2 sont recalculés à chaque fois querelativeEntryPrice change :
Évolution de relativeEntryPrice
Le prix d’entrée relatif est recalculé à chaque BUY2 fermé :Calcul des Quantités TP
Les quantités TP sont toujours basées surrelativeAmount :
Évolution des Frais
Les frais sont cumulés danstotalTpFees :
Calcul du PnL
Le PnL est calculé pour chaque ordre TP fermé :📋 SCÉNARIOS DE BASE
S1: Workflow Standard (Sans BUY2)
S2: Workflow Standard avec BUY2
🔄 SCÉNARIOS DE CYCLES MULTIPLES
S3: TP1 fermé avant BUY2
- TP1 archivé dans
archivedTp1Orders buy2Amountajusté avectp1Amount- BUY2 ordre remplacé avec nouveau montant
- Nouveaux TP1/TP2 créés avec montants recalculés
S4: TP1 et TP2 fermés avant BUY2
- TP1 et TP2 archivés
buy2Amountajusté avec somme des deux- BUY2 ordre remplacé avec nouveau montant
- Nouveaux TP1/TP2 créés
S6: BUY2 fermé avant TP1/TP2
relativeEntryPricerecalculé (moyenne pondérée)- Nouveaux TP1/TP2 avec montants basés sur
relativeAmount - TP1/TP2 archivés quand fermés
🔀 SCÉNARIOS MIXTES COMPLEXES
S7: TP1 fermé → BUY2 fermé → TP2 fermé
- TP1 archivé immédiatement
- BUY2 ajusté et fermé
- Nouveaux TP1/TP2 créés
- TP2 archivé quand fermé
S8: TP1 fermé → BUY2 fermé → TP2 fermé
- TP1 archivé immédiatement
- BUY2 ajusté et fermé
- Nouveaux TP1/TP2 créés
- TP2 archivé quand fermé
S9: BUY2 fermé → TP1 fermé → TP2 fermé
relativeEntryPricerecalculé- Nouveaux TP1/TP2 créés
- TP1 et TP2 archivés séquentiellement
🔁 SCÉNARIOS DE CYCLES MULTIPLES
S10: Cycle complet multiple
- Premier cycle archivé correctement
- Nouveaux ordres créés avec montants corrects
totalTp1Profit,totalTp2Profitcumulés
S11: TP1 fermé en parallèle avec BUY2
- TP1 archivé immédiatement
- BUY2 ajusté avec TP1 amount
- BUY2 fermé et nouveaux TP créés
- TP2 fermé ensuite
⚠️ SCÉNARIOS D’ERREUR
S12: BUY2 échec après TP fermé
- TP1 archivé même si BUY2 échoue
buy2Amountreste ajusté- Retry BUY2 avec montant correct
S13: TP fermé après BUY2 fermé
- Pas de double archivage
- TP archivés correctement
- Nouveaux TP créés après BUY2
🧪 SCÉNARIOS DE TEST SPÉCIFIQUES
S14: Test de calculs financiers détaillés
Données de test:- BUY1: 100 tokens @ 1.00 USDT = 100 USDT
- BUY2: 50 tokens @ 0.95 USDT = 47.5 USDT
- avgMaxPnlForPair = 2.0%
- Frais BUY1: 0.1 USDT, Frais BUY2: 0.05 USDT
relativeEntryPrice= (100 + 47.5) / (100 + 50) = 0.983 USDTrelativeAmount= 100 + 50 = 150 tokenstp1Amount= 150 * 0.7 = 105 tokenstp2Amount= 150 * 0.3 = 45 tokenstp1Price= 0.983 * (1 + 0.5 * 2.0 / 100) = 0.983 * 1.01 = 0.993 USDTtp2Price= 0.983 * (1 + 0.95 * 2.0 / 100) = 0.983 * 1.019 = 1.002 USDT
- Prix TP1 < Prix TP2 ✅
- Quantités TP cohérentes avec relativeAmount ✅
- Prix basés sur relativeEntryPrice et avgMaxPnlForPair ✅
S15: Test d’archivage multiple
Séquence: TP1 fermé → TP2 fermé → BUY2 fermé → Nouveaux TP1/TP2 fermés Vérifications:archivedTp1Orders.length= 2archivedTp2Orders.length= 2totalTp1Profit= somme des 2 cyclestotalTp2Profit= somme des 2 cyclescycleNumberincrémenté correctement
S16: Test d’évolution des frais et PnL
Séquence: BUY1 → BUY2 fermé → TP1 fermé → TP2 fermé Données de test:- BUY1: 100 tokens @ 1.00 USDT, frais: 0.1 USDT
- BUY2: 50 tokens @ 0.95 USDT, frais: 0.05 USDT
- TP1: 105 tokens @ 0.993 USDT, frais: 0.08 USDT
- TP2: 45 tokens @ 1.002 USDT, frais: 0.04 USDT
- Frais d’achat: 0.1 + 0.05 = 0.15 USDT
totalTpFees: 0.08 + 0.04 = 0.12 USDTtotalTp1Profit: (105 * 0.993) - 0.08 = 104.245 USDTtotalTp2Profit: (45 * 1.002) - 0.04 = 45.05 USDT- Profit total: 104.245 + 45.05 = 149.295 USDT
totalTpFeescumule correctement ✅- PnL calculé avec frais déduits ✅
- Totaux cohérents avec archives ✅
📊 MÉTRIQUES DE VÉRIFICATION
Données à vérifier pour chaque scénario:
- État des ordres:
buy1Order,buy2Order,tp1Order,tp2Order - Quantités (Amounts):
buy1Amount,buy2Amount,tp1Amount,tp2Amount(en tokens) - Prix:
buy1Price,buy2Price,tp1Price,tp2Price(en USDT/token) - Calculs:
relativeEntryPrice,relativeAmount - Archives:
archivedTp1Orders,archivedTp2Orders - Totaux:
totalTp1Profit,totalTp2Profit,totalTpFees - Activités: Logs d’activité pour chaque action
Vérifications Financières Spécifiques:
-
Prix TP cohérents:
tp1Price<tp2Price(pour LONG)- Prix basés sur
relativeEntryPriceetavgMaxPnlForPair - Formules: TP1 = 50% PnL max, TP2 = 95% PnL max
-
Calculs de PnL:
orderProfit = (amount * price) - feepour chaque TP fermétotalTp1ProfitettotalTp2Profitcumulés correctement- Pas de double comptage des profits
-
Évolution des frais:
totalTpFeescumule tous les frais de vente TP- Frais d’achat séparés (BUY1 + BUY2)
- Frais totaux = frais achat + frais vente
-
Cohérence des montants:
relativeAmount = buy1Amount + buy2Amounttp1Amount = relativeAmount * 0.7tp2Amount = relativeAmount * 0.3buy2Amountajusté après TP fermés
Assertions critiques:
- ✅
buy2Amounttoujours cohérent avec les TP fermés - ✅
relativeEntryPricetoujours calculé correctement - ✅ TP1 archivé immédiatement quand fermé
- ✅ TP2 ne peut jamais être fermé avant TP1
- ✅ Nouveaux TP créés avec quantités correctes
- ✅ Totaux cumulés correctement
- ✅ Pas de double archivage
- ✅ Cycle numbers incrémentés
🎯 PRIORITÉS DE TEST
Critique (Doit fonctionner):
- S1, S2, S3, S4, S6, S14, S16
Important (Doit fonctionner):
- S7, S8, S9, S15
Nice to have:
- S10, S11, S12, S13
📝 NOTES D’IMPLÉMENTATION
Points d’attention:
- Race conditions: TP1 et TP2 peuvent fermer simultanément
- Calculs de prix: Vérifier la cohérence des calculs de
relativeEntryPrice - Gestion d’erreurs: BUY2 peut échouer après ajustement
- Performance: Éviter les requêtes DB multiples
- Logs: Traçabilité complète des actions
Tests unitaires recommandés:
- Test de
archiveTpOrder()avec différents types - Test de calculs de
relativeEntryPrice - Test de mise à jour des totaux cumulés
- Test de gestion des erreurs BUY2