I am interested in investing & trading stocks. There are a lot of twitter accounts that share their stock trading ideas. I was curious to look back at their tweet history & historic stock data and validate: do their picks actually make money?
Who is this article for? AI Builders, Stock traders, Nerds (like me)
What did you do? I analyzed tweets from TheBronxViking (Jan 2025 to Sep 2026) and DeItaone (Jan 2024 to Sep 2026). Labelled all the tweets as a long, short or skip with Opus and Jev. Then used the tooling in Demo videoSource code (my open source backtesting tool) to try some trading plans (i.e. go long a stock for 10 days after TheBronxViking tweets a bullish signal on it).
The reason why I chose these two accounts is because they are fundamentally two different sources of information. Walter Bloomberg provides "news" (where we can use AI to label as a buy or sell) whereas TheBronxViking mostly shares options flows or technical analysis with a certain "bias" (i.e. high call volume -> bullish).
The 3 possible labels are skip, long or short. Here is an example of each from Walter Bloomberg:
In both cases there is a "chance" of an AI error labelling it incorrectly, which is why I hand labelled hundreds of tweets and compared the AI labels against mine.
Jev (post text only)
Tweets compared375
PrecisionWhen the AI found a signal, how often did I find the same signal?
High score = high agreement.66%
RecallWhen I found a signal, how often did the AI find the same signal?
High score = AI caught most of my signals.65%
F1How well did the AI balance precision and recall?
High score = strong overall agreement.0.65
Directionally correctWhen the AI and I both found a signal, how often did we agree on the direction?
High score = high directional agreement.100%
Jev (post text and image text)
Tweets compared375
PrecisionWhen the AI found a signal, how often did I find the same signal?
High score = high agreement.59%
RecallWhen I found a signal, how often did the AI find the same signal?
High score = AI caught most of my signals.83%
F1How well did the AI balance precision and recall?
High score = strong overall agreement.0.69
Directionally correctWhen the AI and I both found a signal, how often did we agree on the direction?
High score = high directional agreement.99%
Opus (high effort)
Tweets compared375
PrecisionWhen the AI found a signal, how often did I find the same signal?
High score = high agreement.88%
RecallWhen I found a signal, how often did the AI find the same signal?
High score = AI caught most of my signals.84%
F1How well did the AI balance precision and recall?
High score = strong overall agreement.0.86
Directionally correctWhen the AI and I both found a signal, how often did we agree on the direction?
High score = high directional agreement.99%
AI labels against my hand labels
Tweets compared
PrecisionWhen the AI found a signal, how often did I find the same signal?
High score = high agreement.
RecallWhen I found a signal, how often did the AI find the same signal?
High score = AI caught most of my signals.
F1How well did the AI balance precision and recall?
High score = strong overall agreement.
Directionally correctWhen the AI and I both found a signal, how often did we agree on the direction?
High score = high directional agreement.
Jev (post text only)
375
66%
65%
0.65
100%
Jev (post text and image text)
375
59%
83%
0.69
99%
Opus (high effort)
375
88%
84%
0.86
99%
the numbers
@TheBronxViking
Date rangeJan 2025 to Sep 2026
Tweets collected11,018
Not labelled (replies, reposts, out of date range)2,892
Tweets labelled8,126
Label: long or short signal3,097
Label: skip5,029
Signals: long / short2,975 / 362
@DeItaone
Date rangeJan 2024 to Sep 2026
Tweets collected4,948
Not labelled (replies, reposts, out of date range)30
Tweets labelled4,918
Label: long or short signal3,626
Label: skip1,292
Signals: long / short2,757 / 2,130
@TheBronxViking
@DeItaone
Date range
Jan 2025 to Sep 2026
Jan 2024 to Sep 2026
Tweets collected
11,018
4,948
Not labelled (replies, reposts, out of date range)
2,892
30
Tweets labelled
8,126
4,918
Label: long or short signal
3,097
3,626
Label: skip
5,029
1,292
Signals: long / short
2,975 / 362
2,757 / 2,130
* Not all signals go into the trading tests. I ignored stocks with a price below $5 or a median daily dollar volume below $5M (295 signals for @TheBronxViking, 67 for @DeItaone).
* I also ignored signals with no price data for the entry (43 and 1,507) and signals with an incomplete price history after the entry (654 and 361).
* When an account repeats a signal (same ticker, same direction) in less than seven days, only the first signal counts.
the pipeline
the results
experiment 1: @thebronxviking
I tested two ideas on the bullish tweets:
Go long at the tweet and hold.
Short first for a few days, then go long. Wait... what? Why did you try this?Because I often felt like the day or two after the post I'd see the position go down but then bounce back hard.
I tried many hold lengths (1 to 21 days). They all tell the same story, so here is one example of each:
Going long for 10 days made +1.17% per trade after costs. But the same stocks did just as well on days with no tweet. The account picks strong momentum names, the tweet itself adds nothing.
The win rate was 50%. A coin flip.
The dip I remembered is not in the data. Short for 5 days, then long for 10 days made -0.03% per trade.
By the time of the tweet, the stock is already up ~5% against SPY from the day before. It is often too late.
Bearish tweets performed even worse: shorting them lost 1.33% per trade (only 130 signals).
Bullish tweet: long for 10 days
Trades846
Avg returnAverage return for each trade, after costs (0.05% slippage for each side, 3% annual borrow on shorts).+1.17%
Win rate50%
vs. no-tweet daysThe return compared to the same trade, in the same stock, on days with no tweet.
Zero or below = the tweet added nothing.-2.27%
Bullish tweet: short for 5 days, then long for 10 days
Trades846
Avg returnAverage return for each trade, after costs (0.05% slippage for each side, 3% annual borrow on shorts).-0.03%
Win rate50%
vs. no-tweet daysThe return compared to the same trade, in the same stock, on days with no tweet.
Zero or below = the tweet added nothing.-0.56%
Bearish tweet: short for 10 days
Trades130
Avg returnAverage return for each trade, after costs (0.05% slippage for each side, 3% annual borrow on shorts).-1.33%
Win rate41%
vs. no-tweet daysThe return compared to the same trade, in the same stock, on days with no tweet.
Zero or below = the tweet added nothing.-0.15%
Strategy
Trades
Avg returnAverage return for each trade, after costs (0.05% slippage for each side, 3% annual borrow on shorts).
Win rate
vs. no-tweet daysThe return compared to the same trade, in the same stock, on days with no tweet.
Zero or below = the tweet added nothing.
Bullish tweet: long for 10 days
846
+1.17%
50%
-2.27%
Bullish tweet: short for 5 days, then long for 10 days
846
-0.03%
50%
-0.56%
Bearish tweet: short for 10 days
130
-1.33%
41%
-0.15%
experiment 2: @deitaone
Jev labels each headline as good or bad news. I go long on good, short on bad, 1 minute after the tweet, and hold for 5 to 60 minutes.
Jev reads the headlines right. In 67% of the signals the stock was already moving in the direction of the label.
But that is the problem: the move happens before the tweet. +0.30% in the 30 minutes before it. Again, it is often too late.
After the tweet there is only +0.07% left in the next 15 minutes. Costs are 0.10%. So -0.03% per trade, with a 43% win rate.
No hold time fixes it. I also tried slower entries (next hourly bar, next open) and got nothing.
Enter 1 min after the tweet, hold for 5 min
Trades469
Move caughtAverage price move in the direction of the label, from the entry to the exit, before costs.+0.05%
After costsThe same move minus 0.10% (0.05% slippage for each side).-0.05%
Win rate34%
Enter 1 min after the tweet, hold for 15 min
Trades467
Move caughtAverage price move in the direction of the label, from the entry to the exit, before costs.+0.07%
After costsThe same move minus 0.10% (0.05% slippage for each side).-0.03%
Win rate43%
Enter 1 min after the tweet, hold for 30 min
Trades466
Move caughtAverage price move in the direction of the label, from the entry to the exit, before costs.+0.09%
After costsThe same move minus 0.10% (0.05% slippage for each side).-0.01%
Win rate44%
Enter 1 min after the tweet, hold for 60 min
Trades457
Move caughtAverage price move in the direction of the label, from the entry to the exit, before costs.+0.04%
After costsThe same move minus 0.10% (0.05% slippage for each side).-0.06%
Win rate44%
Strategy
Trades
Move caughtAverage price move in the direction of the label, from the entry to the exit, before costs.
After costsThe same move minus 0.10% (0.05% slippage for each side).
Win rate
Enter 1 min after the tweet, hold for 5 min
469
+0.05%
-0.05%
34%
Enter 1 min after the tweet, hold for 15 min
467
+0.07%
-0.03%
43%
Enter 1 min after the tweet, hold for 30 min
466
+0.09%
-0.01%
44%
Enter 1 min after the tweet, hold for 60 min
457
+0.04%
-0.06%
44%
what i learned
As models get more intelligent (like Opus) and faster (like Jev), it is definitely getting easier and easier to create an automated bot that can act on the news fast (& intelligently at the same time).
When averaged out over many trades, the moves are small and noisy, and these are the situations where every millisecond matters. So of course hedge funds with custom fibre optic cables and Bloomberg terminals have an edge. And when the edge to grab is this tiny to begin with, there is nothing left for my amateur setup.
Jev has taken tech twitter by storm... and for a good reason. It is extremely cheap. Throughout these experiments, my total usage was 33,800 requests and 37,156,182 tokens, and it cost me $1.33. My $5 test budget will probably last a long time.
The true "bottleneck" is now access to fast information. As a possible next step I might try to find a better (paid) data source for faster access to information. But whatever the fastest option is, I am sure Wall Street has access to it and more, so I don't have high hopes.