Lecture française :
docs/LECTURE_FR.mdregroupe le handoff, les livres, les sources, les formules, la recherche des phases 1 à 11 et le plan complet en français.
Read-only, generic, knowledge-driven option research for bounded-risk trade
requests. The active pipeline loads provenance-aware recipes, enumerates listed
strikes and expirations, applies executable bid/ask and whole-contract budget
constraints, runs separate conditional simulations, validates hard gates, then
uses Pareto ranking. NO_TRADE and BLOCKED_INSUFFICIENT_DATA are first-class
outcomes.
Phase M-CF0 adds one private Cloudflare Workers application under cloudflare/:
Cloudflare Access authentication, a bundled dashboard and API, D1 persistence, and a SQLite
Durable Object alarm monitor.
The Python engine exports the immutable dossier; Cloudflare does not duplicate pricing or model
training and cannot transmit a broker order. No VPS, production Docker, database server, or
always-on Mac is required.
python -m take_two_options.cloud.export_position \
--ticket reports/examples/m0_trade_economics_ticket.json \
--output cloud_position.json
cd cloudflare
npm install
npm run action-password:set-local
npm run db:local
npm run devFor a €0 Cloudflare Free deployment: log in with Wrangler, create the D1 database, replace its ID
in wrangler.jsonc, apply remote migrations, deploy, then protect All traffic with a Worker-level
Cloudflare Access policy for account members. There is no application password for login; a
separate action password confirms sensitive mutations and is stored only as a keyed Cloudflare
secret verifier. Wrangler returns the real take-two-control.<account>.workers.dev URL. A custom
domain is optional later. See the
zero-cost deployment guide and
CF0 architecture.
Phase M prospective decisions now use one PhaseMDecisionContext. It loads the canonical static
budget/lifecycle policy once and keeps optional point-in-time FX rate, FX execution cost, and broker
capital evidence separate. The context carries deterministic config/context hashes and provenance;
no credential field exists in its contract.
ttwo-options trade phase-m-context \
--config configs/phase_m/v2/ttwo_prospective_budget.yaml \
--json-out phase_m_context.jsonThis command is a dry run only: it contacts no provider, starts no paper trade, leaves the holdout
unopened, and cannot transmit an order. When a context is supplied programmatically to the decision
or trade-economics pipeline, its policy, lifecycle, FX-cost and broker-capital objects are propagated
without Phase M fallbacks. See the
governed-context specification and
implementation report.
The pre-OPRA budget logic is now finalized and frozen. A positive account liquidity reserve requires known available capital and constrains the effective hard ceiling and AUTO caps. One typed mixed-expiry lifecycle configuration now controls the candidate, ticket, scenario, breakeven, and target-arrival deadline. FX rate and FX execution cost are distinct; an unknown required FX cost is never treated as zero and blocks paper eligibility while preserving research analysis.
V2 remains version 2.0 and the trade-economics ticket remains 1.2 through
optional backward-compatible fields. Historical artifacts and the five scores
are unchanged. See
M0_2_1_BUDGET_SEMANTICS_CLEANUP.md
and the
M0.2.1 report.
Prospective research can now opt into FlexibleBudgetPolicyV2: a target budget, an asymmetric
under-target tolerance, and a hard overspend allowance. The canonical 1000 / 200 / 500 input
derives exactly 800 / 1000 / 1500. Entry cash, maximum economic loss, and buying power are
separate gates in policy currency; unknown capital remains null and blocks paper eligibility.
Every whole-contract quantity is evaluated independently, while budget fit stays outside the five
scores.
Calendars and diagonals no longer use a common-expiry terminal payoff to authorize V2 capital.
Without validated broker buying power or a proven architecture-specific bound they remain visible
for research under BLOCKED_MIXED_EXPIRY_CAPITAL_UNPROVEN. New tickets use schema 1.2 and show a
standalone Budget section; 1.0 and 1.1 remain readable.
ttwo-options trade budget \
--budget 1000 \
--budget-currency EUR \
--allow-under 200 \
--allow-over 500 \
--account-capital 2000 \
--liquidity-reserve 500The prospective configuration is
configs/phase_m/v2/ttwo_prospective_budget.yaml,
and the full contract is
M0_2_FLEXIBLE_BUDGET_POLICY.md. Historical V10 and
pre-OPRA runs continue under BudgetPolicyV1Legacy; their artifacts and holdout were not rewritten.
The offline M0.1 layer now provides a versioned 1.1 TradeEconomicsTicket for deep-analysis
candidates: same-pricer advanced Greeks with numerical confidence, exact-clock metadata with an
explicit date-based American limitation, full-repriced flat-spot carry, Spot × Time × IV matrices,
exit-path-aware breakeven clocks and target deadlines, Shapley/full-repricing PnL attribution,
pathwise P(touch), strict net-PnL distribution metrics, and canonical five-score snapshots.
Midpoint and executable premiums are distinct; expiration does not inherit fictitious closing
costs; dated event crush and mixed-expiry managed-close policies are explicit. Unknown margin, FX,
expiry costs and probabilities remain null or blocked rather than becoming zero.
The synthetic golden ticket is available as
JSON and
Markdown; both are rendered from the same typed
object. The detailed contract, conventions and 2026 source check are in
M0_GREEKS_CARRY_TRADE_ECONOMICS.md,
M0_1_EXIT_PATH_AND_EXPIRY_ECONOMICS.md,
M0_GREEK_CONVENTIONS.md, and
M0_2026_VALIDITY_AUDIT.md.
M0.1 adds no live provider connection and no execution path. Every ticket enforces
read_only=true, transmit=false, what_if=true, and order_capability=forbidden. Real NBBO,
combo quotes, broker margin,
slippage, fills and prospective performance remain pending OPRA/broker/paper validation.
Les clôtures C1–C13 sont terminées sur les données locales réelles. Le résultat est
PRE_OPRA_RESEARCH_COMPLETE, la conclusion portefeuille est
NO_POSITION_RECOMMENDED et le verdict dérivé est
ENGINE_NOT_PROVEN_SUPERIOR. V10 perd 90,4 % en composé sur dix observations OOS de
développement, contre +25,1 % pour buy-and-hold. Le panel reste trop court pour la
politique formelle et le holdout reste UNOPENED.
L'interface OPRA read-only et les registres paper immuables sont prêts, mais aucune
connexion n'a été tentée et la Phase M n'est pas démarrée. Le socket IBKR TWS paper
est désormais documenté jusqu'au statut CONFIGURED_NOT_ENTITLED : cette voie utilise
host, port et clientId, pas une clé API IBKR.
ttwo-options pre-opra-finalize --config configs/pre_opra/v1/ttwo_research.yamlLe dashboard autonome est dans
reports/pre_opra/final_pre_opra_report_2026-08-08.html.
Les données options brutes/normalisées restent privées et ignorées par Git ; seuls les
hashes, paramètres de calibration et résultats agrégés sont publiés.
Le prompt de reprise commerciale demandé est conservé dans
docs/commercial/COMMERCIALIZATION_RESUME_PROMPT.md.
Il reste dormant tant que Phase M, le paper et la validation finale ne sont pas terminés.
ttwo-options knowledge validate --knowledge-dir research/knowledge_items
ttwo-options knowledge compile \
--knowledge-dir research/knowledge_items \
--catalog-out research/strategy_catalog/catalog.json
ttwo-options data refresh --ticker TTWO
ttwo-options trade analyze \
--request configs/trades/ttwo_gta6_1000eur.yaml \
--refresh-data \
--report-dir reports/latest
ttwo-options trade compare --report reports/latest/decision_report.json
ttwo-options trade ibkr-ticket \
--report reports/latest/decision_report.json \
--candidate-id <ID> \
--mode preview
ttwo-options position monitor \
--position <POSITION_FILE> \
--refresh-data \
--report-dir reports/latest/position
ttwo-options thesis-scan \
--ticker TTWO \
--direction bullish \
--budget-eur 1000 \
--catalyst-date 2026-11-19 \
--expiration-buffer-days 45 \
--target-prices 220,250,280,300,330,360 \
--scenario-probabilities 0.10,0.15,0.20,0.20,0.20,0.15 \
--max-loss-eur 1000 \
--top 3 \
--current-chain fixtures/thesis_scanner/ttwo_synthetic_chain.json \
--json-out reports/examples/v10_thesis_scan.json \
--markdown-out reports/examples/v10_thesis_scan.md \
--html-out reports/examples/v10_thesis_scan.html
ttwo-options intelligence-run \
--base-report reports/examples/v10_thesis_scan.json \
--policy configs/intelligence/v11.yaml \
--events fixtures/v11/events_empty.json \
--profile fast_fixture \
--json-out reports/v11/latest.json \
--markdown-out reports/v11/latest.md \
--html-out reports/v11/latest.html
ttwo-options calibration report \
--dataset fixtures/v11/historical_calibration.example.json \
--walk-forward fixtures/v11/walk_forward.example.json \
--output reports/v11/calibration/offline_validation.json
ttwo-options position replay \
--trajectory fixtures/v11/position_trajectory.example.json \
--output reports/v11/position_trajectory.jsonThe package contains no live-order submission, modification, cancellation, or
exercise capability. V10 creates a usable IBKR preview only after its gates.
V11 may also emit a deliberately blocked preview dossier so every missing
broker fact remains visible. Every artifact keeps transmit=false,
what_if=true, human confirmation, and order_capability=forbidden.
thesis-scan is the V10.1 bullish-thesis scanner. It exhaustively constructs
configured long calls (including the LEAPS maturity class), bull call spreads,
and symmetric call butterflies over listed quotes. It never invents scenario
probabilities: omit --scenario-probabilities and expected P&L/probability of
success remain null. Its three rankings are independent and visible
(prudent, balanced, aggressive); weak V9 evidence lowers the displayed
confidence but does not silently veto thesis mode.
The V10.1 output schema adds Python-computed decision metrics and an accessible
Top N dashboard. --top 3, --top 5, or --top 10 controls the maximum
number of accordion entries shown independently in each profile. JavaScript
only selects and formats report values; option risk, scenario P&L, ratios,
contractual limits, and ×2/×3/×5 terminal thresholds are computed in Python.
intelligence-run is the modular V11 research layer over a stable V10.1
structure report. It keeps V10.1 as the construction and QuantLib American
control engine, then adds:
- a provenance-aware data hub with read-only SEC EDGAR, FRED, Take-Two RSS, Google Trends alpha, market-calendar, and IBKR/OPRA adapter boundaries;
- deduplicated Bayesian scenario updates with evidence-family caps and a full prior/likelihood/weight/posterior audit;
- four regimes crossed with GBM, Dupire local volatility, Heston, and Heston-plus-jumps simulations;
- dynamic covariance diagnostics, exact whole-contract allocation under hard
constraints, and explicit cash/
NO_TRADEalternatives; - cost, adverse, rupture, CVaR, holdout, and paper-trading promotion gates;
- explainable position monitoring and preview-only IBKR combo artifacts.
The default V11 fixture is a reproducible integration demonstration. Its priors, likelihoods, stochastic parameters, synthetic option chain, and local volatility fallbacks are experimental inputs, not calibrated forecasts or a trade recommendation. Live connectors are implemented as opt-in ports but are not contacted by the default CLI run.
V7–V9 are isolated under experiments/legacy/; their inspected holdouts are
marked contaminated under validation/contaminated_holdouts/.
See product contract, current architecture, V10.1 architecture, V11 architecture, final quantitative validation handoff, readiness, validation plan, calibration, backtesting, model risk, data provenance, security, V10.1 data guide, migration, and limitations.
- construction exhaustive V10.1 des calls, bull call spreads et butterflies configurés sur les contrats fournis ;
- coût prudent au bid/ask, payoff exact, perte maximale et contrôle américain QuantLib ;
- ingestion point-in-time avec provenance, cutoff, fraîcheur, unités, hashes, doublons et états de connecteur ;
- normalisation déterministe des événements avec preuve de règle, expiration, revue humaine, clusters de doublons et contradictions ;
- waterfall bayésien auditable, caps par famille et sensibilité du posterior ;
- simulations multi-modèles reproductibles, diagnostics de convergence, comparaison de robustesse et stress explicites ;
- allocation entière avec budget, perte, concentration, liquidité, Greeks,
cash et
NO_TRADE; - surveillance advisory à partir de snapshots et replay d’une trajectoire synthétique multi-date ;
- rapports JSON, Markdown et HTML autonome avec résumé machine, hashes et statuts de readiness ;
- preview strictement non transmissible :
transmit=false,what_if=true, confirmation humaine etorder_capability=forbidden.
production_ready_offline décrit uniquement un invariant logiciel déterministe.
Il ne qualifie ni une probabilité de marché, ni une stratégie, ni un rendement.
- priors, likelihoods, probabilités et scores de confiance ;
- paramètres Heston, paramètres de sauts et hypothèses de régimes ;
- surface de volatilité locale construite depuis une entrée synthétique ou partielle ;
- simulations, robustesse et allocation alimentées par des fixtures ;
- seuils de sortie, stress, profil de risque et prévisions issues de fixtures.
Ces éléments portent experimental_offline ou fixture_only. Ils ne peuvent pas
être promus par un rang, un score ou un résultat in-sample.
- historique point-in-time privé des contrats, bid/ask, spot, taux, dividende nul vérifié, FX, événements et coûts ;
- 6 946 inversions IV, 535 tranches SVI et diagnostics d'arbitrage sur 201 dates ;
- empirique, EWMA, GARCH/GJR et comparaison chronologique sur 210 rendements ;
- panel aligné cash/actions/options/V10, purge, embargo, DSR, PBO, bootstrap, permutations et correction de Holm ;
- cinq scores partiels, severe-loss ladder, gates, frontière et verdict V10.
Restent nécessaires : davantage d'observations options autorisées, un holdout réellement futur, la confirmation humaine des droits du compte et la validation prospective OPRA.
- chaîne OPRA, spot et quotes horodatées ;
- bid/ask, open interest, volume, surface d’IV et Greeks live ou recalculés ;
- découverte et qualification des contrats ;
- quotes combo IBKR, marge et commissions what-if ;
- fraîcheur, reconnexion, rate limits, état des ordres et surveillance intraday.
Le port IBKR/OPRA est configured_not_entitled. L'exemple .env.example configure
le socket paper non secret, mais le CLI par défaut n’ouvre aucune session. Les droits
et abonnements restent à confirmer. La roadmap est détaillée dans
LIVE_DATA_ROADMAP.md et
IBKR_OPRA_ROADMAP.md.
- licence et droits de redistribution des données ;
- données historiques autorisées ;
- calibration sur données réelles ;
- backtest walk-forward ;
- holdout non contaminé ;
- probabilités correctement calibrées ;
- paper trading ;
- combo quotes IBKR ;
- contrôle des coûts réels ;
- surveillance live ;
- tests de charge ;
- sécurité ;
- audit externe ;
- mentions réglementaires ;
- conditions d’utilisation ;
- politique de confidentialité ;
- gestion des abonnements ;
- monitoring de production ;
- support utilisateur ;
- plan de reprise ;
- aucune promesse de rendement.
La checklist probante et la frontière réglementaire sont dans COMMERCIALIZATION_CHECKLIST.md et REGULATORY_BOUNDARY.md.
Les gates autorisés, sans aucun gate d’exécution automatique, sont :
RESEARCH_ONLYOFFLINE_VALIDATEDHISTORICALLY_CALIBRATEDWALK_FORWARD_PASSEDPAPER_TRADINGLIVE_DATA_READ_ONLYHUMAN_CONFIRMED_PREVIEWCOMMERCIAL_RESEARCH_PRODUCT
Chaque gate exige critères d’entrée et de sortie, métriques minimales, données,
responsable humain et preuves archivées. Les seuils non encore approuvés restent
draft_to_validate. La matrice complète se trouve dans
READINESS.md ; le paper trading dans
PAPER_TRADING_PLAN.md.
Le moteur ne cherche pas « la meilleure option » en une seule étape. Il conserve des frontières explicites entre :
- les observations datées et leur provenance ;
- les hypothèses configurées ;
- les scénarios conditionnels ;
- les structures contractuelles réellement cotées ;
- les simulations et leurs désaccords ;
- les contraintes dures ;
- le classement de recherche ;
- la validation statistique ;
- l’autorisation d’exécution, qui reste absente.
La méthode décisionnelle publique est :
faits datés
-> contrôles de qualité et de disponibilité au cutoff
-> événements normalisés et dédupliqués
-> distribution bayésienne conditionnelle
-> structures V10.1 ayant passé les veto contractuels
-> quatre modèles x quatre régimes
-> valorisation avec règles de sortie
-> comparaison de robustesse
-> allocation entière sous contraintes
-> stress, holdout et paper gates
-> NO_TRADE / watchlist / paper_review
-> preview humaine non transmissible
Principes non négociables :
- une donnée manquante n’est jamais remplacée par une valeur « plausible » ;
- une hypothèse reste identifiée comme hypothèse ;
- un même fait repris par plusieurs articles ne compte qu’une fois ;
- les modèles restent séparés avant toute agrégation ;
- un score ne peut pas annuler un veto ;
- le cash et
NO_TRADEsont toujours des solutions admissibles ; - un résultat synthétique ou contaminé ne peut pas être promu ;
- aucune probabilité, formule ou allocation n’accorde le droit d’envoyer un ordre.
| Symbole | Définition |
|---|---|
| (S_t) | cours de TTWO au temps (t) |
| (K) | strike |
| (T) | maturité en années |
| (r) | taux sans risque continu |
| (q) | rendement de dividende continu |
| (\sigma) | volatilité |
| (M) | multiplicateur contractuel, normalement 100 |
| (q_i) | quantité de la jambe (i) |
| (s_i) | signe de la jambe : (+1) long, (-1) short |
| (C) | coût total de la position, frais et slippage inclus |
| (B) | budget |
| (x_i) | nombre entier d’unités de la stratégie (i) |
| ((z)^+) | (\max(z,0)) |
Les montants optionnels sont calculés en USD, puis convertis en EUR avec :
Le taux FX est daté et audité. Ce n’est pas un taux d’exécution garanti.
Une observation unifiée contient au minimum :
series, timestamp, retrieved_at, cutoff, value, unit, provider,
source_uri ou source_id, domain, quality, freshness_status,
point_in_time_valid, raw_hash, license_or_usage_notes, metadata
Une source contient :
provider, URI, retrieved_at, quality, conditions d’usage, hash, notes
La règle point-in-time est :
RSS, Google Trends, calendrier de marché, facteurs historiques et quotes IBKR
postérieurs au cutoff sont exclus. Une quote IBKR sans timestamp est exclue.
Les statuts not_configured, unavailable, failed, partial et ready
restent distincts.
Connecteurs disponibles :
- seed normalisé V10.1 ;
- JSON normalisé pour fixtures ou exports autorisés ;
- SEC EDGAR ;
- FRED ;
- RSS officiel Take-Two ;
- Google Trends API alpha ;
- calendrier de marché injecté ;
- IBKR/OPRA injecté, données de marché uniquement.
Important : les observations des connecteurs ne sont pas transformées automatiquement en signaux. Une étape explicite de normalisation doit produire les événements bayésiens décrits ci-dessous. Cela évite qu’un titre d’article modifie directement une probabilité.
Pour chaque jambe :
Le midpoint diagnostique et le spread relatif sont :
Le débit prudent est :
Avec (n_{sides}=\sum_i q_i) :
Le prix limite indicatif V10.1, pour les contrats standards ayant passé le filtre (M=100), est :
Ce prix ne comprend pas les commissions et ne constitue pas une cotation combo.
Les principaux veto précèdent tout score :
- quote absente, non positive, croisée, future ou périmée ;
- spread relatif supérieur au seuil ;
- échéance antérieure au catalyseur plus buffer ;
- strike hors de la plage de moneyness ;
- open interest ou volume sous un seuil connu ;
- multiplicateur ou livrable inconnu/non standard ;
- débit, perte maximale ou nombre de contrats hors limites ;
- structure non bornée ou incompatible avec la thèse ;
- spread combo synthétique excessif ;
- FX ou taux venant du futur.
Une valeur inconnue peut produire une watchlist explicite ; une violation connue produit un blocage.
La valeur intrinsèque d’une jambe à l’échéance est :
La valeur terminale et le P&L sont :
Pour (q) calls de strike (K) :
Le gain contractuel est non plafonné.
Avec (K_1<K_2), long (K_1) et short (K_2) :
Avec (K_2-K_1=K_3-K_2), ratios (+1/-2/+1) :
Sous les hypothèses usuelles d’un débit inférieur à la largeur d’aile :
Le moteur générique ne suppose pas ces formules à la main pour trouver tous les break-even : il évalue le payoff linéaire par morceaux aux strikes, détecte les changements de signe et interpole les racines.
Pour les seuils ×2, ×3 et ×5, il résout les spots tels que :
Le gain net correspondant est ((m-1)C). Une structure plafonnée peut rendre un seuil impossible.
Le contrôle européen utilise :
Call :
Put :
À l’échéance, le moteur revient exactement à l’intrinsèque.
V10.1 utilise QuantLib et un schéma finite-difference américain pour les valorisations avant échéance. L’équation de continuation sous-jacente est :
avec la contrainte américaine :
Le moteur compare aussi la valeur américaine à un benchmark européen. La prime d’exercice anticipé diagnostique est :
Black-Scholes reste un contrôle rapide ; il n’est jamais présenté comme la vérité du marché.
Les Greeks américains V10.1 sont calculés autour du même moteur QuantLib par différences finies.
Avec (h_S=\max(0.001S,0.01)) :
Le theta est une variation sur un jour calendaire :
Avec un pas de volatilité (h_\sigma=\min(0.01,0.25\sigma)), le vega par point de volatilité est :
Avec (h_r=0.001), le rho par point de taux est :
Les Greeks nets de la stratégie sont :
Ils sont des sensibilités locales, pas des prévisions de P&L exactes.
V10.1 valorise chaque candidat :
- aujourd’hui ;
- à +30, +60 et +90 jours lorsque ces dates précèdent l’échéance ;
- à la date du catalyseur ;
- à l’échéance ;
- sur les objectifs utilisateur et une grille de spots ;
- avec IV ×0,80, ×1,00 et ×1,20.
Pour une date (d), un spot (S) et un multiplicateur d’IV (m_\sigma) :
L’attribution séquentielle est :
Si l’utilisateur fournit des probabilités (p_j) pour chaque objectif (S_j), avec (\sum_jp_j=1) :
Sans probabilités utilisateur, ces deux valeurs restent null. V10.1 ne les
invente pas.
Chaque critère est ramené entre 0 et 1. Les opérateurs principaux sont :
Exemples exacts :
La liquidité d’une jambe combine :
Avec :
et la même règle pour le volume.
La proximité du break-even utilise :
La part de scénarios gagnants est :
Les autres critères principaux sont :
ou, pour un gain non borné, le meilleur rendement parmi les objectifs ;
Pour un butterfly de centre (K_2) et de largeur d’aile (W) :
La préférence structurelle interne vaut 1,00 pour un bull spread, 0,65 pour un butterfly et 0,45 pour un long call. La confiance historique V10.1 par défaut vaut 0,35 en raison des anciens échantillons faibles/contaminés.
Le score d’un profil est :
Poids prudent :
| Critère | Poids |
|---|---|
| perte réduite | 0,24 |
| break-even proche | 0,16 |
| liquidité | 0,15 |
| qualité du spread | 0,14 |
| theta modéré | 0,12 |
| préférence bull spread | 0,10 |
| largeur des scénarios gagnants | 0,05 |
| confiance historique | 0,04 |
Poids balanced :
| Critère | Poids |
|---|---|
| ratio gain/risque | 0,18 |
| largeur des scénarios gagnants | 0,16 |
| liquidité | 0,14 |
| exposition haussière | 0,13 |
| capital non consommé | 0,12 |
| break-even proche | 0,10 |
| theta modéré | 0,09 |
| qualité du spread | 0,05 |
| confiance historique | 0,03 |
Poids aggressive :
| Critère | Poids |
|---|---|
| convexité | 0,22 |
| rendement modélisé | 0,20 |
| exposition haussière | 0,18 |
| largeur des scénarios gagnants | 0,13 |
| centrage butterfly | 0,10 |
| ratio gain/risque | 0,08 |
| liquidité | 0,05 |
| confiance historique | 0,04 |
Les scores sont déterministes et explicables. Ils organisent les candidats ayant déjà passé les filtres ; ils ne constituent pas des probabilités.
Le pool V11 n’utilise pas un classement V10.1 unique. Il prend le rang 1 de
prudent, puis de balanced, puis d’aggressive, ensuite le rang 2 de chacun,
et ainsi de suite. Les doublons sont retirés jusqu’à atteindre la taille
configurée, six candidats par défaut. Cette sélection round-robin évite qu’un
seul profil fournisse tout le pool.
Les scénarios par défaut sont :
| Scénario | Prior expérimental | Régime |
|---|---|---|
| marché de base | 35 % | neutral |
| succès GTA | 35 % | thesis |
| retard ou guidance en baisse | 20 % | adverse |
| rupture | 10 % | rupture |
Pour un événement (e) et un scénario (s), la configuration fournit une vraisemblance (L_{e,s}=P(e\mid s)).
Le poids demandé est :
Avec un cap par famille :
La mise à jour fractionnelle configurée est :
Pour un événement explicitement contradictoire :
Un événement neutre reçoit un poids nul. Un événement sans règle compatible est ignoré. Chaque update conserve prior, vraisemblances, poids demandé et effectif, posterior, famille, confiance, déduplication, cap et sources contradictoires.
Caps de familles par défaut :
| Famille | Cap |
|---|---|
| source primaire entreprise | 1,00 |
| réglementaire | 0,80 |
| fondamentaux | 0,75 |
| marché | 0,60 |
| options | 0,60 |
| attention | 0,30 |
| actualités | 0,25 |
| social | 0,15 |
Table de vraisemblance active livrée, dans l’ordre
market_base / gta_success / delay_or_guidance_down / rupture :
| Événement | Famille | Poids de base | Vraisemblances |
|---|---|---|---|
| retard GTA confirmé | source primaire | 1,00 | 0,05 / 0,01 / 0,90 / 0,35 |
| date maintenue | source primaire | 0,80 | 0,55 / 0,80 / 0,15 / 0,30 |
| guidance en hausse | fondamentaux | 0,80 | 0,45 / 0,80 / 0,10 / 0,35 |
| guidance en baisse | fondamentaux | 0,80 | 0,25 / 0,08 / 0,80 / 0,50 |
| achat d’initié | réglementaire | 0,40 | 0,45 / 0,65 / 0,25 / 0,35 |
| intérêt de recherche en hausse | attention | 0,25 | 0,50 / 0,65 / 0,35 / 0,50 |
| spike d’IV | options | 0,35 | 0,30 / 0,55 / 0,50 / 0,80 |
| flux options haussier | options | 0,30 | 0,45 / 0,65 / 0,25 / 0,45 |
Le schéma accepte aussi d’autres types d’événements, mais un événement sans règle dans cette table n’affecte pas le posterior.
Les priors, likelihoods et caps sont des entrées calibration_required, pas
des fréquences historiques validées. Malgré les noms de schémas historiques
Bayesian*, cette distribution porte la sémantique configured_heuristic_belief : elle n'est
pas le posterior d'un modèle statistique ajusté.
La couche séquentielle ajoute un contrat point-in-time à chaque événement. Les dépendances sont
déclarées comme same_fact, derived_from, shared_driver ou contradicts. Un même fait ou une
dérivation reçoit zéro nouveauté ; un driver partagé exige une décote explicite. Le graphe doit
être acyclique et chaque parent doit être disponible avant son enfant.
Les probabilités sont transportées dans un ScenarioProbabilitySet avec une origine exclusive :
user_assumption, configured_heuristic, historical_estimate, market_implied ou
empirically_calibrated. Cette dernière origine exige les hashes dataset, manifest et calibration,
la taille d'échantillon et une partition OOS. Chaque valeur centrale est accompagnée d'un intervalle
ou diagnostic d'incertitude.
Les scénarios événementiels déclarent séparément les chocs de spot, niveau d'IV, skew, courbure et
liquidité, leur durée/récupération, leur source, leur statut et leur mesure P/Q. Le mélange
conditionnel est :
Le moteur propage les bornes de croyance, calcule les probabilités de cible et de grosse perte,
et conserve NO_TRADE. Les plans research_eligible_now, wait, revalue_*, exit_review_* et
roll_review sont des règles humaines point-in-time ; toutes les sorties gardent
order_capability=forbidden.
Le rapport final peut être accompagné d'un FinalDecisionEvidenceReport. Ce sidecar exige les
estimations et intervalles, les probabilités et leur origine, hypothèses, scénarios favorables et
d'échec, risques de modèle, limites des données, raisons exactes du classement et de NO_TRADE.
Son grade suit une chaîne monotone et prend le plus faible composant requis :
proposed → implemented → tested → numerically_validated → empirically_validated → holdout_validated → paper_validated.
Ce grade mesure la preuve disponible, pas la confiance dans un gain. La matrice
formula_lineage_matrix.md relie chaque formule à ses
sources, son code et ses tests ; le CI rejette les références orphelines. Les contradictions et
corrections restent visibles dans
errata_registry.yaml.
La chaîne V10.1 est interpolée sur une grille de moneyness :
La variance totale implicite est :
Le code estime par différences finies :
Avec le log-moneyness forward :
la variance locale implémentée est :
Si le dénominateur est instable, la variance non finie ou non positive, le nœud revient à l’IV implicite observée. La volatilité produite est bornée entre 1 % et 300 %.
Conditions minimales :
- au moins deux échéances futures ;
- au moins trois strikes/moneyness ;
- calls avec IV disponible.
Le statut devient partial si un fallback est utilisé ou si la source n’est
pas OPRA. Les différences finies n’imposent pas globalement l’absence
d’arbitrage calendrier ou butterfly.
Pour une matrice de facteurs alignés (X), chaque fenêtre utilise la covariance échantillonnale :
Fenêtres par défaut :
- 20 séances, poids brut 0,45 ;
- 60 séances, poids brut 0,35 ;
- 252 séances, poids brut 0,20 ;
- périodes comparables d’événement, poids brut 0,25 si disponibles ;
- régime courant, poids brut 0,30 si disponible.
Les poids des fenêtres effectivement disponibles sont renormalisés :
Le shrinkage diagonal est :
avec (\delta=0.25) par défaut.
Pour garantir une matrice positive semi-définie, si :
les valeurs propres sont remplacées par :
La corrélation publiée est :
Le condition number est surveillé ; au-delà de (10^8), la matrice reste signalée comme mal conditionnée.
Frontière actuelle : cette covariance factorielle est calculée et publiée comme diagnostic. Elle n’est pas encore injectée dans les chocs des SDE ni dans l’optimiseur d’allocation. L’optimiseur calcule séparément une covariance empirique des P&L candidats.
Le run par défaut utilise 1 000 trajectoires, 90 pas, un horizon de 180 jours et
une seed de base 20260728. Chaque couple modèle/régime reçoit une seed
déterministe distincte.
Pour une fonction d’option lisse (V(S,t)) et :
le lemme d’Itô donne :
En notation Greeks, les premiers termes correspondent au theta, au delta et au gamma. Avec un saut log (Y), un terme discret s’ajoute :
Le bot n’utilise pas cette approximation seule pour produire le P&L Monte-Carlo : il revalorise la position complète à chaque pas. Itô explique le lien entre la SDE, les Greeks et l’attribution locale de monitoring.
Équation continue :
Incrément lognormal exact :
La variance passe linéairement de la variance initiale à la variance du régime pendant les premiers 20 % des pas, puis reste constante :
Cette transition évite de créer un gain de vega instantané à (t=0).
(\sigma_{loc}) est interpolée :
- linéairement entre les nœuds de moneyness ;
- linéairement entre les maturités ;
- à bord constant hors de la grille.
Le multiplicateur de volatilité du régime est appliqué progressivement pendant les premiers 20 % des pas.
Le schéma full-truncation Euler utilise (v_t^+=\max(v_t,0)) :
Les chocs sont corrélés par :
La cible du régime est :
Les paramètres Heston livrés sont illustratifs, donc chaque sortie porte un warning de sensibilité.
Le nombre de sauts par pas est :
Conditionnellement à (N_t=n), l’incrément log du saut est simulé comme :
Le compensateur de drift est :
Le spot devient :
Les valeurs sont bornées numériquement :
| Régime | Drift | Multiplicateur vol | Shift IV cible | Intensité sauts/an | Moyenne log saut | Vol log saut |
|---|---|---|---|---|---|---|
| neutral | 6 % | 1,00 | 0 % | 0,10 | 0 % | 5 % |
| thesis | 18 % | 1,05 | 10 % | 0,80 | 8 % | 10 % |
| adverse | −15 % | 1,30 | 25 % | 0,80 | −15 % | 12 % |
| rupture | 0 % | 1,80 | 50 % | 1,20 | −3 % | 30 % |
Ces valeurs sont des scénarios de recherche. Elles ne sont pas estimées comme des fréquences ou paramètres TTWO validés.
Pour chaque trajectoire, chaque jambe est revalorisée avec le contrôle Black-Scholes conditionnel :
Cette approximation permet une valorisation vectorisée de toutes les trajectoires. Elle ne remplace pas les checkpoints américains QuantLib V10.1 pour l’exercice anticipé, les dividendes discrets, l’assignment ou le pin risk.
Pour accélérer ce calcul, la CDF normale est approchée par :
pour (x\geq0), puis (N(x)=1-N(-x)) pour (x<0). L’erreur annoncée par le module est inférieure au basis point pour cet usage de contrôle.
La volatilité initiale du run est globale (35 % par défaut). Les IV propres à
chaque jambe restent utilisées par les scénarios V10.1, mais pas comme variance
initiale distincte de chaque jambe dans le Monte-Carlo V11.
Chaque trajectoire est parcourue dans cet ordre :
- profit complet si (P&L_t\geq1.50C) ;
- stop opérationnel si (P&L_t\leq-0.70C) ;
- après un pic supérieur ou égal à (0.80C), revue trailing si la baisse depuis ce pic atteint (0.30C) ;
- revue IV crush si l’IV a baissé d’au moins 35 % par rapport à l’entrée ;
- sortie temps à 60 jours ou moins de l’échéance ;
- sinon sortie à l’horizon simulé.
Les seuils sont configurables. Dans le moteur de trajectoires, une « revue » est modélisée comme une sortie pour mesurer la distribution conditionnelle. En opération réelle, elle reste une décision humaine.
Pour les P&L réalisés simulés (X_1,\ldots,X_N) :
La « perte totale » est approchée par une perte d’au moins 95 % de la mise :
Avec (q_{0.05}=Q_{5%}(X)) :
Les trajectoires raisonnables basse et haute sont (Q_{5%}) et (Q_{95%}).
Le drawdown d’une trajectoire de valeur (V_t) est :
Le rapport conserve le maximum de ce drawdown sur les trajectoires, le premier jour profitable moyen, la probabilité de sortie avant l’horizon et le comptage des motifs de sortie.
Soit (K) les 16 couples modèle/régime :
La dispersion neutre est :
Avec :
le score de robustesse est :
Des flags sont ajoutés si :
- moins de la moitié des couples ont une espérance positive ;
- la dispersion neutre dépasse 50 % du coût ;
- la CVaR adverse dépasse 80 % du coût.
Ce score est un résumé diagnostique, pas une gate de promotion autonome.
Les probabilités bayésiennes sont regroupées par régime :
Dans chaque régime, le poids est partagé également entre les modèles disponibles :
Les champs probability des régimes dans la configuration garantissent une
distribution déclarée cohérente, mais l’optimiseur utilise les poids
(\pi_r) issus du posterior bayésien.
Pour une allocation entière (x=(x_1,\ldots,x_n)), le P&L d’un groupe modèle/régime (k) est :
Son espérance agrégée est :
La variance combine variance intra-groupe et dispersion inter-groupes :
La CVaR d’allocation est la pire CVaR parmi les groupes adverse et rupture :
Le risque d’exécution est :
La dispersion modèle est :
La fonction objectif exacte utilisée pour classer les allocations est :
Contraintes :
avec structure à débit borné et gate de liquidité V10.1 satisfaite.
L’ensemble réalisable est fini et entièrement énuméré. Le moteur ne résout pas une relaxation continue puis n’arrondit pas : chaque résultat publié est directement faisable en contrats entiers sous les hypothèses du rapport.
Coefficients livrés :
| Profil | (\lambda) variance | (\gamma) CVaR | (\eta) exécution | (\zeta) dispersion |
|---|---|---|---|---|
| prudent | 1,20 | 1,00 | 0,80 | 0,80 |
| balanced | 0,65 | 0,65 | 0,45 | 0,50 |
| aggressive | 0,25 | 0,30 | 0,25 | 0,25 |
L’allocation nulle (x=0) représente cash/NO_TRADE :
Elle est toujours évaluée et conservée dans les résultats lorsque la taille du Top N le permet. Le budget total n’est jamais forcé.
Pour le diagnostic lisse moyenne-variance seulement :
Les valeurs propres de la Hessienne indiquent si cette composante quadratique est concave. Ces diagnostics n’incluent ni CVaR, ni pénalité d’exécution, ni dispersion, ni contraintes entières. La décision finale vient toujours de l’énumération exacte.
Le coût de spread agrégé d’un candidat est :
Avec :
les stress implémentés sont :
Le moteur conserve aussi :
et la pire CVaR adverse/rupture.
Le stress passe uniquement si :
et :
Même si ce stress passe, V11 impose actuellement :
promotion_eligible=false
car :
- les holdouts V7–V9 ont déjà été inspectés et sont contaminés ;
- le contrat walk-forward et le holdout verrouillé existent, mais aucun dataset historique réel autorisé ne les a encore validés ;
- le paper monitoring n’a pas été exécuté.
V11.1 ajoute aussi une suite de stress déterministe : retard de catalyseur,
IV crush, sell-off, taux, EUR/USD, bid/ask ×2, dégradation OI/volume, gaps,
midpoint indisponible, liquidation prudente, slippage ×2, frais ×2 et sortie
anticipée. Lorsqu’un historique requis n’existe pas, le stress porte
data_insufficient avec sa méthode, ses hypothèses et son blocker ; il
n’invente pas de P&L.
La posture suit cet ordre :
aucun candidat
-> blocked
tous les rangs 1 sont NO_TRADE
-> no_trade
sinon, données requises manquantes
ou source synthétique
ou toutes les previews bloquées
-> watchlist
sinon
-> paper_review
paper_review ne signifie toujours pas « prêt à trader ». Il signifie que les
blocages de données immédiats sont levés et que la validation paper peut
commencer.
Le dossier initial conserve :
- distribution de scénarios ;
- spot, IV, taux et Greeks ;
- catalyseurs et invalidations ;
- prix d’entrée, coût réel et slippage ;
- régime initial ;
- plan de sortie ;
- acteur humain responsable.
Les variations sont :
L’attribution locale utilise les Greeks initiaux :
Les P&L comptables du snapshot sont :
Le changement de probabilité d’un scénario est :
Les règles peuvent déclencher invalidation fondamentale, données insuffisantes ou périmées, stop prudent, sortie temporelle, objectif complet ou partiel, IV crush, liquidité détériorée, espérance restante négative et dépassement CVaR. L’action finale suit la priorité :
HOLD < WATCH < REDUCE < EXIT_REVIEW < DATA_STALE
< BLOCKED_INSUFFICIENT_DATA < THESIS_INVALIDATED
Une baisse d’au moins 20 points d’un scénario ou un changement de régime
transforme aussi HOLD en WATCH. Chaque trigger conserve valeur observée,
seuil, date, sévérité, action suggérée, données requises et confiance.
La divergence thèse/marché est classée :
thesis_weaker_than_market
si min(Δp) < -10 points et P&L total >= 0
market_weaker_than_thesis
si min(Δp) >= 0 et P&L total < 0
aligned_or_inconclusive
sinon
L’impact d’exécution courant est conservé comme diagnostic séparé. Cette attribution de premier/deuxième ordre ne doit pas être confondue avec une réconciliation exacte du P&L.
La commande :
ttwo-options position assess \
--dossier <DOSSIER_INITIAL.json> \
--current <SNAPSHOT_ACTUEL.json> \
--output reports/v11/position_monitor.json
ttwo-options position replay \
--trajectory fixtures/v11/position_trajectory.example.json \
--output reports/v11/position_trajectory.jsonLa première commande évalue un snapshot fourni ; la seconde rejoue la fixture chronologique par le même moteur. Il n’existe pas encore de daemon, de polling continu ou de suivi automatique des états d’ordres.
| Composant | Statut |
|---|---|
| V10.1 → sélection du pool V11 | utilisé |
| Bayes → poids des quatre régimes | utilisé |
| Dupire → nœuds du modèle local-vol | utilisé |
| 4 modèles × 4 régimes → valorisation | utilisé |
| règles de sortie → P&L simulés | utilisé |
| P&L multi-modèles → allocation entière | utilisé |
| stress/holdout/paper → promotion | utilisé, promotion forcée à false |
| observations → règles déterministes → événements | utilisé avec preuve et revue |
| événements approuvés → Bayes | utilisé ; pending/rejected/expired ignorés |
| calibration historique | diagnostics privés réels utilisés ; droits et promotion encore bloqués |
| walk-forward | développement réel limité : 25 observations alignées, 10 OOS |
| covariance factorielle → SDE | diagnostic seulement |
| combo quotes IBKR → previews | utilisé si connecteur injecté par code |
| connecteurs live → CLI par défaut | non configurés |
| position monitor → broker | advisory-only, aucune mutation |
Cette table est importante : la présence d’un module ne signifie pas qu’il contrôle déjà une décision en aval.
- V10.1 construit calls, bull spreads et butterflies sur des contrats listés.
- V11 exécute 16 couples modèle/régime par candidat.
- Les contraintes entières, le cash et
NO_TRADEsont évalués explicitement. - Les rapports conservent provenance, paramètres, warnings, métriques et blockers.
- La frontière d’ordre est interdite par contrat et par tests.
- priors et likelihoods bayésiens ;
- drifts et paramètres de saut ;
- paramètres Heston ;
- taux, dividende et FX configurés ;
- surface locale extraite d’une chaîne synthétique ou partielle ;
- coefficients des trois profils ;
- seuils de sortie et de stress ;
- approximation Black-Scholes conditionnelle des trajectoires.
- comparer la sensibilité de structures sous les mêmes hypothèses ;
- détecter qu’une structure est fragile à certains modèles ou coûts ;
- conserver cash si son objectif domine les allocations ;
- préparer une watchlist ou un plan de paper validation.
- considérer un posterior comme une probabilité vraie de GTA VI ;
- considérer un P&L attendu comme un rendement promis ;
- transformer un score ou un rang en recommandation ;
- réutiliser un holdout contaminé pour promouvoir une stratégie ;
- présenter une quote jambe par jambe comme un fill combo ;
- envoyer, modifier, annuler ou exercer un ordre.
Les paramètres sont versionnés dans :
configs/thesis_scanner/default.yamlpour V10.1 ;configs/intelligence/v11.yamlpour V11.
Le profil fast_fixture V11 de démonstration utilise notamment :
paths=1000
steps=90
horizon_days=180
seed=20260728
budget_eur=1000
maximum_loss_eur=1000
maximum_contracts=4
candidate_pool_size=6
Une identité stable est calculée à partir des inputs principaux. Les seeds
séparent les modèles et régimes. Un même jeu d’inputs et une même date de
création injectée dans les tests donnent les mêmes trajectoires et résultats.
Le manifeste conserve run_id, hash de configuration, hash de données, hash
d’inputs, versions, durées par étape, mémoire mesurée, cache déterministe et
statut de reprise. Les profils autorisés sont fast_fixture, research,
validation et exhaustive ; aucun profil production_live n’existe.
La livraison V11 est contrôlée par :
.venv/bin/python -m pytest -q
.venv/bin/ruff check .
.venv/bin/mypy src scripts
.venv/bin/python scripts/export_offline_schemas.py --check
.venv/bin/python scripts/validate_offline_artifacts.py
.venv/bin/python scripts/validate_research_registry.py
.venv/bin/python scripts/phase10_release_audit.py --check
.venv/bin/python scripts/phase11_extension_gate.py --check
.venv/bin/python scripts/security_gate.py
.venv/bin/pip checkLa validation actuelle couvre :
- schémas et policies ;
- cutoff, fraîcheur, unités, provenance, doublons et contradictions ;
- Bayes, waterfall, caps, sensibilités et probabilités valides ;
- covariance PSD ;
- reproductibilité, convergence et diagnostics des quatre modèles ;
- Dupire, arbitrage, Heston, sauts et fallbacks ;
- métriques, stress et règles de sortie ;
- allocation entière, concentration, Greeks, cash et
NO_TRADE; - connecteurs point-in-time mockés ;
- calibration et walk-forward fail-closed sans look-ahead ;
- rejet des adaptateurs capables d’ordonner ;
- monitoring, invalidation et replay multi-date ;
- property tests, pipeline, rapports autonomes et schémas exportés ;
- scan de secrets et frontière globale d’exécution.
Le workflow .github/workflows/offline-validation.yml exécute ces contrôles et
génère les rapports fixtures sans connexion live.
Cette validation prouve le comportement du logiciel sur les cas testés. Elle ne valide pas une stratégie TTWO.
- La fixture V10.1 livrée est synthétique.
- Les priors, likelihoods, paramètres de régime et scores sont
calibration_required. - La surface Dupire n’est pas une calibration globale sans arbitrage.
- Le repricer Monte-Carlo est européen/conditionnel entre les contrôles américains V10.1.
- Le facteur de covariance livré par défaut ne contient que TTWO.
- Le calendrier de marché requis n’est pas configuré dans le run offline.
- Les connecteurs SEC/FRED/RSS/Trends/IBKR ne sont pas appelés par défaut.
- Google Trends API reste un accès alpha limité.
- Les droits OPRA,
conId, livrables, combo quotes, commissions et marge restent à vérifier. - Les holdouts V7–V9 sont contaminés.
- Le framework de holdout/walk-forward a produit un diagnostic réel sous droits conditionnels, mais le minimum formel, le holdout et le paper trading ne sont pas terminés.
- Le suivi de position est un calcul sur snapshot, pas une surveillance autonome.
- Cox, Ross et Rubinstein, modèle binomial et exercice anticipé ;
- Merton, diffusion avec sauts ;
- Heston, volatilité stochastique ;
- Dupire, volatilité locale ;
- QuantLib, moteur finite-difference américain ;
- OCC, risques contractuels des options ;
- IBKR TWS API et abonnements de marché ;
- OPRA pour les données consolidées options ;
- SEC EDGAR, FRED, Take-Two RSS et Google Trends pour les données externes.
Les liens primaires et limites d’intégration sont détaillés dans
docs/architecture/V11_PROBABILISTIC_STRATEGY_INTELLIGENCE.md.
- OPRA est le flux de données temps réel des options américaines ; OPRA n’exécute aucun ordre.
- Le port V11 sait recevoir des cotations options et combo en lecture seule via un adaptateur TWS/IB Gateway injecté. Le socket paper non secret est documenté ; le dépôt n’embarque ni authentification IBKR ni abonnement de marché.
- Les quotes combo IBKR doivent valider les spreads et butterflies, car une construction bid/ask jambe par jambe ne prouve pas un prix combo exécutable.
- Les droits de marché, abonnements,
conId, livrables, commissions et marges du compte IBKR restent à vérifier sur une session réelle. - Les éventuels secrets d'un fournisseur à jeton resteront exclusivement dans l’environnement et ne devront jamais être enregistrés dans le dépôt, les fixtures ou les rapports. IBKR TWS utilise une session locale, pas une clé API.
- Le mode fixture/offline restera disponible pour les tests reproductibles.
- Une donnée périmée devra bloquer la création d’un ticket exploitable.
- Une éventuelle exécution automatique constituerait un projet distinct, nécessitant une validation explicite et de nouveaux garde-fous.
- Tous les tickets restent des previews avec
confirmation humaine,
transmit=false,what_if=trueetorder_capability=forbidden.
Checklist de livraison :
- Stabiliser les calculs contractuels et les scénarios Python.
- Stabiliser le dashboard autonome, Top N et les tests d’accessibilité.
- Implémenter une frontière IBKR/OPRA étroite, injectée et lecture seule.
- Exécuter une campagne source-backed sur session IBKR/OPRA autorisée et valider fraîcheur, droits, contrats, quotes combo, commissions et marges.