mrinalux/ lcx-ai:latest

1 yesterday

A fine-tuned Qwen3-8B model specialized for Indian equity technical analysis. Built on 5 years of real OHLCV data from NSE-listed stocks (Nifty 500 universe), fine-tuned to produce structured, data grounded analysis in the format used by professional

tools
ollama run mrinalux/lcx-ai

Details

yesterday

61c040f5f9f6 · 8.7GB ·

qwen3
·
8.19B
·
Q8_0
{{- if .Messages }} {{- if or .System .Tools }}<|im_start|>system {{- if .System }} {{ .System }} {{
You are LCX AI, an Indian equity technical analyst built on real market data. Your only function is
{ "min_p": 0, "repeat_penalty": 1, "stop": [ "<|im_end|>", "<|im_start|>

Readme

LCX AI — Indian Equity Technical Analyst

A fine-tuned Qwen3-8B model specialized for Indian equity technical analysis. Built on ~5 years of real OHLCV data from NSE-listed stocks (Nifty 500 universe), fine-tuned to produce structured, data-grounded analysis in the format used by professional Indian equity desks.

Only analyzes stocks when a market data block is provided. Declines all off-topic queries.

⚠️ Not financial advice. This model reads a technical snapshot you provide — it does not fetch live prices, predict the future, or replace your own research.


Benchmark Results

Evaluated 2026-06-01 on a 25-stock held-out test set (zero ticker overlap with training data), spanning oversold, overbought, neutral, uptrend, and downtrend buckets. Both models received identical system prompts, MongoDB context blocks, temperature (0.3), and the user message Analyze this stock.

Check LCX AI (fine-tuned) Qwen3-8B (base)
Overall pass (all 10 checks) 2525 (100%) 0/25 (0%)
RSI label correct 2525 (100%) 2325 (92%)
RSI value cited 2525 (100%) 2425 (96%)
₹ used (not Rs) 2525 (100%) 2425 (96%)
No CJK characters 2525 (100%) 2525 (100%)
No repetition/loop 2525 (100%) 2525 (100%)
<think> block present 2525 (100%) 0/25 (0%)
Current price cited 2525 (100%) 2025 (80%)
Invalidation / stop-loss 2525 (100%) 2325 (92%)
No hallucinated prices 2525 (100%) 2525 (100%)
Response length OK 2525 (100%) 2425 (96%)
Avg latency 54.4s 35.7s

How to read the comparison: Base Qwen3 scores 0/25 overall mainly because it was never trained on LCX AI’s output format (the <think> block). On substance checks alone — excluding that format requirement — base Qwen3 passes 1725 (68%). LCX AI wins on format adherence, price citation, RSI labelling, and invalidation framing.

Benchmark script: grow/benchmark.py · Full results: benchmark_20260601_175325.json


What it does

  • Reads a structured stock snapshot (price, RSI, 50200 DMA, volume, 60-day range, 1Y/3Y/5Y returns, start price, all-time high/low)
  • Produces structured analysis:
<think>
[Internal reasoning — cites numbers from the data block]
</think>

**TICKER — Headline thesis in one line**

[Body: key technicals cited from data, trend context, setup rationale]

**What invalidates this view:** [Specific price level or condition]

How to use

This model is designed to run inside a data pipeline that builds the context block before calling Ollama. Raw ollama run mrinalux/lcx-ai without a data block returns a polite refusal, not analysis.

ollama pull mrinalux/lcx-ai
import requests

context = """
[TATAMOTORS NSE - Data as of 2026-06-01]
Price: ₹780.00 (+1.5% vs prior day)
RSI(14): 58.3
50DMA: ₹745.00 — price is above DMA
200DMA: ₹710.00 — price is above DMA
60-day range: ₹720.00 - ₹820.00
Volume ratio: 1.3x
1Y return: +12.4%
3Y return: +45.2%
5Y return: +88.1%
Start price (5Y ago): ₹415.00
All-time high: ₹820.00
All-time low: ₹380.00
Current vs peak: -4.9%
"""

response = requests.post("http://localhost:11434/api/chat", json={
    "model": "mrinalux/lcx-ai",
    "messages": [
        {"role": "system", "content": "You are LCX AI..."},  # baked into Modelfile
        {"role": "user", "content": context + "\n\nAnalyze this stock."},
    ],
    "stream": False,
    "options": {"temperature": 0.3, "num_predict": 2048},
})
print(response.json()["message"]["content"])

For the full pipeline (MongoDB → context builder → post-validation), see the companion repo scripts: analyze_stock.py, test_qwen.py, stock_chat.py.


Off-topic refusal

Ask it anything outside stock analysis and it responds:

“I’m LCX AI, a stock technical analysis assistant. I can only analyze stocks using live market data. Please ask about a specific stock and I’ll pull its data.”


Training

Base model Qwen3-8B
Fine-tuning LoRA on ~205 Indian equity snapshots
Quantization Q8_0 GGUF (~8.7 GB)
Training data Structured OHLCV context → analysis pairs
Held-out eval 25 stocks, seed 42, no training ticker overlap

Limitations

  • Requires a data block — cannot analyze stocks without you providing the snapshot
  • Not predictive — describes the current technical picture, not future prices
  • Occasional sign/wording errors on long-horizon returns (e.g. citing +26% when data shows −26%) — always verify key numbers against your source data
  • RSI boundary edge cases near 3070 can still mislabel in rare runs
  • Post-validation recommended — pair with programmatic checks on cited prices, returns, and DMA direction before showing output to end users

Last updated: June 2026 · Benchmark run: 2026-06-01