oakscriptjs 0.1.6 → 0.1.7

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/README.md CHANGED
@@ -1,271 +1,61 @@
1
- # OakScriptJS
1
+ <p align="center">
2
+ <img src="./logo.png" alt="OakScriptJS Logo" width="150">
3
+ </p>
2
4
 
3
- **PineScript v6 compatible technical analysis library for JavaScript/TypeScript**
5
+ <h1 align="center">OakScriptJS</h1>
4
6
 
5
- OakScriptJS provides the computational core of PineScript's API. It focuses on **calculations and data transformations** with a clean Series-based approach.
7
+ OakScriptJS is a TypeScript/JavaScript library that provides PineScript v6 compatible technical analysis functions. Build trading indicators, run backtests, or integrate TA calculations into any JavaScript environment.
6
8
 
7
- ## Core Features
8
-
9
- - **Series Class**: Lazy evaluation with operator chaining
10
- - **BarData**: Versioned wrapper for automatic cache invalidation
11
- - **Core Functions**: Pure array-based calculations (`taCore.*`)
12
- - **TA-Series Wrappers**: Series-based technical analysis functions (`ta.*`)
13
- - **Type Safety**: Full TypeScript support with type definitions
14
-
15
- ## Scope
16
-
17
- **This library includes:**
18
- - Technical Analysis (`ta.*`, `taCore.*`) - All indicators and calculations
19
- - Mathematics (`math.*`) - All mathematical operations
20
- - Arrays (`array.*`) - Array manipulation and operations
21
- - Matrices (`matrix.*`) - Matrix operations
22
- - Strings (`str.*`) - String manipulation
23
- - Time (`time.*`) - Time calculations and conversions
24
- - Color (`color.*`) - Color data structures and manipulation
25
- - Drawing Objects (`line.*`, `box.*`, `label.*`, `linefill.*`) - Computational features only
26
- - Series Class - Lazy evaluation with operator chaining
27
-
28
- **This library does NOT include:**
29
- - UI/Input functions (`input.*`) - Application responsibility
30
- - Strategy execution (`strategy.*`) - Strategy engine responsibility
31
- - Data fetching (`request.*`) - Data provider responsibility
32
- - Alert systems (`alert.*`, `alertcondition.*`) - Application responsibility
9
+ ## Quick Start
33
10
 
34
- ## Installation
11
+ ### Install
35
12
 
36
13
  ```bash
37
14
  npm install oakscriptjs
38
15
  ```
39
16
 
40
- ## Quick Start
41
-
42
- ### Array-based Calculations
43
-
44
- ```typescript
45
- import { taCore } from 'oakscriptjs';
46
-
47
- const prices = [100, 102, 101, 103, 105];
48
- const sma = taCore.sma(prices, 3);
49
- const rsi = taCore.rsi(prices, 14);
50
- ```
51
-
52
- ### Series-based Calculations
17
+ ### Calculate an indicator
53
18
 
54
19
  ```typescript
55
20
  import { Series, ta } from 'oakscriptjs';
56
21
 
57
- const bars = [
58
- { time: '2024-01-01', open: 100, high: 105, low: 99, close: 103 },
59
- { time: '2024-01-02', open: 103, high: 107, low: 102, close: 106 }
60
- ];
61
-
62
- const close = new Series(bars, (bar) => bar.close);
63
- const rsi = ta.rsi(close, 14);
22
+ const prices = [44, 44.5, 45, 45.5, 46, 46.5, 47, 47.5, 48, 48.5];
23
+ const close = new Series(prices);
24
+ const sma = ta.sma(close, 5);
64
25
 
65
- console.log(rsi.toArray());
26
+ console.log(sma.toArray());
66
27
  ```
67
28
 
