How I transformed Biniyog's analytical data into a full-stack investment decision engine - delivering personalised BUY/HOLD/SELL signals, multi-method target prices, risk scores, and automated watch alerts for every company on the DSE.
Biniyog.com.bd had already shipped a comprehensive three-layer Company Analysis product - fundamental rankings, technical indicators, and AI sentiment scores for every company on the Dhaka Stock Exchange. Users could see how a company scored on each dimension. What the product couldn't yet answer was the question that sits one step further: "Given everything I know about this company right now - should I buy, hold, or sell?"
That gap mattered enormously. A retail investor staring at a fundamental score of 78, a technical score of 65, and a neutral sentiment reading still faced a decision problem: these signals were pointing in broadly the same direction, but without a synthesised recommendation, the cognitive load of translating scores into action sat entirely on the user. Many investors simply didn't act - not because the data wasn't valuable, but because the final interpretive step was too demanding.
I proposed the AI Recommendation Engine as the natural next layer above Company Analysis: an intelligent system that consumed all available analytical signals, applied market-condition-aware weighting, and surfaced a clear, defensible investment recommendation - complete with a target price, a risk assessment, a stop-loss level, and proactive alerts when conditions changed.
The product vision: Close the gap between "I understand this company" and "I know what to do." Build a recommendation engine that functions as a systematic investment analyst running 24 hours a day across every company on the DSE - delivering institutional-quality recommendations to retail investors who previously had nothing comparable.
User research and behaviour analysis from the Company Analysis feature pointed clearly to four unsolved problems. Each required a different type of capability to address.
The recommendation engine's core innovation was that signal weights weren't fixed - they shifted based on what type of market environment the system detected. Each day, the engine first classified the market condition (bull, bear, or high-volatility) by analysing index behaviour, volatility indices, and volume trends. That classification then determined how the three analytical layers were weighted in the composite score.
The composite score maps to four recommendation categories. I defined the buy/hold/sell thresholds for each market regime independently, recognising that a score of 65 means something different in a bull market than in a bear market.
| Signal | Threshold (Bull) | Meaning for the investor | Follow-up output |
|---|---|---|---|
| BUY | ≥ 70 composite score | Strong alignment across fundamental quality, technical momentum, and sentiment. High-conviction opportunity. | Target price, stop-loss level, risk score, upside % |
| HOLD | 50–69 | Mixed or moderate signal alignment. Not the right moment to add or exit; maintain existing position. | Updated target price, risk monitoring |
| SELL | < 30 | Deteriorating fundamentals, negative technical momentum, or poor sentiment converging. Exit or reduce position. | Stop-loss breach alert, risk escalation |
| WATCH | Condition-triggered | A specific emerging signal (breakout pattern, sector rotation, consolidation) warrants monitoring before acting. | Condition type, confidence score, alert priority |
Why variable thresholds matter: A sell threshold of 30 in a bull market becomes 25 in a bear market - because in a down market, more companies will naturally score lower and a blanket sell signal would create panic rather than clarity. The thresholds encode market context, not just mathematical cutoffs.
I specified four distinct analytical services, each solving a different investor question. Together they form a complete decision package - not just a signal, but the supporting rationale an investor needs to act with confidence.
The watch conditions system was one of the highest-leverage features I specified in this product. Rather than requiring users to manually screen for opportunities, the engine monitors all 350+ companies every day against six distinct patterns - and surfaces the ones where something actionable has developed.
I defined each condition type with specific trigger criteria (a minimum number of sub-conditions that must be satisfied), a confidence calculation methodology, and an alert priority rating. The system was designed to be explainable: when a condition triggers, users see exactly which criteria were met, not just a "WATCH" label.
On the 75% effectiveness floor: The Volume Anomaly condition was the most difficult to specify precisely - unusual volume can indicate institutional accumulation or distribution, and the signal is inherently ambiguous without confirming price action. I set a lower confidence threshold (50% of sub-conditions vs 75% for other types) to ensure it triggered more frequently, with a lower alert priority, to surface the signal without over-weighting it. The PM's job is choosing the right tradeoff, not demanding 90% everywhere.
Not all triggered conditions are equal. I specified an alert priority matrix that combined condition effectiveness with confidence score and market context. A Technical Breakout with 90% confidence triggering in a bull market gets a HIGH priority alert. The same condition triggering with 60% confidence in a high-volatility market gets a MEDIUM priority alert. The priority matrix ensures users pay attention to the signals most likely to be actionable - not just the signals that technically crossed a threshold.
The AI Recommendation Engine was one of the most successful feature launches in Biniyog's history. The product performed strongly across engagement, retention, and trust metrics.
Users who accessed the Recommendation Engine viewed significantly more company pages per session than pre-launch baselines. The recommendation card became the anchor for deeper exploration - target price led to company analysis, which led to portfolio action.
Watch condition alerts drove meaningful return visits. Users who received at least one triggered watch alert in a week showed substantially higher 30-day retention than those who didn't. Proactive notifications created a re-engagement loop that passive features couldn't replicate.
Post-launch user feedback consistently cited target price transparency and the multi-method breakdown as trust drivers. Users appreciated seeing not just the number, but which methodologies agreed - and which disagreed. Explainability built credibility.
The recommendation feature had one of the fastest adoption curves of any Biniyog feature. Both experienced investors (who valued the risk breakdown) and newer users (who relied on the BUY/HOLD/SELL signal) found immediate utility at different levels of depth.
The compounding effect: Company Analysis, Technical Rankings, and the Recommendation Engine were designed as a stack. Each feature made the ones below it more valuable. Users who started with Company Analysis and discovered Recommendations became the highest-engagement cohort on the platform. The whole was significantly greater than the sum of the parts.
A BUY signal on an individual stock carries no guarantee of returns. Risk: users might over-allocate based on the signal without reading the risk score or stop-loss. Mitigation: confidence scores, risk category labels, and plain-language caveats designed into every recommendation card.
If the system classifies a volatile market as a bull market, weights shift incorrectly and signals degrade. Mitigation: market condition detection uses multiple independent signals (volatility index, trend direction, volume patterns) requiring agreement before reclassifying.
Triggering too many alerts across 350+ companies could desensitise users. Mitigation: a three-tier alert priority system (LOW / MEDIUM / HIGH) with daily caps and a progressive disclosure model that surfaces only the highest-priority conditions first.
A recommendation is only as good as its input signals. If fundamental data is stale or sentiment data is sparse, the composite score degrades invisibly. Mitigation: every recommendation card displays a data quality score and a "data freshness" timestamp, making input reliability visible to users.
A simpler model (one signal, one weight) would be easier to explain but less accurate. I chose complexity with explicit transparency - every component of the recommendation is surfaced, not hidden behind the final signal.
350+ companies means some will have sparser data than others. I chose full coverage with confidence scoring over restricting recommendations to the highest-data-quality companies, ensuring users aren't left without guidance on specific stocks they hold.
Real-time recommendations would require significantly more infrastructure and introduce latency risk. I chose daily pre-computation with <200ms serving - fast enough for most investment decisions, with intraday alerts as a future enhancement roadmap item.
User stories, acceptance criteria, and the full data-to-recommendation pipeline as specified in the product requirements.
| ID | As a… | I want… | So that… |
|---|---|---|---|
| US.1 | Retail investor reviewing my watchlist each morning | a clear BUY / HOLD / SELL signal for each company backed by a visible composite score | I can make a decision in under a minute without manually synthesising multiple scores |
| US.2 | Investor considering entering a new position | a target price with a breakdown of the methods used and how much they agree | I can assess whether the current price represents a meaningful discount to fair value |
| US.3 | Investor who wants to manage downside risk | a recommended stop-loss level with a stated rationale | I enter every position with a pre-defined exit plan rather than deciding under pressure |
| US.4 | Investor monitoring companies I don't currently hold | proactive alerts when a specific pattern develops that makes a company worth acting on | I don't miss time-sensitive opportunities because I wasn't actively checking the platform |
| US.5 | Investor who wants to understand how much risk I'm taking | a risk score that breaks down market, sector, liquidity, volatility, and fundamental risk separately | I can make position-sizing decisions based on the specific type of risk, not just a single number |
| # | Criteria | Owner | Verified by |
|---|---|---|---|
| AC.1 | Composite recommendation scores must produce a realistic distribution across BUY, HOLD, SELL, and WATCH categories. No single category should contain more than 50% of companies in a given market condition. | BE | QA: verify distribution report after each daily run; alert if any category exceeds 50% of total |
| AC.2 | All recommendation API endpoints must return responses in under 200ms at the 95th percentile. Daily recommendation generation for all companies must complete within 6 minutes. | BE | Load test: 100 concurrent API requests measured; daily processing time logged with wall-clock measurement |
| AC.3 | Every target price must display all four component prices, their individual weights and confidence scores, and a data quality indicator. The final target price must never be shown without this supporting breakdown. | FE | Design review: all four sub-prices and confidence scores visible without expanding; data quality indicator displayed |
| AC.4 | Watch condition alerts must specify the condition type, the specific criteria that triggered, the confidence score, and the alert priority. No alert is sent without all four fields populated. | BE / Notifications | QA: trigger a known watch condition in staging; verify all four fields present in notification payload |
| AC.5 | The risk score breakdown must display all five risk components (market, sector, liquidity, volatility, fundamental) with individual scores and the overall risk category. No overall risk category is shown without component detail accessible. | FE | QA: verify all five components visible on expanded risk view; overall category present on collapsed view |
How the system processes raw analytical signals every day and delivers a complete, actionable recommendation to a Biniyog investor.