# Jp Stock Move Reason

> Use when analyzing why a Japanese stock moved sharply using Codex, without Gemini, from Yahoo Finance quote data, Yahoo 掲示板 comments, Yahoo/Kabutan/Traders news, and basic stock metrics such as current change, market cap, PER/PBR, dividend yield, and margin ratio.

- Skill: `tsetsugekka/jp-stock-move-reason` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add tsetsugekka/jp-stock-move-reason`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tsetsugekka/jp-stock-move-reason/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tsetsugekka (https://skillmd.com/u/tsetsugekka)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/tsetsugekka/jp-stock-move-reason

---


# JP Stock Move Reason

Use this skill from the DTM repo root when the user asks why a specific Japanese stock is rising, falling, 急騰, 急落, 異動, or otherwise moving, and wants Codex to analyze it instead of Gemini.

The bundled script is safe to keep in a public repository: it uses only public web pages/APIs, does not read credentials, and does not call any LLM service. Never commit personal information, API keys, account data, private RAG files, or private research materials to GitHub.

## Workflow


## Public And Private Versions

If both public and private versions of this skill exist, prefer the private version for local analysis when the user permits it. The private version may use local RAG indexes and user-specific study material.

When updating the skill, keep public and private versions in sync: write public-safe, generalized lessons to the public version; keep private labels, private paths, raw notes, screenshots, account data, and personal trade context only in the private version or private RAG index.

When preparing a GitHub upload or public release, use the public version only and run the repo-level release/privacy check from the repository root at `shared/references/release-and-privacy.md`. Never upload private RAG folders, `.ftindex` files, credentials, `.env`, personal data, screenshots, raw PDFs/PPTs, or private strategy labels.


1. Read `references/experience.md` before analysis, but only the `Active Playbook` and `Compression Protocol` sections unless the user explicitly asks for historical lessons. Apply those lessons when setting expectations, especially around earnings, guidance, valuation, 掲示板 sentiment, theme leadership, peer follow-through, and whether the stock is a leader, follower, defensive alternative, old-leader rebound, or noise. When the request needs a deeper or reusable sentiment framework, also use `stock-sentiment-analysis` and its `references/sentiment-framework.md`.

   Cross-skill calls are operational. When this workflow says to use another market skill, actually load that skill's `SKILL.md` and required references if the skill is installed or available as a sibling in this repository. Do not merely mention the other skill by name in the answer.

   Required coordination: for Japanese stock analysis, use this skill as the evidence-gathering entry point, and add supporting skills based on clues found during analysis, not only on the user's wording. Yahoo 掲示板 itself is an evidence source, not an automatic trigger for sentiment analysis. If 掲示板/news reveals a concrete clue about theme leadership, peer follow-through, crowding, leader/follower position, defensive alternative, old-leader rebound, or risk-on/risk-off acceptance, load `stock-sentiment-analysis` to test that clue. If 掲示板/news discusses Nikkei/TOPIX, JPX sectors, Nikkei futures, JGB yields, USD/JPY, BOJ/MOF policy, US/China spillover, commodities, or geopolitics, load `macro-news-check` to verify the tape instead of accepting forum claims. If 掲示板/news or the price move points to support/resistance, failed breakout, trend damage, or catalyst acceptance/rejection, load `stock-technical-analysis` to verify the chart. When the original question is directly about an index/broad tape such as Nikkei 225, TOPIX, JPX sectors, Nikkei futures, or 日经大盘, load `macro-news-check` by default.

   Mandatory execution gate:
   - If the answer uses **宏观** or **快讯** to explain the stock, sector, Nikkei/TOPIX, JGB yields, USD/JPY, BOJ/MOF policy, US/China spillover, commodities, or geopolitics, load `macro-news-check`. Do not replace this layer with ad hoc web search.
   - If the answer uses **技术面** such as support/resistance, trend confirmation, failed breakout, volume-price behavior, intraday timing, or "能不能上/下", load `stock-technical-analysis`.
   - If the answer uses **情绪面** such as theme leadership, crowding, leader/follower, defensive alternative, old-leader rebound, risk-on/risk-off, expectation gap, or 掲示板 psychology, load `stock-sentiment-analysis`.
   - Final answers should include a compact `融合口径` line when any supporting skill is used, e.g. `Yahoo/Kabutan/Traders 证据 + macro-news-check tape + stock-technical-analysis 结构 + stock-sentiment-analysis 情绪/期待差`.

2. Run the collector script from the repo root. In this local Codex desktop
   environment, network DNS frequently fails inside the default sandbox. For
   this skill, skip the first sandboxed collector attempt and run the collector
   directly with `sandbox_permissions: "require_escalated"` when the current
   task needs live Yahoo/Kabutan/Traders/Yahoo 掲示板 data. Use the same command
   and include a concise approval question such as `需要联网抓取 CODE 的最新行情、
   新闻和 Yahoo 掲示板；是否允许本次联网采集？`. Do not tell the user "sandbox
   DNS failed" before making this escalated collector call. If escalation is
   rejected, then state that live collection was blocked and fall back to cached
   or non-live evidence.

```bash
python3 skills/jp-stock-move-reason/scripts/stock_move_sources.py 7203 --format markdown
```

Useful options:

- `--hours 24`: news evidence window. Yahoo 掲示板 comments automatically prefer 24 hours and expand to 72 hours only when the 24-hour cache has fewer than 100 posts.
- `--comments 100`: cache at most the latest 100 Yahoo 掲示板 comments from one page. Count the raw 24-hour posts before applying the likes filter; when that count is below 100, expand the candidate window to 72 hours from the same cached 100 posts. After filtering, scoring, and deduplication, shortlist up to 20 full comments, reorder them by time and likes, then pass `recent_comments[:5]` to Codex as internal reason inputs.
- `--news-limit 15`: maximum news items to include.
- `--sources yahoo,kabutan,traders`: default news sources.
- `--market-hint 東証G`: improves Traders Web metric/news URL choice when known.

### Mover Estimated Trading Value Ranking Sub-skill

When the user asks for current Japanese-stock increase/decrease Top10 lists,
PTS mover lists ranked by `推定成交额`, `売買代金推定`, `turnover estimate`, or
says `不是成交量，是成交额`, use the mover-turnover sub-skill before running
per-stock reason collection. Read
`references/pts-turnover-ranking.md`, then run:

```bash
python3 skills/jp-stock-move-reason/scripts/pts_turnover_ranking.py --session auto --side both --min-volume 2000 --top 10 --reason-commands
```

Default to `--session auto` and evaluate routing in JST on trading days:

- `09:00-11:30` and `12:30-15:30`: use Yahoo Finance Japan's current regular
  market rankings:
  `https://finance.yahoo.co.jp/stocks/ranking/up?market=all` and
  `https://finance.yahoo.co.jp/stocks/ranking/down?market=all`.
