@livefolio/sdk 0.2.13 → 0.3.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 +277 -84
- package/dist/index.d.ts +397 -23
- package/dist/index.js +1440 -51
- package/dist/index.js.map +1 -1
- package/package.json +36 -35
- package/dist/auth/client.d.ts +0 -4
- package/dist/auth/client.d.ts.map +0 -1
- package/dist/auth/client.js +0 -37
- package/dist/auth/client.js.map +0 -1
- package/dist/auth/index.d.ts +0 -3
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -6
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/types.d.ts +0 -9
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -3
- package/dist/auth/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/market/client.d.ts +0 -4
- package/dist/market/client.d.ts.map +0 -1
- package/dist/market/client.js +0 -137
- package/dist/market/client.js.map +0 -1
- package/dist/market/index.d.ts +0 -5
- package/dist/market/index.d.ts.map +0 -1
- package/dist/market/index.js +0 -9
- package/dist/market/index.js.map +0 -1
- package/dist/market/trackedTickers.d.ts +0 -4
- package/dist/market/trackedTickers.d.ts.map +0 -1
- package/dist/market/trackedTickers.js +0 -256
- package/dist/market/trackedTickers.js.map +0 -1
- package/dist/market/types.d.ts +0 -29
- package/dist/market/types.d.ts.map +0 -1
- package/dist/market/types.js +0 -3
- package/dist/market/types.js.map +0 -1
- package/dist/portfolio/client.d.ts +0 -4
- package/dist/portfolio/client.d.ts.map +0 -1
- package/dist/portfolio/client.js +0 -13
- package/dist/portfolio/client.js.map +0 -1
- package/dist/portfolio/index.d.ts +0 -5
- package/dist/portfolio/index.d.ts.map +0 -1
- package/dist/portfolio/index.js +0 -26
- package/dist/portfolio/index.js.map +0 -1
- package/dist/portfolio/rebalance.d.ts +0 -62
- package/dist/portfolio/rebalance.d.ts.map +0 -1
- package/dist/portfolio/rebalance.js +0 -205
- package/dist/portfolio/rebalance.js.map +0 -1
- package/dist/portfolio/symbols.d.ts +0 -13
- package/dist/portfolio/symbols.d.ts.map +0 -1
- package/dist/portfolio/symbols.js +0 -112
- package/dist/portfolio/symbols.js.map +0 -1
- package/dist/portfolio/types.d.ts +0 -13
- package/dist/portfolio/types.d.ts.map +0 -1
- package/dist/portfolio/types.js +0 -3
- package/dist/portfolio/types.js.map +0 -1
- package/dist/strategy/backtest.d.ts +0 -6
- package/dist/strategy/backtest.d.ts.map +0 -1
- package/dist/strategy/backtest.js +0 -698
- package/dist/strategy/backtest.js.map +0 -1
- package/dist/strategy/cache.d.ts +0 -8
- package/dist/strategy/cache.d.ts.map +0 -1
- package/dist/strategy/cache.js +0 -336
- package/dist/strategy/cache.js.map +0 -1
- package/dist/strategy/client.d.ts +0 -4
- package/dist/strategy/client.d.ts.map +0 -1
- package/dist/strategy/client.js +0 -29
- package/dist/strategy/client.js.map +0 -1
- package/dist/strategy/evaluate.d.ts +0 -12
- package/dist/strategy/evaluate.d.ts.map +0 -1
- package/dist/strategy/evaluate.js +0 -562
- package/dist/strategy/evaluate.js.map +0 -1
- package/dist/strategy/get.d.ts +0 -5
- package/dist/strategy/get.d.ts.map +0 -1
- package/dist/strategy/get.js +0 -25
- package/dist/strategy/get.js.map +0 -1
- package/dist/strategy/index.d.ts +0 -14
- package/dist/strategy/index.d.ts.map +0 -1
- package/dist/strategy/index.js +0 -44
- package/dist/strategy/index.js.map +0 -1
- package/dist/strategy/livefolio.d.ts +0 -25
- package/dist/strategy/livefolio.d.ts.map +0 -1
- package/dist/strategy/livefolio.js +0 -67
- package/dist/strategy/livefolio.js.map +0 -1
- package/dist/strategy/performance.d.ts +0 -17
- package/dist/strategy/performance.d.ts.map +0 -1
- package/dist/strategy/performance.js +0 -57
- package/dist/strategy/performance.js.map +0 -1
- package/dist/strategy/rules.d.ts +0 -3
- package/dist/strategy/rules.d.ts.map +0 -1
- package/dist/strategy/rules.js +0 -95
- package/dist/strategy/rules.js.map +0 -1
- package/dist/strategy/stream.d.ts +0 -5
- package/dist/strategy/stream.d.ts.map +0 -1
- package/dist/strategy/stream.js +0 -58
- package/dist/strategy/stream.js.map +0 -1
- package/dist/strategy/symbols.d.ts +0 -4
- package/dist/strategy/symbols.d.ts.map +0 -1
- package/dist/strategy/symbols.js +0 -41
- package/dist/strategy/symbols.js.map +0 -1
- package/dist/strategy/time.d.ts +0 -10
- package/dist/strategy/time.d.ts.map +0 -1
- package/dist/strategy/time.js +0 -33
- package/dist/strategy/time.js.map +0 -1
- package/dist/strategy/types.d.ts +0 -200
- package/dist/strategy/types.d.ts.map +0 -1
- package/dist/strategy/types.js +0 -3
- package/dist/strategy/types.js.map +0 -1
- package/dist/types.d.ts +0 -4
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
package/dist/strategy/index.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export type { StrategyModule, Strategy, AllocationEvaluation, Signal, Allocation, Indicator, Ticker, Holding, Trading, Condition, SignalExpr, NotExpr, UnaryExpr, AndExpr, OrExpr, Comparison, IndicatorType, Frequency, Unit, EvaluationOptions, IndicatorEvaluation, StrategyEvaluation, StreamObservation, StrategyDraft, StrategyAllocationDraft, SignalNameExpr, NotSignalNameExpr, SignalNameUnaryExpr, SignalNameAndExpr, SignalNameOrExpr, SignalNameCondition, BacktestOptions, BacktestDebugOptions, BacktestRebalanceConfig, BacktestResult, BacktestTrade, BacktestTimeseries, BacktestSummary, BacktestAnnualTax, } from './types';
|
|
2
|
-
export { createStrategy } from './client';
|
|
3
|
-
export { get, getMany } from './get';
|
|
4
|
-
export { evaluateCached, fetchIndicatorKeyMap } from './cache';
|
|
5
|
-
export { stream } from './stream';
|
|
6
|
-
export { backtest, backtestWithMarketData, backtestRulesWithMarketData } from './backtest';
|
|
7
|
-
export { computePerformanceMetrics } from './performance';
|
|
8
|
-
export { compileRules } from './rules';
|
|
9
|
-
export { evaluateIndicator, evaluateSignal, evaluateAllocation, evaluate, getEvaluationDate, indicatorKey, signalKey, filterByTradingDays } from './evaluate';
|
|
10
|
-
export { extractSymbols, INDICATOR_SYMBOL_MAP } from './symbols';
|
|
11
|
-
export { utcToET, isAtMarketClose, toTradingDayKey } from './time';
|
|
12
|
-
export { canonicalizeLivefolioDefinition, hashLivefolioDefinition, deriveLivefolioLinkId, hashLivefolioStrategyDraft, ensureLivefolioStrategy, } from './livefolio';
|
|
13
|
-
export type { LivefolioEnsureAdapter, LivefolioEnsureAdapterInput, LivefolioEnsureAdapterResult, } from './livefolio';
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/strategy/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,QAAQ,EACR,oBAAoB,EACpB,MAAM,EACN,UAAU,EACV,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,EACP,SAAS,EACT,OAAO,EACP,MAAM,EACN,UAAU,EACV,aAAa,EACb,SAAS,EACT,IAAI,EACJ,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9J,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEnE,OAAO,EACL,+BAA+B,EAC/B,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,aAAa,CAAC"}
|
package/dist/strategy/index.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ensureLivefolioStrategy = exports.hashLivefolioStrategyDraft = exports.deriveLivefolioLinkId = exports.hashLivefolioDefinition = exports.canonicalizeLivefolioDefinition = exports.toTradingDayKey = exports.isAtMarketClose = exports.utcToET = exports.INDICATOR_SYMBOL_MAP = exports.extractSymbols = exports.filterByTradingDays = exports.signalKey = exports.indicatorKey = exports.getEvaluationDate = exports.evaluate = exports.evaluateAllocation = exports.evaluateSignal = exports.evaluateIndicator = exports.compileRules = exports.computePerformanceMetrics = exports.backtestRulesWithMarketData = exports.backtestWithMarketData = exports.backtest = exports.stream = exports.fetchIndicatorKeyMap = exports.evaluateCached = exports.getMany = exports.get = exports.createStrategy = void 0;
|
|
4
|
-
var client_1 = require("./client");
|
|
5
|
-
Object.defineProperty(exports, "createStrategy", { enumerable: true, get: function () { return client_1.createStrategy; } });
|
|
6
|
-
var get_1 = require("./get");
|
|
7
|
-
Object.defineProperty(exports, "get", { enumerable: true, get: function () { return get_1.get; } });
|
|
8
|
-
Object.defineProperty(exports, "getMany", { enumerable: true, get: function () { return get_1.getMany; } });
|
|
9
|
-
var cache_1 = require("./cache");
|
|
10
|
-
Object.defineProperty(exports, "evaluateCached", { enumerable: true, get: function () { return cache_1.evaluateCached; } });
|
|
11
|
-
Object.defineProperty(exports, "fetchIndicatorKeyMap", { enumerable: true, get: function () { return cache_1.fetchIndicatorKeyMap; } });
|
|
12
|
-
var stream_1 = require("./stream");
|
|
13
|
-
Object.defineProperty(exports, "stream", { enumerable: true, get: function () { return stream_1.stream; } });
|
|
14
|
-
var backtest_1 = require("./backtest");
|
|
15
|
-
Object.defineProperty(exports, "backtest", { enumerable: true, get: function () { return backtest_1.backtest; } });
|
|
16
|
-
Object.defineProperty(exports, "backtestWithMarketData", { enumerable: true, get: function () { return backtest_1.backtestWithMarketData; } });
|
|
17
|
-
Object.defineProperty(exports, "backtestRulesWithMarketData", { enumerable: true, get: function () { return backtest_1.backtestRulesWithMarketData; } });
|
|
18
|
-
var performance_1 = require("./performance");
|
|
19
|
-
Object.defineProperty(exports, "computePerformanceMetrics", { enumerable: true, get: function () { return performance_1.computePerformanceMetrics; } });
|
|
20
|
-
var rules_1 = require("./rules");
|
|
21
|
-
Object.defineProperty(exports, "compileRules", { enumerable: true, get: function () { return rules_1.compileRules; } });
|
|
22
|
-
var evaluate_1 = require("./evaluate");
|
|
23
|
-
Object.defineProperty(exports, "evaluateIndicator", { enumerable: true, get: function () { return evaluate_1.evaluateIndicator; } });
|
|
24
|
-
Object.defineProperty(exports, "evaluateSignal", { enumerable: true, get: function () { return evaluate_1.evaluateSignal; } });
|
|
25
|
-
Object.defineProperty(exports, "evaluateAllocation", { enumerable: true, get: function () { return evaluate_1.evaluateAllocation; } });
|
|
26
|
-
Object.defineProperty(exports, "evaluate", { enumerable: true, get: function () { return evaluate_1.evaluate; } });
|
|
27
|
-
Object.defineProperty(exports, "getEvaluationDate", { enumerable: true, get: function () { return evaluate_1.getEvaluationDate; } });
|
|
28
|
-
Object.defineProperty(exports, "indicatorKey", { enumerable: true, get: function () { return evaluate_1.indicatorKey; } });
|
|
29
|
-
Object.defineProperty(exports, "signalKey", { enumerable: true, get: function () { return evaluate_1.signalKey; } });
|
|
30
|
-
Object.defineProperty(exports, "filterByTradingDays", { enumerable: true, get: function () { return evaluate_1.filterByTradingDays; } });
|
|
31
|
-
var symbols_1 = require("./symbols");
|
|
32
|
-
Object.defineProperty(exports, "extractSymbols", { enumerable: true, get: function () { return symbols_1.extractSymbols; } });
|
|
33
|
-
Object.defineProperty(exports, "INDICATOR_SYMBOL_MAP", { enumerable: true, get: function () { return symbols_1.INDICATOR_SYMBOL_MAP; } });
|
|
34
|
-
var time_1 = require("./time");
|
|
35
|
-
Object.defineProperty(exports, "utcToET", { enumerable: true, get: function () { return time_1.utcToET; } });
|
|
36
|
-
Object.defineProperty(exports, "isAtMarketClose", { enumerable: true, get: function () { return time_1.isAtMarketClose; } });
|
|
37
|
-
Object.defineProperty(exports, "toTradingDayKey", { enumerable: true, get: function () { return time_1.toTradingDayKey; } });
|
|
38
|
-
var livefolio_1 = require("./livefolio");
|
|
39
|
-
Object.defineProperty(exports, "canonicalizeLivefolioDefinition", { enumerable: true, get: function () { return livefolio_1.canonicalizeLivefolioDefinition; } });
|
|
40
|
-
Object.defineProperty(exports, "hashLivefolioDefinition", { enumerable: true, get: function () { return livefolio_1.hashLivefolioDefinition; } });
|
|
41
|
-
Object.defineProperty(exports, "deriveLivefolioLinkId", { enumerable: true, get: function () { return livefolio_1.deriveLivefolioLinkId; } });
|
|
42
|
-
Object.defineProperty(exports, "hashLivefolioStrategyDraft", { enumerable: true, get: function () { return livefolio_1.hashLivefolioStrategyDraft; } });
|
|
43
|
-
Object.defineProperty(exports, "ensureLivefolioStrategy", { enumerable: true, get: function () { return livefolio_1.ensureLivefolioStrategy; } });
|
|
44
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strategy/index.ts"],"names":[],"mappings":";;;AA0CA,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AACvB,6BAAqC;AAA5B,0FAAA,GAAG,OAAA;AAAE,8FAAA,OAAO,OAAA;AACrB,iCAA+D;AAAtD,uGAAA,cAAc,OAAA;AAAE,6GAAA,oBAAoB,OAAA;AAC7C,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,uCAA2F;AAAlF,oGAAA,QAAQ,OAAA;AAAE,kHAAA,sBAAsB,OAAA;AAAE,uHAAA,2BAA2B,OAAA;AACtE,6CAA0D;AAAjD,wHAAA,yBAAyB,OAAA;AAClC,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,uCAA8J;AAArJ,6GAAA,iBAAiB,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAAE,oGAAA,QAAQ,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,qGAAA,SAAS,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AACzI,qCAAiE;AAAxD,yGAAA,cAAc,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAC7C,+BAAmE;AAA1D,+FAAA,OAAO,OAAA;AAAE,uGAAA,eAAe,OAAA;AAAE,uGAAA,eAAe,OAAA;AAElD,yCAMqB;AALnB,4HAAA,+BAA+B,OAAA;AAC/B,oHAAA,uBAAuB,OAAA;AACvB,kHAAA,qBAAqB,OAAA;AACrB,uHAAA,0BAA0B,OAAA;AAC1B,oHAAA,uBAAuB,OAAA"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { StrategyDraft } from './types';
|
|
2
|
-
export type CanonicalJson = string | number | boolean | null | CanonicalJson[] | {
|
|
3
|
-
[key: string]: CanonicalJson;
|
|
4
|
-
};
|
|
5
|
-
export interface LivefolioEnsureAdapterInput<TDefinition extends CanonicalJson> {
|
|
6
|
-
definition: TDefinition;
|
|
7
|
-
definitionHash: string;
|
|
8
|
-
linkId: string;
|
|
9
|
-
}
|
|
10
|
-
export interface LivefolioEnsureAdapterResult {
|
|
11
|
-
strategyId: number;
|
|
12
|
-
linkId: string;
|
|
13
|
-
created: boolean;
|
|
14
|
-
}
|
|
15
|
-
export interface LivefolioEnsureAdapter<TDefinition extends CanonicalJson> {
|
|
16
|
-
ensureStrategy(input: LivefolioEnsureAdapterInput<TDefinition>): Promise<LivefolioEnsureAdapterResult>;
|
|
17
|
-
}
|
|
18
|
-
export declare function canonicalizeLivefolioDefinition<TDefinition extends CanonicalJson>(definition: TDefinition): CanonicalJson;
|
|
19
|
-
export declare function hashLivefolioDefinition<TDefinition extends CanonicalJson>(definition: TDefinition): string;
|
|
20
|
-
export declare function deriveLivefolioLinkId(definitionHash: string): string;
|
|
21
|
-
export declare function hashLivefolioStrategyDraft(draft: StrategyDraft): string;
|
|
22
|
-
export declare function ensureLivefolioStrategy<TDefinition extends CanonicalJson>(definition: TDefinition, adapter: LivefolioEnsureAdapter<TDefinition>): Promise<LivefolioEnsureAdapterResult & {
|
|
23
|
-
definitionHash: string;
|
|
24
|
-
}>;
|
|
25
|
-
//# sourceMappingURL=livefolio.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"livefolio.d.ts","sourceRoot":"","sources":["../../src/strategy/livefolio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,aAAa,EAAE,GACf;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC;AAErC,MAAM,WAAW,2BAA2B,CAAC,WAAW,SAAS,aAAa;IAC5E,UAAU,EAAE,WAAW,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB,CAAC,WAAW,SAAS,aAAa;IACvE,cAAc,CAAC,KAAK,EAAE,2BAA2B,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;CACxG;AAkCD,wBAAgB,+BAA+B,CAAC,WAAW,SAAS,aAAa,EAC/E,UAAU,EAAE,WAAW,GACtB,aAAa,CAEf;AAED,wBAAgB,uBAAuB,CAAC,WAAW,SAAS,aAAa,EAAE,UAAU,EAAE,WAAW,GAAG,MAAM,CAG1G;AAED,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAEvE;AAED,wBAAsB,uBAAuB,CAAC,WAAW,SAAS,aAAa,EAC7E,UAAU,EAAE,WAAW,EACvB,OAAO,EAAE,sBAAsB,CAAC,WAAW,CAAC,GAC3C,OAAO,CAAC,4BAA4B,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAcpE"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.canonicalizeLivefolioDefinition = canonicalizeLivefolioDefinition;
|
|
4
|
-
exports.hashLivefolioDefinition = hashLivefolioDefinition;
|
|
5
|
-
exports.deriveLivefolioLinkId = deriveLivefolioLinkId;
|
|
6
|
-
exports.hashLivefolioStrategyDraft = hashLivefolioStrategyDraft;
|
|
7
|
-
exports.ensureLivefolioStrategy = ensureLivefolioStrategy;
|
|
8
|
-
const crypto_1 = require("crypto");
|
|
9
|
-
function normalizeCanonical(value) {
|
|
10
|
-
if (value === null)
|
|
11
|
-
return null;
|
|
12
|
-
if (typeof value === 'string' || typeof value === 'boolean') {
|
|
13
|
-
return value;
|
|
14
|
-
}
|
|
15
|
-
if (typeof value === 'number') {
|
|
16
|
-
if (!Number.isFinite(value)) {
|
|
17
|
-
throw new Error('Livefolio definition cannot include non-finite numbers.');
|
|
18
|
-
}
|
|
19
|
-
return Object.is(value, -0) ? 0 : value;
|
|
20
|
-
}
|
|
21
|
-
if (Array.isArray(value)) {
|
|
22
|
-
return value.map((item) => normalizeCanonical(item));
|
|
23
|
-
}
|
|
24
|
-
if (typeof value === 'object') {
|
|
25
|
-
const obj = value;
|
|
26
|
-
const out = {};
|
|
27
|
-
for (const key of Object.keys(obj).sort()) {
|
|
28
|
-
const next = obj[key];
|
|
29
|
-
if (next === undefined)
|
|
30
|
-
continue;
|
|
31
|
-
out[key] = normalizeCanonical(next);
|
|
32
|
-
}
|
|
33
|
-
return out;
|
|
34
|
-
}
|
|
35
|
-
throw new Error(`Unsupported value in livefolio definition: ${String(value)}`);
|
|
36
|
-
}
|
|
37
|
-
function canonicalizeLivefolioDefinition(definition) {
|
|
38
|
-
return normalizeCanonical(definition);
|
|
39
|
-
}
|
|
40
|
-
function hashLivefolioDefinition(definition) {
|
|
41
|
-
const canonical = canonicalizeLivefolioDefinition(definition);
|
|
42
|
-
return (0, crypto_1.createHash)('sha256').update(JSON.stringify(canonical)).digest('hex');
|
|
43
|
-
}
|
|
44
|
-
function deriveLivefolioLinkId(definitionHash) {
|
|
45
|
-
if (!definitionHash || definitionHash.length < 12) {
|
|
46
|
-
throw new Error('definitionHash must be at least 12 characters.');
|
|
47
|
-
}
|
|
48
|
-
return `lf-${definitionHash.slice(0, 12)}`;
|
|
49
|
-
}
|
|
50
|
-
function hashLivefolioStrategyDraft(draft) {
|
|
51
|
-
return hashLivefolioDefinition(draft);
|
|
52
|
-
}
|
|
53
|
-
async function ensureLivefolioStrategy(definition, adapter) {
|
|
54
|
-
const canonical = canonicalizeLivefolioDefinition(definition);
|
|
55
|
-
const definitionHash = hashLivefolioDefinition(canonical);
|
|
56
|
-
const linkId = deriveLivefolioLinkId(definitionHash);
|
|
57
|
-
const result = await adapter.ensureStrategy({
|
|
58
|
-
definition: canonical,
|
|
59
|
-
definitionHash,
|
|
60
|
-
linkId,
|
|
61
|
-
});
|
|
62
|
-
return {
|
|
63
|
-
...result,
|
|
64
|
-
definitionHash,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=livefolio.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"livefolio.js","sourceRoot":"","sources":["../../src/strategy/livefolio.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export interface PerformanceMetricPoint {
|
|
2
|
-
timestampMs: number;
|
|
3
|
-
value: number;
|
|
4
|
-
}
|
|
5
|
-
export interface PerformanceMetrics {
|
|
6
|
-
cagr: number;
|
|
7
|
-
maxDrawdown: number;
|
|
8
|
-
volatility: number;
|
|
9
|
-
sharpe: number;
|
|
10
|
-
periodDays: number;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Compute common backtest metrics from a time series.
|
|
14
|
-
* Returns null when there are not enough valid points to compute.
|
|
15
|
-
*/
|
|
16
|
-
export declare function computePerformanceMetrics(input: PerformanceMetricPoint[]): PerformanceMetrics | null;
|
|
17
|
-
//# sourceMappingURL=performance.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"performance.d.ts","sourceRoot":"","sources":["../../src/strategy/performance.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,sBAAsB,EAAE,GAC9B,kBAAkB,GAAG,IAAI,CAmD3B"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.computePerformanceMetrics = computePerformanceMetrics;
|
|
4
|
-
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
5
|
-
const YEAR_DAYS = 365.25;
|
|
6
|
-
const TRADING_DAYS = 252;
|
|
7
|
-
/**
|
|
8
|
-
* Compute common backtest metrics from a time series.
|
|
9
|
-
* Returns null when there are not enough valid points to compute.
|
|
10
|
-
*/
|
|
11
|
-
function computePerformanceMetrics(input) {
|
|
12
|
-
if (input.length < 2)
|
|
13
|
-
return null;
|
|
14
|
-
const points = input
|
|
15
|
-
.filter((point) => Number.isFinite(point.timestampMs) && Number.isFinite(point.value))
|
|
16
|
-
.sort((a, b) => a.timestampMs - b.timestampMs);
|
|
17
|
-
if (points.length < 2)
|
|
18
|
-
return null;
|
|
19
|
-
const start = points[0].value;
|
|
20
|
-
const end = points[points.length - 1].value;
|
|
21
|
-
if (start <= 0 || end <= 0)
|
|
22
|
-
return null;
|
|
23
|
-
const years = Math.max((points[points.length - 1].timestampMs - points[0].timestampMs) / (DAY_MS * YEAR_DAYS), 1 / YEAR_DAYS);
|
|
24
|
-
const cagr = (Math.pow(end / start, 1 / years) - 1) * 100;
|
|
25
|
-
let peak = points[0].value;
|
|
26
|
-
let maxDrawdown = 0;
|
|
27
|
-
for (const point of points) {
|
|
28
|
-
peak = Math.max(peak, point.value);
|
|
29
|
-
const drawdown = ((point.value - peak) / peak) * 100;
|
|
30
|
-
if (drawdown < maxDrawdown)
|
|
31
|
-
maxDrawdown = drawdown;
|
|
32
|
-
}
|
|
33
|
-
const dailyReturns = [];
|
|
34
|
-
for (let i = 1; i < points.length; i++) {
|
|
35
|
-
const prev = points[i - 1].value;
|
|
36
|
-
const curr = points[i].value;
|
|
37
|
-
if (prev > 0 && curr > 0)
|
|
38
|
-
dailyReturns.push(curr / prev - 1);
|
|
39
|
-
}
|
|
40
|
-
let volatility = 0;
|
|
41
|
-
let sharpe = 0;
|
|
42
|
-
if (dailyReturns.length >= 2) {
|
|
43
|
-
const mean = dailyReturns.reduce((sum, value) => sum + value, 0) / dailyReturns.length;
|
|
44
|
-
const variance = dailyReturns.reduce((sum, value) => sum + (value - mean) ** 2, 0) / (dailyReturns.length - 1);
|
|
45
|
-
const std = Math.sqrt(Math.max(variance, 0));
|
|
46
|
-
volatility = std * Math.sqrt(TRADING_DAYS) * 100;
|
|
47
|
-
sharpe = std > 0 ? (mean / std) * Math.sqrt(TRADING_DAYS) : 0;
|
|
48
|
-
}
|
|
49
|
-
return {
|
|
50
|
-
cagr,
|
|
51
|
-
maxDrawdown,
|
|
52
|
-
volatility,
|
|
53
|
-
sharpe,
|
|
54
|
-
periodDays: Math.max(1, Math.round((points[points.length - 1].timestampMs - points[0].timestampMs) / DAY_MS)),
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=performance.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"performance.js","sourceRoot":"","sources":["../../src/strategy/performance.ts"],"names":[],"mappings":"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"}
|
package/dist/strategy/rules.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/strategy/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,aAAa,EAEb,QAAQ,EACT,MAAM,SAAS,CAAC;AA+CjB,wBAAgB,YAAY,CAAC,aAAa,EAAE,aAAa,GAAG,QAAQ,CAsDnE"}
|
package/dist/strategy/rules.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compileRules = compileRules;
|
|
4
|
-
function validateHoldingsWeights(strategyDraft) {
|
|
5
|
-
for (const allocation of strategyDraft.allocations) {
|
|
6
|
-
if (!allocation.holdings.length) {
|
|
7
|
-
throw new Error(`Allocation "${allocation.name}" must include at least one holding.`);
|
|
8
|
-
}
|
|
9
|
-
for (const holding of allocation.holdings) {
|
|
10
|
-
if (!Number.isFinite(holding.weight)) {
|
|
11
|
-
throw new Error(`Allocation "${allocation.name}" has a non-finite holding weight.`);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
const total = allocation.holdings.reduce((sum, holding) => sum + holding.weight, 0);
|
|
15
|
-
if (!Number.isFinite(total) || Math.abs(total - 100) > 1e-6) {
|
|
16
|
-
throw new Error(`Allocation "${allocation.name}" weights must sum to 100.`);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function compileRuleCondition(condition, signalByName) {
|
|
21
|
-
switch (condition.kind) {
|
|
22
|
-
case 'signal': {
|
|
23
|
-
const signal = signalByName.get(condition.signalName);
|
|
24
|
-
if (!signal)
|
|
25
|
-
throw new Error(`Unknown signal reference: "${condition.signalName}".`);
|
|
26
|
-
return { kind: 'signal', signal };
|
|
27
|
-
}
|
|
28
|
-
case 'not': {
|
|
29
|
-
const signal = signalByName.get(condition.signalName);
|
|
30
|
-
if (!signal)
|
|
31
|
-
throw new Error(`Unknown signal reference: "${condition.signalName}".`);
|
|
32
|
-
return { kind: 'not', signal };
|
|
33
|
-
}
|
|
34
|
-
case 'and':
|
|
35
|
-
return {
|
|
36
|
-
kind: 'and',
|
|
37
|
-
args: condition.args.map((arg) => compileRuleCondition(arg, signalByName)),
|
|
38
|
-
};
|
|
39
|
-
case 'or':
|
|
40
|
-
return {
|
|
41
|
-
kind: 'or',
|
|
42
|
-
args: condition.args.map((arg) => compileRuleCondition(arg, signalByName)),
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
function compileRules(strategyDraft) {
|
|
47
|
-
if (strategyDraft.signals.length === 0) {
|
|
48
|
-
throw new Error('Rule strategy must define at least one signal.');
|
|
49
|
-
}
|
|
50
|
-
if (strategyDraft.allocations.length === 0) {
|
|
51
|
-
throw new Error('Rule strategy must define at least one allocation.');
|
|
52
|
-
}
|
|
53
|
-
const signalByName = new Map();
|
|
54
|
-
for (const signal of strategyDraft.signals) {
|
|
55
|
-
if (!signal.name.trim()) {
|
|
56
|
-
throw new Error('Signal names must be non-empty.');
|
|
57
|
-
}
|
|
58
|
-
if (signalByName.has(signal.name)) {
|
|
59
|
-
throw new Error(`Duplicate signal name: "${signal.name}".`);
|
|
60
|
-
}
|
|
61
|
-
signalByName.set(signal.name, signal.signal);
|
|
62
|
-
}
|
|
63
|
-
const allocationNames = new Set();
|
|
64
|
-
for (const allocation of strategyDraft.allocations) {
|
|
65
|
-
const normalized = allocation.name.trim().toLowerCase();
|
|
66
|
-
if (!normalized) {
|
|
67
|
-
throw new Error('Allocation names must be non-empty.');
|
|
68
|
-
}
|
|
69
|
-
if (allocationNames.has(normalized)) {
|
|
70
|
-
throw new Error(`Duplicate allocation name: "${allocation.name}".`);
|
|
71
|
-
}
|
|
72
|
-
allocationNames.add(normalized);
|
|
73
|
-
}
|
|
74
|
-
validateHoldingsWeights(strategyDraft);
|
|
75
|
-
const signals = {};
|
|
76
|
-
for (const s of strategyDraft.signals) {
|
|
77
|
-
signals[s.name] = { ...s.signal };
|
|
78
|
-
}
|
|
79
|
-
const allocations = {};
|
|
80
|
-
for (const allocation of strategyDraft.allocations) {
|
|
81
|
-
allocations[allocation.name] = {
|
|
82
|
-
condition: compileRuleCondition(allocation.condition, signalByName),
|
|
83
|
-
holdings: allocation.holdings.map((holding) => ({ ...holding })),
|
|
84
|
-
rebalance: allocation.rebalance,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
return {
|
|
88
|
-
linkId: strategyDraft.linkId,
|
|
89
|
-
name: strategyDraft.name,
|
|
90
|
-
trading: strategyDraft.trading,
|
|
91
|
-
signals,
|
|
92
|
-
allocations,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
//# sourceMappingURL=rules.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/strategy/rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { TypedSupabaseClient } from '../types';
|
|
2
|
-
import type { MarketModule } from '../market/types';
|
|
3
|
-
import type { Strategy, StrategyEvaluation, StreamObservation } from './types';
|
|
4
|
-
export declare function stream(client: TypedSupabaseClient, market: MarketModule, strategy: Strategy, observation: StreamObservation | StreamObservation[]): Promise<StrategyEvaluation>;
|
|
5
|
-
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/strategy/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAsB/E,wBAAsB,MAAM,CAC1B,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,GACnD,OAAO,CAAC,kBAAkB,CAAC,CAyC7B"}
|
package/dist/strategy/stream.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.stream = stream;
|
|
4
|
-
const evaluate_1 = require("./evaluate");
|
|
5
|
-
const symbols_1 = require("./symbols");
|
|
6
|
-
const cache_1 = require("./cache");
|
|
7
|
-
function mergeObservations(batchSeries, observations) {
|
|
8
|
-
let merged = { ...batchSeries };
|
|
9
|
-
for (const obs of observations) {
|
|
10
|
-
const series = [...(merged[obs.symbol] ?? [])];
|
|
11
|
-
const obsDate = obs.timestamp.slice(0, 10); // YYYY-MM-DD
|
|
12
|
-
const idx = series.findIndex(o => o.timestamp.slice(0, 10) === obsDate);
|
|
13
|
-
const entry = { timestamp: obs.timestamp, value: obs.value };
|
|
14
|
-
if (idx >= 0)
|
|
15
|
-
series[idx] = entry; // replace incomplete bar
|
|
16
|
-
else
|
|
17
|
-
series.push(entry); // append new day
|
|
18
|
-
merged = { ...merged, [obs.symbol]: series };
|
|
19
|
-
}
|
|
20
|
-
return merged;
|
|
21
|
-
}
|
|
22
|
-
async function stream(client, market, strategy, observation) {
|
|
23
|
-
const observations = Array.isArray(observation) ? observation : [observation];
|
|
24
|
-
if (observations.length === 0) {
|
|
25
|
-
throw new Error('stream() requires at least one observation');
|
|
26
|
-
}
|
|
27
|
-
// 1. Fetch historical series for all symbols
|
|
28
|
-
const symbols = (0, symbols_1.extractSymbols)(strategy);
|
|
29
|
-
const batchSeries = await market.getBatchSeries(symbols);
|
|
30
|
-
// 2. Merge the incoming observations into the series (replace same-date or append)
|
|
31
|
-
const mergedSeries = mergeObservations(batchSeries, observations);
|
|
32
|
-
// 3. Build evaluation options with latest observation timestamp
|
|
33
|
-
const at = new Date(observations[observations.length - 1].timestamp);
|
|
34
|
-
const options = { at, batchSeries: mergedSeries };
|
|
35
|
-
// 4. Fetch prior signal states for hysteresis (read-only, no cache write)
|
|
36
|
-
const stratRow = await client
|
|
37
|
-
.from('strategies')
|
|
38
|
-
.select('id')
|
|
39
|
-
.eq('link_id', strategy.linkId)
|
|
40
|
-
.limit(1)
|
|
41
|
-
.maybeSingle()
|
|
42
|
-
.then(({ data }) => data);
|
|
43
|
-
let prevSignals = {};
|
|
44
|
-
let prevMeta = {};
|
|
45
|
-
if (stratRow) {
|
|
46
|
-
[prevSignals, prevMeta] = await Promise.all([
|
|
47
|
-
(0, cache_1.fetchSignalStates)(client, stratRow.id),
|
|
48
|
-
(0, cache_1.fetchIndicatorMetadata)(client, stratRow.id),
|
|
49
|
-
]);
|
|
50
|
-
}
|
|
51
|
-
// 5. Evaluate (skip cache check and result storage — interim data)
|
|
52
|
-
return (0, evaluate_1.evaluate)(strategy, {
|
|
53
|
-
...options,
|
|
54
|
-
previousSignalStates: prevSignals,
|
|
55
|
-
previousIndicatorMetadata: prevMeta,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=stream.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/strategy/stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/strategy/symbols.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAElE,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAavE,CAAC;AAWF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAe3D"}
|
package/dist/strategy/symbols.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.INDICATOR_SYMBOL_MAP = void 0;
|
|
4
|
-
exports.extractSymbols = extractSymbols;
|
|
5
|
-
exports.INDICATOR_SYMBOL_MAP = {
|
|
6
|
-
VIX: '^VIX',
|
|
7
|
-
VIX3M: '^VIX3M',
|
|
8
|
-
T3M: 'DGS3MO',
|
|
9
|
-
T6M: 'DGS6MO',
|
|
10
|
-
T1Y: 'DGS1',
|
|
11
|
-
T2Y: 'DGS2',
|
|
12
|
-
T3Y: 'DGS3',
|
|
13
|
-
T5Y: 'DGS5',
|
|
14
|
-
T7Y: 'DGS7',
|
|
15
|
-
T10Y: 'DGS10',
|
|
16
|
-
T20Y: 'DGS20',
|
|
17
|
-
T30Y: 'DGS30',
|
|
18
|
-
};
|
|
19
|
-
function addIndicatorSymbol(indicator, symbols) {
|
|
20
|
-
const mappedSymbol = exports.INDICATOR_SYMBOL_MAP[indicator.type];
|
|
21
|
-
if (mappedSymbol) {
|
|
22
|
-
symbols.add(mappedSymbol);
|
|
23
|
-
}
|
|
24
|
-
else if (indicator.type !== 'Threshold') {
|
|
25
|
-
symbols.add(indicator.ticker.symbol);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function extractSymbols(strategy) {
|
|
29
|
-
const symbols = new Set();
|
|
30
|
-
for (const signal of Object.values(strategy.signals)) {
|
|
31
|
-
addIndicatorSymbol(signal.left, symbols);
|
|
32
|
-
addIndicatorSymbol(signal.right, symbols);
|
|
33
|
-
}
|
|
34
|
-
for (const allocation of Object.values(strategy.allocations)) {
|
|
35
|
-
for (const holding of allocation.holdings) {
|
|
36
|
-
symbols.add(holding.ticker.symbol);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return [...symbols];
|
|
40
|
-
}
|
|
41
|
-
//# sourceMappingURL=symbols.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/strategy/symbols.ts"],"names":[],"mappings":";;;AA0BA,wCAeC;AAvCY,QAAA,oBAAoB,GAA2C;IAC1E,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,QAAQ;IACf,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,SAAS,kBAAkB,CAAC,SAAoB,EAAE,OAAoB;IACpE,MAAM,YAAY,GAAG,4BAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,QAAkB;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7D,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC"}
|
package/dist/strategy/time.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export declare function utcToET(date: Date): {
|
|
2
|
-
year: number;
|
|
3
|
-
month: number;
|
|
4
|
-
day: number;
|
|
5
|
-
hour: number;
|
|
6
|
-
minute: number;
|
|
7
|
-
};
|
|
8
|
-
export declare function isAtMarketClose(timestamp: Date): boolean;
|
|
9
|
-
export declare function toTradingDayKey(timestamp: Date): string;
|
|
10
|
-
//# sourceMappingURL=time.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/strategy/time.ts"],"names":[],"mappings":"AAUA,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CASA;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAGxD;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,CAGvD"}
|
package/dist/strategy/time.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.utcToET = utcToET;
|
|
4
|
-
exports.isAtMarketClose = isAtMarketClose;
|
|
5
|
-
exports.toTradingDayKey = toTradingDayKey;
|
|
6
|
-
const ET_FORMATTER = new Intl.DateTimeFormat('en-US', {
|
|
7
|
-
timeZone: 'America/New_York',
|
|
8
|
-
year: 'numeric',
|
|
9
|
-
month: 'numeric',
|
|
10
|
-
day: 'numeric',
|
|
11
|
-
hour: 'numeric',
|
|
12
|
-
minute: 'numeric',
|
|
13
|
-
hourCycle: 'h23',
|
|
14
|
-
});
|
|
15
|
-
function utcToET(date) {
|
|
16
|
-
const parts = ET_FORMATTER.formatToParts(date);
|
|
17
|
-
return {
|
|
18
|
-
year: parseInt(parts.find((p) => p.type === 'year')?.value || '0', 10),
|
|
19
|
-
month: parseInt(parts.find((p) => p.type === 'month')?.value || '0', 10),
|
|
20
|
-
day: parseInt(parts.find((p) => p.type === 'day')?.value || '0', 10),
|
|
21
|
-
hour: parseInt(parts.find((p) => p.type === 'hour')?.value || '0', 10),
|
|
22
|
-
minute: parseInt(parts.find((p) => p.type === 'minute')?.value || '0', 10),
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
function isAtMarketClose(timestamp) {
|
|
26
|
-
const et = utcToET(timestamp);
|
|
27
|
-
return (et.hour === 16 && et.minute === 0) || (et.hour === 13 && et.minute === 0);
|
|
28
|
-
}
|
|
29
|
-
function toTradingDayKey(timestamp) {
|
|
30
|
-
const et = utcToET(timestamp);
|
|
31
|
-
return `${et.year}-${String(et.month).padStart(2, '0')}-${String(et.day).padStart(2, '0')}`;
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=time.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/strategy/time.ts"],"names":[],"mappings":";;AAUA,0BAeC;AAED,0CAGC;AAED,0CAGC;AAnCD,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;IACpD,QAAQ,EAAE,kBAAkB;IAC5B,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,KAAK;CACjB,CAAC,CAAC;AAEH,SAAgB,OAAO,CAAC,IAAU;IAOhC,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC;QACtE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC;QACxE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC;QACpE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC;QACtE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAAC,SAAe;IAC7C,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAgB,eAAe,CAAC,SAAe;IAC7C,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,OAAO,GAAG,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC9F,CAAC"}
|