← AlphaAllocator overview

AlphaAllocator · How it works

Separate the questions, then let a risk model decide

Small models answer the two questions news can answer: which asset a story is about, and whether it is good or bad. A risk model decides the allocation, and the news only nudges it.

Participants: Yuhe Sui

Part 1 · The idea

1Why not just ask an LLM?

The obvious way to build a trading agent that reads the news is to give the headlines to a large language model and ask it for the answer: the trade itself, a tilt on top of a portfolio, or an event signal to act on. It is quick to build, and one model does everything.

That is also the problem. Inside one answer the model has to decide which asset a story is about, whether it is good or bad news, and how much money to move. When the result is wrong, you cannot tell which of the three went wrong; the answer can shift with the wording of the prompt; and nothing in it knows about risk, turnover or the limits of the portfolio. Our project’s methodology rejected a direct LLM allocator for exactly these reasons: prompt-sensitive, hard to reproduce and weakly risk-controlled.

One model for everything, or one question per partTop: a single language model reads the news and produces the trade, answering which asset, good or bad, and how much in one step. Bottom: AlphaAllocator gives each question its own part: a relevance model, a tone model, a risk model, and a cap on how far news can move the portfolio.The usual way: one model answers everythingNewsLarge language modelwhich asset? good or bad?how much? — in one answerTradeOne prompt, one answer: hard to test each step or say which one failed.AlphaAllocator: one question per partNewsRelevancewhich asset?Tonegood or bad?Risk modelhow much?Cap≤ 1% tiltSmall local models, each checkable on its own; same input, same output; news can only nudge.
One model for everything, or one question per partTop: a single language model reads the news and produces the trade, answering which asset, good or bad, and how much in one step. Bottom: AlphaAllocator gives each question its own part: a relevance model, a tone model, a risk model, and a cap on how far news can move the portfolio.Usual: one model does it allNewsOne LLMasset? good? how much?all in one answerTradeHard to test each step or say which failed.Ours: one question per partNewsRelevancewhich asset?Tonegood or bad?Risk modelhow much?Cap≤ 1% tiltEach part checkable; news can only nudge.
Figure 1. One model for everything, or one question per part. AlphaAllocator answers the two questions news can answer with two small, dedicated models, and leaves the question of how much to hold to a risk model, with a cap on how far the news may move it.

So we asked a narrower question: how could news help a portfolio at all? Only if the agent knows what a story is about and whether it is good or bad. Those are two different skills, so they get two different models, and the allocation stays with the part of the system that understands risk.

2Two questions, two small models

Which asset?

Relevance model

A small sentence encoder (4 layers, BGE family) turns each article and a short description of each asset into vectors, and their similarity says how much the article is about that asset. One article can matter to several assets.

Good or bad?

Tone model

A financial sentiment classifier (FinBERT) reads the same article and gives probabilities for positive, neutral and negative. The tone is positive minus negative, between −1 and +1.

How much?

Risk model, with a cap

Not a language question. A risk-parity portfolio sets the weights from prices, and the news score may only tilt it, by at most 1.0% of the portfolio in total.

For each asset the agent pools the day’s articles, weighting each by its relevance to that asset and by how recent it is, and multiplies relevance × tone, together with how sure the tone model is and how strongly the article matches one of 8 fixed event types. The result is one news score per asset. Both models are small, run locally and give the same output for the same input, so each can be inspected and tested on its own.

3Why the news only nudges

Even with good relevance and tone, turning each headline straight into a large position is fragile: small day-to-day changes in the news would make the portfolio churn. So the news score enters as a small, centred adjustment: what one asset gains, others give up, and the total size of the adjustment is capped.

