tradelab 0.1.0 → 0.1.1

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
@@ -200,29 +200,6 @@ node examples/emaCross.js
200
200
  node examples/yahooEmaCross.js SPY 1d 1y
201
201
  ```
202
202
 
203
- ## Local Scripts
204
-
205
- ```bash
206
- npm run prefetch -- --symbol SPY --interval 1d --period 1y
207
- npm run import-csv -- ./data/sample.csv --symbol BTC-USD --interval 5m
208
- npm test
209
- ```
210
-
211
- ## Publishing
212
-
213
- Validate the package contents before publishing:
214
-
215
- ```bash
216
- npm test
217
- npm pack --dry-run
218
- ```
219
-
220
- Publish when the dry run looks correct:
221
-
222
- ```bash
223
- npm publish
224
- ```
225
-
226
203
  ## Notes
227
204
 
228
205
  - Yahoo downloads can be cached under `output/data` by default.
package/package.json CHANGED
@@ -1,10 +1,18 @@
1
1
  {
2
2
  "name": "tradelab",
3
- "version": "0.1.0",
4
- "description": "Reusable trading and backtesting engine for candle-based strategies",
3
+ "version": "0.1.1",
4
+ "description": "Feature-rich trading and backtesting engine for algorithmic trading strategies.",
5
5
  "type": "module",
6
6
  "main": "./src/index.js",
7
7
  "license": "MIT",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/ishsharm0/tradelab.git"
11
+ },
12
+ "homepage": "https://github.com/ishsharm0/tradelab#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/ishsharm0/tradelab/issues"
15
+ },
8
16
  "engines": {
9
17
  "node": ">=18"
10
18
  },
@@ -18,16 +26,11 @@
18
26
  "src",
19
27
  "templates",
20
28
  "examples/*.js",
21
- "scripts",
22
29
  "README.md",
23
30
  "LICENSE"
24
31
  ],
25
32
  "scripts": {
26
- "test": "node --test",
27
- "prefetch": "node scripts/prefetch.js",
28
- "import-csv": "node scripts/import-csv.js",
29
- "example:ema": "node examples/emaCross.js",
30
- "example:yahoo": "node examples/yahooEmaCross.js"
33
+ "test": "node --test"
31
34
  },
32
35
  "keywords": [
33
36
  "trading",
@@ -1,69 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import {
4
- candleStats,
5
- loadCandlesFromCSV,
6
- saveCandlesToCache,
7
- } from "../src/index.js";
8
-
9
- function parseArgs(argv) {
10
- const args = {};
11
- for (let index = 0; index < argv.length; index += 1) {
12
- const token = argv[index];
13
- if (!token.startsWith("--")) {
14
- if (!args.file) args.file = token;
15
- continue;
16
- }
17
-
18
- const key = token.slice(2);
19
- const next = argv[index + 1];
20
- if (next && !next.startsWith("--")) {
21
- args[key] = next;
22
- index += 1;
23
- } else {
24
- args[key] = "true";
25
- }
26
- }
27
- return args;
28
- }
29
-
30
- const args = parseArgs(process.argv.slice(2));
31
-
32
- if (!args.file || !args.symbol) {
33
- console.log(
34
- "Usage: node scripts/import-csv.js <file.csv> --symbol BTC-USD [--interval 5m] [--period 90d]"
35
- );
36
- process.exit(1);
37
- }
38
-
39
- try {
40
- const candles = loadCandlesFromCSV(args.file, {
41
- delimiter: args.delimiter || ",",
42
- timeCol: args.timeCol || "time",
43
- openCol: args.openCol || "open",
44
- highCol: args.highCol || "high",
45
- lowCol: args.lowCol || "low",
46
- closeCol: args.closeCol || "close",
47
- volumeCol: args.volumeCol || "volume",
48
- startDate: args.startDate,
49
- endDate: args.endDate,
50
- });
51
-
52
- const stats = candleStats(candles);
53
- const interval = args.interval || "1d";
54
- const period = args.period || `${Math.max(1, Math.ceil(stats?.durationDays || 1))}d`;
55
- const outputPath = saveCandlesToCache(candles, {
56
- symbol: args.symbol,
57
- interval,
58
- period,
59
- outDir: args.outDir || "output/data",
60
- source: "csv",
61
- });
62
-
63
- console.log(`Loaded ${stats?.count ?? 0} candles`);
64
- console.log(`Range: ${stats?.firstTime ?? "—"} -> ${stats?.lastTime ?? "—"}`);
65
- console.log(`Saved cache: ${outputPath}`);
66
- } catch (error) {
67
- console.error(error.message);
68
- process.exit(1);
69
- }
@@ -1,52 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { getHistoricalCandles, saveCandlesToCache } from "../src/index.js";
4
-
5
- function parseArgs(argv) {
6
- const args = {};
7
- for (let index = 0; index < argv.length; index += 1) {
8
- const token = argv[index];
9
- if (!token.startsWith("--")) continue;
10
-
11
- const key = token.slice(2);
12
- const next = argv[index + 1];
13
- if (next && !next.startsWith("--")) {
14
- args[key] = next;
15
- index += 1;
16
- } else {
17
- args[key] = "true";
18
- }
19
- }
20
- return args;
21
- }
22
-
23
- const args = parseArgs(process.argv.slice(2));
24
- const symbol = args.symbol || "SPY";
25
- const interval = args.interval || "1d";
26
- const period = args.period || "1y";
27
- const outDir = args.outDir || "output/data";
28
-
29
- async function main() {
30
- const candles = await getHistoricalCandles({
31
- source: "yahoo",
32
- symbol,
33
- interval,
34
- period,
35
- cache: false,
36
- });
37
-
38
- const outputPath = saveCandlesToCache(candles, {
39
- symbol,
40
- interval,
41
- period,
42
- outDir,
43
- source: "yahoo",
44
- });
45
-
46
- console.log(`Saved ${candles.length} candles to ${outputPath}`);
47
- }
48
-
49
- main().catch((error) => {
50
- console.error(error.message);
51
- process.exit(1);
52
- });