<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Market Scanner on ICE-ICE-BEAR-BLOG</title><link>https://ice-ice-bear.github.io/tags/market-scanner/</link><description>Recent content in Market Scanner on ICE-ICE-BEAR-BLOG</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Wed, 22 Apr 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ice-ice-bear.github.io/tags/market-scanner/index.xml" rel="self" type="application/rss+xml"/><item><title>trading-agent Dev Log #14 — Universe Expansion, Hard-Gate Loosening, Archived HOLDs</title><link>https://ice-ice-bear.github.io/posts/2026-04-22-trading-agent-dev14/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0900</pubDate><guid>https://ice-ice-bear.github.io/posts/2026-04-22-trading-agent-dev14/</guid><description>&lt;img src="https://ice-ice-bear.github.io/" alt="Featured image of post trading-agent Dev Log #14 — Universe Expansion, Hard-Gate Loosening, Archived HOLDs" /&gt;&lt;h2 id="overview"&gt;Overview
&lt;/h2&gt;&lt;p&gt;A two-commit session, but the decision behind it is the interesting part. Since #13 the research agent has been running live, and the pattern in the logs was clear: the scanner&amp;rsquo;s universe is too small, the hard filters too conservative, and so the Chief agent rarely gets enough candidates to reach a BUY decision. This entry widens the scope (S1–S3) and adds a softer confidence layer (α/β), then switches HOLD decisions from &lt;em&gt;silently discarded&lt;/em&gt; to &lt;strong&gt;archived&lt;/strong&gt;, so the Chief&amp;rsquo;s reasoning patterns can be audited and tuned (S4).&lt;/p&gt;
&lt;p&gt;Previous post: &lt;a class="link" href="https://ice-ice-bear.github.io/posts/2026-04-16-trading-agent-dev13/" &gt;trading-agent Dev Log #13&lt;/a&gt;&lt;/p&gt;
&lt;pre class="mermaid" style="visibility:hidden"&gt;graph TD
 U["KOSPI universe"] --&gt; S1["S1: sector/cap filter"]
 S1 --&gt; S2["S2: momentum + liquidity"]
 S2 --&gt; S3["S3: fundamental sanity"]
 S3 --&gt; AB["α/β confidence layer&lt;br/&gt;(soft gates)"]
 AB --&gt; Chief["Chief agent"]
 Chief --&gt;|BUY| Order["Order book"]
 Chief --&gt;|HOLD| Archive["Archived HOLDs&lt;br/&gt;(S4)"]
 Archive --&gt;|observe| Tune["Prompt tuning"]&lt;/pre&gt;&lt;h2 id="the-problem-an-empty-funnel"&gt;The Problem: An Empty Funnel
