@coderyo/indicators 1.0.2 → 1.0.3

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/dist/index.d.ts CHANGED
@@ -47,8 +47,16 @@ interface IndicatorConfig {
47
47
  showMacd: boolean;
48
48
  showRsi: boolean;
49
49
  showKdj: boolean;
50
+ showMa: boolean;
51
+ showVolMa: boolean;
50
52
  }
51
53
  declare const DEFAULT_INDICATOR_CONFIG: IndicatorConfig;
54
+ declare function hasVisibleIndicatorPanes(config: IndicatorConfig): boolean;
55
+ declare function hasMainChartOverlays(config: IndicatorConfig): boolean;
56
+ /** Any built-in indicator pane or main-chart overlay enabled. */
57
+ declare function hasAnyActiveIndicators(config: IndicatorConfig): boolean;
58
+ /** Hide all indicator panes and main-chart overlays (MA / EMA / BOLL / vol MA). */
59
+ declare function clearedIndicatorConfig(base?: IndicatorConfig): IndicatorConfig;
52
60
  declare function indicatorConfigStorageKey(symbol: string, interval: string): string;
53
61
 
54
- export { type BollResult, DEFAULT_INDICATOR_CONFIG, type IndicatorConfig, type IndicatorSource, type KdjResult, type MacdResult, boll, ema, indicatorConfigStorageKey, kdj, macd, rsi, sma };
62
+ export { type BollResult, DEFAULT_INDICATOR_CONFIG, type IndicatorConfig, type IndicatorSource, type KdjResult, type MacdResult, boll, clearedIndicatorConfig, ema, hasAnyActiveIndicators, hasMainChartOverlays, hasVisibleIndicatorPanes, indicatorConfigStorageKey, kdj, macd, rsi, sma };
package/dist/index.js CHANGED
@@ -161,15 +161,42 @@ var DEFAULT_INDICATOR_CONFIG = {
161
161
  kdjDSmooth: 3,
162
162
  showMacd: true,
163
163
  showRsi: true,
164
- showKdj: true
164
+ showKdj: true,
165
+ showMa: true,
166
+ showVolMa: true
165
167
  };
168
+ function hasVisibleIndicatorPanes(config) {
169
+ return config.showMacd || config.showRsi || config.showKdj;
170
+ }
171
+ function hasMainChartOverlays(config) {
172
+ return config.showMa || config.showVolMa || config.showEma || config.showBoll;
173
+ }
174
+ function hasAnyActiveIndicators(config) {
175
+ return hasVisibleIndicatorPanes(config) || hasMainChartOverlays(config);
176
+ }
177
+ function clearedIndicatorConfig(base = DEFAULT_INDICATOR_CONFIG) {
178
+ return {
179
+ ...base,
180
+ showMacd: false,
181
+ showRsi: false,
182
+ showKdj: false,
183
+ showEma: false,
184
+ showBoll: false,
185
+ showMa: false,
186
+ showVolMa: false
187
+ };
188
+ }
166
189
  function indicatorConfigStorageKey(symbol, interval) {
167
190
  return `tradview:indicators:${symbol}:${interval}`;
168
191
  }
