@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.
- package/CHANGELOG.md +80 -0
- package/README.md +42 -5
- package/bin/cli.js +618 -38
- package/dist/server/auth/admin.js +32 -0
- package/dist/server/auth/admin.js.map +1 -0
- package/dist/server/broker/kiwoom/_helpers/symbol-code.js +21 -0
- package/dist/server/broker/kiwoom/_helpers/symbol-code.js.map +1 -0
- package/dist/server/broker/kiwoom/client.js +23 -4
- package/dist/server/broker/kiwoom/client.js.map +1 -1
- package/dist/server/broker/kiwoom/endpoints/account.js +14 -6
- package/dist/server/broker/kiwoom/endpoints/account.js.map +1 -1
- package/dist/server/broker/kiwoom/endpoints/quote.js +99 -13
- package/dist/server/broker/kiwoom/endpoints/quote.js.map +1 -1
- package/dist/server/broker/kiwoom/index.js +1 -1
- package/dist/server/broker/kiwoom/index.js.map +1 -1
- package/dist/server/broker/kiwoom/order-tracker.js +13 -0
- package/dist/server/broker/kiwoom/order-tracker.js.map +1 -1
- package/dist/server/broker/kiwoom/price-feed.js +13 -0
- package/dist/server/broker/kiwoom/price-feed.js.map +1 -1
- package/dist/server/broker/kiwoom/ws/endpoints/condition.js +3 -2
- package/dist/server/broker/kiwoom/ws/endpoints/condition.js.map +1 -1
- package/dist/server/calendar/kst-marker.js +68 -0
- package/dist/server/calendar/kst-marker.js.map +1 -0
- package/dist/server/config.js +370 -72
- package/dist/server/config.js.map +1 -1
- package/dist/server/db/sqlite.js +53 -29
- package/dist/server/db/sqlite.js.map +1 -1
- package/dist/server/diary/writer.js +151 -46
- package/dist/server/diary/writer.js.map +1 -1
- package/dist/server/index.js +166 -11
- package/dist/server/index.js.map +1 -1
- package/dist/server/jobs/universe-sync.js +48 -11
- package/dist/server/jobs/universe-sync.js.map +1 -1
- package/dist/server/jobs/watchdog.js +4 -0
- package/dist/server/jobs/watchdog.js.map +1 -1
- package/dist/server/journal/telemetry.js +11 -0
- package/dist/server/journal/telemetry.js.map +1 -1
- package/dist/server/journal/trade-journal.js +42 -16
- package/dist/server/journal/trade-journal.js.map +1 -1
- package/dist/server/llm/context-builder.js +9 -5
- package/dist/server/llm/context-builder.js.map +1 -1
- package/dist/server/personas/loader.js +46 -16
- package/dist/server/personas/loader.js.map +1 -1
- package/dist/server/personas/persona-agent.js +93 -21
- package/dist/server/personas/persona-agent.js.map +1 -1
- package/dist/server/personas/persona-state.js +198 -19
- package/dist/server/personas/persona-state.js.map +1 -1
- package/dist/server/personas/runner.js +29 -0
- package/dist/server/personas/runner.js.map +1 -1
- package/dist/server/personas/schema.js +13 -0
- package/dist/server/personas/schema.js.map +1 -1
- package/dist/server/personas/wake-plan.js +4 -67
- package/dist/server/personas/wake-plan.js.map +1 -1
- package/dist/server/readiness.js +70 -0
- package/dist/server/readiness.js.map +1 -1
- package/dist/server/routes.js +300 -13
- package/dist/server/routes.js.map +1 -1
- package/dist/server/screener/engine.js +110 -1
- package/dist/server/screener/engine.js.map +1 -1
- package/dist/server/screener/indicators.js +63 -0
- package/dist/server/screener/indicators.js.map +1 -0
- package/dist/server/server-sync.js +387 -126
- package/dist/server/server-sync.js.map +1 -1
- package/dist/server/share/postgres-publish.js +139 -0
- package/dist/server/share/postgres-publish.js.map +1 -0
- package/dist/server/share/prepare-state.js +50 -0
- package/dist/server/share/prepare-state.js.map +1 -0
- package/dist/server/share/prepare.js +61 -0
- package/dist/server/share/prepare.js.map +1 -0
- package/dist/server/share/publish-cron.js +96 -0
- package/dist/server/share/publish-cron.js.map +1 -0
- package/dist/server/share/snapshot.js +81 -0
- package/dist/server/share/snapshot.js.map +1 -0
- package/dist/server/watchers/condition-watcher.js +57 -16
- package/dist/server/watchers/condition-watcher.js.map +1 -1
- package/dist/web/assets/index-B1C-UX9W.js +88 -0
- package/dist/web/assets/index-N7Xwheka.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +4 -5
- package/dist/web/assets/index-62SMpbaf.js +0 -79
- 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"}
|