Bounded overlay, illustrativeAn illustrative base portfolio, a centred news tilt capped at an L1 budget of 0.010, and the resulting weights.Weights: base (outline) and after the tilt (filled)Tilt ΔwCSI 300CSI 500ChiNextSTAR MarketConsumptionNew energyMediaMetalsEnergyGovt bondsGoldRisk-off day: raw tilt ‖Δw‖₁ = 0.0100, capped at η = 0.010. Illustrative scores, not model output.
Figure 2. Try it. A base portfolio over the Track 1 assets, a news score per asset, and the tilt the agent would apply: centred, scaled by η=0.010, capped so that ‖Δw‖1≤η, then clipped and rescaled to 97% invested. Pick a news day, turn up the score strength, and switch the cap off to see what an uncapped tilt would do. Illustrative base and scores, not model output.

The cap is a design choice, not a forecast: whatever the text models conclude, they cannot move more than 1.0% of the portfolio in Track 1 (1.2% in Track 2) before normalisation.

4The system in one picture

AlphaAllocator in one pictureInputs feed a price branch that builds the quantitative base and a text branch that turns news into one score per asset. The centred score becomes a small tilt whose L1 size is capped, is added to the base, normalised, and passed to the order planner.Cutoff-safe inputs59 prior closestoday's open (sizing)Top-20 news before 15:00Price branch → base bTrack 1: shrinkage risk parityTrack 2: vol–momentum–trendlong-only · cap 35% · 97% inText branch → score zBGE encoder: relevance per assetChinese FinBERT: tone× recency × certaintyone score per assetBounded tiltΔw = η (z − z̄)‖Δw‖₁ ≤ ηη = 0.010 (Track 1)η = 0.012 (Track 2)Target weightsb + Δw, clip, sum 97%Orders and fillsplanner ≤ 25% one-wayfill at today's close
AlphaAllocator in one pictureInputs feed a price branch that builds the quantitative base and a text branch that turns news into one score per asset. The centred score becomes a small tilt whose L1 size is capped, is added to the base, normalised, and passed to the order planner.Cutoff-safe inputs59 prior closes; today's openTop-20 news before 15:00Price branch → base brisk parity (T1) or vol–mom–trend (T2)long-only · cap 35% · 97% investedText branch → score zBGE relevance × FinBERT tone× recency × certainty, per assetBounded tiltΔw = η (z − z̄), ‖Δw‖₁ ≤ ηη = 0.010 (T1), 0.012 (T2)Target weights → ordersclip, sum to 97%; planner ≤ 25%filled at today's close
Figure 3. The pipeline. A price branch builds the quantitative base; a text branch reads the visible news with the two local models and produces one score per asset. The centred score becomes a capped tilt, which is added to the base, normalised and handed to the order planner.
  • Prices decide. In Track 1 a shrinkage risk-parity portfolio gives every asset an equal share of portfolio risk.
  • Text is local and deterministic. Both models load from local files, with no online calls; the encoder was adapted on 2024 data only.
  • Failures are explicit. No visible news gives a zero tilt. A missing model stops the agent with a stable failure state rather than downloading a substitute.

5Where it runs

Nothing in the design is tied to one market: the relevance model needs a short description of each asset, the tone model needs text in the market’s language, and the risk model needs prices.

NLPCC 2026 Shared Task 4 tested

Chinese funds · daily decisions · Chinese news

Track 1, our main system: 11 macro and broad-market assets, from the CSI 300 and ChiNext to government bonds and gold. It placed 1st. Track 2, a secondary extension over 16 sector funds, placed 6th.

ACM ICAIF 2026 Trading Agent Competition Coming soon

US equities · 7 decisions a day · English news

The same design, adapted to 30 US-listed stocks. Results coming soon.

Part 2 · The evidence

Tested so far NLPCC 2026

  • The complete system on the organizers’ hidden 2026 evaluation, both tracks
  • A replay of the submitted agents over all 243 public-2025 decision dates
  • Same-stack Track 1 controls: news zeroed, and news taken from 5 or 21 dates later
  • The packaged agents reproduce the development agents’ weights on all 243 replay dates

In progress Coming soon

  • ACM ICAIF 2026 Trading Agent Competition: US equities, live evaluation
  • The ICAIF write-up

6A leakage-safe backtest