- `08:00-09:00`, `11:30-12:30`, and `15:30-17:00`: use the PTS day-section
  increase/decrease pages.
- All other times, weekends, and known non-trading days: use the PTS night
  section. The script handles weekends; force `--session night` on Japanese
  exchange holidays that fall on weekdays.

Always request 50 rows per page. First filter each side to `abs(涨跌幅) >= 3%`
and `出来高 > 2000`, then rank by estimated trading value. If one side has
fewer than five qualifying rows, re-fetch only that side to `abs(涨跌幅) >= 1%`
and keep ranking by estimated trading value. Regular-session `推定成交额`
(`売買代金推定`) is `当前价 * 出来高`; PTS `推定成交额` is
`PTS株价 * PTS出来高`. It is not exchange-reported trading value calculated
from each execution. Yahoo states that Tokyo Stock Exchange transaction prices
are real time while all-market volume is delayed by at least 15 minutes, so
regular-session output must disclose that mixed-timestamp limitation. Volume is
only the eligibility filter. For a generic Top10 request, or when the user
loosely says `成交量` within this workflow, still rank by `推定成交额`. Rank by
raw volume only when the user explicitly requests a volume-ranked list.

After ranking, final mover answers must include a `原因` column unless the
user explicitly says they only want the raw list, only want numbers, or do not
need reasons. For ranking requests, Yahoo 掲示板 is the primary reason source:
deduplicate selected Top codes and request one forum page per code, caching at
most the latest 100 comments each, with `--forum-only --comments 100`. For every
individual stock and every selected Top10 name, use the same comment pipeline:
count how many of those raw cached posts are within 24 hours; if fewer than 100,
expand the candidate window to 72 hours using only the same cached posts. Never
fetch post 101 or later. Apply the five-like minimum only after deciding the time
window, then score by recency, likes, body length, and company-material keywords,
deduplicate exact normalized-prefix signatures to a maximum 20-comment full-text
shortlist, reorder it by time and likes, and pass only `recent_comments[:5]` to
Codex.
Process codes sequentially;
do not use Kabutan/Traders as the first-pass substitute for board discussion.

