Trial / Judge / Ledger - a calibrated rejection machine for trading-strategy claims. Not a trading bot; nothing here places orders.
Project description
tjl — Trial / Judge / Ledger
自分で作った最強の盾を、自分で作った最強の矛で打ち破る。 矛盾を乗り越えるプロジェクトであれ。
これは自動売買ボットではありません。戦略クレームの「却下機械」です。 X に毎日流れてくる「このルールで勝てる」という主張を、較正済みの5ゲートで安く・速く・ 記録付きで裁く — その却下の質と台帳こそが主産物です。何も発注しません(全コードが 読み取り専用。発注 API は存在しません)。
English summary: a calibrated rejection machine for trading-strategy claims — not a trading bot. It measures its own false-positive rate, runs every claim through a 5-gate gauntlet, and keeps an append-only public ledger of every trial. Nothing here places orders.
なぜ「却下機械」なのか — 看板の数字
この機械の希少性は戦略ではなく、自分の検定器の偽陽性率を実測してあることです:
- エッジゼロのヌルデータでも、スクリーニングは 32〜42% の確率で「有望」と光る (トレード分布の形状別に実測: williams 型 42.4% / gap-fade 型 39.4% / overnight 型 32.4%)
- 素朴な確認基準の偽確認率は最大 21.8% — だから確認閾値は候補ごとに ヌル・ブートストラップから導出する(偽確認率 ≤5% を満たす中で検出力最大の点)
- 測っていない 'promising' はスクリーン陽性にすぎない — 本リポジトリでは公式に そう格下げ済み(protocol v1)
台帳の現在地(2026-07-07、公開タイムスタンプ付き)
累積試行 N = 37(append-only、docs/research/ledger/trials.jsonl — 行削除は pre-commit が拒否)
composite: pass 28 / promising-caveated 8 / reject 1(source: manual 29 / x-ingest 8)
事前登録: 1件(12ヶ月確認中)/ Q4 待機 2件(1枠を規則で争う)/ 退役 1件 / 棚上げ多数
フォワード確認済みの生存者: 0件 ← この数字を隠さないことがこのリポジトリの流儀
家系別の死因地図(どの形がどのゲートで死ぬかの経験統計):
| 家系 | 戦績 | 主な死因 |
|---|---|---|
| trend_follow | 19戦17勝 | —(survivorship×2) |
| dip_buying | 6戦2勝 | survivorship×4(死にゆく銘柄を区別できない) |
| regime_timing | 6戦5勝 | 品質フィルタで復活する家系 |
| band_reversion | 3戦3勝 | — |
| breakout | 2戦1勝 | PIT(ユニバース固有性) |
注意: pass 28件はエッジの証明ではなく「登録資格」です。 登録された候補だけが 登録後データで12ヶ月確認され、現時点の確認済み生存者はゼロです。
5ゲート・ガントレット(protocol v2)
すべての候補は同じ審判を受け、結果は1行ずつ台帳に刻まれます:
- COST — IBKR 風コスト($0.005/株・最低$1・スリッページ 5bps)適用後に net > 0
- SURVIVORSHIP — 2021年時点の著名銘柄47本(のちの死者を含む・後知恵で選ばない)の 最悪ケースユニバースでも net > 0 かつ PF ≥ 1
- MARKET_REGIME — SPY 200SMA でレジーム分割し、負け側が勝ち側の25%以内
- PIT — バックテスト開始時点の S&P500 実構成(point-in-time ヴィンテージ11本、 2015〜2025)でも net > 0 — ユニバース固有の pass を殺す
- FOOTPRINT_NULL — 候補の実足跡(日次エントリー本数+実現保有分布)を再現した ランダムエントリー100本のヌル分布で、観測 PF ≥ 中央値。 max_hold を伸ばして市場ドリフトを飲む偽装を殺す — 自前の進化探索(85変異)が この抜け道で PF 6.14 を出した数時間後に、その発見ごとゲート化された
第5ゲートの遡及適用は既存 pass 4候補を4段階に判別しました: 100%ile(唯一のヌル超え → 登録)/ 87 / 73 / 16(ドリフト捕捉と確定 → 退役)。
アーキテクチャ
[毎日のフライホイール(ET、systemd 常駐・すべて読み取り専用)]
プレマーケット・ギャップスキャン(8:30〜30分毎、gap≥5%・上位10)
→ TJL フィルター(10:05〜、SMA200・プレマ高値/前日高値ブレイク)
→ ペーパートレード(リスク管理+killswitch、16:10 決済)→ Telegram 通知
→ 16:20 フルアーカイブ7系統: 1分足 / 資金フロー+FINRA空売り / ニュース+トーン /
決算カレンダー / F&G+VIX / クレーム混雑軌跡 / 想定フィル監査(コストゲートの自己監査)
[研究パイプライン]
X 投稿 → hermes(Grok)が構造化+原文照合 → 制約付き DSL(exec なし・6ファクトリ・
述語ホワイトリスト)→ 5ゲート → 台帳 N+1 → pass なら較正・ロバストネス近傍・
新鮮な目の実装監査・時間反転検査 → 事前登録(枠: 同時2・四半期新規1)→
登録後データのみで月次確認(12ヶ月・基準は候補別に較正から導出して凍結)
エージェント分業: hermes(常時稼働の手 — X 読取・キュー投入・自律検定・告知)/ dev loop(判断と制度 — 受け入れ監査・宣言・登録執行)/ 決定論コード(執行と記録 — 数値を LLM に作らせない)。統治は Tier 制: エージェント自律は拒否権つき(Tier 1)、 ライブ発注・killswitch 解除・実マネー・検定基準の変更は人間必須(Tier 2) — 「エージェントが自分の合格基準を変えられる状態は Goodhart 化する」ため。 git 規律も pre-commit フックが内容で強制(台帳追記専用・登録不変・宣言凍結・ ユニバース変更は PIT スナップショット同梱)。
専有データ資産
注意: data/ はすべて gitignore — clone してもデータは付いてきません。 リポジトリが運ぶのはコード・config(PIT ヴィンテージ含む)・研究ノート・台帳のみ。
毎晩自動蓄積している観測(自己記述スキーマ tjl.*.v1 ×18種)のうち、
後から買い戻せないもの: 1分足(公共からは約30日で消える)/ 当日の資金分布 /
判断時刻の実測 quoted spread / クレームの favorite_count 軌跡 / スキャン・paper・
フィル監査という「当時の判断の一次記録」。成長率は実測 ~1MB/日。
この資産の上に第4の柱(専有観測エッジ)の憲法が立ちます:
「公共データの上でエッジを探さない。私たちにしか無い観測の上でだけ仮説を立てる。」
前方宣言済みの仮説8本(active 1 / waiting 6 / shelved 1)が
config/declared_hypotheses.json で凍結され(pre-commit が改竄を拒否)、
成熟ウォッチャーが解禁を告げます。
正直さの記録(まだ言えないこと)
- 実測コスト(2晩・191銘柄・場中中央値 20bps)は成熟前。日足推定器(ρ=0.18)も 1分足プロキシ(ρ=0.32)も実測と相関せず却下済み — 待つ以外にない
- survivorship ゲートは完全上場廃止銘柄(SIVB 等53件)のデータ欠損で 最悪ケースをなお過小評価している
- X クレームの出所照合: verbatim はキュー10件中1件のみ(divergent 6・404 が1)。 全 verdict は「抽出されたルールの検定」であって元投稿の主張の検証ではない
- 唯一の登録候補には gate-feedback 由来の選択バイアス caveat が永久記載されている — だからこそ確認は登録後の未来データのみ
動かす
uv sync
./scripts/check.sh # ruff + pytest(オフラインで常時グリーン)
uv run python -m tjl.research list # 戦略一覧
uv run python -m tjl.research gauntlet <name> # 5ゲート(台帳に N+1 が刻まれる)
uv run python -m tjl.promote status # 登録と確認の現在地
uv run python scripts/edge_maturity.py # 宣言仮説のデータ成熟
uv run python -m tjl.viewer # 読み取り専用ダッシュボード(:8787)
常駐系(スケジューラ・hermes・Telegram・moomoo shadow)の運用は docs/playbook.md、
安全不変条件は AGENTS.md、思想の全文は docs/vision.md。
リポジトリの歩き方
| 場所 | 中身 |
|---|---|
docs/vision.md |
憲法(エピグラフ・4本柱・不変条件) |
docs/promotion-protocol.md |
昇格プロトコル(v0→v1→v2 の改訂史ごと) |
docs/research/ledger/ |
台帳(trials.jsonl・registrations/ — 公開タイムスタンプ) |
docs/research/*.md |
較正・却下・edge hunt の研究ノート(KB front-matter 付き) |
docs/inbox/ |
X 記事の一次記録+考察(原文照合ラベル付き) |
src/tjl/ |
フライホイール+研究ハーネス(全部読み取り専用) |
.claude/skills/ |
運用手順の成文化(/edge-hunt /flywheel-check /gauntlet-pass 等) |
integrations/hermes/ |
常時稼働エージェントの魂と手順(SOUL・SKILL・references) |
来歴
出発点は Humbled Trader のチュートリアル動画(2026-06)を参考にした プレマーケット・スキャナでした。名前の初代の意味(Trend Join Long)は その最初の戦略に由来し、現在の意味 — Trial / Judge / Ledger (試行 → 審判 → 台帳)— は機械が育った後、2026-07-06 に再定義されたものです。 最初の戦略は皮肉にも、自分が生んだ機械の検定でエッジ無しと判定されています。
この機械は3日間(2026-07-05〜07)でビジョン文書から「登録1件を持つ稼働機関」に なりました。数ヶ月後に生存者ゼロでも、この機械は成功しています — 成功指標は 発見の数ではなく、却下の質と記録の信頼性だからです。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tjl-0.1.0.tar.gz.
File metadata
- Download URL: tjl-0.1.0.tar.gz
- Upload date:
- Size: 176.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d91e453a7d36e5d4977551bddda3c31fe53d43fe339b68fee0c45672ba00351
|
|
| MD5 |
e09068a5ef26308a4b1936c4717a9f7e
|
|
| BLAKE2b-256 |
c98e785923edb011bf2363538d4fba56fd776e2c5a02fcd18f51ed68f4b47e45
|
File details
Details for the file tjl-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tjl-0.1.0-py3-none-any.whl
- Upload date:
- Size: 209.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5f9d7b8f5b3387d1e9ec1416ae70ae28d4a44246f5edc96383661efe3836c99
|
|
| MD5 |
08fb5a524ae3d2673a9763c4f438a46f
|
|
| BLAKE2b-256 |
bbc4fdb45f744c335dcc7c708f3836ac83832e10d323ed9c36fe82f71d0b354e
|