elemento-alpha-tools 1.3.6 → 1.3.9
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/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/optimization/assetsMetricsCalculator/AssetMetricsCalculator.d.ts +9 -0
- package/dist/optimization/assetsMetricsCalculator/AssetMetricsCalculator.js +65 -0
- package/dist/optimization/assetsMetricsCalculator/AssetMetricsCalculator.js.map +1 -0
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export { RealOrder as RealOrder } from "./sort/real/RealOrder";
|
|
|
28
28
|
export { ReturnGoal as ReturnGoal } from "./optimization/search/portfolio/goals/ReturnGoal";
|
|
29
29
|
export { VolatilityGoal as VolatilityGoal } from "./optimization/search/portfolio/goals/VolatilityGoal";
|
|
30
30
|
export { PortfolioSearch as PortfolioSearch } from "./optimization/search/portfolio/SPEA2PortfolioSearch";
|
|
31
|
+
export { computeAssetMetrics as computeAssetMetrics, AssetMetrics as AssetMetrics } from "./optimization/assetsMetricsCalculator/AssetMetricsCalculator";
|
|
31
32
|
export { applyLoginMocks as applyLoginMocks } from "./crud/test/LoginServiceMocks";
|
|
32
33
|
export { applyPlatformMocks as applyPlatformMocks } from "./crud/test/PlatformMocks";
|
|
33
34
|
export { applyRoleMocks as applyRoleMocks } from "./crud/test/RoleMocks";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.applyTypeMocks = exports.applyStatusMocks = exports.applyRoleMocks = exports.applyPlatformMocks = exports.applyLoginMocks = exports.PortfolioSearch = exports.VolatilityGoal = exports.ReturnGoal = exports.RealOrder = exports.PortfolioXOver = exports.PortfolioMutation = exports.PopulationGenerator = exports.PortfolioIndividualBuilder = exports.PortfolioSpace = exports.UserManager = exports.UserCredentialsManager = exports.TypeManager = exports.StatusManager = exports.SourcesManager = exports.RoleManager = exports.PortfolioBenchmarkManager = exports.PlatformManager = exports.OptimizationManager = exports.MarketDataManager = exports.IntermediaryDataManager = exports.IntermediaryManager = exports.ForecastManager = exports.ComponentManager = exports.BusinessManager = exports.AvailablePlataformManager = exports.ConfigManager = exports.AssetsManager = exports.RoleServicePermissionsChecker = exports.ServiceSessionChecker = exports.ExpressLogableConfig = void 0;
|
|
3
|
+
exports.applyTypeMocks = exports.applyStatusMocks = exports.applyRoleMocks = exports.applyPlatformMocks = exports.applyLoginMocks = exports.computeAssetMetrics = exports.PortfolioSearch = exports.VolatilityGoal = exports.ReturnGoal = exports.RealOrder = exports.PortfolioXOver = exports.PortfolioMutation = exports.PopulationGenerator = exports.PortfolioIndividualBuilder = exports.PortfolioSpace = exports.UserManager = exports.UserCredentialsManager = exports.TypeManager = exports.StatusManager = exports.SourcesManager = exports.RoleManager = exports.PortfolioBenchmarkManager = exports.PlatformManager = exports.OptimizationManager = exports.MarketDataManager = exports.IntermediaryDataManager = exports.IntermediaryManager = exports.ForecastManager = exports.ComponentManager = exports.BusinessManager = exports.AvailablePlataformManager = exports.ConfigManager = exports.AssetsManager = exports.RoleServicePermissionsChecker = exports.ServiceSessionChecker = exports.ExpressLogableConfig = void 0;
|
|
4
4
|
var ExpressLogableConfig_1 = require("./ap\u00ED/ExpressLogableConfig");
|
|
5
5
|
Object.defineProperty(exports, "ExpressLogableConfig", { enumerable: true, get: function () { return ExpressLogableConfig_1.ExpressLogableConfig; } });
|
|
6
6
|
var ServiceSessionChecker_1 = require("./ap\u00ED/checkers/ServiceSessionChecker");
|
|
@@ -61,6 +61,8 @@ var VolatilityGoal_1 = require("./optimization/search/portfolio/goals/Volatility
|
|
|
61
61
|
Object.defineProperty(exports, "VolatilityGoal", { enumerable: true, get: function () { return VolatilityGoal_1.VolatilityGoal; } });
|
|
62
62
|
var SPEA2PortfolioSearch_1 = require("./optimization/search/portfolio/SPEA2PortfolioSearch");
|
|
63
63
|
Object.defineProperty(exports, "PortfolioSearch", { enumerable: true, get: function () { return SPEA2PortfolioSearch_1.PortfolioSearch; } });
|
|
64
|
+
var AssetMetricsCalculator_1 = require("./optimization/assetsMetricsCalculator/AssetMetricsCalculator");
|
|
65
|
+
Object.defineProperty(exports, "computeAssetMetrics", { enumerable: true, get: function () { return AssetMetricsCalculator_1.computeAssetMetrics; } });
|
|
64
66
|
var LoginServiceMocks_1 = require("./crud/test/LoginServiceMocks");
|
|
65
67
|
Object.defineProperty(exports, "applyLoginMocks", { enumerable: true, get: function () { return LoginServiceMocks_1.applyLoginMocks; } });
|
|
66
68
|
var PlatformMocks_1 = require("./crud/test/PlatformMocks");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAA0F;AAAjF,4HAAA,oBAAoB,OAAwB;AACrD,mFAAkM;AAA7F,8HAAA,qBAAqB,OAAyB;AACnJ,qGAA+H;AAAtH,+IAAA,6BAA6B,OAAiC;AACvE,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,8EAAuN;AAAhG,sIAAA,wBAAwB,OAA6B;AAC5K,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,4DAA2P;AAAtE,oHAAA,gBAAgB,OAAoB;AACzN,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,wDAA6K;AAA1E,qHAAA,mBAAmB,OAAuB;AAC7I,0EAAkM;AAA3F,kIAAA,uBAAuB,OAA2B;AACzJ,8DAAoK;AAAzE,sHAAA,iBAAiB,OAAqB;AACjI,kEAAiL;AAA9E,0HAAA,mBAAmB,OAAuB;AAC7I,0DAA4L;AAAnE,kHAAA,eAAe,OAAmB;AAC3J,8EAA4N;AAAjG,sIAAA,yBAAyB,OAA6B;AACjL,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wDAA2I;AAAhE,gHAAA,cAAc,OAAkB;AAC3G,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wEAAuM;AAAxF,gIAAA,sBAAsB,OAA0B;AAC/J,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,iFAAkG;AAAzF,gHAAA,cAAc,OAAkB;AACzC,yGAAsI;AAA7H,wIAAA,0BAA0B,OAA8B;AACjE,qFAA2G;AAAlG,0HAAA,mBAAmB,OAAuB;AACnD,+FAAmH;AAA1G,sHAAA,iBAAiB,OAAqB;AAC/C,yFAA0G;AAAjG,gHAAA,cAAc,OAAkB;AACzC,mDAA+D;AAAtD,sGAAA,SAAS,OAAa;AAC/B,+EAA4F;AAAnF,wGAAA,UAAU,OAAc;AACjC,uFAAwG;AAA/F,gHAAA,cAAc,OAAkB;AACzC,6FAA0G;AAAjG,uHAAA,eAAe,OAAmB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAA0F;AAAjF,4HAAA,oBAAoB,OAAwB;AACrD,mFAAkM;AAA7F,8HAAA,qBAAqB,OAAyB;AACnJ,qGAA+H;AAAtH,+IAAA,6BAA6B,OAAiC;AACvE,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,8EAAuN;AAAhG,sIAAA,wBAAwB,OAA6B;AAC5K,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,4DAA2P;AAAtE,oHAAA,gBAAgB,OAAoB;AACzN,0DAAsJ;AAAnE,kHAAA,eAAe,OAAmB;AACrH,wDAA6K;AAA1E,qHAAA,mBAAmB,OAAuB;AAC7I,0EAAkM;AAA3F,kIAAA,uBAAuB,OAA2B;AACzJ,8DAAoK;AAAzE,sHAAA,iBAAiB,OAAqB;AACjI,kEAAiL;AAA9E,0HAAA,mBAAmB,OAAuB;AAC7I,0DAA4L;AAAnE,kHAAA,eAAe,OAAmB;AAC3J,8EAA4N;AAAjG,sIAAA,yBAAyB,OAA6B;AACjL,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wDAA2I;AAAhE,gHAAA,cAAc,OAAkB;AAC3G,sDAAwI;AAA7D,8GAAA,aAAa,OAAiB;AACzG,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,wEAAuM;AAAxF,gIAAA,sBAAsB,OAA0B;AAC/J,kDAA0H;AAAvD,0GAAA,WAAW,OAAe;AAC7F,iFAAkG;AAAzF,gHAAA,cAAc,OAAkB;AACzC,yGAAsI;AAA7H,wIAAA,0BAA0B,OAA8B;AACjE,qFAA2G;AAAlG,0HAAA,mBAAmB,OAAuB;AACnD,+FAAmH;AAA1G,sHAAA,iBAAiB,OAAqB;AAC/C,yFAA0G;AAAjG,gHAAA,cAAc,OAAkB;AACzC,mDAA+D;AAAtD,sGAAA,SAAS,OAAa;AAC/B,+EAA4F;AAAnF,wGAAA,UAAU,OAAc;AACjC,uFAAwG;AAA/F,gHAAA,cAAc,OAAkB;AACzC,6FAA0G;AAAjG,uHAAA,eAAe,OAAmB;AAC3C,wGAAyJ;AAAhJ,6HAAA,mBAAmB,OAAuB;AAEnD,mEAAmF;AAA1E,oHAAA,eAAe,OAAmB;AAC3C,2DAAqF;AAA5E,mHAAA,kBAAkB,OAAsB;AACjD,mDAAyE;AAAhE,2GAAA,cAAc,OAAkB;AACzC,uDAA+E;AAAtE,+GAAA,gBAAgB,OAAoB;AAC7C,mDAAyE;AAAhE,2GAAA,cAAc,OAAkB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface AssetMetrics {
|
|
2
|
+
return: number;
|
|
3
|
+
volatility: number;
|
|
4
|
+
ratio: number;
|
|
5
|
+
sortino: number;
|
|
6
|
+
maxdrawdown: number;
|
|
7
|
+
downsiderisk: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function computeAssetMetrics(rawPrices: Array<number | null | undefined>): AssetMetrics | null;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeAssetMetrics = computeAssetMetrics;
|
|
4
|
+
const ANNUALIZATION_DAYS = 365;
|
|
5
|
+
function dailyReturns(prices) {
|
|
6
|
+
const returns = [];
|
|
7
|
+
for (let i = 1; i < prices.length; i++)
|
|
8
|
+
returns.push(prices[i] / prices[i - 1] - 1);
|
|
9
|
+
return returns;
|
|
10
|
+
}
|
|
11
|
+
function average(values) {
|
|
12
|
+
return values.reduce((total, value) => total + value, 0) / values.length;
|
|
13
|
+
}
|
|
14
|
+
function annualizedReturn(returns) {
|
|
15
|
+
return Math.pow(1 + average(returns), ANNUALIZATION_DAYS) - 1;
|
|
16
|
+
}
|
|
17
|
+
function annualizedVolatility(returns) {
|
|
18
|
+
const mean = average(returns);
|
|
19
|
+
const variance = average(returns.map(r => Math.pow((r - mean), 2)));
|
|
20
|
+
return Math.sqrt(variance * ANNUALIZATION_DAYS);
|
|
21
|
+
}
|
|
22
|
+
function annualizedDownsideRisk(returns) {
|
|
23
|
+
const negatives = returns.filter(r => r < 0);
|
|
24
|
+
if (negatives.length === 0)
|
|
25
|
+
return 0;
|
|
26
|
+
const mean = average(negatives);
|
|
27
|
+
const variance = average(negatives.map(r => Math.pow((r - mean), 2)));
|
|
28
|
+
return Math.sqrt(variance) * Math.sqrt(ANNUALIZATION_DAYS);
|
|
29
|
+
}
|
|
30
|
+
function maxDrawdown(returns) {
|
|
31
|
+
let value = 100;
|
|
32
|
+
let peak = value;
|
|
33
|
+
let worst = 0;
|
|
34
|
+
for (const r of returns) {
|
|
35
|
+
value *= 1 + r;
|
|
36
|
+
if (value > peak)
|
|
37
|
+
peak = value;
|
|
38
|
+
else {
|
|
39
|
+
const drawdown = Math.abs(value / peak - 1);
|
|
40
|
+
if (drawdown > worst)
|
|
41
|
+
worst = drawdown;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return worst;
|
|
45
|
+
}
|
|
46
|
+
function computeAssetMetrics(rawPrices) {
|
|
47
|
+
const prices = rawPrices.filter((price) => typeof price === 'number' && Number.isFinite(price) && price > 0);
|
|
48
|
+
if (prices.length <= 2)
|
|
49
|
+
return null;
|
|
50
|
+
const returns = dailyReturns(prices);
|
|
51
|
+
const annualReturn = annualizedReturn(returns);
|
|
52
|
+
const volatility = annualizedVolatility(returns);
|
|
53
|
+
const downsiderisk = annualizedDownsideRisk(returns);
|
|
54
|
+
if (![annualReturn, volatility, downsiderisk].every(Number.isFinite))
|
|
55
|
+
return null;
|
|
56
|
+
return {
|
|
57
|
+
return: annualReturn,
|
|
58
|
+
volatility,
|
|
59
|
+
ratio: volatility > 0 ? annualReturn / volatility : 0,
|
|
60
|
+
sortino: downsiderisk > 0 ? annualReturn / downsiderisk : 0,
|
|
61
|
+
maxdrawdown: maxDrawdown(returns),
|
|
62
|
+
downsiderisk
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=AssetMetricsCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AssetMetricsCalculator.js","sourceRoot":"","sources":["../../../src/optimization/assetsMetricsCalculator/AssetMetricsCalculator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "elemento-alpha-tools",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.9",
|
|
4
4
|
"description": "Librería para los servicios de elemento alpha",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -34,17 +34,17 @@
|
|
|
34
34
|
"@types/express": "^5.0.6",
|
|
35
35
|
"@types/jest": "^30.0.0",
|
|
36
36
|
"@types/morgan": "^1.9.9",
|
|
37
|
-
"@types/node": "^
|
|
37
|
+
"@types/node": "^26.1.2",
|
|
38
38
|
"jest": "^30.4.2",
|
|
39
39
|
"rimraf": "^6.1.3",
|
|
40
|
-
"ts-jest": "^29.4.
|
|
40
|
+
"ts-jest": "^29.4.12",
|
|
41
41
|
"typescript": "^6.0.3"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"axios": "^1.18.
|
|
44
|
+
"axios": "^1.18.1",
|
|
45
45
|
"crypto-js": "^4.2.0",
|
|
46
46
|
"dotenv": "^17.4.2",
|
|
47
|
-
"itrm-tools": "^1.3.
|
|
47
|
+
"itrm-tools": "^1.3.49",
|
|
48
48
|
"morgan": "^1.11.0"
|
|
49
49
|
},
|
|
50
50
|
"optionalDependencies": {
|