Use this exact comment-quality contract. Hard-filter posts outside the selected
window, unparseable timestamps, fewer than five likes, bodies shorter than ten
characters, and pure calls such as `買い`, `売り`, `上がれ`, `S高確定`,
`ストップ高`, `爆上げ`, `爆益`, `草`, or standalone `www`. Score surviving
posts out of 18: recency `<=6h:5`, `<=24h:4`, `<=48h:2`, `>48h:1`; body length
`30-300:3`, `>300:2`, `10-29:1`; likes `100+:4`, `50-99:3`, `20-49:2`,
`5-19:1`; company-material keywords add one point each, capped at six. Relevant
keywords include earnings, guidance revisions, dividends, buybacks, splits,
alliances, orders, approvals, patents, IR, profitability, M&A, subsidies,
adoption, launches, joint development, contracts, products/services, shareholder
benefits, revenue, and profit metrics. Generic sector words such as AI,
semiconductors, defense, or drones add no points. Sort by total score, timestamp,
then likes; normalize lowercase text by removing spaces and common punctuation,
deduplicate on the first 60 normalized characters, and keep at most 20. Finally,
sort those 20 by timestamp and likes and pass `recent_comments[:5]` to Codex.
This is exact-signature deduplication, not semantic similarity: remove all
whitespace and `、。！？ ! ? , . ・ … 「」 『』 （） () [] 【】`, then compare the
first 60 normalized characters. The earlier comment in the score/timestamp/likes
order wins. Matching prefixes collapse even when later text differs; any
difference within the prefix survives. Do not apply Unicode width normalization
or explicitly strip emoji, URLs, or usernames. Deduplicate only within the
current stock's current collection.

Use news or disclosures only to validate a concrete event claimed in the board,
and distinguish verified facts from market discussion. Never fetch more than one
forum page per code or repeat a forum fetch for the same code in the same turn.
On HTTP 403/429, access-denied content, connection reset, or an empty/abnormal
response, stop all Yahoo collection for the rest of the turn and report the
block. ETF or ETN rows should be explained from their underlying index/strategy,
and tiny-estimate jumps should be labeled low-confidence if no hard catalyst exists.

Return the synthesized `原因` in the ranking table. Do not quote or enumerate the
raw five-comment input set unless the user explicitly asks to see it.

The collector enforces a cross-process randomized 1-3 second Yahoo host gap. HTTP
403/429 or access-control content activates a shared 30-minute local cooldown.
Do not delete or bypass that cooldown to finish a ranking request.

3. If a sandboxed collector call was already attempted by mistake and network
   access fails in Codex, rerun the same command with sandbox escalation
   according to the normal approval policy. In this local environment, the
   collector often fails inside the sandbox with DNS-style errors such as
   `nodename nor servname provided, or not known`, `urlopen error`, or repeated
   empty Yahoo/Kabutan/Traders results. Treat those as sandbox/network failures,
   not as evidence that there is no news or no Yahoo 掲示板 activity. Escalate and
   rerun before concluding that sources are empty.

- DTM cross-market themes: read `https://daytrading.monster/api/themes` without a market filter. Compare Japanese, US, and Chinese theme members and completed-session performance to trace industry-chain and cross-market transmission; use `themes[]` with `theme_key`, `theme_name_zh`, `market`, and `constituents[]`, including `weight`, `reason_zh`, and `quote_available`. Check quote dates; these are not live intraday returns.
- PTS context: prefer the canonical `https://daytrading.monster/api/pts/model1` (day session), `https://daytrading.monster/api/pts/model2` (after close), and `https://daytrading.monster/api/pts/model3` (night session) for a comprehensive overview of PTS risers, themes, and upward reasons. Use the session(s) relevant to the question and their update times; read all three when comparing sessions. They do not provide a complete falling-stock ranking. For diverse Japanese rankings, including PTS decliners and other screens, use `https://kabutan.jp/warning/` and `https://finance.yahoo.co.jp/stocks/ranking/up`, selecting the relevant ranking and its stated session. Keep the existing estimated-turnover Top10 procedure for that specific request.

