Signal Ingestion
Telethon listener → Gate 1 stale (>120s drop) → Gate 2 SHA256 dedup → ChannelSignalQueue FIFO. Survives restarts via persistent dedup store.
SOODCHIN watches your Telegram / Bale channels, understands BUY / SELL with a DistilBERT two-head classifier fine-tuned on your channel's own style, asks you to Accept / Deny — then fires the MT5 order and manages TP/SL live.
Honest note: best accuracy comes after fine-tuning on YOUR channel's history. Generic model works — trained model usually works far better. Nothing guaranteed in markets.
XAUUSD BUY NOW @ 2384.20
SL 2378.50 TP1 2390.00 TP2 2396.50
Risk 1%
From channel post to broker fill — with dedup gates, AI verify, admin approval and live position management. This is the real Bale Bot architecture, simplified for showcase.
Source of truth
Channel-trained DistilBERT
Hands that trade + guard
Telethon listener → Gate 1 stale (>120s drop) → Gate 2 SHA256 dedup → ChannelSignalQueue FIFO. Survives restarts via persistent dedup store.
MT5 sync → state-aware dedup → regex entities → DistilBERT parse → exposure guard → event save → AI verify → SMA/ATR regime → confidence + trade plan.
Proposal card with inline buttons. Autonomous GOLD mode or 15-sec fallback auto-execute. Telegram failure → auto-execute per config.
Symbol validate → spread < MAX → ATR SL fallback → risk% lot → TP side check → split tickets per TP → order_send with filling-mode loop.
1-second poll: partial close per tp_rules.json (TP1 50% → breakeven, TP2 → TP1…), SL trailing, manual-edit sync, close reports to admin.
/chat agent with FTS5 hierarchy search + RSS forex_news grounding. /propose SQL cards. SQLite ×3: platform, hierarchy, news.
Paste a signal like your channel would post it. Note: demo uses generic parsing — your channel-trained model would score higher.
Low confidence (<0.85) or spam → held + logged, never forced. Exposure guard blocks same-symbol stacking.
{
"is_signal": "—",
"action": "—",
"symbol": "—",
"confidence": "—"
}
Every signal provider writes differently. For best accuracy the DistilBERT model is fine-tuned on YOUR channel's own message history first. It learns the style, then it works. Not guaranteed — but from what we know, it usually works.
* Typical uplift observed in internal tests. Varies by channel consistency. Markets carry risk — accuracy is not a profit guarantee.
models/khanbours_model/
msg → DistilBERT → {is_signal: 0.99, action: BUY, …}
Persistent Telethon + Bale session. Stale >120s dropped, SHA256 dedup, FIFO queue. Spam and celebration posts filtered by Head 1.
Regex entities + channel-trained DistilBERT two-head: is_signal? → action, symbol, entry/SL/TP, confidence. Second LLM call verifies.
Proposal card with Accept / Deny. Autonomous GOLD mode or 15-sec fallback. Exposure guard + SMA/ATR regime + risk score decide.
Spread < MAX, margin + algo-trading checks, ATR SL fallback, risk% lot, drift re-anchor, split tickets per TP, IOC→FOK→RETURN loop.
live_tp_manager polls every second: TP1 close 50% → SL to breakeven, TP2 → TP1… Manual phone edits synced, outcomes reported.
A DistilBERT two-head classifier (KhanBours model), fine-tuned per channel on Colab T4. Runs locally — with regex + 3-engine LLM matrix (Lizh / OpenRouter / DeepSeek) as verify fallback.
| Soodchin DistilBERT | Cloud LLM wrapper | |
|---|---|---|
| Speed | ~38ms | 1.5 – 4s |
| Channel style | Learns yours | Generic guesses |
| Cost / 1k signals | $0 | $8 – $25 |
| Works offline | Yes | No |
# Soodchin — channel-trained DistilBERT path
from models.khanbours_model import KhanBours
from executor import execute_trade
brain = KhanBours("models/khanbours_goldvip/") # trained on YOUR channel
r = brain.parse(msg) # Head1: is_signal 0.99 · Head2: BUY XAUUSD
if r.is_signal and r.confidence > 0.85:
propose_admin(r) # Accept / Deny · 15s fallback
if approved: execute_trade(r) # MT5 + tp_rules.json loop
Fine-tuned on your provider's format. Spam vs signal vs commands separated.
Inline Accept/Deny buttons, 15s fallback, autonomous GOLD mode, Telegram-fail auto-execute.
Spread filter, ATR SL fallback, risk% lots, drift re-anchor, split tickets, IOC→FOK loop.
1-sec poll: partials per tp_rules.json, breakeven + trailing, manual-edit sync.
SHA256 persistent dedup, state-aware dup, anti-pyramiding, regime filter.
platform_data, hierarchy FTS5, forex_news RSS. Every signal → ticket logged.
FTS5 + RSS-grounded market Q&A with session memory.
Local DistilBERT inference. Channels, lots, broker stay on your Windows VPS.
Demo showcase. Paper execution works — live P&L validation calibrating now. No fake profit curves.
No paywall during the forward-test. Pick the seat that fits — paid tiers unlock only when live results publish.
Full experimental console: channel training, 30 model tests, paper journal.
Real MT5 execution with the approval gate and 1-second TP/SL manager.
Multi-seat, prop-firm drawdown sync, private VPS deploy, SLA.
Prices are beta placeholders and activate only after the 500-trade validation publishes. Paper Beta stays free through beta.
It will run without training — but for best accuracy you should fine-tune on your channel's history first. Each provider formats signals differently, and the DistilBERT model needs to learn that style. Untrained = more misreads. Trained = usually works very well. Not guaranteed — markets never are — but training is the difference.
Yes — a DistilBERT two-head classifier (KhanBours model): Head 1 decides is_signal / spam / management command; Head 2 extracts BUY/SELL, symbol, entry, SL, TP1–TP3 + confidence. Trained on Colab T4, deployed quantized for ~38ms offline inference. Regex + LLM matrix verify as backup.
Your choice. Approval mode sends Accept / Deny buttons with 15-second fallback auto-execute. Autonomous mode (e.g. GOLD) executes instantly. Telegram delivery failure can auto-execute per config.
A 1-second loop watches open positions: TP1 closes 50% and moves SL to breakeven, TP2 trails to TP1, etc. (tp_rules.json). Manual SL/TP edits from your phone are synced. Closures are reported to admin.
Windows VPS + MT5 + Python 3.8. SQLite needs no server. Your channel history for training (500–2000 messages ideal). That's it.
312/500 paper trades in. Full statement, win-rate, drawdown and slippage — good or bad — after validation. Request access to get notified.
Support, channel-training slots, desk pricing — fastest on Telegram.
Request experimental access — verify your email, join the queue, get a channel-training slot. One message, no spam.