oakscriptjs 0.1.6 → 0.2.0
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 +14 -253
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +387 -47
- package/dist/index.mjs +387 -47
- 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/str/index.d.ts +1 -0
- package/dist/str/index.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,32 @@
|
|
|
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);
|
|
64
|
-
|
|
65
|
-
console.log(rsi.toArray());
|
|
66
|
-
```
|
|
67
|
-
|
|
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`)
|
|
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);
|
|
135
25
|
|
|
136
|
-
|
|
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);
|
|
213
|
-
|
|
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
|
-
}
|
|
222
|
-
|
|
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);
|
|
227
|
-
|
|
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
|
-
```
|
|
241
|
-
|
|
242
|
-
## Development
|
|
243
|
-
|
|
244
|
-
### Setup
|
|
245
|
-
|
|
246
|
-
```bash
|
|
247
|
-
npm install
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### Build
|
|
251
|
-
|
|
252
|
-
```bash
|
|
253
|
-
npm run build
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
### Test
|
|
257
|
-
|
|
258
|
-
```bash
|
|
259
|
-
npm test
|
|
260
|
-
npm run test:watch
|
|
261
|
-
npm run test:coverage
|
|
26
|
+
console.log(sma.toArray());
|
|
262
27
|
```
|
|
263
28
|
|
|
264
29
|
## Documentation
|
|
265
30
|
|
|
266
|
-
-
|
|
267
|
-
-
|
|
268
|
-
|
|
269
|
-
## Acknowledgments
|
|
270
|
-
|
|
271
|
-
This library is inspired by TradingView's PineScript language. It is not affiliated with or endorsed by TradingView.
|
|
31
|
+
- [Guide](./docs/guide.md) — Getting started and core concepts
|
|
32
|
+
- [Function Inventory](./docs/inventory.md) — All available TA functions
|
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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"}
|