A backtest leaks when a decision uses something it could not have known. At NLPCC 2026 the official loader rules this out by construction, and our agent never steps outside it. We fitted and selected everything on 2024, replayed the frozen system on the public 2025 data, and the organizers ranked submissions on a hidden 2026 period.

What the agent can seeOn decision day t the agent sees full price bars up to t−1, the opening price of t, and news published before 15:00. The close, high, low and change of day t are hidden; orders fill at the close. 2024 was used for fitting and selection, public 2025 for replay, and the hidden 2026 period only by the organizers.Decision day t≤ t−1news published before 15:00 is visibleclose hiddenfull barstoday's open: sizing onlyorders fill at the closeData window2024 fit · 193 d2025 public replay · 243 decisions2026 hiddenText-model adaptation and system selection: 2024 only (49-day development tail).Ranking: the organizers’ hidden 2026 B-list, run by them.
What the agent can seeOn decision day t the agent sees full price bars up to t−1, the opening price of t, and news published before 15:00. The close, high, low and change of day t are hidden; orders fill at the close. 2024 was used for fitting and selection, public 2025 for replay, and the hidden 2026 period only by the organizers.Decision day t≤ t−1news before 15:00close hiddenfull barstoday's open: sizing onlyorders fill at the closeData window2024 fit2025 replay · 2432026 hiddenFitting and selection: 2024 only (49-day development tail).Ranking: hidden 2026, run by the organizers.
Figure 4. What the agent can see. Top: on decision day t it sees full bars up to t−1, today’s open, and news published before 15:00; today’s close, high, low and change are masked, and orders fill at the close. Bottom: 2024 for fitting and selection (193 trading days for training, 49 for development), public 2025 for replay, hidden 2026 for the organizers’ ranking.
  • Inside a day. Features use prior closes and cutoff-visible news only. Today’s open is used just to turn target weights into order sizes.
  • Across years. The text encoder was adapted on 2024 only, and the package manifests declare 2024-only selection, no 2025 tuning and no use of hidden 2026 data. The organizers ran the 2026 evaluation; we report only their aggregate results.

7Results: Track 1

Track 1 is where the design was meant to work, and where it did: over 11 macro assets it ranked first on the organizers’ hidden evaluation.

Official ranking

Hidden 2026 period · organizer-run

1st Sharpe 1.1144

Result. Annualised return 13.52%, maximum drawdown −6.23%.

2025 replay

Public 2025 · 243 decisions

24.30% · Sharpe 2.270

Result. Maximum drawdown 5.83%; target turnover 0.77% a day.

With and without news

Same agent, news score zeroed

2.270 vs 2.198

Result. Sharpe with news against the same agent with news zeroed (23.31% return).

Public-2025 replay, Track 1Gross value of the submitted Track 1 agent's daily target weights through the public 2025 replay, with drawdown beneath. It ends at 24.30%. No transaction costs or order rejections are simulated.Track 1 · 11 macro assets · public 2025Sharpe 2.270 · max drawdown 5.83%0%+10%+20%+24.30%0%-5.8%drawdownJanAprJulOct
Public-2025 replay, Track 1Gross value of the submitted Track 1 agent's daily target weights through the public 2025 replay, with drawdown beneath. It ends at 24.30%. No transaction costs or order rejections are simulated.Track 1 · public 2025Sharpe 2.270 · max drawdown 5.83%0%+10%+20%+24.30%0%-5.8%drawdownJanAprJulOct
Figure 5. The public-2025 replay, day by day. Value of the submitted Track 1 agent’s daily target weights (teal), with its drawdown from the running peak beneath (ochre).

Where did the money go? The targets start almost equal-weighted on the first replay date and then shift during the year, most visibly towards government bonds, with a large early share in gold. The news tilt is part of these targets but too small to pick out at this scale, which is the point of the cap.

