Most trading signals answer one question:
"Is there a setup?"
That is useful, but often incomplete.
A breakout can be technically valid and still fail because there is no real
attention behind it. A screener can return ten names that all look similar on
price, while only one of them is actually dominating discussion, news flow, or
prediction-market activity.
That is the gap I wanted to close with an OpenAlgo integration for the
Adanos Finance Sentiment API.
Adanos tracks stock-level attention and directional bias across:
- X.com
- financial news
- Polymarket
Instead of replacing OpenAlgo, the idea is to use Adanos as a
confirmation layer before execution.
Why this is useful for traders
OpenAlgo already gives you the execution and automation building blocks:
- TradingView webhooks
- ChartInk-driven workflows
- Python strategies
- broker routing and order execution
Adanos adds a second decision layer:
"Does this setup also have attention, bullish conviction, and multi-source support right now?"
That matters when you want to:
- reject weak breakouts
- rank multiple screener hits
- avoid low-attention entries
- combine technical setups with non-price signals
The integration model that makes sense
The cleanest way to integrate Adanos into OpenAlgo is not as a broker plugin.
It works much better as an external signal layer:
TradingView / ChartInk / Python strategy
-> Adanos sentiment gate
-> OpenAlgo order execution
That keeps responsibilities separate:
- OpenAlgo stays the automation and execution engine
- Adanos stays the sentiment intelligence layer
What data the gate uses
For each symbol, the gate pulls source-level detail from Adanos and computes a
small composite.
Useful fields:
buzz_scorebullish_pct-
mentionsortrade_count trend
Useful derived metrics:
average_buzzbullish_avgconvictionsource_alignment
That gives you trader-friendly filters like:
average_buzz >= 60bullish_avg >= 55- block symbols where multiple sources are
falling - prefer aligned sources over wide divergence
Architecture
Here is the basic flow for TradingView:
TradingView alert
-> Python middleware
-> Adanos API check
-> OpenAlgo placeorder / placesmartorder
The same pattern works for ChartInk:
ChartInk screener
-> Python filter
-> Adanos ranking / sentiment check
-> OpenAlgo order
And for native Python strategies:
strategy signal
-> Adanos source fetch
-> local composite decision
-> OpenAlgo execution
A small Python sentiment gate
This example keeps the execution path untouched and only decides whether an
order should be sent:
signals = get_source_signals(symbol)
composite = build_composite(signals)
if composite["average_buzz"] < 60:
return "BLOCK"
if composite["bullish_avg"] < 55:
return "BLOCK"
if composite["falling_sources"] >= 2:
return "BLOCK"
return "PASS"
The full working example I built for OpenAlgo does a bit more:
- fetches Reddit, X.com, News, and Polymarket signals
- handles nullable or partially missing source data safely
- computes
average_buzz,bullish_avg,conviction, andsource_alignment - supports both
placeorderandplacesmartorder - defaults to dry-run mode
Important implementation details
There are a few things worth getting right if you build this seriously.
1. Do not point alerts directly at OpenAlgo if you want sentiment gating
If your TradingView or ChartInk webhook still points straight to:
/api/v1/placeorder- or
/api/v1/placesmartorder
then you are bypassing the sentiment layer entirely.
The webhook must point to your middleware or filter endpoint first.
2. Protect the middleware
This is not optional.
If you expose a public order-forwarding endpoint, it needs inbound verification:
- secret header
- token check
- signature check
- or another equivalent mechanism
Otherwise anyone who can reach that endpoint can try to trigger trades.
3. Keep payload contracts explicit
Do not hand-wave the OpenAlgo schema.
If you forward to placeorder, keep the documented structure intact:
apikeystrategysymbolactionexchangequantitypricetypeproduct
If you forward to placesmartorder, include the additional smart-order fields
that endpoint expects, such as position_size.
4. Normalize symbol inputs
If your source system sends {stock} and OpenAlgo expects symbol, normalize
that explicitly in middleware.
A lot of integration bugs are just field-name mismatches.
Coverage matters
Sentiment data is not equally strong for every symbol.
Before automating anything live, validate the names you actually trade.
A good workflow is:
- test a few target symbols manually
- set minimum thresholds for buzz and bullish ratio
- decide what happens on low or partial coverage
That last point matters more than most people think. A robust workflow should
not crash just because one source is unavailable.
Why I still think this is a good integration
I originally proposed this as an upstream OpenAlgo documentation/examples PR.
The maintainers decided not to merge it because third-party sentiment APIs are
outside their current roadmap.
That is a fair scope decision.
But the integration pattern itself is still strong.
For OpenAlgo users, this is useful because it adds something their chart,
screener, or broker connection does not already provide:
- cross-source attention
- bullish ratio
- trend confirmation
- signal prioritization
That is exactly the kind of external intelligence layer traders can benefit
from without changing their existing execution stack.
If you want to build this yourself
Useful links:
- Adanos API docs: https://api.adanos.org/docs
- Get an API key: https://adanos.org/reddit-stock-sentiment#api
- OpenAlgo: https://github.com/marketcalls/openalgo
Start small:
- run a dry-run middleware
- log approved and rejected trades
- compare the gated results vs. your raw signal stream
- only then wire it into live order flow
That is the fastest way to see whether sentiment confirmation improves your own process.
Top comments (0)