Passer au contenu
Toutes les stratégies

Stratégies

BTC COIN-M US-Saisonnalité de continuation du momentum en séance, long-short (instrument unique BTCUSD_PERP.BINANCE_CM, barres de 1 h OHLCV uniquement, entrer dans le sens d'une impulsion significative en début de séance US et suivre la continuation intrajournalière jusqu'à la clôture de la séance, 3 paramètres)

Résultat: Abandonné

BtcCmInverseUsSessionMomentumContinuationLS

Filtre de backtest : - métriques non fiables : 648 transactions / 1409 jours de données constituent des éléments probants insuffisants (il en faut >=5 transactions sur >=10 jours) — augmentez la fréquence des signaux…

Hypothèse

Une stratégie LONG-SHORT, sur un seul instrument, de calendrier/saisonnalité portant sur le perpétuel inverse Binance COIN-M BTCUSD_PERP.BINANCE_CM (marge en BTC, preneur au coût aller-retour d’environ 0.06%, OHLCV uniquement — une seule jambe, elle évite donc le piège du COIN-M multi-jambes/financement data_unavailable dans L20/L34 ; les barres perpétuelles BTC CM disposent de tout l’historique du catalogue). L’avantage ne relève ni du retour à la moyenne NOT, ni d’une cassure de range NOT, ni du financement……Afficher plusAfficher moins

Une stratégie LONG-SHORT, sur un seul instrument, de calendrier/saisonnalité portant sur le perpétuel inverse Binance COIN-M BTCUSD_PERP.BINANCE_CM (marge en BTC, preneur au coût aller-retour d’environ 0.06%, OHLCV uniquement — une seule jambe, elle évite donc le piège du COIN-M multi-jambes/financement data_unavailable dans L20/L34 ; les barres perpétuelles BTC CM disposent de tout l’historique du catalogue). L’avantage ne relève ni du retour à la moyenne NOT, ni d’une cassure de range NOT, ni du financement NOT, ni des liquidations NOT, ni d’une approche transversale NOT — c’est une anomalie TIME-OF-DAY intrajournalière : l’impulsion directionnelle formée à l’ouverture du bureau US tend à PERSIST pendant la session US. Mécanisme : chaque jour, mesurer le rendement de BTC sur une fenêtre de signal fixe en début de session US (13:00->15:00 UTC). Si le rendement de la fenêtre dépasse un seuil d’entrée en valeur absolue (une impulsion directionnelle récente et significative plutôt que du bruit), entrer à la clôture de la barre 15:00 UTC, dans la direction SAME, et conserver la position pendant la continuation jusqu’à l’heure de sortie à la clôture de session (21:00 UTC), avec au maximum une position par jour. Acheminement délibéré vers COIN-M pour deux raisons : (1) le plancher de frais d’environ 0.10% CM est inférieur au plancher 0.15% USD-M, ce qui laisse davantage de marge à un modeste avantage de continuation intrajournalière pour couvrir les coûts ; (2) BINANCE_CM est sous-représenté (3.4% contre une cible de >=5%) et il s’agit d’un usage légal à une seule jambe de BTC-OHLCV CM selon L20. Seulement 3 paramètres (durée de la fenêtre de signal, seuil d’entrée, multiplicateur de stop ATR) pour éviter les échecs dus au surajustement qui ont éliminé 248 hypothèses précédentes.

Reprendre l’itération. Le retour indique que l’abandon précédent résultait d’un artefact du processus (mauvaise liaison de la méthode statique Layer-2, verdicts de performance QA sur un test rapide non optimisé, saturation des créneaux de backtest). Le mécanisme reste donc volontairement intact : même référence latched-13:00-UTC, même entrée dans le sens de la continuation, même sortie calendaire, même dimensionnement à COIN-M contrat entier, mêmes trois paramètres réglables et mêmes limites. Comme soumettre à……Afficher plusAfficher moins

