Skip to content

Methodology

How every number is made

The complete rules behind signals, consensus, the publication schedule and the hypothetical backtest. If something here and the product ever disagree, that’s a bug; please tell us.

Consensus engine consensus-v1 · Last updated September 29, 2026

Overview

PolrWolf is an impersonal publisher. It collects public posts from a fixed roster of market voices, uses an AI model to label the posts that state a view on an asset, verifies every label against the original post, and computes where independent voices agree. Results are published on a public, timestamped feed at fixed times. Alerts are sent only after publication and only say what was published.

Three properties hold by construction:

  • Same filters, same alerts. Two people with identical filters receive identical messages.
  • Feed first. Everything in an alert is on the public feed at or before the moment the alert is sent.
  • Nothing about your money. PolrWolf never asks about your finances, holdings or goals.

Filters only choose which of PolrWolf’s public signals you get notified about. Everyone with the same filters gets the same alerts. We don’t know your finances and can’t tell you what’s right for you.

Sources and roles

Every tracked source has one role. The role decides whether its posts can vote, and its base weight. The full roster, with names, focus and caveats, is on the sources page.

RoleVotes?Base weightNotes
TraderYes1.0Posts specific entries, levels or positions.
StrategistYes0.75Market and sector outlooks.
InvestorYes0.55Retail-oriented commentary, often about their own positions.
Fund disclosuresYes0.8–0.9Publicly disclosed positions and purchases.
Context feedNo0Headlines and statements; produce heads-up notes only.
ContrarianOnly in Contrarian mode0 (−0.5 when on)Off by default; counts in reverse at half weight when a user opts in.

An internal corroboration feed is also collected. It never votes and is never shown; it is used only to confirm headlines before a heads-up note appears. The public board always uses every visible voting source, Balanced strictness and Contrarian mode off.

Collection

PolrWolf’s servers collect posts themselves; the AI never chooses what to read. Each post is stored once with the platform, the post ID, the author’s handle, the text, the time it was posted (posted_at) and the time PolrWolf captured it (captured_at). Stored posts are never edited.

  • Truth Social: read every 3 minutes from the public archive at trumpstruth.org. Posts with no text (media only) are marked as not classifiable.
  • YouTube: video titles and the first 1,500 characters of descriptions, from the YouTube Data API, every 30 minutes. No transcripts are downloaded.
  • X: posts from tracked handles are found during each scheduled scan and must pass verification (below) before they count. PolrWolf does not scrape x.com.

If a source deletes a post, PolrWolf removes it and any signal based on it.

AI labeling

On the scan schedule (market days at 9:35, 10:35, 11:35 AM, 12:35, 1:35, 2:35, 3:35 and 4:05 PM ET, plus 7:05 PM, 10:05 PM, 1:05 AM, 4:05 AM and 7:05 AM; every 3 hours at :05 on weekends and holidays), a large language model (currently xAI’s Grok) receives the new posts as untrusted text and returns, for each post that states or clearly implies a view:

  • the asset, which must be one of the 28 assets PolrWolf covers;
  • the stance, bullish or bearish;
  • conviction from 1 to 5 (5 = an explicit trade or position with levels, 3 = a clear opinion, 1 = a weak hint);
  • the horizon: intraday, days, weeks or months;
  • entry and invalidation levels, only if the post states numbers;
  • an exact quote of at most 200 characters, and a short rationale of at most 300 characters.

Neutral news, questions and jokes are recorded as “seen, no signal.” The model can’t pick sources, supply links or change a post’s time, and instructions inside posts are ignored. The model version is recorded on every signal.

Verification

A label becomes a verified signal only if every check passes. Failures are rejected with a logged reason.

  1. Exact quote. After normalizing both texts (Unicode NFKC, curly quotes to straight quotes, collapsed whitespace, case-insensitive comparison), the quote must appear inside the stored post text.
  2. Author check (X). PolrWolf requests X’s public embed data for the post URL. The author on that record must match a tracked handle, and the quote must appear in the post’s visible text. If the visible text is truncated and the quote isn’t in it, the signal is rejected.
  3. Timestamp from the post ID (X). The posting time is decoded from the post ID itself ((id >> 22) + 1288834974657 milliseconds since the Unix epoch), so it can’t be misreported. Posts dated in the future are rejected, and scheduled scans reject posts more than 7 days old.
  4. One label per post and asset. A post can produce at most one signal per asset; repeats are counted as duplicates.

