lit-forge-mcp 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +33 -4
  2. package/dist/index.js +1 -1
  3. package/dist/lib/__tests__/correlation.test.d.ts +1 -0
  4. package/dist/lib/__tests__/correlation.test.js +53 -0
  5. package/dist/lib/__tests__/correlation.test.js.map +1 -0
  6. package/dist/lib/__tests__/quartile.test.d.ts +1 -0
  7. package/dist/lib/__tests__/quartile.test.js +148 -0
  8. package/dist/lib/__tests__/quartile.test.js.map +1 -0
  9. package/dist/lib/__tests__/rankings.test.d.ts +1 -0
  10. package/dist/lib/__tests__/rankings.test.js +67 -0
  11. package/dist/lib/__tests__/rankings.test.js.map +1 -0
  12. package/dist/lib/__tests__/sessions.test.d.ts +1 -0
  13. package/dist/lib/__tests__/sessions.test.js +47 -0
  14. package/dist/lib/__tests__/sessions.test.js.map +1 -0
  15. package/dist/lib/__tests__/sma.test.d.ts +1 -0
  16. package/dist/lib/__tests__/sma.test.js +26 -0
  17. package/dist/lib/__tests__/sma.test.js.map +1 -0
  18. package/dist/lib/__tests__/thermometer.test.d.ts +1 -0
  19. package/dist/lib/__tests__/thermometer.test.js +120 -0
  20. package/dist/lib/__tests__/thermometer.test.js.map +1 -0
  21. package/dist/lib/__tests__/yield-spread.test.d.ts +1 -0
  22. package/dist/lib/__tests__/yield-spread.test.js +46 -0
  23. package/dist/lib/__tests__/yield-spread.test.js.map +1 -0
  24. package/dist/lib/correlation.d.ts +3 -0
  25. package/dist/lib/correlation.js +77 -0
  26. package/dist/lib/correlation.js.map +1 -0
  27. package/dist/lib/economic-events.d.ts +9 -0
  28. package/dist/lib/economic-events.js +146 -0
  29. package/dist/lib/economic-events.js.map +1 -0
  30. package/dist/lib/fangplus.d.ts +7 -0
  31. package/dist/lib/fangplus.js +19 -0
  32. package/dist/lib/fangplus.js.map +1 -0
  33. package/dist/lib/indicators.d.ts +3 -0
  34. package/dist/lib/indicators.js +49 -0
  35. package/dist/lib/indicators.js.map +1 -0
  36. package/dist/lib/mag7.d.ts +7 -0
  37. package/dist/lib/mag7.js +13 -0
  38. package/dist/lib/mag7.js.map +1 -0
  39. package/dist/lib/market-types.d.ts +57 -0
  40. package/dist/lib/market-types.js +5 -0
  41. package/dist/lib/market-types.js.map +1 -0
  42. package/dist/lib/performance.d.ts +3 -0
  43. package/dist/lib/performance.js +43 -0
  44. package/dist/lib/performance.js.map +1 -0
  45. package/dist/lib/quartile.d.ts +24 -0
  46. package/dist/lib/quartile.js +128 -0
  47. package/dist/lib/quartile.js.map +1 -0
  48. package/dist/lib/rankings.d.ts +7 -0
  49. package/dist/lib/rankings.js +29 -0
  50. package/dist/lib/rankings.js.map +1 -0
  51. package/dist/lib/sectors.d.ts +7 -0
  52. package/dist/lib/sectors.js +62 -0
  53. package/dist/lib/sectors.js.map +1 -0
  54. package/dist/lib/sessions.d.ts +14 -0
  55. package/dist/lib/sessions.js +50 -0
  56. package/dist/lib/sessions.js.map +1 -0
  57. package/dist/lib/sma.d.ts +2 -0
  58. package/dist/lib/sma.js +33 -0
  59. package/dist/lib/sma.js.map +1 -0
  60. package/dist/lib/thermometer.d.ts +13 -0
  61. package/dist/lib/thermometer.js +118 -0
  62. package/dist/lib/thermometer.js.map +1 -0
  63. package/dist/lib/yahoo.d.ts +11 -0
  64. package/dist/lib/yahoo.js +171 -0
  65. package/dist/lib/yahoo.js.map +1 -0
  66. package/dist/lib/yield-spread.d.ts +6 -0
  67. package/dist/lib/yield-spread.js +20 -0
  68. package/dist/lib/yield-spread.js.map +1 -0
  69. package/dist/tools/get-economic-events.d.ts +2 -0
  70. package/dist/tools/get-economic-events.js +42 -0
  71. package/dist/tools/get-economic-events.js.map +1 -0
  72. package/dist/tools/get-market-sessions.d.ts +2 -0
  73. package/dist/tools/get-market-sessions.js +27 -0
  74. package/dist/tools/get-market-sessions.js.map +1 -0
  75. package/dist/tools/get-market-snapshot.d.ts +2 -0
  76. package/dist/tools/get-market-snapshot.js +29 -0
  77. package/dist/tools/get-market-snapshot.js.map +1 -0
  78. package/dist/tools/get-market-thermometer.d.ts +2 -0
  79. package/dist/tools/get-market-thermometer.js +47 -0
  80. package/dist/tools/get-market-thermometer.js.map +1 -0
  81. package/dist/tools/get-performance-ranking.d.ts +2 -0
  82. package/dist/tools/get-performance-ranking.js +75 -0
  83. package/dist/tools/get-performance-ranking.js.map +1 -0
  84. package/dist/tools/get-quote.d.ts +2 -0
  85. package/dist/tools/get-quote.js +31 -0
  86. package/dist/tools/get-quote.js.map +1 -0
  87. package/dist/tools/get-sector-heatmap.d.ts +2 -0
  88. package/dist/tools/get-sector-heatmap.js +34 -0
  89. package/dist/tools/get-sector-heatmap.js.map +1 -0
  90. package/dist/tools/get-yield-spread.d.ts +2 -0
  91. package/dist/tools/get-yield-spread.js +41 -0
  92. package/dist/tools/get-yield-spread.js.map +1 -0
  93. package/dist/tools/index.js +21 -0
  94. package/dist/tools/index.js.map +1 -1
  95. package/package.json +10 -3