Reprendre l’itération. Le retour indique que l’abandon précédent résultait d’un artefact du processus (mauvaise liaison de la méthode statique Layer-2, verdicts de performance QA sur un test rapide non optimisé, saturation des créneaux de backtest). Le mécanisme reste donc volontairement intact : même référence latched-13:00-UTC, même entrée dans le sens de la continuation, même sortie calendaire, même dimensionnement à COIN-M contrat entier, mêmes trois paramètres réglables et mêmes limites. Comme soumettre à nouveau un code identique octet par octet échoue au contrôle de hachage inchangé, j’ai apporté un changement substantiel là où le code était réellement le plus faible : le stop de protection ATR est désormais testé par rapport au LOW/HIGH de la barre, au lieu de seulement CLOSE. Sur des barres de 1 heures, un stop évalué uniquement à la clôture ne se déclenche jamais si une barre franchit le niveau puis clôture à nouveau à l’intérieur ; une session perdante pouvait donc subir une excursion d’ampleur arbitraire jusqu’à la sortie calendaire 21:00. Le stop est le seul élément qui limite ce risque, et le sous-estimer correspond précisément au défaut de stop à la clôture de barre contre lequel les règles de codage mettent en garde. Le déclenchement a lieu en cours de barre ; la sortie s’exécute toujours à la clôture de la barre via l’ordre de marché du modèle de base, sans supposer de prix d’exécution intrabarre. J’ai aussi déclaré _param_bounds pour les trois paramètres à limites (signal_window_hours [1,5], entry_threshold [0.002,0.02], atr_stop_mult [1.0,4.0]), afin que l’optimiseur ne puisse pas explorer des valeurs que le code réécrit silencieusement — la docstring promettait déjà cette concordance. Vérification dans le catalogue pour la période du bac à sable (BTCUSD_PERP.BINANCE_CM barres de 1 heures, derniers ~830 jours) : l’impulsion 13:00->15:00 UTC dépasse le seuil 0.6% pendant 296 jours sur 726, les entrées sont donc fréquentes et l’exécution ne risque pas de manquer de transactions ; l’impulsion absolue médiane est de 0.46%, nettement supérieure aux frais aller-retour d’environ 0.10% CM que la continuation doit couvrir.

Espérance négative sur un échantillon fiable de 748 transactions / 6.1 ans : avg_trade_return_pct est -0.109% (inférieur à zéro, avant même les ~0.10% CM de frais aller-retour), profit_factor 0.84, Sharpe -0.81, compte liquidé à -100%. La mise en œuvre respecte fidèlement l’hypothèse et le processus d’entrée fonctionne bien ; le verdict est donc celui du marché : l’impulsion en début de session US détermine la direction, mais la continuation intrajournalière réalisée est négative nette dans chaque régime de volatilité et presque chaque année. L’optimisation ne peut pas relever un avantage déjà négatif avant frais ; aucune zone des trois paramètres (fenêtre, seuil, stop ATR) ne rend positive une prime de continuation négative. Les inquiétudes de QA quant à l’avantage sont confirmées sur l’historique complet. abandon_class=negative_expectancy.

Implémentation

Saisonnalité intrajournalière long-short selon l’heure de la journée sur le perpétuel inverse BTC COIN-M (BTCUSD_PERP.BINANCE_CM, barres de 1 heures, OHLCV uniquement). Chaque jour UTC, la clôture de la barre se terminant à 13:00 UTC est mémorisée comme référence de session US ; deux heures plus tard (barre se terminant à 15:00 UTC), l’impulsion de début de session US est mesurée par clôture/référence - 1. Si son amplitude dépasse entry_threshold (0.6% par défaut), la stratégie entre dans la direction SAME —……Afficher plusAfficher moins

Saisonnalité intrajournalière long-short selon l’heure de la journée sur le perpétuel inverse BTC COIN-M (BTCUSD_PERP.BINANCE_CM, barres de 1 heures, OHLCV uniquement). Chaque jour UTC, la clôture de la barre se terminant à 13:00 UTC est mémorisée comme référence de session US ; deux heures plus tard (barre se terminant à 15:00 UTC), l’impulsion de début de session US est mesurée par clôture/référence - 1. Si son amplitude dépasse entry_threshold (0.6% par défaut), la stratégie entre dans la direction SAME — longue sur une impulsion haussière, courte sur une impulsion baissière — pour profiter de la continuation intrajournalière, avec au plus une entrée par jour UTC. La sortie se fait à la clôture de la session US (barre se terminant à 21:00 UTC), au stop fixe de atr_stop_mult x ATR depuis le prix d’entrée, désormais testé en cours de barre par rapport au plus bas/plus haut de celle-ci, ou au plafond de sécurité max_hold_bars si la barre 21:00 est manquante. Le dimensionnement est correct pour un contrat inverse : risk_pct des fonds propres divisé par la fraction de stop donne un notionnel de USD, plafonné à max_gross_frac des fonds propres, converti en contrats $100 WHOLE via contracts_for_notional (jamais avec la formule linéaire fonds propres/prix). Trois paramètres ajustables : signal_window_hours, entry_threshold, atr_stop_mult.