What Track 1 held through 2025Share of the Track 1 target portfolio in broad equity indices, sector themes, government bonds and gold on each 2025 decision date. The remaining 3% is the fixed cash reserve.0%25%50%75%100%cash 3%JanFebMarAprMayJunJulAugSepOctNovDecBroad equity indicesSector themesGovernment bondsGold
What Track 1 held through 2025Share of the Track 1 target portfolio in broad equity indices, sector themes, government bonds and gold on each 2025 decision date. The remaining 3% is the fixed cash reserve.0%25%50%75%100%cash 3%JanFebMarAprMayJunJulAugSepOctNovDecBroad equity indicesSector themesGovernment bondsGold
Figure 6. What Track 1 held through 2025. The submitted agent’s target weights on each decision date, grouped into broad equity indices, sector themes, government bonds and gold; 3% is always held as cash. No single asset may exceed 35%.

Track 2, sixteen sector funds on a volatility–momentum–trend base, is a secondary extension. It placed 6th (Sharpe 0.7566, annualised return 15.32%, maximum drawdown −7.49%).

8News on and off

The cleanest test is same stack, news zeroed: the identical Track 1 agent run over 2025 with an all-zero news score. The date-offset rows feed each day the complete news set from 5 or 21 dates later, and the reference rows are separately locked no-news systems.

Controls and references, public-2025 replayFour metrics from the gross public-2025 replay. Track 1 compares the submitted text system with the same stack with news zeroed, two offline date-offset stress tests and the separately locked no-news reference. Track 2 compares the text system with its no-news reference, which equals its zeroed-news run. Each panel has its own axis range.Track 1Return22.31%25.31%Submitted text systemSubmitted text system: 24.30%Same stack, news zeroedSame stack, news zeroed: 23.31%News from 5 dates laterNews from 5 dates later: 24.30%News from 21 dates laterNews from 21 dates later: 24.30%No-news reference (locked)No-news reference (locked): 23.91%Sharpe2.1592.309Submitted text system: 2.270Same stack, news zeroed: 2.198News from 5 dates later: 2.271News from 21 dates later: 2.271No-news reference (locked): 2.257Max drawdown4.83%6.83%Submitted text system: 5.83%Same stack, news zeroed: 5.83%News from 5 dates later: 5.83%News from 21 dates later: 5.83%No-news reference (locked): 5.83%Turnover0.67%1.67%Submitted text system: 0.77%Same stack, news zeroed: 1.47%News from 5 dates later: 0.77%News from 21 dates later: 0.77%No-news reference (locked): 1.57%Track 2Return33.03%36.03%Submitted text systemSubmitted text system: 34.00%No-news reference = zeroedNo-news reference = zeroed: 35.05%Sharpe1.6061.756Submitted text system: 1.681No-news reference = zeroed: 1.681Max drawdown10.90%12.90%Submitted text system: 12.53%No-news reference = zeroed: 11.26%Turnover0.49%13.40%Submitted text system: 1.74%No-news reference = zeroed: 12.15%
Controls and references, public-2025 replay (Sharpe and turnover)Four metrics from the gross public-2025 replay. Track 1 compares the submitted text system with the same stack with news zeroed, two offline date-offset stress tests and the separately locked no-news reference. Track 2 compares the text system with its no-news reference, which equals its zeroed-news run. Each panel has its own axis range.Track 1Sharpe2.1592.309Submitted text systemSubmitted text system: 2.270Same stack, news zeroedSame stack, news zeroed: 2.198News from 5 dates laterNews from 5 dates later: 2.271News from 21 dates laterNews from 21 dates later: 2.271No-news reference (locked)No-news reference (locked): 2.257Turnover0.67%1.67%Submitted text system: 0.77%Same stack, news zeroed: 1.47%News from 5 dates later: 0.77%News from 21 dates later: 0.77%No-news reference (locked): 1.57%Track 2Sharpe1.6061.756Submitted text systemSubmitted text system: 1.681No-news reference = zeroedNo-news reference = zeroed: 1.681Turnover0.49%13.40%Submitted text system: 1.74%No-news reference = zeroed: 12.15%
Figure 7. Controls in the public-2025 replay. Each panel has its own axis range, printed beneath it. On narrow screens only Sharpe and turnover are drawn; the table in §15 has all four.
  • With the news zeroed, the same Track 1 agent returns 23.31% at Sharpe 2.198, against 24.30% at 2.270 with the news, with almost identical drawdown.
  • Feeding each day the news from 5 or 21 dates later gives Sharpe 2.271 and 2.271.