169
192
  export {
170
193
  DEFAULT_INDICATOR_CONFIG,
171
194
  boll,
195
+ clearedIndicatorConfig,
172
196
  ema,
197
+ hasAnyActiveIndicators,
198
+ hasMainChartOverlays,
199
+ hasVisibleIndicatorPanes,
173
200
  indicatorConfigStorageKey,
174
201
  kdj,
175
202
  macd,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ma.ts","../src/boll.ts","../src/macd.ts","../src/rsi.ts","../src/kdj.ts","../src/config.ts"],"sourcesContent":["import type { Bar } from '@coderyo/data';\n\nexport function sma(bars: Bar[], period: number, field: 'close' | 'open' = 'close'): (number | null)[] {\n const out: (number | null)[] = [];\n for (let i = 0; i < bars.length; i++) {\n if (i < period - 1) {\n out.push(null);\n continue;\n }\n let sum = 0;\n for (let j = 0; j < period; j++) {\n sum += bars[i - j]![field === 'close' ? 'c' : 'o'];\n }\n out.push(sum / period);\n }\n return out;\n}\n\nexport function ema(bars: Bar[], period: number, field: 'close' | 'open' = 'close'): (number | null)[] {\n const k = 2 / (period + 1);\n const out: (number | null)[] = [];\n let prev: number | null = null;\n for (let i = 0; i < bars.length; i++) {\n const v = bars[i]![field === 'close' ? 'c' : 'o'];\n if (prev === null) {\n prev = v;\n out.push(i < period - 1 ? null : v);\n } else {\n prev = v * k + prev * (1 - k);\n out.push(i < period - 1 ? null : prev);\n }\n }\n return out;\n}","import type { Bar } from '@coderyo/data';\nimport { sma } from './ma.js';\n\nexport interface BollResult {\n upper: (number | null)[];\n middle: (number | null)[];\n lower: (number | null)[];\n}\n\n/** Bollinger Bands on close. */\nexport function boll(bars: Bar[], period = 20, mult = 2): BollResult {\n const middle = sma(bars, period);\n const upper: (number | null)[] = [];\n const lower: (number | null)[] = [];\n for (let i = 0; i < bars.length; i++) {\n const m = middle[i];\n if (m == null || i < period - 1) {\n upper.push(null);\n lower.push(null);\n continue;\n }\n let sumSq = 0;\n for (let j = 0; j < period; j++) {\n const c = bars[i - j]!.c;\n const d = c - m;\n sumSq += d * d;\n }\n const std = Math.sqrt(sumSq / period);\n upper.push(m + mult * std);\n lower.push(m - mult * std);\n }\n return { upper, middle, lower };\n}","import type { Bar } from '@coderyo/data';\nimport { ema } from './ma.js';\n\nexport interface MacdResult {\n macd: (number | null)[];\n signal: (number | null)[];\n histogram: (number | null)[];\n}\n\nexport function macd(\n bars: Bar[],\n fast = 12,\n slow = 26,\n signalPeriod = 9,\n): MacdResult {\n const fastEma = ema(bars, fast);\n const slowEma = ema(bars, slow);\n const line: (number | null)[] = bars.map((_, i) => {\n const f = fastEma[i];\n const s = slowEma[i];\n if (f == null || s == null) return null;\n return f - s;\n });\n const pseudoBars = bars.map((b, i) => ({\n ...b,\n c: line[i] ?? b.c,\n }));\n const signal = ema(pseudoBars, signalPeriod);\n const histogram = line.map((m, i) =>\n m == null || signal[i] == null ? null : m - signal[i]!,\n );\n return { macd: line, signal, histogram };\n}","import type { Bar } from '@coderyo/data';\n\nexport function rsi(bars: Bar[], period = 14): (number | null)[] {\n const out: (number | null)[] = [];\n let avgGain = 0;\n let avgLoss = 0;\n\n for (let i = 0; i < bars.length; i++) {\n if (i === 0) {\n out.push(null);\n continue;\n }\n const change = bars[i]!.c - bars[i - 1]!.c;\n const gain = Math.max(change, 0);\n const loss = Math.max(-change, 0);\n\n if (i < period) {\n avgGain += gain;\n avgLoss += loss;\n out.push(null);\n continue;\n }\n if (i === period) {\n avgGain /= period;\n avgLoss /= period;\n } else {\n avgGain = (avgGain * (period - 1) + gain) / period;\n avgLoss = (avgLoss * (period - 1) + loss) / period;\n }\n const rs = avgLoss === 0 ? 100 : avgGain / avgLoss;\n out.push(100 - 100 / (1 + rs));\n }\n return out;\n}","import type { Bar } from '@coderyo/data';\n\nexport interface KdjResult {\n k: (number | null)[];\n d: (number | null)[];\n j: (number | null)[];\n}\n\nexport function kdj(bars: Bar[], period = 9, kSmooth = 3, dSmooth = 3): KdjResult {\n const rsv: (number | null)[] = [];\n const k: (number | null)[] = [];\n const d: (number | null)[] = [];\n const j: (number | null)[] = [];\n\n for (let i = 0; i < bars.length; i++) {\n if (i < period - 1) {\n rsv.push(null);\n k.push(null);\n d.push(null);\n j.push(null);\n continue;\n }\n let hh = -Infinity;\n let ll = Infinity;\n for (let x = i - period + 1; x <= i; x++) {\n hh = Math.max(hh, bars[x]!.h);\n ll = Math.min(ll, bars[x]!.l);\n }\n const r = hh === ll ? 50 : ((bars[i]!.c - ll) / (hh - ll)) * 100;\n rsv.push(r);\n const prevK = k[i - 1] ?? 50;\n const prevD = d[i - 1] ?? 50;\n const kv = (prevK * (kSmooth - 1) + r) / kSmooth;\n const dv = (prevD * (dSmooth - 1) + kv) / dSmooth;\n k.push(kv);\n d.push(dv);\n j.push(3 * kv - 2 * dv);\n }\n return { k, d, j };\n}","export type IndicatorSource = 'close' | 'hlc3';\n\nexport interface IndicatorConfig {\n source: IndicatorSource;\n maPeriod: number;\n showEma: boolean;\n emaPeriod: number;\n showBoll: boolean;\n bollPeriod: number;\n bollMult: number;\n volMaPeriod: number;\n macdFast: number;\n macdSlow: number;\n macdSignal: number;\n rsiPeriod: number;\n kdjPeriod: number;\n kdjKSmooth: number;\n kdjDSmooth: number;\n showMacd: boolean;\n showRsi: boolean;\n showKdj: boolean;\n}\n\nexport const DEFAULT_INDICATOR_CONFIG: IndicatorConfig = {\n source: 'close',\n maPeriod: 20,\n showEma: false,\n emaPeriod: 12,\n showBoll: false,\n bollPeriod: 20,\n bollMult: 2,\n volMaPeriod: 5,\n macdFast: 12,\n macdSlow: 26,\n macdSignal: 9,\n rsiPeriod: 14,\n kdjPeriod: 9,\n kdjKSmooth: 3,\n kdjDSmooth: 3,\n showMacd: true,\n showRsi: true,\n showKdj: true,\n};\n\nexport function indicatorConfigStorageKey(symbol: string, interval: string): string {\n return `tradview:indicators:${symbol}:${interval}`;\n}"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/ma.ts","../src/boll.ts","../src/macd.ts","../src/rsi.ts","../src/kdj.ts","../src/config.ts"],"sourcesContent":["import type { Bar } from '@coderyo/data';\n\nexport function sma(bars: Bar[], period: number, field: 'close' | 'open' = 'close'): (number | null)[] {\n const out: (number | null)[] = [];\n for (let i = 0; i < bars.length; i++) {\n if (i < period - 1) {\n out.push(null);\n continue;\n }\n let sum = 0;\n for (let j = 0; j < period; j++) {\n sum += bars[i - j]![field === 'close' ? 'c' : 'o'];\n }\n out.push(sum / period);\n }\n return out;\n}\n\nexport function ema(bars: Bar[], period: number, field: 'close' | 'open' = 'close'): (number | null)[] {\n const k = 2 / (period + 1);\n const out: (number | null)[] = [];\n let prev: number | null = null;\n for (let i = 0; i < bars.length; i++) {\n const v = bars[i]![field === 'close' ? 'c' : 'o'];\n if (prev === null) {\n prev = v;\n out.push(i < period - 1 ? null : v);\n } else {\n prev = v * k + prev * (1 - k);\n out.push(i < period - 1 ? null : prev);\n }\n }\n return out;\n}","import type { Bar } from '@coderyo/data';\nimport { sma } from './ma.js';\n\nexport interface BollResult {\n upper: (number | null)[];\n middle: (number | null)[];\n lower: (number | null)[];\n}\n\n/** Bollinger Bands on close. */\nexport function boll(bars: Bar[], period = 20, mult = 2): BollResult {\n const middle = sma(bars, period);\n const upper: (number | null)[] = [];\n const lower: (number | null)[] = [];\n for (let i = 0; i < bars.length; i++) {\n const m = middle[i];\n if (m == null || i < period - 1) {\n upper.push(null);\n lower.push(null);\n continue;\n }\n let sumSq = 0;\n for (let j = 0; j < period; j++) {\n const c = bars[i - j]!.c;\n const d = c - m;\n sumSq += d * d;\n }\n const std = Math.sqrt(sumSq / period);\n upper.push(m + mult * std);\n lower.push(m - mult * std);\n }\n return { upper, middle, lower };\n}","import type { Bar } from '@coderyo/data';\nimport { ema } from './ma.js';\n\nexport interface MacdResult {\n macd: (number | null)[];\n signal: (number | null)[];\n histogram: (number | null)[];\n}\n\nexport function macd(\n bars: Bar[],\n fast = 12,\n slow = 26,\n signalPeriod = 9,\n): MacdResult {\n const fastEma = ema(bars, fast);\n const slowEma = ema(bars, slow);\n const line: (number | null)[] = bars.map((_, i) => {\n const f = fastEma[i];\n const s = slowEma[i];\n if (f == null || s == null) return null;\n return f - s;\n });\n const pseudoBars = bars.map((b, i) => ({\n ...b,\n c: line[i] ?? b.c,\n }));\n const signal = ema(pseudoBars, signalPeriod);\n const histogram = line.map((m, i) =>\n m == null || signal[i] == null ? null : m - signal[i]!,\n );\n return { macd: line, signal, histogram };\n}","import type { Bar } from '@coderyo/data';\n\nexport function rsi(bars: Bar[], period = 14): (number | null)[] {\n const out: (number | null)[] = [];\n let avgGain = 0;\n let avgLoss = 0;\n\n for (let i = 0; i < bars.length; i++) {\n if (i === 0) {\n out.push(null);\n continue;\n }\n const change = bars[i]!.c - bars[i - 1]!.c;\n const gain = Math.max(change, 0);\n const loss = Math.max(-change, 0);\n\n if (i < period) {\n avgGain += gain;\n avgLoss += loss;\n out.push(null);\n continue;\n }\n if (i === period) {\n avgGain /= period;\n avgLoss /= period;\n } else {\n avgGain = (avgGain * (period - 1) + gain) / period;\n avgLoss = (avgLoss * (period - 1) + loss) / period;\n }\n const rs = avgLoss === 0 ? 100 : avgGain / avgLoss;\n out.push(100 - 100 / (1 + rs));\n }\n return out;\n}","import type { Bar } from '@coderyo/data';\n\nexport interface KdjResult {\n k: (number | null)[];\n d: (number | null)[];\n j: (number | null)[];\n}\n\nexport function kdj(bars: Bar[], period = 9, kSmooth = 3, dSmooth = 3): KdjResult {\n const rsv: (number | null)[] = [];\n const k: (number | null)[] = [];\n const d: (number | null)[] = [];\n const j: (number | null)[] = [];\n\n for (let i = 0; i < bars.length; i++) {\n if (i < period - 1) {\n rsv.push(null);\n k.push(null);\n d.push(null);\n j.push(null);\n continue;\n }\n let hh = -Infinity;\n let ll = Infinity;\n for (let x = i - period + 1; x <= i; x++) {\n hh = Math.max(hh, bars[x]!.h);\n ll = Math.min(ll, bars[x]!.l);\n }\n const r = hh === ll ? 50 : ((bars[i]!.c - ll) / (hh - ll)) * 100;\n rsv.push(r);\n const prevK = k[i - 1] ?? 50;\n const prevD = d[i - 1] ?? 50;\n const kv = (prevK * (kSmooth - 1) + r) / kSmooth;\n const dv = (prevD * (dSmooth - 1) + kv) / dSmooth;\n k.push(kv);\n d.push(dv);\n j.push(3 * kv - 2 * dv);\n }\n return { k, d, j };\n}","export type IndicatorSource = 'close' | 'hlc3';\n\nexport interface IndicatorConfig {\n source: IndicatorSource;\n maPeriod: number;\n showEma: boolean;\n emaPeriod: number;\n showBoll: boolean;\n bollPeriod: number;\n bollMult: number;\n volMaPeriod: number;\n macdFast: number;\n macdSlow: number;\n macdSignal: number;\n rsiPeriod: number;\n kdjPeriod: number;\n kdjKSmooth: number;\n kdjDSmooth: number;\n showMacd: boolean;\n showRsi: boolean;\n showKdj: boolean;\n showMa: boolean;\n showVolMa: boolean;\n}\n\nexport const DEFAULT_INDICATOR_CONFIG: IndicatorConfig = {\n source: 'close',\n maPeriod: 20,\n showEma: false,\n emaPeriod: 12,\n showBoll: false,\n bollPeriod: 20,\n bollMult: 2,\n volMaPeriod: 5,\n macdFast: 12,\n macdSlow: 26,\n macdSignal: 9,\n rsiPeriod: 14,\n kdjPeriod: 9,\n kdjKSmooth: 3,\n kdjDSmooth: 3,\n showMacd: true,\n showRsi: true,\n showKdj: true,\n showMa: true,\n showVolMa: true,\n};\n\nexport function hasVisibleIndicatorPanes(config: IndicatorConfig): boolean {\n return config.showMacd || config.showRsi || config.showKdj;\n}\n\nexport function hasMainChartOverlays(config: IndicatorConfig): boolean {\n return config.showMa || config.showVolMa || config.showEma || config.showBoll;\n}\n\n/** Any built-in indicator pane or main-chart overlay enabled. */\nexport function hasAnyActiveIndicators(config: IndicatorConfig): boolean {\n return hasVisibleIndicatorPanes(config) || hasMainChartOverlays(config);\n}\n\n/** Hide all indicator panes and main-chart overlays (MA / EMA / BOLL / vol MA). */\nexport function clearedIndicatorConfig(base: IndicatorConfig = DEFAULT_INDICATOR_CONFIG): IndicatorConfig {\n return {\n ...base,\n showMacd: false,\n showRsi: false,\n showKdj: false,\n showEma: false,\n showBoll: false,\n showMa: false,\n showVolMa: false,\n };\n}\n\nexport function indicatorConfigStorageKey(symbol: string, interval: string): string {\n return `tradview:indicators:${symbol}:${interval}`;\n}"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coderyo/indicators",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -10,7 +10,7 @@
10
10
  }
11
11
  },
12
12
  "dependencies": {
13
- "@coderyo/data": "1.0.2"
13
+ "@coderyo/data": "1.0.3"
14
14
  },
15
15
  "devDependencies": {
16
16
  "tsup": "^8.5.0",