&lt;/h2&gt;&lt;p&gt;Reading a week of logs, the pattern was uncomfortable. The scanner was producing almost no BUY signals, and not because the market was uninteresting — it was because the hard filters at stages S1–S3 were rejecting so many tickers before the Chief agent ever saw them. The narrow universe plus conservative gates produced a degenerate funnel: research volume was adequate, but the funnel bottom was starved. The user&amp;rsquo;s framing in the session captured it precisely: &amp;ldquo;리서치하는 종목의 scope이 너무 작습니다 … 실 구매로 이어지는 것이 매우 어렵습니다.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Two options existed. The first was to keep the hard gates and just widen the universe at S1. That would produce more candidates but most would get filtered out by S2/S3 anyway — the funnel shape doesn&amp;rsquo;t change. The second, and what was adopted, was to &lt;strong&gt;loosen the gates&lt;/strong&gt; while adding a &lt;strong&gt;softer confidence layer (α/β) downstream&lt;/strong&gt;. Hard filters reject by rule; soft layers score. A score lets the Chief agent see marginal candidates instead of never being asked.&lt;/p&gt;
&lt;h2 id="commit-1-expand-universe--loosen-s1s3--αβ"&gt;Commit 1: Expand Universe + Loosen S1–S3 + α/β
&lt;/h2&gt;&lt;p&gt;Commit &lt;code&gt;6cb3ec8&lt;/code&gt; is &lt;code&gt;feat(scanner): expand research universe and loosen gates (S1-S3 + α/β)&lt;/code&gt;. Three moves in one commit:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Universe expansion.&lt;/strong&gt; The KOSPI universe feeding S1 was too narrow — cap/sector filters were pruning tickers that could have been interesting once. The new universe is broader; the rest of the pipeline will decide relevance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loosening S1–S3.&lt;/strong&gt; Hard-rule thresholds were relaxed where the log data showed they were binding too often. The design explicitly avoids removing these stages — S1–S3 are still the cheap filters that cut the search space — but the thresholds now let more tickers through to richer analysis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;α/β confidence layer.&lt;/strong&gt; Downstream of S3, a new soft-scoring layer applies α/β weighting to momentum + fundamental signals, producing a confidence score that the Chief agent can read. This turns &amp;ldquo;pass/fail&amp;rdquo; into a ranked shortlist.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="commit-2-archive-holds-s4"&gt;Commit 2: Archive HOLDs (S4)
&lt;/h2&gt;&lt;p&gt;Commit &lt;code&gt;08e4326&lt;/code&gt; is &lt;code&gt;feat(scanner): archive HOLD decisions instead of silently discarding (S4)&lt;/code&gt;. Before this, a HOLD decision from the Chief evaporated — the ticker was not bought, nothing was recorded beyond a log line. That&amp;rsquo;s a terrible shape for tuning, because HOLD is where the Chief does most of its thinking. Now HOLD decisions are persisted with the full context (inputs, scores, reasoning summary) and queryable via &lt;code&gt;?status=archived&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The operational follow-up is observational: watch which tickers the Chief holds repeatedly (Samsung Electro-Mechanics, SK Hynix were the two mentioned in session as recurring &amp;ldquo;fundamental-strong + technically-overbought&amp;rdquo; rejections), and whether the same tickers flip to BUY once the Stochastic K drops below 60. The archived table is how that hypothesis gets tested — without it, the hypothesis has no substrate.&lt;/p&gt;
&lt;h2 id="rollout-shape"&gt;Rollout Shape
&lt;/h2&gt;&lt;p&gt;The session plan separated P0 (observation, no code change) from P1 (Chief prompt tuning, 1–2 hours). This commit set is P0&amp;rsquo;s prerequisite: archived data + α/β scores give P1 the data it needs. No prompt changes yet.&lt;/p&gt;
&lt;h2 id="commit-log"&gt;Commit Log
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Message&lt;/th&gt;
 &lt;th&gt;Changes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;feat(scanner): expand research universe and loosen gates (S1-S3 + α/β)&lt;/td&gt;
 &lt;td&gt;universe, gates, confidence&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;feat(scanner): archive HOLD decisions instead of silently discarding (S4)&lt;/td&gt;
 &lt;td&gt;HOLD persistence&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="insights"&gt;Insights
&lt;/h2&gt;&lt;p&gt;The core insight in this session is older than LLM agents: &lt;strong&gt;if a decision layer has no audit trail, it cannot be tuned.&lt;/strong&gt; The Chief agent&amp;rsquo;s HOLDs contained exactly the reasoning most worth studying — &lt;em&gt;why is this candidate interesting enough to research but not strong enough to buy&lt;/em&gt; — and by default that reasoning was being thrown away. Archiving it costs nothing (it&amp;rsquo;s a boolean status flip plus a table) and turns every HOLD into a future unit of supervised tuning data. The α/β layer serves the same shape: replace a hard filter with a soft score, and you preserve information for downstream inspection. Next session&amp;rsquo;s likely focus: actually looking at the archive data and deciding whether the Chief prompt needs to reweight fundamental vs technical signals, or whether the issue is further upstream in S2&amp;rsquo;s momentum heuristic.&lt;/p&gt;</description></item></channel></rss>