thetadatadx 7.3.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 +61 -0
- package/index.js +5 -0
- package/package.json +32 -0
- package/src/types.ts +209 -0
package/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# thetadatadx (Node.js / TypeScript)
|
|
2
|
+
|
|
3
|
+
Node.js SDK for ThetaData market data, powered by the `thetadatadx` Rust crate via napi-rs.
|
|
4
|
+
|
|
5
|
+
Every call goes through compiled Rust -- gRPC, protobuf, zstd, FIT decoding, and TCP streaming all happen at native speed. Node.js is just the interface.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
- Node.js >= 18
|
|
10
|
+
- Rust stable toolchain (for building from source)
|
|
11
|
+
- `protoc` (Protocol Buffers compiler)
|
|
12
|
+
|
|
13
|
+
## Build from source
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
cd sdks/typescript
|
|
17
|
+
npm install
|
|
18
|
+
npm run build # release build -> thetadatadx.node
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```js
|
|
24
|
+
const { ThetaDataDx } = require('thetadatadx');
|
|
25
|
+
|
|
26
|
+
// Connect (requires ThetaData credentials)
|
|
27
|
+
const tdx = await ThetaDataDx.connect('user@example.com', 'password');
|
|
28
|
+
// Or from file: const tdx = await ThetaDataDx.connectFromFile('creds.txt');
|
|
29
|
+
|
|
30
|
+
// Historical: returns columnar object { close: number[], volume: number[], ... }
|
|
31
|
+
const ohlc = tdx.stockHistoryOHLC('AAPL', '20240315', '60000');
|
|
32
|
+
console.log(ohlc.close);
|
|
33
|
+
|
|
34
|
+
// With timeout
|
|
35
|
+
const snap = tdx.stockSnapshotQuote(['AAPL', 'MSFT'], null, null, 5000);
|
|
36
|
+
|
|
37
|
+
// Streaming
|
|
38
|
+
tdx.startStreaming();
|
|
39
|
+
tdx.subscribeQuotes('AAPL');
|
|
40
|
+
const event = tdx.nextEvent(1000); // poll with 1s timeout
|
|
41
|
+
tdx.stopStreaming();
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## TypeScript types
|
|
45
|
+
|
|
46
|
+
Generated interfaces for every tick type live in `src/types.ts`:
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
import type { OhlcTickColumnar, GreeksTickColumnar } from 'thetadatadx/src/types';
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Full type declarations for the `ThetaDataDx` class are in `index.d.ts` (auto-generated by napi-rs on build).
|
|
53
|
+
|
|
54
|
+
## API reference
|
|
55
|
+
|
|
56
|
+
All 61 endpoints from `endpoint_surface.toml` are exposed as camelCase methods on `ThetaDataDx`. See `index.d.ts` after building for the complete method list with JSDoc comments.
|
|
57
|
+
|
|
58
|
+
## Docs
|
|
59
|
+
|
|
60
|
+
- [Main project README](../../README.md)
|
|
61
|
+
- [API reference](../../docs/api-reference.md)
|
package/index.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "thetadatadx",
|
|
3
|
+
"version": "7.3.0",
|
|
4
|
+
"description": "Native ThetaData SDK for Node.js — powered by Rust via napi-rs",
|
|
5
|
+
"license": "GPL-3.0-or-later",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/userFRM/ThetaDataDx"
|
|
9
|
+
},
|
|
10
|
+
"main": "index.js",
|
|
11
|
+
"types": "index.d.ts",
|
|
12
|
+
"napi": {
|
|
13
|
+
"name": "thetadatadx",
|
|
14
|
+
"triples": {}
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "napi build --release",
|
|
18
|
+
"build:debug": "napi build",
|
|
19
|
+
"test": "node --test __tests__/basic.test.mjs"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@napi-rs/cli": "^2.18.0"
|
|
23
|
+
},
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">= 18"
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"index.js",
|
|
29
|
+
"index.d.ts",
|
|
30
|
+
"src/types.ts"
|
|
31
|
+
]
|
|
32
|
+
}
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
// @generated DO NOT EDIT — regenerated by build.rs from tick_schema.toml
|
|
2
|
+
// TypeScript interfaces for columnar tick data returned by the native addon.
|
|
3
|
+
// Each property is an array — one entry per tick row.
|
|
4
|
+
|
|
5
|
+
/** Calendar day. Market open/close schedule. */
|
|
6
|
+
export interface CalendarDayColumnar {
|
|
7
|
+
date: number[];
|
|
8
|
+
is_open: number[];
|
|
9
|
+
open_time: number[];
|
|
10
|
+
close_time: number[];
|
|
11
|
+
status: number[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** End-of-day tick. Full EOD snapshot with OHLC + quote. */
|
|
15
|
+
export interface EodTickColumnar {
|
|
16
|
+
ms_of_day: number[];
|
|
17
|
+
ms_of_day2: number[];
|
|
18
|
+
open: number[];
|
|
19
|
+
high: number[];
|
|
20
|
+
low: number[];
|
|
21
|
+
close: number[];
|
|
22
|
+
volume: number[];
|
|
23
|
+
count: number[];
|
|
24
|
+
bid_size: number[];
|
|
25
|
+
bid_exchange: number[];
|
|
26
|
+
bid: number[];
|
|
27
|
+
bid_condition: number[];
|
|
28
|
+
ask_size: number[];
|
|
29
|
+
ask_exchange: number[];
|
|
30
|
+
ask: number[];
|
|
31
|
+
ask_condition: number[];
|
|
32
|
+
date: number[];
|
|
33
|
+
expiration: number[];
|
|
34
|
+
strike: number[];
|
|
35
|
+
right: string[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Greeks tick. Full set of option greeks. */
|
|
39
|
+
export interface GreeksTickColumnar {
|
|
40
|
+
ms_of_day: number[];
|
|
41
|
+
implied_volatility: number[];
|
|
42
|
+
delta: number[];
|
|
43
|
+
gamma: number[];
|
|
44
|
+
theta: number[];
|
|
45
|
+
vega: number[];
|
|
46
|
+
rho: number[];
|
|
47
|
+
iv_error: number[];
|
|
48
|
+
vanna: number[];
|
|
49
|
+
charm: number[];
|
|
50
|
+
vomma: number[];
|
|
51
|
+
veta: number[];
|
|
52
|
+
speed: number[];
|
|
53
|
+
zomma: number[];
|
|
54
|
+
color: number[];
|
|
55
|
+
ultima: number[];
|
|
56
|
+
d1: number[];
|
|
57
|
+
d2: number[];
|
|
58
|
+
dual_delta: number[];
|
|
59
|
+
dual_gamma: number[];
|
|
60
|
+
epsilon: number[];
|
|
61
|
+
lambda: number[];
|
|
62
|
+
vera: number[];
|
|
63
|
+
date: number[];
|
|
64
|
+
expiration: number[];
|
|
65
|
+
strike: number[];
|
|
66
|
+
right: string[];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Interest rate tick. End-of-day interest rate. */
|
|
70
|
+
export interface InterestRateTickColumnar {
|
|
71
|
+
ms_of_day: number[];
|
|
72
|
+
rate: number[];
|
|
73
|
+
date: number[];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Implied volatility tick. */
|
|
77
|
+
export interface IvTickColumnar {
|
|
78
|
+
ms_of_day: number[];
|
|
79
|
+
implied_volatility: number[];
|
|
80
|
+
iv_error: number[];
|
|
81
|
+
date: number[];
|
|
82
|
+
expiration: number[];
|
|
83
|
+
strike: number[];
|
|
84
|
+
right: string[];
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Market value tick -- quoted bid/ask/price for a symbol. */
|
|
88
|
+
export interface MarketValueTickColumnar {
|
|
89
|
+
ms_of_day: number[];
|
|
90
|
+
market_bid: number[];
|
|
91
|
+
market_ask: number[];
|
|
92
|
+
market_price: number[];
|
|
93
|
+
date: number[];
|
|
94
|
+
expiration: number[];
|
|
95
|
+
strike: number[];
|
|
96
|
+
right: string[];
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** OHLC tick. Aggregated bar data. */
|
|
100
|
+
export interface OhlcTickColumnar {
|
|
101
|
+
ms_of_day: number[];
|
|
102
|
+
open: number[];
|
|
103
|
+
high: number[];
|
|
104
|
+
low: number[];
|
|
105
|
+
close: number[];
|
|
106
|
+
volume: number[];
|
|
107
|
+
count: number[];
|
|
108
|
+
date: number[];
|
|
109
|
+
expiration: number[];
|
|
110
|
+
strike: number[];
|
|
111
|
+
right: string[];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Open interest tick. */
|
|
115
|
+
export interface OpenInterestTickColumnar {
|
|
116
|
+
ms_of_day: number[];
|
|
117
|
+
open_interest: number[];
|
|
118
|
+
date: number[];
|
|
119
|
+
expiration: number[];
|
|
120
|
+
strike: number[];
|
|
121
|
+
right: string[];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Option contract. Contract specification. */
|
|
125
|
+
export interface OptionContractColumnar {
|
|
126
|
+
root: string[];
|
|
127
|
+
expiration: number[];
|
|
128
|
+
strike: number[];
|
|
129
|
+
right: number[];
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** Price tick. Generic price data point. */
|
|
133
|
+
export interface PriceTickColumnar {
|
|
134
|
+
ms_of_day: number[];
|
|
135
|
+
price: number[];
|
|
136
|
+
date: number[];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** Quote tick. NBBO quote data. */
|
|
140
|
+
export interface QuoteTickColumnar {
|
|
141
|
+
ms_of_day: number[];
|
|
142
|
+
bid_size: number[];
|
|
143
|
+
bid_exchange: number[];
|
|
144
|
+
bid: number[];
|
|
145
|
+
bid_condition: number[];
|
|
146
|
+
ask_size: number[];
|
|
147
|
+
ask_exchange: number[];
|
|
148
|
+
ask: number[];
|
|
149
|
+
ask_condition: number[];
|
|
150
|
+
date: number[];
|
|
151
|
+
midpoint: number[];
|
|
152
|
+
expiration: number[];
|
|
153
|
+
strike: number[];
|
|
154
|
+
right: string[];
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/** Combined trade + quote tick. */
|
|
158
|
+
export interface TradeQuoteTickColumnar {
|
|
159
|
+
ms_of_day: number[];
|
|
160
|
+
sequence: number[];
|
|
161
|
+
ext_condition1: number[];
|
|
162
|
+
ext_condition2: number[];
|
|
163
|
+
ext_condition3: number[];
|
|
164
|
+
ext_condition4: number[];
|
|
165
|
+
condition: number[];
|
|
166
|
+
size: number[];
|
|
167
|
+
exchange: number[];
|
|
168
|
+
price: number[];
|
|
169
|
+
condition_flags: number[];
|
|
170
|
+
price_flags: number[];
|
|
171
|
+
volume_type: number[];
|
|
172
|
+
records_back: number[];
|
|
173
|
+
quote_ms_of_day: number[];
|
|
174
|
+
bid_size: number[];
|
|
175
|
+
bid_exchange: number[];
|
|
176
|
+
bid: number[];
|
|
177
|
+
bid_condition: number[];
|
|
178
|
+
ask_size: number[];
|
|
179
|
+
ask_exchange: number[];
|
|
180
|
+
ask: number[];
|
|
181
|
+
ask_condition: number[];
|
|
182
|
+
date: number[];
|
|
183
|
+
expiration: number[];
|
|
184
|
+
strike: number[];
|
|
185
|
+
right: string[];
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** Trade tick. Core unit of trade data. */
|
|
189
|
+
export interface TradeTickColumnar {
|
|
190
|
+
ms_of_day: number[];
|
|
191
|
+
sequence: number[];
|
|
192
|
+
ext_condition1: number[];
|
|
193
|
+
ext_condition2: number[];
|
|
194
|
+
ext_condition3: number[];
|
|
195
|
+
ext_condition4: number[];
|
|
196
|
+
condition: number[];
|
|
197
|
+
size: number[];
|
|
198
|
+
exchange: number[];
|
|
199
|
+
price: number[];
|
|
200
|
+
condition_flags: number[];
|
|
201
|
+
price_flags: number[];
|
|
202
|
+
volume_type: number[];
|
|
203
|
+
records_back: number[];
|
|
204
|
+
date: number[];
|
|
205
|
+
expiration: number[];
|
|
206
|
+
strike: number[];
|
|
207
|
+
right: string[];
|
|
208
|
+
}
|
|
209
|
+
|