mirror of
https://github.com/theodore-song/polymarket-analyst.git
synced 2026-08-19 18:48:10 +00:00
Preserve adaptive signals until grading
This commit is contained in:
@@ -15,7 +15,7 @@ https://polymarket-site-eta.vercel.app/personal.html
|
|||||||
|
|
||||||
The site fetches live Polymarket markets, generates agent suggestions, lets you
|
The site fetches live Polymarket markets, generates agent suggestions, lets you
|
||||||
run frequent paper cycles, and syncs the shared arena state through Neon or
|
run frequent paper cycles, and syncs the shared arena state through Neon or
|
||||||
Vercel Blob. Build 51 also installs an offline app shell and caches timestamped
|
Vercel Blob. Build 52 also installs an offline app shell and caches timestamped
|
||||||
market snapshots. During an outage, cycles continue locally; cached entries are
|
market snapshots. During an outage, cycles continue locally; cached entries are
|
||||||
allowed for 90 minutes, older snapshots become mark-only, and all cached data
|
allowed for 90 minutes, older snapshots become mark-only, and all cached data
|
||||||
expires after 24 hours.
|
expires after 24 hours.
|
||||||
@@ -27,7 +27,7 @@ The learner shrinks small samples toward neutral, caps sizing changes to
|
|||||||
15% of candidates for deterministic exploration so a stale regime cannot become
|
15% of candidates for deterministic exploration so a stale regime cannot become
|
||||||
permanent.
|
permanent.
|
||||||
|
|
||||||
Strategy 47 treats each binary stake as capable of falling to zero even when the
|
Strategy 48 treats each binary stake as capable of falling to zero even when the
|
||||||
18% stop cannot fill. New core positions are capped at 2.5%-4% of equity and
|
18% stop cannot fill. New core positions are capped at 2.5%-4% of equity and
|
||||||
aggressive positions at 3%-5%, with lower limits for near-term, extreme-price,
|
aggressive positions at 3%-5%, with lower limits for near-term, extreme-price,
|
||||||
reversal, and fast-moving setups. Oversized positions inherited from older
|
reversal, and fast-moving setups. Oversized positions inherited from older
|
||||||
@@ -65,7 +65,7 @@ negative in all three chronological segments. Reversals averaged -3.69%, with a
|
|||||||
market-clustered 90% interval entirely below zero. Crypto and Sports were also
|
market-clustered 90% interval entirely below zero. Crypto and Sports were also
|
||||||
negative but covered only three and five markets. The 24-hour cohort improved to
|
negative but covered only three and five markets. The 24-hour cohort improved to
|
||||||
-0.82% row mean and +1.31% market mean, with no rule robustly negative across all
|
-0.82% row mean and +1.31% market mean, with no rule robustly negative across all
|
||||||
segments. Strategy 47 therefore keeps reversal entries observation-only until
|
segments. Strategy 48 therefore keeps reversal entries observation-only until
|
||||||
their recent signal and quality cohorts independently earn promotion, retains
|
their recent signal and quality cohorts independently earn promotion, retains
|
||||||
their signals for paper grading, and evaluates adaptation at 24 hours.
|
their signals for paper grading, and evaluates adaptation at 24 hours.
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ markets with no failures and produced 3,597 net-of-cost 24-hour outcomes across
|
|||||||
142 markets. No tested follow or fade rule was robustly positive. Crypto trends
|
142 markets. No tested follow or fade rule was robustly positive. Crypto trends
|
||||||
averaged -3.83% per observation and -3.99% per market; Sports trends averaged
|
averaged -3.83% per observation and -3.99% per market; Sports trends averaged
|
||||||
-5.44% and -6.61%. Both stayed negative in every chronological segment and their
|
-5.44% and -6.61%. Both stayed negative in every chronological segment and their
|
||||||
market-clustered 90% intervals were entirely below zero. Strategy 47 therefore
|
market-clustered 90% intervals were entirely below zero. Strategy 48 therefore
|
||||||
keeps Crypto and Sports trends observation-only while continuing to grade them.
|
keeps Crypto and Sports trends observation-only while continuing to grade them.
|
||||||
|
|
||||||
A corrected 200-market audit paged through 197 markets with usable history and
|
A corrected 200-market audit paged through 197 markets with usable history and
|
||||||
@@ -83,23 +83,23 @@ segment and averaged -4.13%. Sports trends were negative in train and test and
|
|||||||
averaged -3.53% at 72 hours. Politics trends were the sole cohort with positive
|
averaged -3.53% at 72 hours. Politics trends were the sole cohort with positive
|
||||||
row-level returns in all three 72-hour segments, but its market-cluster interval
|
row-level returns in all three 72-hour segments, but its market-cluster interval
|
||||||
still crossed zero; that supports a longer hold test, not a larger entry bet.
|
still crossed zero; that supports a longer hold test, not a larger entry bet.
|
||||||
Strategy 47 gives Politics trend positions that 72-hour observation window before
|
Strategy 48 gives Politics trend positions that 72-hour observation window before
|
||||||
ordinary signal exits. Stops, profit locks, settlement handling, and risk-budget
|
ordinary signal exits. Stops, profit locks, settlement handling, and risk-budget
|
||||||
reductions remain immediate.
|
reductions remain immediate.
|
||||||
|
|
||||||
Strategy 47 also subtracts a half-cent round-trip cost when grading each live
|
Strategy 48 also subtracts a half-cent round-trip cost when grading each live
|
||||||
walk-forward signal. Confidence uses the largest independent matching bucket,
|
walk-forward signal. Confidence uses the largest independent matching bucket,
|
||||||
not the sum of five overlapping feature buckets, and evidence from older engine
|
not the sum of five overlapping feature buckets, and evidence from older engine
|
||||||
versions is down-weighted. This prevents a handful of duplicated observations
|
versions is down-weighted. This prevents a handful of duplicated observations
|
||||||
from authorizing larger positions or hiding a modest negative regime.
|
from authorizing larger positions or hiding a modest negative regime.
|
||||||
|
|
||||||
Strategy 47 adds uncertainty-aware promotion and demotion. A matching setup must
|
Strategy 48 adds uncertainty-aware promotion and demotion. A matching setup must
|
||||||
accumulate at least eight effective observations and agree across at least two
|
accumulate at least eight effective observations and agree across at least two
|
||||||
feature views before repeatable positive evidence can increase size or repeatable
|
feature views before repeatable positive evidence can increase size or repeatable
|
||||||
negative evidence can block a new entry. Mixed evidence stays close to neutral
|
negative evidence can block a new entry. Mixed evidence stays close to neutral
|
||||||
instead of being mistaken for an edge.
|
instead of being mistaken for an edge.
|
||||||
|
|
||||||
Build 51 enforces the documented offline boundary end to end. Cached snapshots
|
Build 52 enforces the documented offline boundary end to end. Cached snapshots
|
||||||
under 90 minutes old may continue paper execution. Older snapshots remain usable
|
under 90 minutes old may continue paper execution. Older snapshots remain usable
|
||||||
for valuation and chart snapshots for up to 24 hours, but cannot trigger entries,
|
for valuation and chart snapshots for up to 24 hours, but cannot trigger entries,
|
||||||
stop-losses, gain-stops, risk rebalances, settlements, or policy exits. Network
|
stop-losses, gain-stops, risk rebalances, settlements, or policy exits. Network
|
||||||
@@ -112,12 +112,12 @@ adaptive baselines, pending signal grades, and trade evidence remain in one stra
|
|||||||
lineage until the actual entry, sizing, or exit logic changes. Legacy build 40 and 41
|
lineage until the actual entry, sizing, or exit logic changes. Legacy build 40 and 41
|
||||||
records are migrated into the same strategy lineage without losing evidence.
|
records are migrated into the same strategy lineage without losing evidence.
|
||||||
|
|
||||||
Build 51 independently refreshes markets for matured pending signals that have
|
Build 52 independently refreshes markets for matured pending signals that have
|
||||||
left the current top-500 activity scan. Unavailable markets remain queued for a
|
left the current top-500 activity scan. Unavailable markets remain queued for a
|
||||||
bounded retry window. This prevents activity-rank survivorship from deciding
|
bounded retry window. This prevents activity-rank survivorship from deciding
|
||||||
which wins and losses reach the adaptive calibration ledger.
|
which wins and losses reach the adaptive calibration ledger.
|
||||||
|
|
||||||
Strategy 47 coordinates high-risk exploration globally. Near-term, extreme-price,
|
Strategy 48 coordinates high-risk exploration globally. Near-term, extreme-price,
|
||||||
and other gap-prone positions may be held materially by only one agent, while
|
and other gap-prone positions may be held materially by only one agent, while
|
||||||
ordinary independently confirmed markets retain the two-agent cap. The robustly
|
ordinary independently confirmed markets retain the two-agent cap. The robustly
|
||||||
negative Sports- and Crypto-trend cohorts cannot enter through exploration.
|
negative Sports- and Crypto-trend cohorts cannot enter through exploration.
|
||||||
@@ -139,7 +139,7 @@ whole-event YES or NO bundles using executable best asks/bids, per-leg costs, an
|
|||||||
a minimum-liquidity requirement. The 500-event audit found 33 complete liquid
|
a minimum-liquidity requirement. The 500-event audit found 33 complete liquid
|
||||||
negative-risk events and zero positive worst-case bundle returns after costs.
|
negative-risk events and zero positive worst-case bundle returns after costs.
|
||||||
Midpoint price sums sometimes looked attractive, but executable spreads removed
|
Midpoint price sums sometimes looked attractive, but executable spreads removed
|
||||||
the apparent edge, so Strategy 47 does not pretend those snapshots are arbitrage.
|
the apparent edge, so Strategy 48 does not pretend those snapshots are arbitrage.
|
||||||
|
|
||||||
The expanded event-clustered run loaded history for 498 of the 500 highest-volume
|
The expanded event-clustered run loaded history for 498 of the 500 highest-volume
|
||||||
resolved markets with no fetch failures. No side, price band, category, trend,
|
resolved markets with no fetch failures. No side, price band, category, trend,
|
||||||
@@ -150,24 +150,29 @@ static settlement-direction boost from this audit.
|
|||||||
|
|
||||||
The earlier 200-resolved-market audit found short-dated NO entries strongly
|
The earlier 200-resolved-market audit found short-dated NO entries strongly
|
||||||
negative, but the 500-market rerun did not reproduce that loss in its newer test
|
negative, but the 500-market rerun did not reproduce that loss in its newer test
|
||||||
segment. Strategy 47 therefore treats the result as a provisional prior instead
|
segment. Strategy 48 therefore treats the result as a provisional prior instead
|
||||||
of a permanent ban: NO entries with 21 days or less remain observation-only until
|
of a permanent ban: NO entries with 21 days or less remain observation-only until
|
||||||
the recent walk-forward calibration promotes their matching side and duration
|
the recent walk-forward calibration promotes their matching side and duration
|
||||||
cohorts. Exact numeric-range contracts are excluded from new entries because a
|
cohorts. Exact numeric-range contracts are excluded from new entries because a
|
||||||
settlement jump can pass directly through an 18% stop; the live audit found that
|
settlement jump can pass directly through an 18% stop; the live audit found that
|
||||||
this failure mode caused the largest latest-day loss.
|
this failure mode caused the largest latest-day loss.
|
||||||
|
|
||||||
Strategy 47 also excludes path-dependent barriers such as "reach $66,000," "hit
|
Strategy 48 also excludes path-dependent barriers such as "reach $66,000," "hit
|
||||||
$90," and "dip to $62,000." These contracts can resolve abruptly as soon as the
|
$90," and "dip to $62,000." These contracts can resolve abruptly as soon as the
|
||||||
barrier is touched, so a later hourly stop cannot reliably cap the loss. Fixed-date
|
barrier is touched, so a later hourly stop cannot reliably cap the loss. Fixed-date
|
||||||
level questions such as "above $66,000 on August 23" remain eligible.
|
level questions such as "above $66,000 on August 23" remain eligible.
|
||||||
|
|
||||||
Strategy 47 clusters live walk-forward observations by market before calculating
|
Strategy 48 clusters live walk-forward observations by market before calculating
|
||||||
confidence. Multiple six-hour snapshots of the same contract are averaged into
|
confidence. Multiple six-hour snapshots of the same contract are averaged into
|
||||||
one effective market outcome, so one repeated winner or loser cannot promote or
|
one effective market outcome, so one repeated winner or loser cannot promote or
|
||||||
demote an entire feature cohort. Promotion still requires at least eight weighted
|
demote an entire feature cohort. Promotion still requires at least eight weighted
|
||||||
distinct markets and agreement across two feature views.
|
distinct markets and agreement across two feature views.
|
||||||
|
|
||||||
|
The pending signal ledger keeps only one ungraded observation for each market and
|
||||||
|
side. When its bounded queue is full, it preserves the oldest evidence until the
|
||||||
|
24-hour grade is available and admits new signals in ranked order as space opens.
|
||||||
|
This prevents frequent cycles from evicting every signal shortly before maturity.
|
||||||
|
|
||||||
Paper accounts created with a password are also saved through the backend, so a
|
Paper accounts created with a password are also saved through the backend, so a
|
||||||
user can log in from another device and see the same paper portfolio, activity,
|
user can log in from another device and see the same paper portfolio, activity,
|
||||||
and value history. Passwordless paper accounts remain local-only.
|
and value history. Passwordless paper accounts remain local-only.
|
||||||
|
|||||||
+29
-13
@@ -341,7 +341,7 @@ footer{margin-top:34px;padding-top:22px;border-top:1px solid var(--border);color
|
|||||||
<nav class="topnav">
|
<nav class="topnav">
|
||||||
<div class="brand">
|
<div class="brand">
|
||||||
<div class="logo">🏆</div>
|
<div class="logo">🏆</div>
|
||||||
<div><div class="brand-name">Polymarket Arena</div><div class="brand-sub">10 agents · 5 core + 5 aggressive</div><div class="build-badge">Adaptive strategy 47 · build 51</div></div>
|
<div><div class="brand-name">Polymarket Arena</div><div class="brand-sub">10 agents · 5 core + 5 aggressive</div><div class="build-badge">Adaptive strategy 48 · build 52</div></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tabs" id="tabs">
|
<div class="tabs" id="tabs">
|
||||||
<button class="tab" data-tab="overview">Overview</button>
|
<button class="tab" data-tab="overview">Overview</button>
|
||||||
@@ -363,7 +363,7 @@ footer{margin-top:34px;padding-top:22px;border-top:1px solid var(--border);color
|
|||||||
<div class="personal-banner" id="personalBanner">
|
<div class="personal-banner" id="personalBanner">
|
||||||
<b>Personal research mode.</b> This copy is for your own analysis, paper tracking, and manual trade research only. It does not pool money, onboard investors, custody funds, bypass eligibility rules, or place orders without your manual approval.
|
<b>Personal research mode.</b> This copy is for your own analysis, paper tracking, and manual trade research only. It does not pool money, onboard investors, custody funds, bypass eligibility rules, or place orders without your manual approval.
|
||||||
</div>
|
</div>
|
||||||
<div class="live-build-banner"><b>Build 51 active:</b> adaptive evidence is clustered by market so repeated snapshots cannot promote a strategy. Crypto and Sports trends remain observation-only; reversals and short-dated NO still require recent proof, while exact ranges and path-dependent barriers remain excluded. This remains paper trading; profits are not guaranteed.</div>
|
<div class="live-build-banner"><b>Build 52 active:</b> adaptive evidence is clustered by market, and the pending ledger now preserves the oldest signals until grading instead of filling with repeated snapshots. Crypto and Sports trends remain observation-only; exact ranges and path-dependent barriers remain excluded. This remains paper trading; profits are not guaranteed.</div>
|
||||||
|
|
||||||
<!-- ============ OVERVIEW ============ -->
|
<!-- ============ OVERVIEW ============ -->
|
||||||
<section class="tabpanel" data-tab="overview">
|
<section class="tabpanel" data-tab="overview">
|
||||||
@@ -745,7 +745,7 @@ footer{margin-top:34px;padding-top:22px;border-top:1px solid var(--border);color
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
Build 51 · Adaptive strategy 47 · Paper trading only · Live prices from Polymarket's public Gamma API · Not financial advice ·
|
Build 52 · Adaptive strategy 48 · Paper trading only · Live prices from Polymarket's public Gamma API · Not financial advice ·
|
||||||
<a class="market-link" href="https://github.com/theodore-song/polymarket-analyst" target="_blank" rel="noopener">Source on GitHub</a>
|
<a class="market-link" href="https://github.com/theodore-song/polymarket-analyst" target="_blank" rel="noopener">Source on GitHub</a>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
@@ -774,9 +774,9 @@ const POLITICS_TREND_MIN_HOLD_HOURS = 72;
|
|||||||
const EXIT_CONFIRM_HOURS = 6;
|
const EXIT_CONFIRM_HOURS = 6;
|
||||||
const AGENTS_KEY = "pma_agents_v2";
|
const AGENTS_KEY = "pma_agents_v2";
|
||||||
const SUG_KEY = "pma_suggestions_v5";
|
const SUG_KEY = "pma_suggestions_v5";
|
||||||
const BUILD_VERSION = 51;
|
const BUILD_VERSION = 52;
|
||||||
const SUGGESTION_ENGINE_VERSION = 47;
|
const SUGGESTION_ENGINE_VERSION = 48;
|
||||||
const PREVIOUS_STRATEGY_VERSION = 46;
|
const PREVIOUS_STRATEGY_VERSION = 47;
|
||||||
const LEGACY_BUILD_STRATEGY_LINEAGE = Object.freeze({40:40,41:40});
|
const LEGACY_BUILD_STRATEGY_LINEAGE = Object.freeze({40:40,41:40});
|
||||||
function normalizedStrategyVersion(value){
|
function normalizedStrategyVersion(value){
|
||||||
const version=Number(value||0);
|
const version=Number(value||0);
|
||||||
@@ -1679,16 +1679,19 @@ function updateSignalLedger(st,markets,suggestions){
|
|||||||
}else if(ageHours<=SIGNAL_LEDGER_RETRY_HOURS)stillPending.push(item);
|
}else if(ageHours<=SIGNAL_LEDGER_RETRY_HOURS)stillPending.push(item);
|
||||||
else ledger.expired_ungraded=Number(ledger.expired_ungraded||0)+1;
|
else ledger.expired_ungraded=Number(ledger.expired_ungraded||0)+1;
|
||||||
}
|
}
|
||||||
const existing=new Set(stillPending.map(x=>x.key)),bucket=Math.floor(now/(6*3600000));
|
stillPending.sort((a,b)=>new Date(a.observed_at||0)-new Date(b.observed_at||0));
|
||||||
|
const existing=new Set(stillPending.map(x=>x.key)),pendingPairs=new Set(stillPending.map(x=>`${x.market_id}:${x.side}`));
|
||||||
|
const bucket=Math.floor(now/(6*3600000));
|
||||||
const observable=(suggestions||[]).filter(x=>x.trade_ready||(!x.jump_risk&&["trend","reversal"].includes(x.signal_type)&&Number(x.signal_confidence||0)>=0.56));
|
const observable=(suggestions||[]).filter(x=>x.trade_ready||(!x.jump_risk&&["trend","reversal"].includes(x.signal_type)&&Number(x.signal_confidence||0)>=0.56));
|
||||||
for(const s of observable){
|
for(const s of observable){
|
||||||
const key=`${s.market_id}:${s.side}:${bucket}`;if(existing.has(key))continue;
|
const pair=`${s.market_id}:${s.side}`,key=`${pair}:${bucket}`;if(existing.has(key)||pendingPairs.has(pair))continue;
|
||||||
existing.add(key);stillPending.push({key,market_id:String(s.market_id),observed_at:nowIso(),side:s.side,entry_price:Number(s.entry_price),
|
if(stillPending.length>=SIGNAL_LEDGER_PENDING_LIMIT)break;
|
||||||
|
existing.add(key);pendingPairs.add(pair);stillPending.push({key,market_id:String(s.market_id),observed_at:nowIso(),side:s.side,entry_price:Number(s.entry_price),
|
||||||
signal_type:s.signal_type||"unknown",quality:s.quality||"unknown",category:s.category||"Other",conviction:Number(s.conviction||0),
|
signal_type:s.signal_type||"unknown",quality:s.quality||"unknown",category:s.category||"Other",conviction:Number(s.conviction||0),
|
||||||
days_to_resolution:s.days_to_resolution,trade_ready_at_observation:Boolean(s.trade_ready),
|
days_to_resolution:s.days_to_resolution,trade_ready_at_observation:Boolean(s.trade_ready),
|
||||||
strategy_version:SUGGESTION_ENGINE_VERSION,build_version:BUILD_VERSION});
|
strategy_version:SUGGESTION_ENGINE_VERSION,build_version:BUILD_VERSION});
|
||||||
}
|
}
|
||||||
ledger.pending=stillPending.slice(-SIGNAL_LEDGER_PENDING_LIMIT);
|
ledger.pending=stillPending.slice(0,SIGNAL_LEDGER_PENDING_LIMIT);
|
||||||
ledger.outcomes=ledger.outcomes.slice(-SIGNAL_LEDGER_OUTCOME_LIMIT);
|
ledger.outcomes=ledger.outcomes.slice(-SIGNAL_LEDGER_OUTCOME_LIMIT);
|
||||||
st.signal_ledger=ledger;return ledger;
|
st.signal_ledger=ledger;return ledger;
|
||||||
}
|
}
|
||||||
@@ -4336,7 +4339,8 @@ window.PMA_ENGINE_DIAGNOSTICS=Object.freeze({
|
|||||||
networkTimeoutSeconds:NETWORK_REQUEST_TIMEOUT_MS/1000,priceTimeoutSeconds:PRICE_REQUEST_TIMEOUT_MS/1000,
|
networkTimeoutSeconds:NETWORK_REQUEST_TIMEOUT_MS/1000,priceTimeoutSeconds:PRICE_REQUEST_TIMEOUT_MS/1000,
|
||||||
staleCacheIsMarkOnly:true,strategyEvidenceSurvivesBuilds:true,signalEvaluationHours:SIGNAL_EVAL_HOURS,signalRetryHours:SIGNAL_LEDGER_RETRY_HOURS,
|
staleCacheIsMarkOnly:true,strategyEvidenceSurvivesBuilds:true,signalEvaluationHours:SIGNAL_EVAL_HOURS,signalRetryHours:SIGNAL_LEDGER_RETRY_HOURS,
|
||||||
signalDueFetchLimit:SIGNAL_LEDGER_DUE_FETCH_LIMIT,survivorshipSafeSignalGrading:true,
|
signalDueFetchLimit:SIGNAL_LEDGER_DUE_FETCH_LIMIT,survivorshipSafeSignalGrading:true,
|
||||||
signalRoundTripCostCents:SIGNAL_ROUND_TRIP_COST*100,independentConfidence:true,marketClusteredCalibration:true,uncertaintyGatedCalibration:true,
|
signalRoundTripCostCents:SIGNAL_ROUND_TRIP_COST*100,independentConfidence:true,marketClusteredCalibration:true,
|
||||||
|
onePendingObservationPerMarketSide:true,oldestPendingEvidenceFirst:true,uncertaintyGatedCalibration:true,
|
||||||
historicalPrior:"Sports and Crypto trends observation-only; reversal and short-dated NO require recent cohort promotion; exact ranges and path-dependent barriers excluded; longshots and YES sized down"}),
|
historicalPrior:"Sports and Crypto trends observation-only; reversal and short-dated NO require recent cohort promotion; exact ranges and path-dependent barriers excluded; longshots and YES sized down"}),
|
||||||
});
|
});
|
||||||
function runEngineSelfTest(){
|
function runEngineSelfTest(){
|
||||||
@@ -4397,6 +4401,13 @@ function runEngineSelfTest(){
|
|||||||
const observationLedgerState={signal_ledger:defaultSignalLedger()};
|
const observationLedgerState={signal_ledger:defaultSignalLedger()};
|
||||||
updateSignalLedger(observationLedgerState,[],[{market_id:"observation-only",side:"YES",entry_price:0.42,signal_type:"trend",quality:"watch",
|
updateSignalLedger(observationLedgerState,[],[{market_id:"observation-only",side:"YES",entry_price:0.42,signal_type:"trend",quality:"watch",
|
||||||
signal_confidence:0.62,trade_ready:false,jump_risk:false,category:"Politics",days_to_resolution:45}]);
|
signal_confidence:0.62,trade_ready:false,jump_risk:false,category:"Politics",days_to_resolution:45}]);
|
||||||
|
updateSignalLedger(observationLedgerState,[],[{market_id:"observation-only",side:"YES",entry_price:0.43,signal_type:"trend",quality:"watch",
|
||||||
|
signal_confidence:0.64,trade_ready:false,jump_risk:false,category:"Politics",days_to_resolution:45}]);
|
||||||
|
const queueLedgerState={signal_ledger:{pending:Array.from({length:SIGNAL_LEDGER_PENDING_LIMIT-1},(_,i)=>({
|
||||||
|
key:`old-${i}`,market_id:`old-market-${i}`,observed_at:hoursAgo(12),side:"YES",entry_price:0.42,
|
||||||
|
})),outcomes:[]}};
|
||||||
|
updateSignalLedger(queueLedgerState,[],Array.from({length:5},(_,i)=>({market_id:`new-market-${i}`,side:"YES",entry_price:0.42,
|
||||||
|
signal_type:"trend",quality:"confirmed",signal_confidence:0.70,trade_ready:true,jump_risk:false,category:"Politics",days_to_resolution:45})));
|
||||||
const dueFetchLedger={pending:[
|
const dueFetchLedger={pending:[
|
||||||
{key:"known",market_id:"known-active",observed_at:hoursAgo(25)},
|
{key:"known",market_id:"known-active",observed_at:hoursAgo(25)},
|
||||||
{key:"outside-a",market_id:"outside-active-scan",observed_at:hoursAgo(26)},
|
{key:"outside-a",market_id:"outside-active-scan",observed_at:hoursAgo(26)},
|
||||||
@@ -4491,11 +4502,11 @@ function runEngineSelfTest(){
|
|||||||
minConv:0,maxNew:1,maxFrac:0.04,reserve:0.10,targetExposure:0.60,learning:buildAdaptiveProfile(staleEntryBook),marketLearning:{samples:0,pending:0,buckets:{}},
|
minConv:0,maxNew:1,maxFrac:0.04,reserve:0.10,targetExposure:0.60,learning:buildAdaptiveProfile(staleEntryBook),marketLearning:{samples:0,pending:0,buckets:{}},
|
||||||
},new Set(),{});
|
},new Set(),{});
|
||||||
const buildMigrationState=defaultState();
|
const buildMigrationState=defaultState();
|
||||||
buildMigrationState.engine_version=50;buildMigrationState.strategy_version=SUGGESTION_ENGINE_VERSION;
|
buildMigrationState.engine_version=51;buildMigrationState.strategy_version=SUGGESTION_ENGINE_VERSION;
|
||||||
buildMigrationState.agents.value.engine_baseline={version:SUGGESTION_ENGINE_VERSION,started_at:hoursAgo(2),equity:9876.54};
|
buildMigrationState.agents.value.engine_baseline={version:SUGGESTION_ENGINE_VERSION,started_at:hoursAgo(2),equity:9876.54};
|
||||||
reconcileStateVersions(buildMigrationState);
|
reconcileStateVersions(buildMigrationState);
|
||||||
const strategyMigrationState=defaultState();
|
const strategyMigrationState=defaultState();
|
||||||
strategyMigrationState.engine_version=50;strategyMigrationState.strategy_version=PREVIOUS_STRATEGY_VERSION;
|
strategyMigrationState.engine_version=51;strategyMigrationState.strategy_version=PREVIOUS_STRATEGY_VERSION;
|
||||||
strategyMigrationState.agents.value.cash=9876.54;
|
strategyMigrationState.agents.value.cash=9876.54;
|
||||||
strategyMigrationState.agents.value.engine_baseline={version:PREVIOUS_STRATEGY_VERSION,started_at:hoursAgo(2),equity:10000};
|
strategyMigrationState.agents.value.engine_baseline={version:PREVIOUS_STRATEGY_VERSION,started_at:hoursAgo(2),equity:10000};
|
||||||
reconcileStateVersions(strategyMigrationState);
|
reconcileStateVersions(strategyMigrationState);
|
||||||
@@ -4523,6 +4534,11 @@ function runEngineSelfTest(){
|
|||||||
recentProofCanUnlockShortDatedNo:promotedShortNo.allowed&&promotedShortNo.market_state==="promoted",
|
recentProofCanUnlockShortDatedNo:promotedShortNo.allowed&&promotedShortNo.market_state==="promoted",
|
||||||
allowsLongDatedNo:!longNoPrior.blocked,
|
allowsLongDatedNo:!longNoPrior.blocked,
|
||||||
observesConfirmedSignalsWithoutTrading:observationLedgerState.signal_ledger.pending.length===1&&observationLedgerState.signal_ledger.pending[0].trade_ready_at_observation===false,
|
observesConfirmedSignalsWithoutTrading:observationLedgerState.signal_ledger.pending.length===1&&observationLedgerState.signal_ledger.pending[0].trade_ready_at_observation===false,
|
||||||
|
deduplicatesPendingMarketSide:observationLedgerState.signal_ledger.pending.length===1,
|
||||||
|
oldestPendingSignalsSurviveCapacity:queueLedgerState.signal_ledger.pending.length===SIGNAL_LEDGER_PENDING_LIMIT
|
||||||
|
&&queueLedgerState.signal_ledger.pending.some(x=>x.market_id==="old-market-0")
|
||||||
|
&&queueLedgerState.signal_ledger.pending.some(x=>x.market_id==="new-market-0")
|
||||||
|
&&!queueLedgerState.signal_ledger.pending.some(x=>x.market_id==="new-market-1"),
|
||||||
ledgerMaturesWithoutLookahead:ledgerState.signal_ledger.pending.length===0&&ledgerState.signal_ledger.outcomes.length===1&&ledgerState.signal_ledger.outcomes[0].return===0.2375,
|
ledgerMaturesWithoutLookahead:ledgerState.signal_ledger.pending.length===0&&ledgerState.signal_ledger.outcomes.length===1&&ledgerState.signal_ledger.outcomes[0].return===0.2375,
|
||||||
holdsSignalsUntilPolicyHorizon:earlyLedgerState.signal_ledger.pending.length===1&&earlyLedgerState.signal_ledger.outcomes.length===0,
|
holdsSignalsUntilPolicyHorizon:earlyLedgerState.signal_ledger.pending.length===1&&earlyLedgerState.signal_ledger.outcomes.length===0,
|
||||||
fetchesMaturedMarketsOutsideActiveScan:dueFetchIds.length===1&&dueFetchIds[0]==="outside-active-scan",
|
fetchesMaturedMarketsOutsideActiveScan:dueFetchIds.length===1&&dueFetchIds[0]==="outside-active-scan",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const CACHE_NAME = "polymarket-arena-build-51";
|
const CACHE_NAME = "polymarket-arena-build-52";
|
||||||
const APP_SHELL = ["/", "/index.html", "/personal.html", "/cycle-worker.js"];
|
const APP_SHELL = ["/", "/index.html", "/personal.html", "/cycle-worker.js"];
|
||||||
|
|
||||||
self.addEventListener("install", event => {
|
self.addEventListener("install", event => {
|
||||||
|
|||||||
Reference in New Issue
Block a user