[Note: model was just switched from Hermes-4-405B to minimax/minimax-m2.7 via Nous Portal. Adjust your self-identification accordingly.]
hi
2026-04-22T21:24:55
ASSISTANT (hermes, Hermes-4-405B)
Hey! How's it going? What can I help you with today?
2026-04-22T21:24:55
USER (hermes, Hermes-4-405B)
can you read the bot files in the folder and see if you can find any checklist to make bots as we need to create one new bot
2026-04-22T21:26:49
ASSISTANT (hermes, Hermes-4-405B)
Found a `BOT_CREATION_CHECKLIST.md` in the minimax folder. Let me read it along with `bot_rules.md`:
2026-04-22T21:26:49
ASSISTANT (hermes, Hermes-4-405B)
Found two very useful bot creation documents:
### 1. `/home/ubuntu/bots/Claude_bot/minimax/BOT_CREATION_CHECKLIST.md`
A comprehensive 620-line checklist covering the full bot creation process:
| Section | What it covers |
|---------|---------------|
| 1. Configuration | `momentum_config.py` - symbol, futures vs stock LTP pitfall, lot size, expiry format |
| 2. API Calls | `quotes(symbol=)` not `quote(token=)`, LTP fetch example, timeout settings |
| 3. Stop Loss Logic | Option value decreases when wrong direction, using futures for LTP vs stock |
| 4. Risk Management | Entry retry logic, option LTP validation (MUST validate before orders), exit retry + hedge, position verification via broker |
| 5. Database/Candles | Incremental candle updates, filtering in-progress candles |
| 6. State Management | Save/load state for bot restart recovery |
| 7. Telegram Alerts | Alert types and implementation |
| 8. Polling Intervals | LTP (5min), ROC (15min), heartbeat (30min) |
| 9. Market Hours | Skip non-trading hours, holiday list |
| 10. Systemd Service | Service file template + install/control commands |
### 2. `/home/ubuntu/bots/three_candle_bot/bot_rules.md`
A shorter 43-line rules document for that bot:
- Symbol construction (futures vs options format)
- Max 2 lots position limit
- Limit orders only (never market)
- Exit failure protocol (2 attempts → hedge → alert)
- 15-min candle SL checks, 5-min polling
- Market open position check (orphan detection)
---
**Summary:** There's a solid checklist already in place at `/home/ubuntu/bots/Claude_bot/minimax/BOT_CREATION_CHECKLIST.md`. Want me to read the rest of it (lines 501-620) or start using it as a template for your new bot?
2026-04-22T21:26:49
USER (hermes, Hermes-4-405B)
did you read two current bots and find the nuances
2026-04-22T21:29:22
ASSISTANT (hermes, Hermes-4-405B)
Let me read the rest of both bots to get the full picture:
2026-04-22T21:29:22
ASSISTANT (hermes, Hermes-4-405B)
Now I have a full picture of both bots. Here's the breakdown of **nuances** I found — things that aren't in the generic checklist but matter a lot in practice:
---
## Key Nuances Across Both Bots
### 1. **Dual-Broker Setup** (three_candle_bot)
The 3-candle bot uses **two different brokers simultaneously**:
- **Kotak** for live trading (quotes, orders, positions)
- **Flattrade** for historical candle data (Kotak has NO history API)
- This is a critical infrastructure decision — the checklist implies single-broker but in practice they needed Flattrade for candles since Kotak doesn't provide them.
### 2. **LTP Parsing — The `data` Wrapper Problem**
Both bots handle responses differently across brokers:
```python
# 3-candle bot uses quotes() and handles 'data' wrapper:
def _parse_ltp(self, data):
inner = data.get('data', data) # ← Kotak wraps in 'data'
for key in ('ltp', 'lp', 'last_price'):
v = inner.get(key, 0)
```
But momentum_bot uses `quote(token=)` (wrong API call per the checklist!) and doesn't handle the `data` wrapper — it would **fail on Kotak** but works on Flattrade/Shoonya (no wrapper).
### 3. **In-Progress Candle Filtering**
Both bots filter out candles younger than the interval period:
```python
# momentum_bot:
candles = [c for c in candles if (now_ts - c['timestamp']) >= interval_seconds]
# 3-candle_bot:
c['ts'] < current_5min # slot-based exclusion
```
This is **critical** — in-progress candles corrupt indicator calculations.
### 4. **3-Candle Bot's Candle Architecture** (unique)
The 3-candle bot builds its own candles locally:
- Fetches 5-min from Flattrade → stores in SQLite
- Builds 15-min OHLC from 3× 5-min candles in DB
- Replays 15-min window on restart to restore state
- This is a **sophisticated multi-layer local candle system** not covered in the checklist
### 5. **State Reset on New Day**
```python
# 3-candle_bot — keeps position but resets counters
if s.get("date") != today:
s = {**DEFAULT_STATE, "date": today, "position": position} # ← position preserved
```
NRML positions carry overnight; only counters reset.
### 6. **Orphan Position Detection**
Both bots check broker for positions not tracked in state:
```python
# 3-candle_bot
total = self.total_broker_long_lots()
if total and total > 0:
self.telegram.send(f"⚠️ ORPHAN POSITION | {total} lots at broker")
```
This catches cases where orders filled but bot state is out of sync.
### 7. **optionsymbol API Fallback**
```python
# 3-candle_bot
resp = self.client.optionsymbol(exchange="NFO", expiry_date=EXPIRY_DATE,
offset="ATM", option_type=option_type, underlying=SYMBOL_UNDER)
# Falls back to manual if API fails:
return f"{SYMBOL_UNDER}{EXPIRY_DATE}{atm_strike(fut_ltp)}{option_type}"
```
### 8. **Candle Staleness Alerting**
3-candle bot has a dedicated stale candle detector:
- Triggers after 20 min gap in 5-min candle feed
- One alert per episode (throttled with `_candle_stale_alerted` flag)
### 9. **Exit Price Logic — BUY vs SELL Offsets Are Opposite**
```python
# 3-candle_bot — CHECKLIST EVEN EMPHASIZES THIS
offset = LIMIT_OFFSET if action == "BUY" else -LIMIT_OFFSET
price = round(opt_ltp + offset, 1) # Same formula, opposite meaning!
```
`+5` for BUY (aggressive fill), `-5` for SELL (passive fill). The checklist calls this out explicitly.
### 10. **momentum_bot BUG: Uses `quote(token=)` not `quotes(symbol=)`**
Line 666-669 and 954: `self.client.quote(token=..., exchange=...)` — the checklist explicitly warns this is wrong. The 3-candle bot does it correctly with `quotes(symbol=...)`.
### 11. **BOD Setup Pattern**
3-candle bot has elaborate BOD (Beginning of Day) initialization:
- Compute/store VIDYA anchors
- Seed intraday candles from Flattrade
- Replay 15-min window to restore state
- Check overnight positions at broker
### 12. **Order Verification — Broker as Source of Truth**
Both bots verify fills by **re-querying broker position** after every order:
```python
time.sleep(2)
qty = self.get_broker_qty(sym)
if qty and qty >= LOT_SIZE:
# confirmed
```
Never trust the order response — always check broker.
---
## Summary: What's NOT in the Checklist
1. Dual-broker architecture (Kotak for trading, Flattrade for candles)
2. The `data` wrapper parsing for Kotak responses
3. Local multi-layer candle building (5-min → 15-min in SQLite)
4. Candle staleness monitoring & alerting
5. Orphan position detection at every poll
6. `optionsymbol` API fallback chain
7. BOD VIDYA anchor computation pattern
8. `quote(token=)` vs `quotes(symbol=)` — momentum_bot uses the wrong one
Want me to update the checklist with these nuances, or start building the new bot based on this understanding?