4. Analyze the script output directly. Do not call Gemini. Treat sources with this priority:

- Current quote and basic metrics: establish whether there is a real price move and the stock's size/liquidity context.
- Institution rating check: after the collector run, read only the canonical `https://daytrading.monster/api/ratings-jp` JSON from `https://daytrading.monster/api-docs/`. Parse the `text/plain` body as JSON. Its `reports` cover Japan-local today and the preceding three calendar days; use the report date, not retrieval time. No additional rating-page files are needed.
  Filter by exact normalized `stockCode` and use only reports present in the current snapshot. Mention the rating layer only when the stock has a current matching rating/target-price update that may explain or support the move. If there is no matching current update, omit the rating layer instead of writing negative filler. When the rating layer is mentioned, include broker, date, rating direction, target-price direction, and whether the update is likely a primary catalyst or secondary support. In final answer prose, do not name DayTrading.monster, the rating page, feed/page labels, or aggregator/source names by default; URLs may appear only in a dedicated source list when the user asks for sources or when a source audit is required.
- PTS handling: during the regular Tokyo trading session, especially the opening and active intraday period, do not use PTS as an analysis layer; prioritize the live exchange quote, intraday price action, volume, news, and 掲示板 instead. For questions asked after the Tokyo close, check the Kabutan individual stock page (`https://kabutan.jp/stock/?code=CODE`) when available. Use the page's `PTS` block sourced from JapanNext via Kabutan for PTS current price, timestamp, open/high/low, volume, trading value, and VWAP, but remember Kabutan's PTS figures are delayed by about 15 minutes. Treat PTS as delayed early after-hours sentiment and liquidity evidence, not as a confirmed next-session price or real-time tape. If using DTM PTS to discover candidates, read the canonical model APIs above; do not use the HTML `noscript` SEO fallback because it can lag the live app. Do not use MONEY BOX PTS as a source because its PTS figures have proven unreliable; non-PTS MONEY BOX pages such as disclosure summaries may be used only as supplementary references and should be verified against primary disclosures/news.
- Company disclosure and explanation materials: for earnings, guidance revisions, medium-term plans, business updates, buybacks, major orders, capital policy, or new businesses, look beyond headline numbers and 掲示板. Search TDnet/Kabutan PDFs, the company's IR site, 決算説明資料, 補足説明資料, 事業計画及び成長可能性に関する事項, 中期経営計画, 決算説明会資料/Q&A, press releases, product/project pages, and business-update materials. Use these to explain what changed in the business story, pipeline, certainty, timing, customer/project progress, capital needs, and dilution risk.
- News: primary evidence for concrete catalysts.
- Yahoo 掲示板: use only as a low-weight retail emotion/overheating check. Its buy/sell sentiment is delayed, reflects only past retail verbal mood, and should not be used as evidence for a price move, catalyst, conviction, or directional thesis. Never cite 掲示板 buy/sell ratios as support for an analysis. Use comments only to detect what retail is talking about, whether attention is crowded, or whether rumor risk needs verification against news/disclosures.
- Peer and theme reactions: use them to judge whether the move is theme-wide leadership, same-theme follow-through, or only stock-specific sentiment.
- Macro tape and Japan market breadth: call `macro-news-check` only when the move may be affected by Nikkei/TOPIX futures, JGB yields, USD/JPY, BOJ/MOF policy, global rates, China/US macro, commodities, geopolitical risk, or broad risk-on/risk-off headlines. For Japanese broad-market weakness/strength or a single-stock move under strong market pressure, use the JPX real-time index page/data (`https://www.jpx.co.jp/markets/indices/realvalues/index.html`, `indices_stock_price3.txt`, and `indices_stock_price3.time.txt`) as an auxiliary confirmation layer for TOPIX 33 sectors, TOPIX-17, size indexes, and market-type indexes. Use it as market context, not as a substitute for stock-specific evidence.

