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 +30 -240
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +357 -40
- package/dist/index.mjs +357 -40
- package/dist/input.d.ts +1 -1
- package/dist/input.d.ts.map +1 -1
- package/dist/lib/index.d.ts +2 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/zigzag/index.d.ts +2 -0
- package/dist/lib/zigzag/index.d.ts.map +1 -0
- package/dist/lib/zigzag/zigzag.d.ts +47 -0
- package/dist/lib/zigzag/zigzag.d.ts.map +1 -0
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/series.d.ts +1 -0
- package/dist/runtime/series.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +26 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/ta/index.d.ts +1 -1
- package/dist/ta/index.d.ts.map +1 -1
- package/dist/ta-series.d.ts +8 -2
- package/dist/ta-series.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/package.json +24 -24
package/README.md
CHANGED
|
@@ -1,271 +1,61 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./logo.png" alt="OakScriptJS Logo" width="150">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<h1 align="center">OakScriptJS</h1>
|
|
4
6
|
|
|
5
|
-
OakScriptJS
|
|
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
|
-
##
|
|
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
|
-
|
|
11
|
+
### Install
|
|
35
12
|
|
|
36
13
|
```bash
|
|
37
14
|
npm install oakscriptjs
|
|
38
15
|
```
|
|
39
16
|
|
|
40
|
-
|
|
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
|
|
58
|
-
|
|
59
|
-
|
|
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(
|
|
26
|
+
console.log(sma.toArray());
|
|
66
27
|
```
|
|
67
28
|
|
|
68
|
-
|
|
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
|
-
|
|
215
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
49
|
+
## Project Structure
|
|
251
50
|
|
|
252
|
-
```bash
|
|
253
|
-
npm run build
|
|
254
51
|
```
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AAGjC,OAAO,KAAK,MAAM,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAG3G,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGxD,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,EAAE,EAAE,CAAC;AAGd,YAAY,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,WAAW,EACX,SAAS,EACV,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAChH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AACzG,OAAO,EAAE,GAAG,EAAE,QAAQ,IAAI,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|