@@ -0,0 +1,46 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { computeYieldSpread } from "../yield-spread.js";
3
+ function q(symbol, price, change = 0) {
4
+ return {
5
+ symbol,
6
+ price,
7
+ previousClose: price - change,
8
+ change,
9
+ changePercent: 0,
10
+ changeBp: change * 100,
11
+ fetchedAt: "",
12
+ sparkline: [],
13
+ };
14
+ }
15
+ describe("computeYieldSpread", () => {
16
+ it("^TNX - ^FVX を返す", () => {
17
+ const snap = {
18
+ fetchedAt: "",
19
+ quotes: {
20
+ "^TNX": q("^TNX", 4.5, 0.01),
21
+ "^FVX": q("^FVX", 4.2, 0.005),
22
+ },
23
+ };
24
+ const r = computeYieldSpread(snap);
25
+ expect(r.spread).toBeCloseTo(0.3, 5);
26
+ expect(r.spreadChangeBp).toBeCloseTo(0.5, 2);
27
+ });
28
+ it("片方欠損は null", () => {
29
+ const snap = {
30
+ fetchedAt: "",
31
+ quotes: { "^TNX": q("^TNX", 4.5) },
32
+ };
33
+ expect(computeYieldSpread(snap)).toBeNull();
34
+ });
35
+ it("error は null", () => {
36
+ const snap = {
37
+ fetchedAt: "",
38
+ quotes: {
39
+ "^TNX": q("^TNX", 4.5),
40
+ "^FVX": { error: "fail" },
41
+ },
42
+ };
43
+ expect(computeYieldSpread(snap)).toBeNull();
44
+ });
45
+ });
46
+ //# sourceMappingURL=yield-spread.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yield-spread.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/yield-spread.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,SAAS,CAAC,CAAC,MAAc,EAAE,KAAa,EAAE,SAAiB,CAAC;IAC1D,OAAO;QACL,MAAM;QACN,KAAK;QACL,aAAa,EAAE,KAAK,GAAG,MAAM;QAC7B,MAAM;QACN,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,MAAM,GAAG,GAAG;QACtB,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,IAAI,GAAa;YACrB,SAAS,EAAE,EAAE;YACb,MAAM,EAAE;gBACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;gBAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC;aAC9B;SACF,CAAC;QACF,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAE,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACpB,MAAM,IAAI,GAAa;YACrB,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;SACnC,CAAC;QACF,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;QACtB,MAAM,IAAI,GAAa;YACrB,SAAS,EAAE,EAAE;YACb,MAAM,EAAE;gBACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC;gBACtB,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;aAC1B;SACF,CAAC;QACF,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function tailReturns(closes: readonly number[], windowDays?: number): number[];
2
+ export declare function pearson(a: readonly number[], b: readonly number[]): number | null;
3
+ export declare function correlationMatrix(symbols: readonly string[], getCloses: (symbol: string) => readonly number[] | undefined): (number | null)[][];
@@ -0,0 +1,77 @@
1
+ // 日次リターン系列のピアソン相関係数を計算する純関数。
2
+ // PERFORMANCE_SYMBOLS(7 銘柄)の closes1y から「直近 30 営業日」のリターンを抽出し、
3
+ // 7×7 の相関行列を作って /today の相関ヒートマップで描画する。
4
+ //
5
+ // データ点不足は null を返し、UI 側で「—」表示にする。
6
+ const WINDOW_DAYS = 30;
7
+ const MIN_RETURNS = 20; // 30 日中 20 営業日以上ないと信頼性が低いので無効
8
+ // closes 配列から「直近 N 営業日のリターン系列」を返す。長さは N - 1。
9
+ // データ不足は空配列。
10
+ export function tailReturns(closes, windowDays = WINDOW_DAYS) {
11
+ const tail = closes.slice(-windowDays - 1);
12
+ if (tail.length < 2)
13
+ return [];
14
+ const out = [];
15
+ for (let i = 1; i < tail.length; i++) {
16
+ const prev = tail[i - 1];
17
+ const curr = tail[i];
18
+ if (prev === 0 || typeof prev !== "number" || typeof curr !== "number")
19
+ continue;
20
+ out.push((curr - prev) / prev);
21
+ }
22
+ return out;
23
+ }
24
+ // ピアソン相関係数。データ点不足や標準偏差ゼロの場合は null。
25
+ export function pearson(a, b) {
26
+ const n = Math.min(a.length, b.length);
27
+ if (n < MIN_RETURNS)
28
+ return null;
29
+ let sumA = 0;
30
+ let sumB = 0;
31
+ for (let i = 0; i < n; i++) {
32
+ sumA += a[i];
33
+ sumB += b[i];
34
+ }
35
+ const meanA = sumA / n;
36
+ const meanB = sumB / n;
37
+ let num = 0;
38
+ let denomA = 0;
39
+ let denomB = 0;
40
+ for (let i = 0; i < n; i++) {
41
+ const da = a[i] - meanA;
42
+ const db = b[i] - meanB;
43
+ num += da * db;
44
+ denomA += da * da;
45
+ denomB += db * db;
46
+ }
47
+ // 浮動小数の蓄積誤差を考慮して、十分小さい場合も std=0 とみなして null。
48
+ if (denomA < 1e-12 || denomB < 1e-12)
49
+ return null;
50
+ const denom = Math.sqrt(denomA * denomB);
51
+ if (denom === 0)
52
+ return null;
53
+ return num / denom;
54
+ }
55
+ // 銘柄リストと closes1y からの取得関数を受け取り、N×N の相関行列を返す。
56
+ // 自身との相関は 1。データ無い銘柄や算出できないペアは null。
57
+ export function correlationMatrix(symbols, getCloses) {
58
+ const returns = symbols.map((s) => {
59
+ const closes = getCloses(s);
60
+ return closes ? tailReturns(closes) : [];
61
+ });
62
+ const n = symbols.length;
63
+ const matrix = [];
64
+ for (let i = 0; i < n; i++) {
65
+ const row = [];
66
+ for (let j = 0; j < n; j++) {
67
+ if (i === j) {
68
+ row.push(returns[i].length >= MIN_RETURNS ? 1 : null);
69
+ continue;
70
+ }
71
+ row.push(pearson(returns[i], returns[j]));
72
+ }
73
+ matrix.push(row);
74
+ }
75
+ return matrix;
76
+ }
77
+ //# sourceMappingURL=correlation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"correlation.js","sourceRoot":"","sources":["../../src/lib/correlation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { EconomicEvent } from "./market-types.js";
2
+ export declare const LAST_UPDATED = "2026-05-01";
3
+ export declare const ECONOMIC_EVENTS: readonly EconomicEvent[];
4
+ export declare function jstDateKey(now?: Date): string;
5
+ export declare function getEventsForDate(date: string, events?: readonly EconomicEvent[]): EconomicEvent[];
6
+ export declare function getEventsForWeek(fromDate: string, events?: readonly EconomicEvent[]): EconomicEvent[];
7
+ export declare function filterByImportance(events: readonly EconomicEvent[], minImportance: 1 | 2 | 3): EconomicEvent[];
8
+ export declare const COUNTRY_LABEL: Record<EconomicEvent["country"], string>;
9
+ export declare const IMPORTANCE_STARS: Record<EconomicEvent["importance"], string>;
@@ -0,0 +1,146 @@
1
+ // 主要経済イベントカレンダー(2026 年 5 月〜10 月)。
2
+ // FOMC・日銀会合・米雇用統計・CPI・GDP・中国 PMI など、相場に影響大きいイベントのみ収録。
3
+ // 第三者 API に依存しない自前データ → AdSense YMYL 配慮 + スクレイピング先 DOM 変更で死なない。
4
+ // 半年に 1 回 PR で追加運用、`scripts/check-events-freshness.mjs` で 90 日前から CI 警告。
5
+ //
6
+ // 重要度: 1=★(参考)/ 2=★★(重要)/ 3=★★★(必読)。
7
+ // 日付は JST、時刻が示す場合は HH:MM JST。終日イベント(FOMC 結果等)は time 省略。
8
+ export const LAST_UPDATED = "2026-05-01";
9
+ export const ECONOMIC_EVENTS = [
10
+ // ============ 2026 年 5 月 ============
11
+ { date: "2026-05-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(4 月)", importance: 2 },
12
+ { date: "2026-05-01", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(4 月)", importance: 3 },
13
+ { date: "2026-05-02", time: "21:30", country: "US", name: "米 雇用統計(4 月)", importance: 3, note: "非農業部門雇用者数・失業率・平均時給" },
14
+ { date: "2026-05-05", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(4 月)", importance: 2 },
15
+ { date: "2026-05-09", time: "08:50", country: "JP", name: "日銀 金融政策決定会合 議事要旨", importance: 2 },
16
+ { date: "2026-05-13", time: "21:30", country: "US", name: "米 CPI(4 月)", importance: 3, note: "総合・コア前年比" },
17
+ { date: "2026-05-14", time: "21:30", country: "US", name: "米 PPI(4 月)", importance: 2 },
18
+ { date: "2026-05-15", time: "21:30", country: "US", name: "米 小売売上高(4 月)", importance: 2 },
19
+ { date: "2026-05-15", country: "JP", name: "日 GDP 一次速報(1-3 月期)", importance: 3 },
20
+ { date: "2026-05-22", time: "08:30", country: "JP", name: "日 CPI(4 月)", importance: 2 },
21
+ { date: "2026-05-29", time: "21:30", country: "US", name: "米 PCE 価格指数(4 月)", importance: 3, note: "FRB が重視するインフレ指標" },
22
+ // ============ 2026 年 6 月 ============
23
+ { date: "2026-06-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(5 月)", importance: 2 },
24
+ { date: "2026-06-01", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(5 月)", importance: 3 },
25
+ { date: "2026-06-03", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(5 月)", importance: 2 },
26
+ { date: "2026-06-05", time: "21:30", country: "US", name: "米 雇用統計(5 月)", importance: 3 },
27
+ { date: "2026-06-10", time: "21:30", country: "US", name: "米 CPI(5 月)", importance: 3 },
28
+ { date: "2026-06-11", time: "21:30", country: "US", name: "米 PPI(5 月)", importance: 2 },
29
+ { date: "2026-06-12", country: "JP", name: "日 SQ(先物・オプション特別清算指数)", importance: 1 },
30
+ { date: "2026-06-15", country: "JP", name: "日銀 金融政策決定会合(1 日目)", importance: 3 },
31
+ { date: "2026-06-16", country: "JP", name: "日銀 金融政策決定会合(結果発表)", importance: 3, note: "総裁会見あり" },
32
+ { date: "2026-06-16", country: "US", name: "FOMC(1 日目)", importance: 3 },
33
+ { date: "2026-06-17", time: "27:00", country: "US", name: "FOMC 結果発表 + 経済予測", importance: 3, note: "ドットチャート更新月" },
34
+ { date: "2026-06-17", time: "27:30", country: "US", name: "FRB 議長記者会見", importance: 3 },
35
+ { date: "2026-06-26", time: "21:30", country: "US", name: "米 PCE 価格指数(5 月)", importance: 3 },
36
+ // ============ 2026 年 7 月 ============
37
+ { date: "2026-07-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(6 月)", importance: 2 },
38
+ { date: "2026-07-01", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(6 月)", importance: 3 },
39
+ { date: "2026-07-01", time: "08:50", country: "JP", name: "日銀短観(4-6 月期)", importance: 3, note: "大企業製造業 DI 等" },
40
+ { date: "2026-07-03", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(6 月)", importance: 2 },
41
+ { date: "2026-07-04", country: "US", name: "米 独立記念日(市場休場)", importance: 1 },
42
+ { date: "2026-07-04", time: "21:30", country: "US", name: "米 雇用統計(6 月)", importance: 3, note: "祝日繰り上げ発表の可能性" },
43
+ { date: "2026-07-10", country: "JP", name: "日 SQ", importance: 1 },
44
+ { date: "2026-07-15", time: "21:30", country: "US", name: "米 CPI(6 月)", importance: 3 },
45
+ { date: "2026-07-15", time: "11:00", country: "CN", name: "中国 GDP(4-6 月期)", importance: 3 },
46
+ { date: "2026-07-16", time: "21:30", country: "US", name: "米 PPI(6 月)", importance: 2 },
47
+ { date: "2026-07-17", time: "21:30", country: "US", name: "米 小売売上高(6 月)", importance: 2 },
48
+ { date: "2026-07-30", country: "JP", name: "日銀 金融政策決定会合(1 日目)", importance: 3 },
49
+ { date: "2026-07-31", country: "JP", name: "日銀 金融政策決定会合(結果 + 展望レポート)", importance: 3, note: "総裁会見あり" },
50
+ { date: "2026-07-28", country: "US", name: "FOMC(1 日目)", importance: 3 },
51
+ { date: "2026-07-29", time: "27:00", country: "US", name: "FOMC 結果発表", importance: 3 },
52
+ { date: "2026-07-30", time: "21:30", country: "US", name: "米 GDP 速報値(4-6 月期)", importance: 3 },
53
+ { date: "2026-07-31", time: "21:30", country: "US", name: "米 PCE 価格指数(6 月)", importance: 3 },
54
+ // ============ 2026 年 8 月 ============
55
+ { date: "2026-08-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(7 月)", importance: 2 },
56
+ { date: "2026-08-03", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(7 月)", importance: 3 },
57
+ { date: "2026-08-05", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(7 月)", importance: 2 },
58
+ { date: "2026-08-07", time: "21:30", country: "US", name: "米 雇用統計(7 月)", importance: 3 },
59
+ { date: "2026-08-12", time: "21:30", country: "US", name: "米 CPI(7 月)", importance: 3 },
60
+ { date: "2026-08-13", time: "21:30", country: "US", name: "米 PPI(7 月)", importance: 2 },
61
+ { date: "2026-08-14", time: "21:30", country: "US", name: "米 小売売上高(7 月)", importance: 2 },
62
+ { date: "2026-08-14", country: "JP", name: "日 SQ", importance: 1 },
63
+ { date: "2026-08-17", time: "08:50", country: "JP", name: "日 GDP 一次速報(4-6 月期)", importance: 3 },
64
+ { date: "2026-08-21", time: "08:30", country: "JP", name: "日 CPI(7 月)", importance: 2 },
65
+ { date: "2026-08-27", country: "US", name: "ジャクソンホール会議(〜29)", importance: 3, note: "FRB 議長講演に注目" },
66
+ { date: "2026-08-28", time: "21:30", country: "US", name: "米 PCE 価格指数(7 月)", importance: 3 },
67
+ // ============ 2026 年 9 月 ============
68
+ { date: "2026-09-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(8 月)", importance: 2 },
69
+ { date: "2026-09-01", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(8 月)", importance: 3 },
70
+ { date: "2026-09-03", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(8 月)", importance: 2 },
71
+ { date: "2026-09-04", time: "21:30", country: "US", name: "米 雇用統計(8 月)", importance: 3 },
72
+ { date: "2026-09-11", time: "21:30", country: "US", name: "米 CPI(8 月)", importance: 3 },
73
+ { date: "2026-09-11", country: "JP", name: "日 SQ", importance: 1 },
74
+ { date: "2026-09-15", country: "US", name: "FOMC(1 日目)", importance: 3 },
75
+ { date: "2026-09-16", time: "27:00", country: "US", name: "FOMC 結果発表 + 経済予測", importance: 3, note: "ドットチャート更新月" },
76
+ { date: "2026-09-17", country: "JP", name: "日銀 金融政策決定会合(1 日目)", importance: 3 },
77
+ { date: "2026-09-18", country: "JP", name: "日銀 金融政策決定会合(結果発表)", importance: 3, note: "総裁会見あり" },
78
+ { date: "2026-09-25", time: "08:30", country: "JP", name: "日 CPI(8 月)", importance: 2 },
79
+ { date: "2026-09-26", time: "21:30", country: "US", name: "米 PCE 価格指数(8 月)", importance: 3 },
80
+ // ============ 2026 年 10 月 ============
81
+ { date: "2026-10-01", time: "08:50", country: "JP", name: "日銀短観(7-9 月期)", importance: 3 },
82
+ { date: "2026-10-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(9 月)", importance: 2 },
83
+ { date: "2026-10-01", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(9 月)", importance: 3 },
84
+ { date: "2026-10-02", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(9 月)", importance: 2 },
85
+ { date: "2026-10-02", time: "21:30", country: "US", name: "米 雇用統計(9 月)", importance: 3 },
86
+ { date: "2026-10-09", country: "JP", name: "日 SQ", importance: 1 },
87
+ { date: "2026-10-13", time: "21:30", country: "US", name: "米 CPI(9 月)", importance: 3 },
88
+ { date: "2026-10-14", time: "21:30", country: "US", name: "米 PPI(9 月)", importance: 2 },
89
+ { date: "2026-10-19", time: "11:00", country: "CN", name: "中国 GDP(7-9 月期)", importance: 3 },
90
+ { date: "2026-10-27", country: "US", name: "FOMC(1 日目)", importance: 3 },
91
+ { date: "2026-10-28", time: "27:00", country: "US", name: "FOMC 結果発表", importance: 3 },
92
+ { date: "2026-10-29", country: "JP", name: "日銀 金融政策決定会合(1 日目)", importance: 3 },
93
+ { date: "2026-10-30", country: "JP", name: "日銀 金融政策決定会合(結果 + 展望レポート)", importance: 3, note: "総裁会見あり" },
94
+ { date: "2026-10-30", time: "21:30", country: "US", name: "米 GDP 速報値(7-9 月期)", importance: 3 },
95
+ { date: "2026-10-30", time: "21:30", country: "US", name: "米 PCE 価格指数(9 月)", importance: 3 },
96
+ ];
97
+ // JST の年月日を yyyy-mm-dd 形式で返す(leaderboard/keys.ts と同一ロジック)。
98
+ export function jstDateKey(now = new Date()) {
99
+ const jstMs = now.getTime() + 9 * 3600 * 1000;
100
+ const d = new Date(jstMs);
101
+ const y = d.getUTCFullYear();
102
+ const m = String(d.getUTCMonth() + 1).padStart(2, "0");
103
+ const day = String(d.getUTCDate()).padStart(2, "0");
104
+ return `${y}-${m}-${day}`;
105
+ }
106
+ // JST 当日のイベントを返す(重要度降順)。
107
+ export function getEventsForDate(date, events = ECONOMIC_EVENTS) {
108
+ return events
109
+ .filter((e) => e.date === date)
110
+ .sort((a, b) => b.importance - a.importance ||
111
+ (a.time ?? "00:00").localeCompare(b.time ?? "00:00"));
112
+ }
113
+ // 当日を含む 7 日間(今日〜+6 日)のイベントを返す。
114
+ export function getEventsForWeek(fromDate, events = ECONOMIC_EVENTS) {
115
+ const start = new Date(fromDate + "T00:00:00+09:00");
116
+ const dates = [];
117
+ for (let i = 0; i < 7; i++) {
118
+ const d = new Date(start);
119
+ d.setDate(d.getDate() + i);
120
+ dates.push(jstDateKey(d));
121
+ }
122
+ const set = new Set(dates);
123
+ return events
124
+ .filter((e) => set.has(e.date))
125
+ .sort((a, b) => a.date.localeCompare(b.date) ||
126
+ b.importance - a.importance ||
127
+ (a.time ?? "00:00").localeCompare(b.time ?? "00:00"));
128
+ }
129
+ // 重要度フィルタ(最低重要度)。例: minImportance=2 で ★★ 以上のみ。
130
+ export function filterByImportance(events, minImportance) {
131
+ return events.filter((e) => e.importance >= minImportance);
132
+ }
133
+ export const COUNTRY_LABEL = {
134
+ JP: "🇯🇵 日本",
135
+ US: "🇺🇸 米国",
136
+ CN: "🇨🇳 中国",
137
+ EU: "🇪🇺 欧州",
138
+ GB: "🇬🇧 英国",
139
+ OTHER: "🌏 その他",
140
+ };
141
+ export const IMPORTANCE_STARS = {
142
+ 1: "★",
143
+ 2: "★★",
144
+ 3: "★★★",
145
+ };
146
+ //# sourceMappingURL=economic-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"economic-events.js","sourceRoot":"","sources":["../../src/lib/economic-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type FangPlusStock = {
2
+ symbol: string;
3
+ name: string;
4
+ description: string;
5
+ };
6
+ export declare const FANGPLUS_STOCKS: readonly FangPlusStock[];
7
+ export declare const FANGPLUS_SYMBOLS: readonly string[];
@@ -0,0 +1,19 @@
1
+ // NYSE FANG+ 指数の構成銘柄(10 社・等加重)。
2
+ // 指数は四半期ごとに rebalance され rotational members が入れ替わるため、
3
+ // 表示は「2026 年時点の代表的 10 銘柄」を運用上の固定リストとして扱う。
4
+ // Mag7 と 7 銘柄が重複するが、FANG+ 独自の 3 銘柄(NFLX / AVGO / CRWD)も含めて
5
+ // FANG+ 指数(^NYFANG)を実際に動かしている個別株を一覧で見られるようにする。
6
+ export const FANGPLUS_STOCKS = [
7
+ { symbol: "META", name: "Meta", description: "FANG+ オリジナル構成銘柄、SNS・広告" },
8
+ { symbol: "AAPL", name: "Apple", description: "FANG+ オリジナル構成銘柄、ハードウェア・サービス" },
9
+ { symbol: "AMZN", name: "Amazon", description: "FANG+ オリジナル構成銘柄、EC・AWS" },
10
+ { symbol: "NFLX", name: "Netflix", description: "FANG+ オリジナル構成銘柄、ストリーミング" },
11
+ { symbol: "GOOGL", name: "Alphabet", description: "FANG+ オリジナル構成銘柄、検索・広告・Cloud" },
12
+ { symbol: "MSFT", name: "Microsoft", description: "Azure・Office・OpenAI 出資" },
13
+ { symbol: "NVDA", name: "Nvidia", description: "AI 向け GPU の中心企業" },
14
+ { symbol: "TSLA", name: "Tesla", description: "EV・エネルギー貯蔵" },
15
+ { symbol: "AVGO", name: "Broadcom", description: "半導体・AI ASIC・VMware" },
16
+ { symbol: "CRWD", name: "CrowdStrike", description: "クラウドネイティブ・セキュリティ" },
17
+ ];
18
+ export const FANGPLUS_SYMBOLS = FANGPLUS_STOCKS.map((s) => s.symbol);
19
+ //# sourceMappingURL=fangplus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fangplus.js","sourceRoot":"","sources":["../../src/lib/fangplus.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,sDAAsD;AACtD,0CAA0C;AAC1C,2DAA2D;AAC3D,+CAA+C;AAQ/C,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,wBAAwB,EAAE;IACvE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC7E,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;IACzE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yBAAyB,EAAE;IAC3E,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,6BAA6B,EAAE;IACjF,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB,EAAE;IAC5E,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAClE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE;IAC5D,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE;IACvE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE;CACzE,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAsB,eAAe,CAAC,GAAG,CACpE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Indicator } from "./market-types.js";
2
+ export declare const INDICATORS: readonly Indicator[];
3
+ export declare const CATEGORY_LABEL: Record<Indicator["category"], string>;
@@ -0,0 +1,49 @@
1
+ // MCP server で扱うマクロ指標 28 銘柄。
2
+ // Web 側 (lit-forge/app/lib/market/indicators.ts) と同期管理。
3
+ // v0.4 で 9 → 28 銘柄に拡張(Web の v1.50 → v1.59 の拡張に追従)。
4
+ export const INDICATORS = [
5
+ // ====== 為替 ======
6
+ { symbol: "JPY=X", displayName: "USD/JPY", category: "fx", unit: "円", decimals: 2, changeStyle: "ratio" },
7
+ { symbol: "EURJPY=X", displayName: "EUR/JPY", category: "fx", unit: "円", decimals: 2, changeStyle: "ratio" },
8
+ { symbol: "GBPJPY=X", displayName: "GBP/JPY", category: "fx", unit: "円", decimals: 2, changeStyle: "ratio" },
9
+ { symbol: "AUDJPY=X", displayName: "AUD/JPY", category: "fx", unit: "円", decimals: 2, changeStyle: "ratio" },
10
+ { symbol: "EURUSD=X", displayName: "EUR/USD", category: "fx", unit: "", decimals: 4, changeStyle: "ratio" },
11
+ { symbol: "CHFJPY=X", displayName: "CHF/JPY", category: "fx", unit: "円", decimals: 2, changeStyle: "ratio" },
12
+ { symbol: "DX-Y.NYB", fallback: "DX=F", displayName: "ドル指数 (DXY)", category: "fx", unit: "", decimals: 2, changeStyle: "ratio" },
13
+ // ====== 株式(日本) ======
14
+ { symbol: "^N225", displayName: "日経平均", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
15
+ { symbol: "^TPX", fallback: "1305.T", displayName: "TOPIX", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
16
+ // ====== 株式(米) ======
17
+ { symbol: "^DJI", displayName: "NY ダウ", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
18
+ { symbol: "^GSPC", displayName: "S&P 500", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
19
+ { symbol: "^NDX", displayName: "NASDAQ 100", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
20
+ { symbol: "^VIX", displayName: "VIX (恐怖指数)", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
21
+ { symbol: "^NYFANG", displayName: "NYSE FANG+", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
22
+ { symbol: "^SOX", displayName: "フィラデルフィア半導体 (SOX)", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
23
+ // ====== 株式(欧州) ======
24
+ { symbol: "^GDAXI", displayName: "DAX", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
25
+ { symbol: "^FTSE", displayName: "FTSE 100", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
26
+ // ====== 株式(アジア) ======
27
+ { symbol: "000001.SS", displayName: "上海総合", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
28
+ { symbol: "^HSI", displayName: "ハンセン", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
29
+ { symbol: "^KS11", displayName: "KOSPI", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
30
+ { symbol: "^BSESN", displayName: "SENSEX", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
31
+ // ====== 金利 ======
32
+ { symbol: "^TNX", displayName: "米10年債利回り", category: "bond", unit: "%", decimals: 3, changeStyle: "bp" },
33
+ { symbol: "^FVX", displayName: "米5年債利回り", category: "bond", unit: "%", decimals: 3, changeStyle: "bp" },
34
+ // ====== コモディティ ======
35
+ { symbol: "GC=F", displayName: "金(先物)", category: "commodity", unit: "USD/oz", decimals: 2, changeStyle: "ratio" },
36
+ { symbol: "CL=F", displayName: "原油 WTI", category: "commodity", unit: "USD/bbl", decimals: 2, changeStyle: "ratio" },
37
+ { symbol: "HG=F", displayName: "銅(先物)", category: "commodity", unit: "USD/lb", decimals: 3, changeStyle: "ratio" },
38
+ // ====== 暗号資産 ======
39
+ { symbol: "BTC-USD", displayName: "ビットコイン", category: "crypto", unit: "USD", decimals: 0, changeStyle: "ratio" },
40
+ { symbol: "ETH-USD", displayName: "イーサリアム", category: "crypto", unit: "USD", decimals: 0, changeStyle: "ratio" },
41
+ ];
42
+ export const CATEGORY_LABEL = {
43
+ fx: "為替",
44
+ equity: "株式",
45
+ bond: "金利",
46
+ commodity: "コモディティ",
47
+ crypto: "暗号資産",
48
+ };
49
+ //# sourceMappingURL=indicators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicators.js","sourceRoot":"","sources":["../../src/lib/indicators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type Mag7Stock = {
2
+ symbol: string;
3
+ name: string;
4
+ description: string;
5
+ };
6
+ export declare const MAG7_STOCKS: readonly Mag7Stock[];
7
+ export declare const MAG7_SYMBOLS: readonly string[];
@@ -0,0 +1,13 @@
1
+ // マグニフィセント 7:米株を牽引する大型テック 7 銘柄。
2
+ // 米株セクター ETF と並列に「個別株の強弱」セクションとして /today に表示する。
3
+ export const MAG7_STOCKS = [
4
+ { symbol: "AAPL", name: "Apple", description: "iPhone・サービス事業" },
5
+ { symbol: "MSFT", name: "Microsoft", description: "Azure・Office・OpenAI 出資" },
6
+ { symbol: "GOOGL", name: "Alphabet", description: "検索・広告・YouTube・Cloud" },
7
+ { symbol: "AMZN", name: "Amazon", description: "EC・AWS(クラウド最大手)" },
8
+ { symbol: "META", name: "Meta", description: "Instagram・Facebook・WhatsApp" },
9
+ { symbol: "NVDA", name: "Nvidia", description: "AI 向け GPU の中心企業" },
10
+ { symbol: "TSLA", name: "Tesla", description: "EV・エネルギー貯蔵" },
11
+ ];
12
+ export const MAG7_SYMBOLS = MAG7_STOCKS.map((s) => s.symbol);
13
+ //# sourceMappingURL=mag7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mag7.js","sourceRoot":"","sources":["../../src/lib/mag7.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,gDAAgD;AAShD,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE;IAC/D,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,wBAAwB,EAAE;IAC5E,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,qBAAqB,EAAE;IACzE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAClE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,6BAA6B,EAAE;IAC5E,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAClE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE;CAC7D,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAsB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,57 @@
1
+ export type IndicatorCategory = "fx" | "equity" | "bond" | "commodity" | "crypto";
2
+ export type ChangeStyle = "ratio" | "bp";
3
+ export type Indicator = {
4
+ symbol: string;
5
+ fallback?: string;
6
+ displayName: string;
7
+ category: IndicatorCategory;
8
+ unit: string;
9
+ decimals: number;
10
+ changeStyle: ChangeStyle;
11
+ };
12
+ export type PerformanceWindow = {
13
+ d7: number | null;
14
+ d30: number | null;
15
+ d365: number | null;
16
+ };
17
+ export type Quote = {
18
+ symbol: string;
19
+ displayName?: string;
20
+ category?: IndicatorCategory;
21
+ unit?: string;
22
+ price: number;
23
+ previousClose: number;
24
+ change: number;
25
+ changePercent: number;
26
+ changeBp: number;
27
+ fetchedAt: string;
28
+ sparkline: number[];
29
+ fiftyTwoWeekHigh?: number;
30
+ fiftyTwoWeekLow?: number;
31
+ dayHigh?: number;
32
+ dayLow?: number;
33
+ volume?: number;
34
+ performance?: PerformanceWindow;
35
+ closes1y?: number[];
36
+ isStale?: boolean;
37
+ };
38
+ export type QuoteResult = Quote | {
39
+ error: string;
40
+ };
41
+ export type Snapshot = {
42
+ fetchedAt: string;
43
+ quotes: Record<string, QuoteResult>;
44
+ };
45
+ export type EventImportance = 1 | 2 | 3;
46
+ export type Country = "JP" | "US" | "CN" | "EU" | "GB" | "OTHER";
47
+ export type EconomicEvent = {
48
+ date: string;
49
+ time?: string;
50
+ country: Country;
51
+ name: string;
52
+ importance: EventImportance;
53
+ note?: string;
54
+ forecast?: string;
55
+ actual?: string;
56
+ previous?: string;
57
+ };
@@ -0,0 +1,5 @@
1
+ // MCP server 用の市況データ型定義。
2
+ // Web 側 (lit-forge/app/lib/market/types.ts) と整合する形で同梱。
3
+ // v0.4 で構造を Web 側と同型にし、Snapshot.quotes を Record<symbol, QuoteResult> に変更。
4
+ export {};
5
+ //# sourceMappingURL=market-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market-types.js","sourceRoot":"","sources":["../../src/lib/market-types.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,uDAAuD;AACvD,0EAA0E"}
@@ -0,0 +1,3 @@
1
+ import type { PerformanceWindow } from "./market-types.js";
2
+ export declare function computePerformance(closes: readonly number[]): PerformanceWindow;
3
+ export declare const PERFORMANCE_SYMBOLS: readonly string[];
@@ -0,0 +1,43 @@
1
+ // 期間別パフォーマンス計算(純関数)。
2
+ // 日足 close 配列のインデックス基準で「直近 5 営業日 / 約 1 ヶ月(21 営業日)/ 約 1 年(252 営業日)」
3
+ // に対する % 変化率を返す。データ点が足りない場合は null。
4
+ //
5
+ // 暦日ベースだと休場日を巡って境界がぶれる(金曜の close が「1 週間前」なのか「5 営業日前」なのか)ため、
6
+ // 「Yahoo の日足配列から N 件遡る」という素朴な定義で運用する。文言は「1w / 1m / 1y」と短縮表示し、
7
+ // 厳密には「直近 5 / 21 / 252 営業日」だがユーザー視点での体感で十分という割り切り。
8
+ const D7_INDEX = 5; // 直近 5 営業日前
9
+ const D30_INDEX = 21; // 約 1 ヶ月前
10
+ const D365_INDEX = 252; // 約 1 年前
11
+ // 単一の遡及インデックスに対する変化率(%)。データ不足は null。
12
+ function changePercent(closes, backIndex) {
13
+ if (closes.length <= backIndex)
14
+ return null;
15
+ const today = closes[closes.length - 1];
16
+ const past = closes[closes.length - 1 - backIndex];
17
+ if (typeof today !== "number" || typeof past !== "number")
18
+ return null;
19
+ if (past === 0)
20
+ return null;
21
+ return ((today - past) / past) * 100;
22
+ }
23
+ // 日足 close 配列から d7 / d30 / d365 を一括計算。
24
+ export function computePerformance(closes) {
25
+ return {
26
+ d7: changePercent(closes, D7_INDEX),
27
+ d30: changePercent(closes, D30_INDEX),
28
+ d365: changePercent(closes, D365_INDEX),
29
+ };
30
+ }
31
+ // /today で期間別パフォーマンス + 1y 期間タブ + 分位値表示を有効化する銘柄。
32
+ // Yahoo の追加 fetch(1y 日足)はこの銘柄のみで実施。ISR 24h + Redis 7d でキャッシュ。
33
+ // v1.54 で 3 → 7 に拡張:マクロ俯瞰の主要グループを網羅。
34
+ export const PERFORMANCE_SYMBOLS = [
35
+ "JPY=X", // USD/JPY
36
+ "^GSPC", // S&P 500
37
+ "^NDX", // NASDAQ 100
38
+ "^DJI", // NY ダウ
39
+ "^TNX", // 米10年債利回り
40
+ "^VIX", // VIX
41
+ "DX-Y.NYB", // ドル指数
42
+ ];
43
+ //# sourceMappingURL=performance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.js","sourceRoot":"","sources":["../../src/lib/performance.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,mEAAmE;AACnE,mCAAmC;AACnC,EAAE;AACF,4DAA4D;AAC5D,8DAA8D;AAC9D,mDAAmD;AAInD,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,YAAY;AAChC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,UAAU;AAChC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,SAAS;AAEjC,qCAAqC;AACrC,SAAS,aAAa,CACpB,MAAyB,EACzB,SAAiB;IAEjB,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvE,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;AACvC,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,kBAAkB,CAChC,MAAyB;IAEzB,OAAO;QACL,EAAE,EAAE,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC;QACnC,GAAG,EAAE,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC;QACrC,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,gDAAgD;AAChD,8DAA8D;AAC9D,qCAAqC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,OAAO;CACpB,CAAC"}
@@ -0,0 +1,24 @@
1
+ export declare function pricePercentile(closes: readonly number[]): number | null;
2
+ export type OutlierResult = {
3
+ sigma: number;
4
+ exceeds1Sigma: boolean;
5
+ };
6
+ export declare function detectOutlier(closes: readonly number[], todayChangePercent: number): OutlierResult | null;
7
+ export type LevelEvent = {
8
+ type: "52w-new-high" | "52w-new-low" | "ma200-cross-up" | "ma200-cross-down";
9
+ label: string;
10
+ };
11
+ export declare function detectLevelEvents(input: {
12
+ closes1y?: readonly number[];
13
+ dayHigh?: number;
14
+ dayLow?: number;
15
+ fiftyTwoWeekHigh?: number;
16
+ fiftyTwoWeekLow?: number;
17
+ }): LevelEvent[];
18
+ export type MilestoneEvent = {
19
+ type: "n-day-high" | "n-day-low";
20
+ days: number;
21
+ label: string;
22
+ };
23
+ export declare function detectMilestone(closes: readonly number[]): MilestoneEvent | null;
24
+ export declare function percentileLabel(percentile: number | null): string;