MAHORAGA and DayTradingAgent — how far you get before either one asks for an account
Two trading agents pushed as far as they go with no sign-ups, mapping exactly what runs for free and the precise line at which each one makes you reach for your
Part 29. How far without an account — MAHORAGA and DayTradingAgentDone when: you know which accounts each of these two tools needs before you install it, and how far you get for free.
| What they do | MAHORAGA: reads social sentiment (StockTwits, Reddit) and regulatory filings, picks what to buy and sell, and places orders through Alpaca. DayTradingAgent: watches US and Hong Kong equities intraday and computes an entry price, a stop and a quantity as a signal (you place the order yourself) |
| Who it fits | Anyone weighing up whether to install either one who stopped at the "create an account first" line in the instructions |
| Who it doesn't fit | Anyone who needs something finished and running today. This article is a map of the walls, not a completed run |
| What you end up with | A list of what you can verify with no account, and the exact one-line point at which each tool makes you pay |
| What you need · cost | Code free (both MIT) · model paid (71 calls measured, $0.197) · market data: Alpaca free for MAHORAGA, free promotional access for DayTradingAgent on US equities · weltiq separate |
| Time · difficulty | 25 minutes to run MAHORAGA locally · 15 minutes to reproduce DayTradingAgent's review pass · difficulty medium (you need to be able to build a Node and a Python environment) |
| Versions used | Node 26.8.1 · Python 3.14.7 · wrangler 4.61.1 |
| Relationship to weltiq | Not connected. Both tools need an account before a judgment can be pushed through to execution, so the weltiq side was confirmed by reading the source only (section 5) |
| Test environment · date | 2026-09-22 (KST) · macOS · ygwyg/MAHORAGA at its 2026-02-16 state · xhqing/DayTradingAgent at its 2026-09-19 state |
| Disclosure | I am a paid contributor for weltiq. Both tools here are third-party open source with no connection to weltiq, and every number below came from runs I did myself. |
1. What these are
There is something you should check before star counts when picking an open-source trading tool: how many accounts you have to create before you can even switch it on. The tools in this series so far have mostly been "one LLM key plus free market data". These two are different.
| MAHORAGA | DayTradingAgent (Victor) | |
|---|---|---|
| Repository | github.com/ygwyg/MAHORAGA · MIT · 868 stars |
github.com/xhqing/DayTradingAgent · MIT · 2 stars |
| Last commit | 2026-02-16 (stalled for 7 months) | 2026-09-19 |
| Language | TypeScript (Cloudflare Workers) | Python plus normative documents |
| Markets | US equities plus BTC, ETH, SOL (all spot) | US and Hong Kong equities and ETFs (no derivatives) |
| Accounts the instructions demand | LLM · Alpaca · Cloudflare | An agent harness · Tiger Brokers · Futu OpenD market data |
MAHORAGA is an autonomous agent that runs 24 hours a day on Cloudflare. It scrapes four subreddits and StockTwits to build a per-symbol sentiment score, blends in filings (the flow of new 8-K disclosures), and hands the candidates to a model that returns BUY / SELL / HOLD with a confidence. What makes it interesting is that it does not take the sentiment at face value. Every post gets multiplied by three factors — a time decay with a 120-minute half-life, an engagement factor bracketed by upvotes and comments, and a flair multiplier (DD 1.5x, Meme 0.4x, Shitpost 0.3x). Source credibility is kept separately: 8-K filings 0.95, StockTwits 0.85, and r/wallstreetbets 0.6. This tool has written into its code that it trusts the noisiest place it reads the least.
DayTradingAgent has an entirely different character. The first paragraph of the README declares that there is no application to install — the repository is the agent. What it actually consists of is roughly 1,975 lines of normative documents and 45 scripts. An agent harness reads those documents and takes them as its discipline. The default is signal mode — the tool computes an entry price, a stop and a quantity, prints them as a table, plays a sound, and you place the order in your own broker app. Before a position is opened it forces six fields to be settled (target, direction, reference price, price range, quantity, stop), and unless the setup clears a win rate above 50% and a reward-to-risk of at least 1.2, it does not emit the signal at all.
2. Installing — one verified path each
MAHORAGA (without a Cloudflare account)
The instructions tell you to create a Cloudflare account, create a D1, create a KV, add secrets and deploy. Half of that can be skipped. Development mode emulates the database, the cache and the storage entirely on your own machine.
git clone https://github.com/ygwyg/MAHORAGA && cd MAHORAGA
npm install
# fill the placeholders in the config file with anything (nothing checks them locally)
sed -e 's/<YOUR_D1_DATABASE_ID>/00000000-0000-0000-0000-000000000000/' \
-e 's/<YOUR_KV_NAMESPACE_ID>/0123456789abcdef0123456789abcdef/' \
wrangler.example.jsonc > wrangler.jsonc
cp .env.example .dev.vars # fill in Alpaca paper keys, the LLM key, and a token you choose
npx wrangler d1 migrations apply mahoraga-db --local
npx wrangler dev
When that last line prints Ready on http://127.0.0.1:8787, you are done. A login screen never appears once.
This far without an account — the local boot and where the wall sits
What works without an account (green) and what does not (red) are on the same screen. Everything up to Ready on http://127.0.0.1:8787 is the free stretch, and notice that D1, KV, R2 and the Durable Object are all bound as local — that is why no account is needed. The two Not logged in. lines at the bottom are the wall.
DayTradingAgent
git clone https://github.com/xhqing/DayTradingAgent && cd DayTradingAgent
cp .claude/skills/trade/config.example.json .claude/skills/trade/config.json
python3 -m venv .venv
.venv/bin/pip install futu-api numpy scipy matplotlib pandas
That much is free. Anyone can pull the Python packages. There is one thing to know before you run preflight.py, though — that script installs a startup item (a LaunchAgent) in your macOS home directory and turns on a sleep block. The documentation gives no warning. How to undo it is in the table below.
Where it gets stuck
| Where | What appears | What it needs |
|---|---|---|
MAHORAGA wrangler deploy |
Not logged in. |
A Cloudflare account (the free tier is enough — see the cost table under section 5) |
| The database identifiers in MAHORAGA's config file | Deployment fails if the placeholders are still there | wrangler d1 create · kv namespace create (login required) |
| MAHORAGA's decision step | skipped_no_llm in the log |
An LLM key |
DayTradingAgent hot_list.py |
ECONNREFUSED repeating every 6 seconds, it never stops itself |
An OpenD gateway logged in with a Futu/moomoo account |
| DayTradingAgent's four automatic order scripts | Cannot run — no account information file | Tiger Brokers credentials (not needed if you only use signal mode) |
The startup item preflight.py left behind |
— | launchctl unload ~/Library/LaunchAgents/com.daytrading.monitor-watcher.plist, then delete it, then run keepawake_off.sh |
3. First result — this is what it looks like when it works
MAHORAGA: if you got this far without an account, all 200 tests pass and the dashboard shows your paper account live.
$ npx vitest run
Test Files 9 passed (9)
Tests 200 passed (200)
But the command above does not bring up the dashboard. What wrangler dev starts is the API worker; the screen is a separate app inside the repository. Open a second terminal and start it like this.
cd MAHORAGA/dashboard
npm install
npm run dev # to change the port, npm run dev -- --port 9321
| Which address | http://localhost:3000 (the dashboard's default). The worker is on 8787 and the dashboard forwards /api there. If you changed the worker's port you have to say so, with WRANGLER_PORT=9320 npm run dev or MAHORAGA_API_URL=http://localhost:9320 npm run dev |
| Is a login needed | No Cloudflare account is needed. What you do need is to paste the MAHORAGA_API_TOKEN you chose in .dev.vars into the settings field inside the screen, once (it is stored only in the browser). Without that token nothing is visible |
| On first open | If you did not start the worker first, or did not enter the token, the screen below is all there is |
The dashboard on first open
Start the dashboard without the worker and this is everything. Under the red OFFLINE it tells you what to do — start the worker and hit /agent/enable once. Do not go create an account because you got stuck here. It is not an account problem, it is an ordering problem.
Start the worker and enter the token, and it fills in like this.
The dashboard with real data in it
This screen was brought up on my own machine with no Cloudflare account, and every number in it is real data. Top left is an actual Alpaca paper account, below it the 29 signals collected on this pass (StockTwits 15 · 8-K filings 13 · crypto 1), and bottom right is what the model wrote about each symbol and why. Look at the bottom line: CRYPTO 24/7 · SYMBOLS BTC · PAPER MODE.
DayTradingAgent: with no market data there are no judgments to look at. But the repository ships with the author's own trading record — 31 trading days from 2026-07-07 to 09-14, and 43 signal files. So the review and statistics side runs in full.
There is no dashboard on this side. No web UI, no TUI, no address to open — you call a script, a table prints in the terminal, and the statistics scripts drop PNG files into a folder. That is all.
$ .venv/bin/python .claude/skills/trade/scripts/review.py reviews/2026-07-21-trades-hk.csv
交易复盘 · N=12 positions closed
N=12 win rate p=0.750 loss rate q=0.250
win multiple R_W=1.542 loss multiple R_L=-0.655
EV=+0.9927 (EV%=+99.27)
Bayesian P(EV>0) = 97.5% (σ uncertain 82.8%~99.7%)
Read: width 17pp (>5pp) → small sample, take the direction only, do not use as grounds to change strategy
Sample size plan: win rate ±5% → 384 trades / EV confirmation (80% confidence) → 1,705 trades
(The block above has been rendered for readability; the actual output is in Chinese.)
DayTradingAgent at work — the raw output of review.py
This is what this tool looks like working without an account. Start with the fact that the output is in Chinese — factor that in if you plan to use it. The green block is win rate, multiples and EV, the blue block is the Bayesian probability, and the 判读 (reading) line below them is the character of this tool — the numbers came out good and it still marks down its own result, saying the sample is small so take the direction only and do not change strategy.
Fees are not estimated; they run off the actual rate schedules. The denominator of the reward-to-risk is computed with fees on both sides included, so that a fill exactly at the stop comes to exactly −1.000.
The sequential Bayesian curve, reproduced without an account
One of six figures bayes_evolution.py draws from the same CSV. Over the 20 trades that accumulate, the "probability that expected value is above zero" climbs from 8.8% to 96.4%. Look at the blue band rather than the line — that is the uncertainty that comes from having few samples, and it is how this tool says "don't believe it yet".
4. Getting the most out of them
MAHORAGA — don't deploy it; run it locally and just take the judgments. This tool is advertised on unattended 24-hour operation, but what is valuable to a first-time user is seeing how the sentiment score gets built. Leave it running and poke it now and then like this.
curl -H "Authorization: Bearer $TOKEN" localhost:8787/agent/trigger
curl -H "Authorization: Bearer $TOKEN" localhost:8787/agent/status
The signalResearch field of the status response carries per-symbol reasoning in prose. Here is one I actually received:
"At the supplied $23.49 price, there is insufficient evidence of an attractive entry. A 51% bullish Stocktwits reading is nearly neutral, not a strong buy signal. Without current financials, valuation, or recent price and volume history, neither fundamental support nor whether the stock has already pumped can be established. Confidence reflects the case for waiting, not a prediction of a price decline." (on GME)
You have to wait 300 seconds between runs for a new judgment. Poke it sooner and it reuses the previous one, leaving nothing but research_skip in the log.
Asking about Bitcoin three times under the same conditions gave this — WAIT all three times, with confidence 0.88, 0.90 and 0.89. The 24-hour move was −1.19%, short of the ±2% threshold this tool sets, and the answer did not wobble.
One caution came out of that. Changing only the model and asking again gave the same conclusion (SKIP, don't buy) but the confidence dropped to 0.20. That number is a property of the model you happened to use, not of the tool. If you plan to filter anything automatically on confidence (this tool's default threshold is 0.6), pin the model down.
Note also that this tool gives neither an entry price nor a stop — the 5% stop and 10% take-profit are fixed values in the config file, not judgments.
DayTradingAgent — before you create a market-data account, run the review script over your own record. review.py takes a single CSV (date, symbol, direction, entry, exit, share count, max loss). Whether this tool is worth using is something you can settle by looking at the numbers it gives you for 50 of your own trades. That is the most useful thing this script tells you — that 12 trades confirm nothing, and that speaking with confidence takes hundreds.
5. Moving it into weltiq — an integration experiment
This part was not connected. On one side the judgment never came out, blocked by a market-data account; on the other the judgment came out but half of it disappears in transit. Rather than force it, I only lined up the two tools' output shapes against the fields of a weltiq rule document.
| Field | MAHORAGA | DayTradingAgent |
|---|---|---|
| Direction | Carries over as-is | Carries over as-is |
| Entry price | Does not produce one — I would have to write it | Produces a reference price plus a valid price range → carries over |
| Stop | Fixed 5% from config (not a judgment) | Produced as an absolute price → carries over |
| Target | Fixed 10% from config | Absolute price, plus a trailing signal |
| Quantity | A share of capital — has to be divided by price to become a share count | Produces the share count directly |
| Trading hours | Not applicable | 04:00–16:00 US Eastern → maps onto the session and time-window conditions of a weltiq rule document |
In one line: MAHORAGA gets only the direction across and leaves a human to write the price levels, which means you cannot call it "moving the judgment over". DayTradingAgent maps almost all six fields directly. What cannot move is equally clear — MAHORAGA's allocation instruction (a percentage) is not a rule but an allocation, so there is no place for it in a rule document (a property of the tool), and DayTradingAgent permits short selling by default while weltiq's US equity side does not accept shorts (a weltiq limit).
Execution is left for after the accounts are in hand.
6. After using them
What was good
- MAHORAGA was lighter than advertised. The instructions present Cloudflare as a precondition, but everything actually runs locally. 200 tests pass and the type check is clean — that is not always true of an 868-star repository.
- The design that discounts sentiment by quality lives in the code, not in a document. Tools that let you see numerically how much they trust each community are rare.
- There is a deterministic check layer standing in front of orders. Emergency stop, a cooling-off period after a loss, a daily loss limit, market hours, symbol allow and deny lists, a per-order amount cap, exposure against equity, a maximum number of held symbols, short-sale restrictions, buying power — all of them have to pass before a 5-minute approval ticket is issued, and orders go out only on that ticket. Most of the decision tools in this series have no such layer.
- DayTradingAgent measures whether it is doing well by itself. If expected reward-to-risk falls below the bar and the last 5 trades are consecutively unprofitable, it blocks opening a position in a live account. There is no override option.
- DayTradingAgent's record ships with it. 43 signal files, review reports, raw CSVs. Even if you cannot run the tool, you can read what kind of judgments it makes.
What fell short
- MAHORAGA's crypto judgments are mostly thrown away. The output length cap when a judgment is requested is set short, at 250 tokens, so a current model's answer gets cut off mid-way, and when it is cut off that whole pass is discarded. Out of 15 attempts on Bitcoin, 12 went that way. It does not retry either. (Switch to a less talkative model in the config and it disappears — this is the tool's short cap colliding with today's longer answers.)
- MAHORAGA's crypto reasoning cannot be read from outside. It survives only as an order note, and only when it actually bought.
- MAHORAGA has had no commits for 7 months. Given the two problems above, it is hard to hand it 24-hour duty as it stands.
- DayTradingAgent stalls quietly when market data is missing. It does not end in an error; it retries the connection every 6 seconds, forever. Put it on a startup item and you will not know it failed.
- DayTradingAgent's hook configuration is hardcoded to the original author's paths. As shipped, all 6 safety mechanisms misfire.
Cost (checked from the public pricing pages only, without signing up)
| Account | Is it free |
|---|---|
| Cloudflare Workers | A free tier exists (100,000 requests/day). Paid starts at $5/month minimum |
| Cloudflare stateful storage (Durable Objects) | Works on the free tier — only the SQLite flavor does, and that is the one MAHORAGA uses |
| Cloudflare file storage (R2) | There is a free allowance, but creating a bucket requires going through a subscription step once. That said, this build of MAHORAGA does not actually use R2 — removing that entry from the config should drop the step entirely (I could not confirm this by deploying) |
| Alpaca paper | Free. Email sign-up only, no approval and no deposit |
| Model | Paid. Measured at $0.197 over 71 calls, averaging $0.0028 per call |
| Twitter/X (optional) | Paid. Per the instructions, $0.005–0.01 per read |
| Futu/moomoo OpenD | You can log in with an app account without opening a brokerage account. US equity data is free during a promotional period. Hong Kong depth-of-book is free for mainland China users and paid otherwise |
| Tiger OpenAPI | API use is free. Market-data entitlements must be purchased separately from the app, and the price is only visible on the purchase page — unconfirmed |
In summary: the floor on account costs for running MAHORAGA 24 hours a day is the Cloudflare free tier plus model tokens. For DayTradingAgent, if you only want US equities the market data is free too, and money is only involved if you want Hong Kong depth-of-book or automatic orders. In other words, for both tools the real wall is lower than the account list in the instructions.
7. What to do next
If you are picking only one, it splits like this. If you want to hand the judgment off, run MAHORAGA locally — deployment is a later problem, and seeing how the sentiment score is built is worth it on its own. If you want your own trading graded, take just DayTradingAgent's review script — it needs no account at all, and it will show you numerically that your sample confirms nothing yet.
If you do decide to create a market-data account, there is an order to it. A Futu/moomoo app account → run OpenD → check that hot_list.py returns values is one bundle, and Tiger is only needed if you want automatic orders.
The next part puts tools that run through the US session under the same conditions side by side, and covers how comparisons break when the definition of trading hours differs. The 04:00 against 09:30 found in this part is exactly that story.
weltiq setup — 3 steps 1. Sign up: {{CTA_URL}} 2. My → Connections → issue a key 3.
claude mcp add weltiq --transport http https://weltiq.ai/mcp --header "Authorization: Bearer <key>"Paper only. You can see what the fields in this article's section 5 table actually look like.
The full verification record — raw output, commands and responses — is in reports/a/29-account-walls/.