Skip to main content

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行ずつ台帳に刻まれます:

  1. COST — IBKR 風コスト($0.005/株・最低$1・スリッページ 5bps)適用後に net > 0
  2. SURVIVORSHIP — 2021年時点の著名銘柄47本(のちの死者を含む・後知恵で選ばない)の 最悪ケースユニバースでも net > 0 かつ PF ≥ 1
  3. MARKET_REGIME — SPY 200SMA でレジーム分割し、負け側が勝ち側の25%以内
  4. PIT — バックテスト開始時点の S&P500 実構成(point-in-time ヴィンテージ11本、 2015〜2025)でも net > 0 — ユニバース固有の pass を殺す
  5. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tjl-0.1.0.tar.gz (176.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tjl-0.1.0-py3-none-any.whl (209.5 kB view details)

Uploaded Python 3

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

Hashes for tjl-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9d91e453a7d36e5d4977551bddda3c31fe53d43fe339b68fee0c45672ba00351
MD5 e09068a5ef26308a4b1936c4717a9f7e
BLAKE2b-256 c98e785923edb011bf2363538d4fba56fd776e2c5a02fcd18f51ed68f4b47e45

See more details on using hashes here.

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

Hashes for tjl-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e5f9d7b8f5b3387d1e9ec1416ae70ae28d4a44246f5edc96383661efe3836c99
MD5 08fb5a524ae3d2673a9763c4f438a46f
BLAKE2b-256 bbc4fdb45f744c335dcc7c708f3836ac83832e10d323ed9c36fe82f71d0b354e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page