9ICAIF 2026 Coming soon

AlphaAllocator is also being used, adapted to US equities, in the ACM ICAIF 2026 Trading Agent Competition: 30 US-listed stocks, 7 decisions a day, evaluated live. The questions stay the same; the asset descriptions, the text models’ language and the decision clock change. Results and a write-up are coming soon.

10Limitations and what didn’t work

Scope

  • One task, one market. The NLPCC results come from a shared task and its evaluation protocol, and are historical backtests. The official rank evaluates the complete Track 1 system; it does not show that the separation of questions or news models in general improve portfolios. This is an academic system, not investment advice.
  • The 2025 replay. The repository cannot show when 2025 outcomes were first looked at, so we call it public-2025 replay evidence, not a held-out or preregistered test. It is one year, and we make no statistical power claim. It compounds each day’s target weights from close to next close and simulates no orders, commission, slippage or rejected trades, so it is not comparable with the organizers’ execution metrics.
  • No direct-LLM baseline. Using separate small models is a design choice. We did not run a direct-LLM allocator, so we make no claim that it would have done worse.

What the evidence does not show

  • The effect of the news is small and not established. In Track 1 the same agent with news zeroed returns 23.31% at Sharpe 2.198, against 24.30% at 2.270: a modest, single-period difference, not a causal estimate. Feeding each day the news from 5 or 21 dates later gives essentially the same result (Sharpe 2.271 and 2.271). Those offsets ran only in our offline replay and can place later news on earlier dates, so they are stress tests of the call path, not leakage-safe controls. Read together, the replay does not show that the gain comes from the content of each day’s news. There is no component-by-component evaluation, so nothing is claimed about relevance, tone, recency, events or uncertainty separately.
  • Track 2’s news overlay did not help. The text system returns 34.00% with a 12.53% drawdown; its no-news reference, which equals its zeroed-news run, returns 35.05% with 11.26%. We do not know why. One hypothesis for future testing is that sector queries mix direct, upstream, downstream and market-wide news.
  • The relevance model’s adaptation is not shown to help. The 2024 checkpoint was kept because a 50:50 mix of lexical and embedding ranking improved development MRR from 0.9752 to 0.9942, while the embedding alone fell from 0.7985 to 0.7522. Training used CLS pooling and a retrieval prefix, whereas submitted inference uses mean pooling and no prefix, so the archive does not show that adaptation improved the relevance function the agent actually uses.
  • Explored, not submitted. The research registry lists 14 evaluated-but-not-promoted branches, 6 planned but not run, 5 blocked and 6 future-work ideas, among them robust Black–Litterman, belief-state risk parity, online mirror-descent meta-allocation, hidden-state and model-predictive control, causal and event-impact models, rule-based sector ranking, a lightweight graph mixture of experts, and more aggressive transformer overlays. None was promoted. We concluded that a robust quantitative core with a tightly bounded overlay was easier to defend than aggressive news-driven allocation.

Implementation and reproducibility

  • The news score is a heuristic. It is a deterministic engineering product of relevance, tone, recency, event match and certainty, not a learned objective or a calibrated return forecast, and the largest class probability it uses is not a calibrated confidence.
  • Two configured switches did nothing. Disabling the confidence gate or the 0.035 overlay turnover guard leaves every metric unchanged. The gate is set to 0.0. The guard is inactive in the submitted call path: the adapter never passes previous weights to it and passes its value under a key the planner does not read, so the planner’s default 25% limit applies. A configured value is not evidence of enforcement.
  • Gaps in the archive. A full-year strict HTTP parity run was not completed. At the last audit a clean offline dependency install and pip check were blocked by an incomplete wheelhouse, and compileall by sandboxed bytecode writes. News timestamps are timezone-naive and the source timezone is not recorded; the archived triplet generator was moved after it ran and carries no script hash; cap-binding frequency is not recoverable for both tracks, so we do not report it.

