Skip to content

feat(qc): BitcoinRegimeGate execution separee mesuree — NO BEATS - #20012

Merged
myia-ai-01 merged 1 commit into
mainfrom
feature/20006-bitcoin-settled
Oct 9, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
feature/20006-bitcoin-settled

Conversation

@jsboige

@jsboige jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner

Grain: DEEP/qc — lane myia-po-2024:CoursIA-3 — prev: MED/qc #19956

Résumé

Bras d'exécution préinscrit dans #20006 : attendre l'extinction de l'autre position et l'absence d'ordres ouverts avant de demander l'achat. Signal SMA50/ROC20, décision hebdomadaire, résolution journalière, frais et références inchangés. execution=base reste le défaut ; settled est une option mesurée, pas une promotion de performance.

Trois fichiers : algorithme, tests de production avec doublures Lean isolées, README français. Aucun notebook, catalogue ni registre partagé modifié.

Résultat et limites

Sur 2016-01-04 → 2026-06-30, 2 636 rendements communs :

Bras Sharpe sans taux sans risque CAGR Pire baisse
base 1,3139 16,54 % −15,21 %
settled 1,3283 16,22 % −16,28 %

NO BEATS contre QQQ détenu, SPY et 60/40 : p Holm 0,2907 pour les trois. Écarts +0,3675 / +0,4445 / +0,3933 ; IC95 [−0,1997 ; +0,9175] / [−0,2086 ; +1,0519] / [−0,2527 ; +1,0136]. Bootstrap circulaire 21 séances, 10 000 tirages, graine 18921. Grille/frais doublés non lancés selon la condition préinscrite.

Écart settled − base descriptif hors Holm : +0,0145, IC95 [−0,1701 ; +0,2079], p unilatérale 0,45 ; aucune preuve de non-infériorité. Découpages 2016-2019 / 2020-2022 / 2023-2026 descriptifs, sans apprentissage ni entraînement. Pas de validation prospective indépendante : signal publié et correctif choisi après constat du défaut.

Exécution contrôlée

  • Base reproduite : 250 ordres, 233 remplis, 17 invalides pour pouvoir d'achat insuffisant.
  • Settled : 237/237 remplis, zéro invalide/annulé. Reconstruction des événements de tous les ordres : 119 achats vérifiés après extinction de l'autre position et sans ordre ouvert, aucune position courte, aucun ordre ouvert en fin. Verdict : défaut corrigé sur la fenêtre mesurée.
  • Exposition moyenne 0,908 (base 0,966), 238 clôtures sans position. Délai moyen décision → soumission 1,3 jour, puis soumission → remplissage 1,009 jour (1 à 2,125). Ce n'est pas une bascule simultanée.
  • Les partial fills et refus/annulations ne se sont pas produits dans le bras QC ; tests locaux de ces scénarios, pas preuve d'observation de courtage.
  • Aucun achat en callback, intention effacée avant soumission, reprise d'une vente échouée seulement à la décision suivante.

Validation et preuves

Projet QC 37556083 ; compilation 4cae21e292a9ae72a08400efbbf4852c-0ab2adefcfca8c02e9f389c44a8f1251, BuildSuccess. Empreinte main.py a73a6fe144a7 relue identique. Cinq backtests terminés, lectures à completed:true, fin demandée atteinte sans troncature.

  • base : a501ee985137dec6dc5824e463592284
  • settled : 8f6c88d89021fb068742bb31ed017a5b
  • Les identifiants complets des trois références sont dans leurs backtest_id.txt et plans conservés.
  • python -m pytest .../tests/test_execution_settled.py -q : 25 réussis, dont initialisation, isolation du stub, garde de propriété native, transitions et modes de références.
  • py_compile, diff-check et contrôle prose quantitative relancés avant commit.
  • Premier lancement échoué à l'initialisation : self.execution collisionnait avec la propriété native IExecutionModel ; corrigé en _execution_mode, garde de régression ajoutée. Traces échouées préservées, non analysées comme rendement.
  • SOTA-OK : moteur Lean QC Cloud, aucune simulation de rendement substituée. Quantités/frais/ordres calculés par Lean ; l'API native SetHoldings triait les cibles mais n'attendait pas les ventes avant achats lorsque le marché était fermé (source Lean 80e7843f645673bcbeaab963049f76f20f6785e1).
  • Garde de discrétion : un seul hit large, le nom public de l'enum Lean INTERACTIVE_BROKERS_BROKERAGE dans la doublure de test ; garde stricte vide. Aucun élément privé.

Traces complètes : G:\Mon Drive\MyIA\IA\QC-traces\20006-bitcoin-settled\run2 (plans, empreintes, séries, statistiques, ordres, results_settled.json, execution_audit.json). Mesure initiale #19929 conservée.

Closes #20006. See #19929. See #19821.

🤖 Generated with Claude Code

Closes #20006. Sharpe 1.3283, CAGR 16.22%, MaxDD 16.28%; NO BEATS, Holm 0.2907. 237 orders filled, zero rejected on measured window; base stays default.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@github-actions github-actions Bot added the variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur) label Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20012 (feat(qc): BitcoinRegimeGate execution separee mesuree — NO BEATS) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA
pr: 20012
head: acee73a
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: e1d3e15c7a948aa877da3e43b0e183cd84f5236b2df99840aeec8b15802c83cc
diff-files: 3
diff-additions: 807
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20012
organ-rc: 0
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 0d8e83f into main Oct 9, 2026
36 of 37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-adjacency-deep-med Adjacence DEEP/MED hors LIGHT : §2 l'autorise si substance distincte (coordinateur)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

BitcoinRegimeGate : mesurer une execution separee des ventes et achats

2 participants