@mulsok/traders-client 0.1.0 → 0.2.1

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 (81) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +42 -5
  3. package/bin/cli.js +618 -38
  4. package/dist/server/auth/admin.js +32 -0
  5. package/dist/server/auth/admin.js.map +1 -0
  6. package/dist/server/broker/kiwoom/_helpers/symbol-code.js +21 -0
  7. package/dist/server/broker/kiwoom/_helpers/symbol-code.js.map +1 -0
  8. package/dist/server/broker/kiwoom/client.js +23 -4
  9. package/dist/server/broker/kiwoom/client.js.map +1 -1
  10. package/dist/server/broker/kiwoom/endpoints/account.js +14 -6
  11. package/dist/server/broker/kiwoom/endpoints/account.js.map +1 -1
  12. package/dist/server/broker/kiwoom/endpoints/quote.js +99 -13
  13. package/dist/server/broker/kiwoom/endpoints/quote.js.map +1 -1
  14. package/dist/server/broker/kiwoom/index.js +1 -1
  15. package/dist/server/broker/kiwoom/index.js.map +1 -1
  16. package/dist/server/broker/kiwoom/order-tracker.js +13 -0
  17. package/dist/server/broker/kiwoom/order-tracker.js.map +1 -1
  18. package/dist/server/broker/kiwoom/price-feed.js +13 -0
  19. package/dist/server/broker/kiwoom/price-feed.js.map +1 -1
  20. package/dist/server/broker/kiwoom/ws/endpoints/condition.js +3 -2
  21. package/dist/server/broker/kiwoom/ws/endpoints/condition.js.map +1 -1
  22. package/dist/server/calendar/kst-marker.js +68 -0
  23. package/dist/server/calendar/kst-marker.js.map +1 -0
  24. package/dist/server/config.js +370 -72
  25. package/dist/server/config.js.map +1 -1
  26. package/dist/server/db/sqlite.js +53 -29
  27. package/dist/server/db/sqlite.js.map +1 -1
  28. package/dist/server/diary/writer.js +151 -46
  29. package/dist/server/diary/writer.js.map +1 -1
  30. package/dist/server/index.js +166 -11
  31. package/dist/server/index.js.map +1 -1
  32. package/dist/server/jobs/universe-sync.js +48 -11
  33. package/dist/server/jobs/universe-sync.js.map +1 -1
  34. package/dist/server/jobs/watchdog.js +4 -0
  35. package/dist/server/jobs/watchdog.js.map +1 -1
  36. package/dist/server/journal/telemetry.js +11 -0
  37. package/dist/server/journal/telemetry.js.map +1 -1
  38. package/dist/server/journal/trade-journal.js +42 -16
  39. package/dist/server/journal/trade-journal.js.map +1 -1
  40. package/dist/server/llm/context-builder.js +9 -5
  41. package/dist/server/llm/context-builder.js.map +1 -1
  42. package/dist/server/personas/loader.js +46 -16
  43. package/dist/server/personas/loader.js.map +1 -1
  44. package/dist/server/personas/persona-agent.js +93 -21
  45. package/dist/server/personas/persona-agent.js.map +1 -1
  46. package/dist/server/personas/persona-state.js +198 -19
  47. package/dist/server/personas/persona-state.js.map +1 -1
  48. package/dist/server/personas/runner.js +29 -0
  49. package/dist/server/personas/runner.js.map +1 -1
  50. package/dist/server/personas/schema.js +13 -0
  51. package/dist/server/personas/schema.js.map +1 -1
  52. package/dist/server/personas/wake-plan.js +4 -67
  53. package/dist/server/personas/wake-plan.js.map +1 -1
  54. package/dist/server/readiness.js +70 -0
  55. package/dist/server/readiness.js.map +1 -1
  56. package/dist/server/routes.js +300 -13
  57. package/dist/server/routes.js.map +1 -1
  58. package/dist/server/screener/engine.js +110 -1
  59. package/dist/server/screener/engine.js.map +1 -1
  60. package/dist/server/screener/indicators.js +63 -0
  61. package/dist/server/screener/indicators.js.map +1 -0
  62. package/dist/server/server-sync.js +387 -126
  63. package/dist/server/server-sync.js.map +1 -1
  64. package/dist/server/share/postgres-publish.js +139 -0
  65. package/dist/server/share/postgres-publish.js.map +1 -0
  66. package/dist/server/share/prepare-state.js +50 -0
  67. package/dist/server/share/prepare-state.js.map +1 -0
  68. package/dist/server/share/prepare.js +61 -0
  69. package/dist/server/share/prepare.js.map +1 -0
  70. package/dist/server/share/publish-cron.js +96 -0
  71. package/dist/server/share/publish-cron.js.map +1 -0
  72. package/dist/server/share/snapshot.js +81 -0
  73. package/dist/server/share/snapshot.js.map +1 -0
  74. package/dist/server/watchers/condition-watcher.js +57 -16
  75. package/dist/server/watchers/condition-watcher.js.map +1 -1
  76. package/dist/web/assets/index-B1C-UX9W.js +88 -0
  77. package/dist/web/assets/index-N7Xwheka.css +1 -0
  78. package/dist/web/index.html +2 -2
  79. package/package.json +4 -5
  80. package/dist/web/assets/index-62SMpbaf.js +0 -79
  81. package/dist/web/assets/index-BPLQR0wt.css +0 -1