68
- ### BarData for Automatic Cache Invalidation
69
-
70
- ```typescript
71
- import { BarData, Series, ta } from 'oakscriptjs';
72
-
73
- // Create BarData wrapper
74
- const barData = new BarData(bars);
75
- const close = Series.fromBars(barData, 'close');
76
- const sma = ta.sma(close, 20);
77
-
78
- const values1 = sma.toArray(); // Computes and caches
79
-
80
- // Add new bar - version increments
81
- barData.push({ time: '2024-01-03', open: 106, high: 108, low: 105, close: 107 });
82
-
83
- const values2 = sma.toArray(); // Detects change, recomputes
84
- ```
85
-
86
- ### Memory-Efficient Closure Breaking
87
-
88
- ```typescript
89
- import { Series } from 'oakscriptjs';
90
-
91
- // Complex expression creates closure chain
92
- const complex = a.add(b).mul(c).div(d).sub(e);
93
-
94
- // Break closure chain to free memory
95
- const materialized = complex.materialize();
96
- ```
97
-
98
- ## Supported Namespaces
99
-
100
- ### Technical Analysis (`ta` and `taCore`)
101
-
102
- Complete implementation of PineScript's technical analysis functions:
103
-
104
- ```typescript
105
- // Core (array-based)
106
- import { taCore } from 'oakscriptjs';
107
- taCore.sma(prices, 20)
108
- taCore.ema(prices, 20)
109
- taCore.rsi(prices, 14)
110
-
111
- // Series (Series-based)
112
- import { ta } from 'oakscriptjs';
113
- ta.sma(closeSeries, 20)
114
- ta.ema(closeSeries, 20)
115
- ta.rsi(closeSeries, 14)
116
- ```
117
-
118
- - **Moving Averages**: `sma()`, `ema()`, `wma()`, `vwma()`, `swma()`, etc.
119
- - **Oscillators**: `rsi()`, `stoch()`, `cci()`, `macd()`, `mfi()`, etc.
120
- - **Volatility**: `bb()`, `atr()`, `stdev()`, `variance()`, etc.
121
- - **Momentum**: `mom()`, `roc()`, `percentrank()`, etc.
122
- - **Regression**: `linreg()`, `correlation()`, etc.
123
- - **Crossovers**: `crossover()`, `crossunder()`, `cross()`
124
-
125
- ### Math (`math`)
126
-
127
- ```typescript
128
- math.abs(x), math.ceil(x), math.floor(x), math.round(x)
129
- math.min(...values), math.max(...values), math.avg(...values)
130
- math.sqrt(x), math.pow(x, y), math.exp(x), math.log(x)
131
- math.sin(x), math.cos(x), math.tan(x)
132
- ```
133
-
134
- ### Array (`array`)
135
-
136
- ```typescript
137
- array.new_float(size, initial)
138
- array.push(arr, value)
139
- array.get(arr, index)
140
- array.sum(arr), array.avg(arr), array.sort(arr)
141
- ```
142
-
143
- ### Series Class
144
-
145
- ```typescript
146
- class Series {
147
- // Constructor
148
- constructor(data: Bar[] | BarData, extractor: SeriesExtractor)
149
-
150
- // Properties
151
- get bars(): Bar[]
152
- get barData(): BarData
153
-
154
- // Arithmetic
155
- add(other: Series | number): Series
156
- sub(other: Series | number): Series
157
- mul(other: Series | number): Series
158
- div(other: Series | number): Series
159
-
160
- // Comparison
161
- gt(other: Series | number): Series
162
- lt(other: Series | number): Series
163
-
164
- // Logical
165
- and(other: Series | number): Series
166
- or(other: Series | number): Series
167
-
168
- // Access
169
- toArray(): number[]
170
- last(): number
171
- offset(n: number): Series // Like close[1]
172
-
173
- // Memory management
174
- materialize(): Series // Break closure chains
175
- }
176
- ```
177
-
178
- ### BarData Class
179
-
180
- ```typescript
181
- class BarData {
182
- constructor(bars: Bar[])
183
-
184
- get version(): number
185
- get bars(): Bar[]
186
- get length(): number
187
-
188
- push(bar: Bar): void
189
- pop(): Bar | undefined
190
- set(index: number, bar: Bar): void
191
- updateLast(bar: Bar): void
192
- setAll(bars: Bar[]): void
193
- invalidate(): void
194
- }
195
- ```
196
-
197
- ### Drawing Objects
198
-
199
- - **Line (`line`)**: `new()`, `get_price()`, getters/setters
200
- - **Box (`box`)**: `new()`, getters/setters for gap detection
201
- - **Label (`label`)**: `new()`, getters/setters
202
- - **Linefill (`linefill`)**: `new()`, `set_color()`
203
-
204
- ## Examples
205
-
206
- ```typescript
207
- // Example 1: Simple Moving Average
208
- import {Series, ta, type IndicatorResult} from 'oakscriptjs';
209
-
210
- export function smaIndicator(bars: any[]): IndicatorResult {
211
- const close = new Series(bars, (bar) => bar.close);
212
- const sma20 = ta.sma(close, 20);
29
+ ## Documentation
213
30
 
214
- return {
215
- metadata: { title: "SMA 20", overlay: true },
216
- plots: [{
217
- data: sma20.toArray().map((v, i) => ({ time: bars[i].time, value: v })),
218
- options: { color: '#2196F3', linewidth: 2 }
219
- }]
220
- };
221
- }
31
+ - [Guide](./docs/guide.md) — Getting started and core concepts
32
+ - [Function Inventory](./docs/inventory.md) — All available TA functions
222
33
 
223
- // Example 2: RSI
224
- export function rsiIndicator(bars: any[]): IndicatorResult {
225
- const close = new Series(bars, (bar) => bar.close);
226
- const rsi = ta.rsi(close, 14);
34
+ ## Development
227
35
 
228
- return {
229
- metadata: { title: "RSI", overlay: false },
230
- plots: [{
231
- data: rsi.toArray().map((v, i) => ({ time: bars[i].time, value: v })),
232
- options: { color: '#FF5722', linewidth: 2 }
233
- }],
234
- hlines: [
235
- { value: 70, options: { color: '#FF0000' } },
236
- { value: 30, options: { color: '#00FF00' } }
237
- ]
238
- };
239
- }
240
- ```
36
+ ### Prerequisites
241
37
 