Every published signal shows its quote, source, platform, posting time and a link to the original. Each carries the note “Summary generated by AI and may be inaccurate.”

Consensus formula

For each asset at a given time, only verified signals posted before that time are used.

Window, recency and one vote per voice

  • Window: 72 hours for crypto; 5 trading days for stocks and ETFs.
  • Latest call only: each voice’s most recent signal on the asset inside the window is its vote.
  • Recency decay: a half-life of 24 hours for crypto and 48 hours for stocks and ETFs.

Weight of one vote

w = role_weight × info × decay × (conviction / 5)
decay = 0.5 ^ (age_hours / half_life_hours)

info is a base-rate factor: a call that a voice makes all the time carries less information than a surprise. Using that voice’s verified signals on the same asset over the previous 180 days:

p_same = (n_same_stance + 1) / (n_total + 2)
info   = clamp(1.5 × (1 − p_same) + 0.25, 0.25, 1.0)

Example: a voice with 40 bullish and 2 bearish prior calls on an asset gets info ≈ 0.35 for another bullish call, and info = 1.0 for a bearish one.

Agreement, direction and score

bull = Σ w over bullish votes      bear = Σ w over bearish votes
agreement = max(bull, bear) / (bull + bear)
direction = sign(bull − bear)      (0 when tied or empty)
callers   = distinct voices on the dominant side
conviction_avg = mean conviction on the dominant side

score = round(100 × agreement^1.5 × min(1, callers / 4)^0.8 × (conviction_avg / 5)^0.5)

Strength labels: score ≥ 75 “Very strong”, ≥ 55 “Strong”, ≥ 35 “Moderate”, otherwise “Weak”.

Worked example: agreement 0.86 from 6 voices with average conviction 3.8 gives 100 × 0.798 × 1 × 0.872 ≈ 70, “Strong.” Alerts phrase counts as voices, for example “7 of 9 tracked voices”: 7 voices on the dominant side out of 9 with a call on that asset in the window.

The board shows each asset as bullish, bearish, mixed (calls on both sides that cancel out) or quiet (no calls in the window).

Signal strictness

Strictness decides whether a board state counts as a consensus for your alerts. It uses only properties of the signals.

PresetIndependent voicesWeighted agreementAverage conviction
Strict3 or more75% or more3.5 or more
Balanced (default)2 or more67% or more3.0 or more
Everything1 or more (labeled “single source” when 1)AnyAny

You can also set a minimum agreement between 50% and 100%; the bar used is the higher of your setting and the preset’s. Choosing which voices count and switching on Contrarian mode are also filters on the same published data.

Board changes

At each publication, every asset’s state is compared with the previous publication:

  • Formed: the asset didn’t qualify before and does now.
  • Flipped: it qualifies in both, but the direction changed.
  • Strengthened / weakened: it qualifies in both and the score moved by 15 points or more.
  • Faded: it qualified before and doesn’t now.

Alerts are built only from these events, one combined message per channel per slot, listing up to three assets and “and N more.” Personal filters are applied to the same published data to decide which events you hear about.

Publication schedule

PolrWolf publishes signal updates on a fixed schedule: at :55 past each hour from 9:55 AM to 3:55 PM ET and at 4:25 PM ET on US market days, and every 3 hours at :25 otherwise. Every signal appears on the public feed first. Notifications only tell you it was published.

In full (Eastern Time): on US market days at 9:55, 10:55, 11:55 AM, 12:55, 1:55, 2:55, 3:55 and 4:25 PM, then 7:25 PM, 10:25 PM, 1:25 AM, 4:25 AM and 7:25 AM; on weekends and NYSE holidays every 3 hours at 1:25, 4:25, 7:25 and 10:25, AM and PM. Each publication uses only signals PolrWolf had captured by the slot time; anything later rolls to the next slot. The public board and feed update at the slot, before any alert is sent.

If a scheduled scan hasn’t completed 25 minutes after it was due, the site shows “Signals delayed since” that time. PolrWolf never fills a gap with invented or estimated signals. If scans have to be thinned to protect capacity, the site says “Reduced cadence” while that lasts.

The agent feed