5. For earnings-related questions, do a disclosure-material pass even when the user did not explicitly ask for it. The core question is not only `数字好不好`, but `为什么这些数字或指引可信`, `哪些说明资料证明业务进入兑现阶段`, `哪些项目仍只是 pipeline`, and `现金流/融资/稀释/客户集中是否会削弱估值`. If no explanation material exists, say so and rely on the filing, company releases, and news.

6. Prefer this skill as the first pass for Japanese stocks. When using `stock-sentiment-analysis`, `macro-news-check`, or `stock-technical-analysis`, first finish the news/disclosure/theme/rating read and use 掲示板 only as a retail heat check, then use the supporting skill to verify sentiment structure, broad-market pressure/support, or price confirmation. Do not replace company disclosures, concrete news, or fresh rating updates with macro, sentiment, chart evidence, or 掲示板 chatter.

7. In multi-turn discussions about the same stock, treat user follow-ups as possible new evidence or feedback. If the user adds information, challenges the reasoning, asks for reconsideration, or the conversation reveals that the prior answer missed/misweighted something, re-evaluate the stock with the new context before defending the earlier answer.

8. If the analysis or multi-turn correction produces a durable reusable lesson, update experience after answering. First decide scope: if the lesson applies to both Japanese stocks and A-shares, update both stock-skill `references/experience.md` files and consider `stock-sentiment-analysis/references/experience.md`; if it is specific to Japanese stocks, update only this skill. Follow the `Conversation Learning Protocol` and `Compression Protocol`: generalize the lesson, merge repeated lessons into the active summary, keep the active section short, and move only distinct older details into the archive.

## Output Style

Reply in Chinese unless the user asks otherwise. The answer can be detailed because this is a local script workflow: start from at least 3-4 lines, and when evidence is rich, write up to the length of a short market news note. Stay evidence-based.

For every stock analyzed, always use these five numbered sections in this exact order:

1. `最有力理由`: the most likely catalyst, with source names and timing.
2. `补助理由`: secondary drivers such as theme buying, short-term speculation, or market-cap/liquidity context.
3. `掲示板温度`: summarize heat level, recent post volume, high-like comments, expectation gap, and crowding risk.
4. `确定度`: high / medium / low, with one sentence explaining why.
5. `注意点`: what remains unconfirmed or what could invalidate the read.

When the user gives multiple stocks, write the five numbered sections separately for each stock first. After all individual stock sections, add a final comparison section such as `两只对比` or `多只对比`, covering common drivers, differences in catalyst quality, sentiment heat, and relative risk. You may add extra sections when useful, but the five required sections and the final comparison for multi-stock requests must remain present.

If the evidence is weak, say so plainly and use wording like `思惑`, `期待`, `传闻`, or `确认待ち`. Do not invent catalysts absent from the collected news/comments.

When explaining a catalyst, always check the expectation gap: `市场原来预期什么` -> `实际消息落地什么` -> `超预期 / 符合预期或只是落地 / 不及预期`. This applies to numeric news such as guidance, earnings, orders, dividends, and buybacks, and to qualitative news such as wording strength, timing, certainty, management confidence, regulatory tone, and whether the news solves the market's real concern.

## Valuation Requests

When the user asks for `合理估值`, `目标价`, `估值`, `贵不贵`, `空间`, `fair value`, or similar:

- Still collect current quote/news materials first, then add financial guidance, EPS/share-count, capital policy, and peer/sector context when available.
- Use the `Reasonable Valuation Framework` from `references/experience.md`.
- Provide scenario ranges rather than one exact target: conservative / base / bull.
- State the anchors used, such as forward EPS/PER, operating or recurring profit, ROE/PBR, EV/EBITDA, orders/backlog, buyback/CB dilution, and peer multiples.
- When using EPS/PER, explicitly decompose price into `EPS x PER`: judge whether the setup is a Davis double play (`EPS upgrades + PER expansion` from better growth/certainty/theme premium) or Davis double kill (`EPS downgrades + PER contraction` from weaker guidance/cycle reversal/expectation miss). Do not call a stock cheap from PER alone if EPS or the deserved multiple is falling.
- Explicitly say what the current price already prices in, what must happen to justify upside, and what would invalidate the valuation.

