Alpha · Guardian Ops

Graphity

แผนที่ จุดเชื่อมโยงของระบบ: order path, close path, ใครเขียน-ใครอ่านไฟล์ข้อมูล, และ single-sources. เปิดดูเพื่อตอบว่า "ถ้าแตะ X แล้วอะไรพึ่งมัน" · อิงจาก graphity.md ที่ตรวจกับโค้ดจริง.

วงจรชีวิตของไม้

trade lifecycle
Signal
strategy.decide() · breakout (ทุกเลน)
Filters
GATEKEEPER · news
WARDEN
risk_guard.evaluate
Broker
open_order +SL/TP
Manage
FADEOUT · AEGIS · RATCHET
Journal
trades.jsonl → learn
Order path is sacred · ไม่มีออเดอร์ถึง broker โดยไม่ผ่าน WARDEN (R-SAFE-2) · ทุกออเดอร์มี SL+TP

4 เลน = 4 process

SSOT · lane_registry.LANES
Trend880880
src/main.py
H1 · index (+XAU shadow)
engine ต้นทาง
Crypto880882
src/crypto_main.py
M15 · BTC / ETH
reuse engine
Gold880881
src/goldbreak_main.py
M5 · XAUUSD
runner แยก
IndexFast880883
src/indexfast_main.py
M30 · US30
reuse engine
Crypto + IndexFast ใช้ engine ของ Trend ซ้ำ (lanes/trend/runner.run_cycle) ด้วย LaneSpec ของตัวเอง · มีแค่ Gold ที่ runner แยก. แยกกันด้วย magic บนบัญชีเดียว; ALPHA_MAGICS รวมทั้ง 4 ให้ WARDEN คุม cap ทั้งบัญชี.
Entry mode (BTC/ETH · 1 ก.ค.): ค่าเริ่มต้นทุกเลน = breakout (Donchian + momentum). เคยลอง ride_symbols (เกาะ EMA8) แล้ว pullback_symbols (ซื้อย่อในเทรนด์) บน BTC/ETH — ถอยกลับ breakout ล้วน (pullback_symbols=[] · ride_symbols=[]) เพราะ pullback เข้าน้อยตอนขาขึ้น breakout เข้าจับได้ทั้งสองทาง. ทอง/ดัชนีไม่ขยับ · ผ่าน WARDEN + off-plan/BE-arm เดิม · forward demo ตัดสิน.

ทางออก · close / reconcile

ปิด 2 ทาง บันทึกครั้งเดียว
A · Manager close
  1. manage_position → CLOSE / PARTIAL / MODIFY_SL
  2. → close_and_record → journal.record_trade_outcome
  3. → _record_close (ohlcv path) → ลบ sidecar
B · Broker close (SL / TP)
  1. reconcile_broker_closes · เจอ sidecar กำพร้า
  2. → get_close_info (close_ts) → path_bars / ohlcv
  3. → excursions(close_ts) → record_trade_outcome → ลบ sidecar
Sidecar คือกุญแจ: เขียนตอนเปิด (entry_context.save) · อ่าน+ลบตอนปิด · sidecar กำพร้า = broker ปิดไป → reconcile เก็บตก. ทั้ง 2 ทางจบที่ record_trade_outcome → journal ครั้งเดียว.

Manage cycle

ทุกแท่งปิด · ไม้ที่เปิดอยู่
FADEOUT
exit_fade · momentum ตาย
AEGIS
aegis_view · เด้งแนว sub-1R
Ladder
partial TP (ปิดอยู่)
RATCHET
broker_trail · BE + trail
runner log แถว action:"AEGIS" ทุกรอบ จาก snapshot เดียวกับที่ manage ใช้ตัดสิน (aegis_view = single source) · observer ไม่ gate.

Data flow · ใครเขียน → ไฟล์ → ใครอ่าน

หัวใจ
_common.log_decision
<lane>_decisions.jsonlBUY/SELL/WAIT · MODIFY_SL · AEGIS
learning/loaders · review.py · context_features
journal.record_trade_outcome (จากทั้ง 2 ทางปิด)
<lane>_trades.jsonlclosed trades · ML label
loaders.load_trades · learning/review · review.py
ohlcv_logger.save_trade_ohlcv (bars จาก path_bars)
trade_ohlcv/<ticket>.jsonเส้นราคา · ละเอียดกว่า TF เลน
excursions (MAE/MFE) · review._replay · load_trade_ohlcv
entry_context.save (ตอนเปิด)
trade_context/<lane>/<ticket>.jsonsidecar · ลบตอนปิด
close path · path_bars · กำพร้า = broker ปิด
account_day._write (เลนแรกของวัน)
account_day.jsonbaseline daily-loss ร่วม
ทุกเลนผ่าน begin_cycle (กัน day-drift)
state.BotState.save
<lane>_state.jsonhalt · pnl · cooldown
state.load ตอน start · kill-switch รอด restart
heartbeat.beat · snapshot.write
heartbeat/ · <lane>_snapshot.jsonliveness · live state
watchdog (heal) · line_cockpit · discord_ask
update_calendar
economic_calendar.jsonปฏิทินข่าว
signals/news/blackout · gate เวลาข่าว

Single sources of truth

แก้ที่เดียว ทุกอย่างตาม
lane_registry.LANES
ไฟล์/ชื่อ/heartbeat ทุกเลน · เพิ่มเลน = แก้จุดเดียว
config/risk.py
safety floors (_DEMO / _LIVE) → WARDEN ผ่าน build_effective_risk
ALPHA_MAGICS
magic ทั้ง 4 → cap ความเสี่ยงทั้งบัญชี (alpha_positions)
manager.aegis_view
decision ของ AEGIS + log = ตัวเดียวกัน (ไม่ drift)
settings.toml
flag / threshold / universe ทั้งหมด (ไม่ลับ)
.env
secret เท่านั้น · ไม่เปิดเพื่อจูน
กฎ layering ทางเดียว: core/ ไม่ import lanes/ · lanes/_common = plumbing ร่วม · runner → import _common + core · *_main = wire เลน. lane_registry เป็น pure data (ไม่ import lanes → ไม่มี cycle).

WARDEN vs AEGIS

โล่ 2 ตัว คนละปลาย
ทางเข้า · pre-trade

WARDEN

src/core/risk_guard.py · ประตูเดียวที่ทุกออเดอร์ต้องผ่าน ก่อนเปิด. เช็ค risk cap / กลุ่ม / SL+TP / default-deny แล้ว บล็อกออเดอร์แย่ไม่ให้เข้า.

ทางออก · post-trade

AEGIS

manager.aegis_view · swing.py · exit หลังเปิดไม้. ปิดไม้กำไรน้อย (sub-1R) เมื่อราคาเด้งจากแนว S/R (close reason AEGIS swing rejection).

ก่อน 26 มิ.ย. 2026 ทั้งคู่ชื่อ "AEGIS" · เปลี่ยน order gate เป็น WARDEN เพื่อแก้ชนกัน. codename ↔ module ทั้งหมดดูที่ docs/ARCHITECTURE.md.