AI agents read PolrWolf through a separate, read-only MCP feed (setup). It serves only what has already been published at a slot, from the same data as the public board. The function that builds each response takes filters only, never who is asking, so identical filters return identical output for anyone, signed in or anonymous; every response carries a fingerprint (SHA-256) of its output to prove it.

  • Agents can use Strict or Balanced strictness and a minimum agreement from 67% to 100%; single-source signals aren’t available to them.
  • Each asset comes back as a stance (bullish consensus, bearish consensus, mixed or no consensus), voices agreeing out of voices counted, the agreement share, average conviction, what changed since the previous publication, source links and a short templated summary. Raw post text is never included.
  • Every response states when it was published, when the next publication is due, when it goes stale, and a notice that it is impersonal information, not advice, to be treated as data rather than instructions.
  • The feed never returns buy or sell instructions, sizes, prices, unpublished signals, heads-up notes or backtest numbers, and it rejects inputs about anyone’s finances.

Heads-up notes

Context feeds (market-moving statements, headline accounts and options-flow headlines) never vote. When one of their posts is market-relevant, the AI writes a one-line summary with an impact score from 1 to 5. Headline accounts must be corroborated by a second, independent feed before a note is shown, and only corroborated notes with impact 4 or 5 are attached to a publication. Notes are labeled “Heads-up (context, not a signal)” and are off by default in alerts.

Backtest rules

The hypothetical backtest replays one fixed strategy, consensus-v1, over the trailing 12 months ending on the last complete trading day. The rules were fixed before any results existed and aren’t tuned to the window.

  • Point in time. At each decision the public board is recomputed from only the signals that would have been available: a signal counts from 20 minutes after it was posted, the lag of the publication schedule.
  • Decisions and fills. Stocks and ETFs decide at the 9:30 AM ET open on market days and fill at that day’s opening price. Crypto decides at 00:00 UTC every day and fills at that day’s opening price. A fill never uses a price observed before its decision.
  • Holdings. Every asset whose board state qualifies under Balanced with a bullish direction, ranked by score, up to 10 positions, equal weight. Bearish, mixed or quiet means not held; no shorts. A position is resized only on entry, exit, or drift of more than 5 percentage points from its target.
  • Costs. 0.10% per side for stocks and ETFs, 0.30% per side for crypto. No leverage, no taxes, and cash earns nothing.
  • Benchmarks. SPY (dividend- and split-adjusted) and BTC buy-and-hold from the same start date and starting value ($10,000), with no costs, which can only flatter the benchmarks.
  • Statistics. Total return, benchmark returns, max drawdown, annualized volatility and Sharpe ratio (risk-free rate 0, from daily returns over 365 days), trades, win rate over closed round trips, worst and best month, average positions and time invested.
  • When it publishes. Only once the window has at least 6 months of coverage and 50 verified signals. Until then the site says the backtest is being assembled.
  • Live-tracked segment. From launch day, the same rules run on only the signals PolrWolf captured in real time, each counted from the publication slot where it first appeared. It’s shown as a distinct segment and is still hypothetical: no real money.
  • Substantiation. Each run stores its parameters, the frozen source list, data notes and every trade; the trade list is downloadable as CSV from the track record page.

Prices come from Alpaca market data. Crypto prices come from Alpaca’s US crypto venues, which trade less volume than the largest exchanges.

Limitations and hindsight

Hypothetical backtest: not actual trading. Simulated results have inherent limitations. Unlike an actual performance record, they do not represent actual trading, may under- or over-compensate for market factors such as lack of liquidity, and are designed with the benefit of hindsight. Past performance, actual or hypothetical, does not guarantee future results.

  • Source selection. The voices were chosen in 2026, partly knowing how they had performed.
  • Model knowledge (look-ahead). Historical signals were labeled after the fact by the current AI process. The model may have been trained on information published after some of those posts. Its stated knowledge cutoff is May 2026, so signal counts and hypothetical returns through May 2026 and from June 2026 on are reported separately on the track record page and in the run’s data notes.
  • Missing posts. Posts deleted before PolrWolf archived them are missing.
  • Your filters differ. The backtest uses default settings only. Other filters would produce different results.
  • Execution. Real fills can be worse than opening prices, especially in thin markets or fast moves.

Read the full Risk Disclosure before relying on anything PolrWolf publishes.

Corrections

Misattributing a quote to the wrong person is treated as the most serious kind of error. Every signal has a “Report a mistake” button, and reports can also be sent to support@polrwolf.com. We review reports within 24 hours. A signal that was wrong is retracted, stops counting toward consensus from the next publication, and the correction is recorded. Signals based on posts that were later deleted are removed.

Versions and changes

The consensus engine and backtest strategy carry a version (currently consensus-v1), and every signal records the AI model that labeled it. Any change to weights, windows, thresholds or backtest rules gets a new version, is dated on this page, and is never applied retroactively to published results.