@@ -0,0 +1,63 @@
1
+ /**
2
+ * 단순이동평균 (SMA) — engine.ts 의 averageClose 와 동일.
3
+ * candles 가 NEWEST FIRST 이므로 [0..period-1] 평균 = D-0 기준 SMA.
4
+ */
5
+ export function sma(candles, period) {
6
+ if (candles.length < period)
7
+ return 0;
8
+ const sum = candles.slice(0, period).reduce((s, c) => s + c.close_krw, 0);
9
+ return sum / period;
10
+ }
11
+ /**
12
+ * 지수이동평균 (EMA) — 단테 페르소나 핵심 지표.
13
+ *
14
+ * 표준 공식:
15
+ * K = 2 / (period + 1)
16
+ * seed = SMA(가장 오래된 period 개)
17
+ * EMA_i = close_i * K + EMA_{i-1} * (1 - K)
18
+ *
19
+ * 안정성:
20
+ * - candles.length < period → 0 반환 (엔진 패턴 평가에서 fail 처리)
21
+ * - period 짧으면 EMA 가 SMA 에 빠르게 수렴 (1·2 candle 차이 무시 가능)
22
+ * - period 길면 (예: 224·448) seed SMA 의 영향이 후속 candle 에 의해 희석되려면
23
+ * candles.length ≥ period × 2 권장. 데이터 부족 시 정확도 저하 — 호출자가
24
+ * `candles.length` 검사 권장.
25
+ */
26
+ export function ema(candles, period) {
27
+ if (candles.length < period)
28
+ return 0;
29
+ // candles 는 NEWEST FIRST → oldest first 로 reverse
30
+ const closes = candles.map((c) => c.close_krw).reverse();
31
+ const k = 2 / (period + 1);
32
+ // seed: 가장 오래된 period 개의 SMA
33
+ let value = closes.slice(0, period).reduce((s, v) => s + v, 0) / period;
34
+ // 이후 candle 에 EMA 재귀 적용
35
+ for (let i = period; i < closes.length; i++) {
36
+ value = closes[i] * k + value * (1 - k);
37
+ }
38
+ return value;
39
+ }
40
+ /**
41
+ * EMA 시계열 — 모든 시점의 EMA 값 (oldest first 순서로 반환).
42
+ * 정배열·역배열 판정 등 시계열 비교가 필요한 경우 사용.
43
+ */
44
+ export function emaSeries(candles, period) {
45
+ if (candles.length < period)
46
+ return [];
47
+ const closes = candles.map((c) => c.close_krw).reverse();
48
+ const k = 2 / (period + 1);
49
+ const seed = closes.slice(0, period).reduce((s, v) => s + v, 0) / period;
50
+ const result = [];
51
+ // 첫 period-1 개는 EMA 미정의 → 0 으로 채우거나 SMA seed 로 채울 수 있음.
52
+ // 본 구현은 seed 부터 (즉 index period-1) 부터 의미 있는 값 시작.
53
+ for (let i = 0; i < period - 1; i++)
54
+ result.push(0);
55
+ result.push(seed);
56
+ let value = seed;
57
+ for (let i = period; i < closes.length; i++) {
58
+ value = closes[i] * k + value * (1 - k);
59
+ result.push(value);
60
+ }
61
+ return result;
62
+ }
63
+ //# sourceMappingURL=indicators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicators.js","sourceRoot":"","sources":["../../../src-server/screener/indicators.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,OAAoB,EAAE,MAAc;IACtD,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM;QAAE,OAAO,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1E,OAAO,GAAG,GAAG,MAAM,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,GAAG,CAAC,OAAoB,EAAE,MAAc;IACtD,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM;QAAE,OAAO,CAAC,CAAC;IACtC,kDAAkD;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3B,6BAA6B;IAC7B,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;IACxE,wBAAwB;IACxB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAoB,EAAE,MAAc;IAC5D,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM;QAAE,OAAO,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IACzD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;IACzE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,wDAAwD;IACxD,kDAAkD;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}