Résultats de vérification

CLEAN RESTART 2026-09-04 — l’historique des verdicts et les enregistrements d’apprentissage de cette exécution ont été supprimés, puis elle a été relancée à partir de la vérification. L’abandon précédent était dû au pipeline, pas au marché : le harnais Layer-2 liait mal les méthodes d’assistance @staticmethod (corrigé), QA émettait des verdicts de performance définitifs sur un test de fumée non optimisé (supprimé — QA évalue désormais uniquement la correction), et les délais d’attente du bac à sable venaient d’un manque de créneaux de backtest (corrigé). L’hypothèse et le code de la stratégie sont inchangés. Vérifiez le code sur ses mérites ; la performance sera déterminée plus tard par le backtest complet et l’optimiseur.

Aucun changement de code nécessaire ; signaler à l’analyste l’incohérence des champs de métriques.

avg_holding_bars est indiqué comme 0.0, tandis que avg_holding_period vaut « 5h 13m » — une bizarrerie de présentation des métriques, pas un défaut du code. La logique de détention elle-même (entrée à la clôture de la barre 15:00, sortie à la clôture de la barre 21:00 ou au déclenchement intra-barre du stop ATR, horizon d’environ 6 barres) est correcte et cohérente avec la moyenne de 5h13m.

Ajouter éventuellement une vérification explicite de position à plat dans should_enter() par précaution ; le comportement est correct tel quel grâce à la suppression des entrées par le modèle de base.

should_enter() ne vérifie pas à lui seul que la stratégie est à plat ; il s’appuie sur le modèle de base pour supprimer les entrées lorsqu’une position est ouverte. Comme la barre d’entrée (heure ts 14) se produit une fois par jour UTC et que la détention se poursuit jusqu’à la sortie 21:00 le même jour, une seule occasion d’entrée se présente par jour ; la règle prévue d’« au plus une position par jour » est donc respectée en pratique — mais cette garantie est implicite dans le modèle de base plutôt qu’explicite ici.

Le bac à sable non optimisé est négatif : total_return -22%, Sharpe -0.55, avg_trade_return_pct -0.139% (inférieur à zéro, pas seulement au seuil des frais), profit_factor 0.79, et les commissions représentent 19.16% du brut sur 296 transactions intrajournalières. C’est la signature classique d’un « avantage de continuation intrajournalière qui ne couvre pas les frais aller-retour » : l’impulsion du signal 0.6% filtre les entrées, mais ne dit rien sur le mouvement de continuation réalisé ; ici, le rendement de……Afficher plusAfficher moins

Le bac à sable non optimisé est négatif : total_return -22%, Sharpe -0.55, avg_trade_return_pct -0.139% (inférieur à zéro, pas seulement au seuil des frais), profit_factor 0.79, et les commissions représentent 19.16% du brut sur 296 transactions intrajournalières. C’est la signature classique d’un « avantage de continuation intrajournalière qui ne couvre pas les frais aller-retour » : l’impulsion du signal 0.6% filtre les entrées, mais ne dit rien sur le mouvement de continuation réalisé ; ici, le rendement de continuation par transaction est négatif net après les coûts d’environ 0.06-0.10% CM et la rotation élevée. Ce n’est NOT un défaut de code (win_rate 0.43, PF 0.79 et Sharpe -0.55 sont des valeurs ordinaires, pas la signature d’un bogue de polarité ou de dimensionnement inverse). regime_performance montre que l’avantage n’apparaît que dans le tercile de volatilité « normal » (+7.1%, Sharpe 0.54) et qu’il est fortement négatif dans les conditions calmes ou tendues. L’analyste devrait vérifier sur l’historique complet si une zone de paramètres (entry_threshold, signal_window_hours) produit un rendement de continuation par transaction qui dépasse nettement les frais aller-retour de CM ; sinon, l’hypothèse de continuation selon l’heure de la journée n’est pas étayée. Ceci est consultatif et ne bloque pas.