242
- ## Development
38
+ - Node.js >= 18.0.0
243
39
 
244
40
  ### Setup
245
41
 
246
42
  ```bash
247
- npm install
43
+ npm install # Install dependencies
44
+ npm run build # Build
45
+ npm test # Run tests
46
+ npm run typecheck # Type check
248
47
  ```
249
48
 
250
- ### Build
49
+ ## Project Structure
251
50
 
252
- ```bash
253
- npm run build
254
51
  ```
255
-
256
- ### Test
257
-
258
- ```bash
259
- npm test
260
- npm run test:watch
261
- npm run test:coverage
52
+ oakscriptJS/
53
+ ├── src/ # Source code
54
+ ├── tests/ # Test suite
55
+ ├── dist/ # Build output
56
+ └── docs/ # Documentation
262
57
  ```
263
58
 
264
- ## Documentation
265
-
266
- - **[Complete Guide](../../docs/guide.md)** - User guide and examples
267
- - **[Function Inventory](../../docs/inventory.md)** - Complete function list with status
268
-
269
- ## Acknowledgments
59
+ ---
270
60
 
271
- This library is inspired by TradingView's PineScript language. It is not affiliated with or endorsed by TradingView.
61
+ Maintained by [DeepEntropy](https://github.com/deepentropy)
package/dist/index.d.ts CHANGED
@@ -22,13 +22,15 @@ export type { PlotOptions, HLineOptions, FillOptions, InputMetadata, PlotMetadat
22
22
  export { sma, ema, rsi, macd, bb, stdev, crossover, crossunder, change, tr, atr, cum, vwap } from './ta-series';
23
23
  export { abs, ceil, floor, round, max, min, avg, sum, sqrt, pow, exp, log, sin, cos, tan } from './math';
24
24
  export { rgb, from_hex as color_from_hex, new_color } from './color';
25
- export { ohlcFromBars, getClose, getHigh, getLow, getOpen } from './utils';
25
+ export { ohlcFromBars, getClose, getHigh, getLow, getOpen, getSourceSeries } from './utils';
26
+ export * from './lib';
27
+ export { isNA as na, nz } from './utils';
26
28
  export { indicator, type IndicatorMetadataConfig, type InputDefinition, type IndicatorContext, type IndicatorInstance, type IndicatorConstructor, } from './indicator';
27
29
  export { input, type InputValue, type IntInputOptions, type FloatInputOptions, type SourceInputOptions, type BoolInputOptions, type StringInputOptions, type SourceType, } from './input';
28
30
  export { plot as plotHelper, createPlot, type Time, type TimeValuePair, type PlotOptions as PlotHelperOptions, type PlotResult, } from './plot';
29
31
  export { setContext, clearContext, getContext, registerCalculate, recalculate, plot, hline, clearPlots, } from './runtime/runtime';
30
32
  export { input_int, input_float, input_bool, input_string, input_source, } from './runtime/inputs';
31
- export type { OakScriptContext, ChartAdapter, InputAdapter, SeriesHandle, SeriesOptions, InputConfig, InputOptions, OhlcvData, } from './runtime/types';
33
+ export type { OakScriptContext, ChartAdapter, InputAdapter, SeriesHandle, SeriesOptions, InputConfig, InputOptions, OhlcvData, PlotConfig, HLineConfig, FillConfig, } from './runtime/types';
32
34
  export { LightweightChartsAdapter } from './runtime/adapters/LightweightChartsAdapter';
33
35
  export { SimpleInputAdapter } from './runtime/adapters/SimpleInputAdapter';
34
36
  export declare const VERSION = "0.3.0";
@@ -51,4 +53,5 @@ export declare const info: {
51
53
  indicator: string[];
52
54
  };
53
55
  };
56
+ export declare function alertcondition(_condition: unknown, _title?: string, _message?: string): void;
54
57
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}