11What we would change

These directions come from the paper’s own limitations; none has been run.

  1. Cleaner tests of the news

    Preregistered controls over several periods, and a replay with the official order, cost and rejection rules, so the news effect can be measured rather than described. Any learned query or threshold should be chosen without consulting the evaluation period.

  2. Better links from news to assets

    Entity and event linking, so a sector query can separate news about the sector itself from news about its suppliers, customers or the whole market. This is where we would look first for Track 2’s weak overlay.

  3. Constraints that are enforced

    Pass realised previous weights to every guard explicitly, and test end to end how often each cap and turnover limit actually binds. A configured value is not evidence of enforcement.

Part 3 · Technical details

12The two quantitative bases

Track 1. The agent requests 60 rows: 59 completed bars and the masked current row. Simple returns come from positive prior closes, aligned across assets to the shortest history (at most 58 observations). With sample covariance St, the fixed shrinkage is

Σt=(1−α)St+αTt,(Tt)ij=1[i=j]diag(St)―,α=0.2.

Each asset’s share of portfolio variance is ci(w)=wi(Σtw)i/w⊤Σtw. Starting from inverse volatility, the weights are updated multiplicatively towards equal shares bi=1/n,

wi←wibimax(ci,10−12),

and after every update projected to long-only weights, at most 35% per asset and 97% in total. Iteration stops when every share is within 10−8 of its target or after 250 updates. A numerical exception falls back to a deterministic quantitative core. The base limits one-way target turnover to 25% and ignores changes below 1%.

Track 2. Three normalised components over 20-day windows: inverse volatility, momentum (the average of 3-, 5- and 20-day price momentum, negatives clipped) and sector trend (20-day momentum plus the share of positive days minus one half, negatives clipped):

wiraw=0.35wiivol+0.15wimom+0.50witrend.

Each weight is then multiplied by max(0,1−0.35pi)(0.75+0.5Bi), where pi=min(1,Di/0.5) penalises the 20-day maximum drawdown Di and Bi is the 20-day share of positive returns, before normalising to 97% and applying the 35% cap with redistribution.

13The news score

Cleaning. Each article is its title, a space and its content, whitespace-collapsed and cut to 1,200 characters. Empty records are skipped; duplicates are found by hashing the title and the first 500 content characters; the official ranking order is restored and at most 20 articles kept. Both tokenizers truncate at 256 tokens, batch size 16.

Relevance and recency. An asset query is its identifier followed by fixed Chinese keywords. Articles and queries are mean-pooled over the attention mask and L2-normalised, so dot products are cosines. For article k and asset j, with a two-day half-life,

rk,j=max(0,xk⊤qj),hk=0.5age(k)/2,ak,j=max(rk,jhk, ϵ)∑ℓmax(rℓ,jhℓ, ϵ),

with ϵ=10−9. This is a relative weighting, not a gate: every visible article keeps a small positive weight. A timestamp that cannot be parsed gets recency 0.65.

Tone and the daily score. FinBERT gives class probabilities pk; tone is sk=pk(positive)−pk(negative) and mk is the largest class probability. Pooling with ak,j gives relevance Rj, tone Sj, probability Mj and recency Dj; Ej is the strongest pooled similarity to 8 fixed event descriptions and Uj the pooled class entropy divided by log3, capped at 1. The score is

zj=RjSjMjEjDjmax(0,1−Uj),

set to zero when |zj|<8×10−5. Similarities to 5 aspect descriptions are logged but do not enter the score.

The encoder. A 4-layer, 512-wide BGE-small-compatible encoder, contrastively adapted on 2024 weak-label triplets: keyword hits gave positives and non-matching queries gave negatives. Training used 4,096 of 60,682 candidate triplets (2 January – 23 October 2024), with 1,536 reserved for development (24 October – 31 December 2024), two fixed epochs and temperature 0.05. The tone model is a 12-layer Chinese FinBERT with neutral, positive and negative classes.

