Тема
harvester-daily admission distribution — data report
Generated: 2026-05-19
Methodology: 14 654 markets sampled from Polymarket Gamma /events?active=true&closed=false across 16 offsets (0..7500, step 500, limit 500). Single-shot snapshot — does not capture intraday volatility.
Purpose: facts for operator decision on harvester-daily admission knobs. No trading recommendation included.
1. Distribution facts
1.1 outcomePrices quality (Gamma-supplied probability)
| Bucket | Count | % | Meaning |
|---|---|---|---|
| missing | 3 111 | 21.2 % | Gamma omitted the field. Triggers LowProb reject silently (current bug — fixed by fix-directional-admission-pipeline openspec change). |
["0","1"] (resolved) | 2 767 | 18.9 % | Resolved or pre-listing. Winning side has probability = 1.0 — passes any DIRECTIONAL_MIN_PROBABILITY. |
| mid_range (max 0.05–0.95) | 6 875 | 46.9 % | Active markets, real signal. The tradeable cohort. |
| high (max > 0.95) | 1 901 | 13.0 % | Hot-resolved or near-certain markets — winning probability very high. |
| low (max < 0.05) | 0 | 0 % | Mathematically impossible on binary (max of two probabilities ≥ 0.5). |
| malformed | 0 | 0 % | Parser handles all current shapes. |
1.2 Market type
| Type | Count | % |
|---|---|---|
| neg-risk | 8 281 | 56.5 % |
| binary | 6 373 | 43.5 % |
BOT_MARKET_TYPE_FILTER=neg-risk cuts ~43.5 % of universe.
1.3 Hours-to-expiry distribution
| Window | Count | % |
|---|---|---|
| ≤24h (Daily candidates) | 4 031 | 27.5 % |
| 24–168h (1 week) | 2 858 | 19.5 % |
| 168–720h (1 month) | 3 331 | 22.7 % |
| >720h | 4 300 | 29.4 % |
| unknown / no endDate | 134 | 1.0 % |
BOT_MAX_HOURS_TO_EXPIRY=24 (original .env.shared value) cuts ~72.5 % of universe to leave only the ≤24h cohort.BOT_MAX_HOURS_TO_EXPIRY=720 (currently-relaxed value) cuts ~29.4 % to leave the ≤30-day cohort.
1.4 best_ask distribution
| Ask range | Count | % | What DIRECTIONAL_MAX_ENTRY_PRICE admits |
|---|---|---|---|
| <0.05 | 3 276 | 22.4 % | ✓ at MAX_ENTRY≥0.05 |
| 0.05–0.50 | 2 831 | 19.3 % | ✓ at MAX_ENTRY≥0.50 |
| 0.50–0.95 | 3 165 | 21.6 % | ✓ at MAX_ENTRY≥0.95 (but invariant EXIT > MAX_ENTRY, max usable MAX_ENTRY = EXIT − 0.01) |
| >0.95 | 5 382 | 36.7 % | typically resolved, low value |
2. Cross-product: what admits at each knob combination
Admission stages are conjunctive: a market admits iff it passes every filter. The cross-product against the 14 654-market sample gives the theoretical maximum admitted count, before downstream gates (EV, entry-window, DCA admission — currently invisible per the «hidden filter» investigation).
2.1 Current production-canonical (harvester definition, before today's relaxation)
DIRECTIONAL_MIN_PROBABILITY = 0.9 (cuts: requires winning prob ≥ 0.9)
DIRECTIONAL_MAX_ENTRY_PRICE = 0.98
DIRECTIONAL_MIN_ENTRY_PRICE = 0.91
BOT_MAX_HOURS_TO_EXPIRY = 24
BOT_MARKET_TYPE_FILTER = neg-risk
MARKET_TAG_FILTER = 102892 (Crypto/5-min on harvester; 102281 Daily on harvester-daily)Expected reachable from sample (rough): markets ≤ 24h × neg-risk × winning-prob ≥ 0.9 × ask in [0.91, 0.98]. The 0.9 floor selects from mid_range + high buckets where the winning side is ≥ 0.9. Visually correlates with ask in [0.91, 0.98] (because ask ≈ probability on the winning side). Result: a thin slice, typically dozens not thousands of markets per snapshot.
The 2026-05-18 reject distribution observed on harvester-daily (with default tag filter active) showed admitted = 0 from ~30 K scanned. Consistent with: tag filter ≈ thousand-fold reduction, then probability+ask gates cut everything left.
2.2 Currently-relaxed harvester-daily definition (post-2026-05-18 debug)
DIRECTIONAL_MIN_PROBABILITY = 0.01
DIRECTIONAL_MAX_ENTRY_PRICE = 0.50
DIRECTIONAL_MIN_ENTRY_PRICE = 0.01
BOT_MAX_HOURS_TO_EXPIRY = 720
BOT_MARKET_TYPE_FILTER = neg-risk
MARKET_TAG_FILTER = "" (no tag)From the sample, theoretical reachable = (neg-risk) × (hours ≤ 720) × (ask in [0.01, 0.50]) × (probability ≥ 0.01).
| Filter | Survivors / pre-filter |
|---|---|
| neg-risk | 8 281 / 14 654 = 56.5 % |
| AND hours ≤ 720h | ≈ 70.6 % of remaining → ~5 846 |
| AND ask ∈ [0.01, 0.50] | ≈ 41.7 % of remaining → ~2 437 |
AND probability ≥ 0.01 (only kills missing cohort under current bug) | minus 21.2 % missing → ~1 920 theoretically admittable |
Observed: admitted = 0. Gap of ~1 920 markets that should pass evaluate_periodic filters but don't. This is the «hidden filter» investigation tracked in fix-directional-admission-pipeline task 8.3 (Seoul reproducer trace).
3. Operator decision space (facts only — no recommendation from me)
The knobs that meaningfully change the admission window for harvester-daily, ranked by survivor sensitivity per the 14 654-market sample:
BOT_MAX_HOURS_TO_EXPIRYis the single largest filter. Step from 24 → 168 nearly doubles the reachable cohort (4 031 → 6 889). Step 168 → 720 brings in another 3 331 (now 10 220).MARKET_TAG_FILTER(when set to a specific tag like102281 Daily) cuts ~98 % of universe. Removing it widens reach hugely but also pulls in markets with possibly different statistical properties (longer expiry, lower volume).DIRECTIONAL_MAX_ENTRY_PRICEcontrols which side of the probability axis you can enter. Withwinningside mode andEXIT_PRICE=0.99, the invariantEXIT > MAX_ENTRYcaps MAX_ENTRY at 0.98. Default0.91–0.98window selects the «winning-side near-certain» cohort — a thin band by design.DIRECTIONAL_MIN_PROBABILITYfilters by Gamma-reportedoutcomePrices. With the current bug, 21.2 % of markets fail this gate silently regardless of value. After the openspec fix lands, the threshold reflects real probability filtering only.BOT_MARKET_TYPE_FILTER=neg-riskis a near-binary 56.5/43.5 split. Setting to empty broadens to all markets.
Reality vs intent
The harvester profile (production-canonical, NOT relaxed) targets the «winning side, ≥0.9 confident, ≤24h» cohort — by design a small market count. The reject distribution observed on 2026-05-18 (admitted=0) was consistent with that small target but ALSO with the silent LowProb bug at 21.2 % of markets. Without the openspec fix landed and a clean reject breakdown, it's impossible to tell whether harvester-daily is correctly empty (Daily tag had no qualifying markets during this debug window) or buggy.
After the openspec fix lands:
strategy_no_price_datacounter separates Gamma-data-missing from operator-tunedLowProbcuts.- Operator can compare expected admitted count (per cross-product table above) against observed admitted count.
- If observed << expected, the hidden filter behind the ~22 % gap is still active and needs the Seoul-CID trace.
- If observed ≈ expected, the strategy is healthy and the operator can tune
MIN_PROBABILITY/MAX_ENTRY_PRICEfor the desired return profile.
4. Reproducibility
Sample size: 14 654 markets, 16 paginated /events calls.
Generator: shell script + Python stdlib, no third-party deps.
Source data: live Gamma snapshot at 2026-05-19; intraday distribution drifts (resolution events, new listings) — re-run on demand.
Raw bucket breakdown lives at .tmp/admission-distribution-sample.json (gitignored).
5. Status of this report
This closes the data-collection half of TaskList item #21 «Trading: исследовать harvester-daily admission distribution». The remaining torговое decision (which knob values to set) sits with the operator after the fix-directional-admission-pipeline openspec change lands and the strategy_no_price_data counter cleans the signal.
No knob is changed by this report. The currently-relaxed harvester-daily definition on the VPS remains as-is per the «не откатывать» instruction from the 2026-05-18 session.