Revue du backtest

Sharpe
-0,81
Rendement total
-100,00%
Drawdown max
100,00%
Total des transactions
748
Taux de réussite
42,2%
Facteur de profit
0,84

Implémentation fidèle : les transactions correspondent au mécanisme hypothétique de continuation long-short de session US (748 transactions, environ 373 longues / 375 courtes, une entrée par jour, fenêtre de signal 13:00->15:00 et sortie 21:00 correctes).

Échantillon fiable et de grande taille sur 6.1 années (50,537 barres) — le résultat est statistiquement significatif, ce n’est pas du bruit.

Le pipeline d’entrée fonctionne correctement (875 signaux = 875 ordres soumis, aucune exclusion due à une taille nulle / un notionnel minimum / un manque de liquidités) ; il s’agit donc d’un verdict du marché, pas d’un défaut du code.

Espérance négative : avg_trade_return_pct -0.109% est BELOW ZERO, et pas seulement inférieur au plancher de frais d’environ 0.10% CM — le mouvement de continuation intrajournalier est négatif net avant même la prise en compte des coûts.

profit_factor 0.84 (<1), win_rate 0.42, espérance -$42.64/transaction, Sharpe -0.81, Sortino -0.74.

Compte liquidé (total_return -100%, max_drawdown 100%) sur 2025-05-18.

Pertes dans tous les régimes de volatilité (calme -53%, normal -100%, tendu -16%) et toutes les années civiles sauf 2022 — aucune région de paramètres ne montre d’avantage persistant.

La commission 16.66% du brut confirme la signature classique « l’avantage ne couvre pas les frais aller-retour » signalée par QA ; le seuil d’impulsion filtre les entrées, mais ne dit rien sur la continuation réalisée, qui est négative nette.

Analyse

Filtre de backtest : - métriques non fiables : 648 transactions / 1409 jours de données constituent des éléments probants insuffisants (il en faut >=5 transactions sur >=10 jours) — augmentez la fréquence des signaux ou élargissez la fenêtre

Historique des itérations

Échec de la vérification (couche 4 — examen QA) [classe=premise_falsified] : - L’hypothèse de continuation du momentum sur US sessions est réfutée : entrer dans le sens de l’impulsion 13:00-15:00 UTC et conserver la position jusqu’à la clôture 21:00 donne un résultat net LOSER. profit_factor 0.757 (<1), total_return -43.11%, avg_trade_return_pct -0.169% (négatif), espérance -$105, Sharpe -0.145, alpha -0.107, sur 296 transactions bien mesurées. win_rate 0.432 avec un rendement symétrique (avg_win $760 ~= avg_loss……Afficher plusAfficher moins

Échec de la vérification (couche 4 — examen QA) [classe=premise_falsified] : - L’hypothèse de continuation du momentum sur US sessions est réfutée : entrer dans le sens de l’impulsion 13:00-15:00 UTC et conserver la position jusqu’à la clôture 21:00 donne un résultat net LOSER. profit_factor 0.757 (<1), total_return -43.11%, avg_trade_return_pct -0.169% (négatif), espérance -$105, Sharpe -0.145, alpha -0.107, sur 296 transactions bien mesurées. win_rate 0.432 avec un rendement symétrique (avg_win $760 ~= avg_loss $765) — l’impulsion précoce de US ne se prolonge qu’environ 43% du temps : l’effet exploité par la stratégie est donc absent (légèrement inversé), et après les frais aller-retour d’environ 0.10% CM sur une détention d’environ 6 h, le résultat se dégrade. L’effet de levier 2.0 amplifie cette perte jusqu’à un drawdown de 61.7% (CI à 90%). La direction est correctement mise en œuvre (continuation conforme aux spécifications ; aucun bogue de polarité ou de séquencement) : cette mise en œuvre est fidèle, mais les données réfutent son hypothèse de saisonnalité. - L’effet de levier 2.0 avec avg_position ~87% transforme le pari de session sans avantage en un drawdown de 61.7% (CI à 90.2%) et end_unrealized -11.9% — un risque accru avec une espérance négative.

Stratmill est un outil de recherche et de paper trading, pas un conseil financier ni un courtier. Les résultats de backtest et de paper trading sont hypothétiques. Le trading comporte un risque de perte.