14From tilt to orders

With sensitivity η (0.010 in Track 1, 0.012 in Track 2), the raw tilt is

d=η(z−z¯),Δw=dmin(1, η‖d‖1)(Δw=d if ‖d‖1=0).

The path from base to holdings has six distinct states, and the cap applies only to the second:

  1. Base weights from the quantitative core, already capped at 35%.
  2. Raw tilt Δw, centred and L1-capped at η.
  3. Agent target: base plus tilt, negatives clipped, rescaled to 97%. The 35% cap is not reapplied here.
  4. Planner target: each coordinate clipped to 35% without redistribution, then blended towards current holdings within a 25% one-way turnover limit.
  5. Orders: changes below 1% ignored; purchases funded from decision-time cash less a 3% reserve.
  6. Holdings after the official engine fills at the close, with 0.01% commission each way, buys before sells.

15Full tables

Official hidden-2026 B-list results
Official, hidden 2026RankSharpeAnnualised returnMaximum drawdown
Track 11st1.114413.52%−6.23%
Track 26th0.756615.32%−7.49%

Organizer evaluation; drawdown in their signed-negative convention.

Public-2025 gross target-weight replay
Public 2025, gross replayReturnSharpeMax drawdownTurnoverNews-active days
Track 1 · submitted text system24.30%2.2705.83%0.77%243
Track 1 · same stack, news zeroed23.31%2.1985.83%1.47%0
Track 1 · news from 5 dates later24.30%2.2715.83%0.77%241
Track 1 · news from 21 dates later24.30%2.2715.83%0.77%234
Track 1 · no-news reference (separately locked)23.91%2.2575.83%1.57%0
Track 2 · submitted text system34.00%1.68112.53%1.74%243
Track 2 · no-news reference (= news zeroed)35.05%1.68111.26%12.15%0

243 decisions and 242 close-to-next-close returns. Return is cumulative; Sharpe uses 252 days and a zero risk-free rate; drawdown is a positive magnitude; turnover is the mean one-way change in target weights, not in realised holdings. News-active days count dates with a non-zero tilt.

16Reproducibility notes

The submission is a standalone package: the two track agents, a vendored copy of the runtime they need, an official-style local server, the configuration and both model snapshots, loaded with local files only. Commands, expected outputs and audits ship with it.

Final configuration
SHA-256 b4fc52e37f0fdb4c5704b196ff2f22980473f11f1713525110961b4ccdfb3d43; declares 2024-only selection, no 2025 tuning, no hidden-2026 use, no network.
Encoder weights
SHA-256 003563924b66722e96f19f5dedb33794c8a63f6d19e333fb83fc1a28c655ca41
FinBERT weights
SHA-256 0c25b105902f90d1e039d511944af4f49d1490f6698e701f2704a714ca74e66b; stored with Git LFS.
Dependency lock
NumPy 2.3.4, pandas 2.3.3, PyTorch 2.6.0+cu124, Transformers 5.8.1.
Task interface
Checked against the organizers’ starter kit at commit b94ce984e318fe09779318585db55b12dc9773f3.
Parity
The packaged agents reproduce the development agents’ target weights on all 243 replay dates, with zero difference. A 5-date test through the package’s HTTP server matched exactly for both tracks.
Tests
The package’s tests pass: 91 and 156, one skip each.

17Sources

Paper: NTU-QRS AlphaAllocator: Bounded Transformer News Overlays for Chinese Macro-Asset Allocation, NLPCC 2026 Shared Task 4, poster and oral, 5 August 2026. [OpenReview]

Recognition

  • NLPCC 2026 Shared Task 4 · Track 1 · 1st
  • NLPCC 2026 Shared Task 4 · Track 2 · 6th

Official results are the organizers’ release as reported in the paper; the 2025 numbers come from the replay outputs of the NLPCC submission. Asset names paraphrase the keyword lists in the reproducibility manifest.

Back to top ↑