@3rd-eye-labs/openmm 0.0.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/LICENSE +21 -0
- package/README.md +70 -0
- package/dist/cli/cli.d.ts +3 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +43 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/commands/balance.d.ts +3 -0
- package/dist/cli/commands/balance.d.ts.map +1 -0
- package/dist/cli/commands/balance.js +51 -0
- package/dist/cli/commands/balance.js.map +1 -0
- package/dist/cli/commands/orderbook.d.ts +3 -0
- package/dist/cli/commands/orderbook.d.ts.map +1 -0
- package/dist/cli/commands/orderbook.js +83 -0
- package/dist/cli/commands/orderbook.js.map +1 -0
- package/dist/cli/commands/orders.d.ts +3 -0
- package/dist/cli/commands/orders.d.ts.map +1 -0
- package/dist/cli/commands/orders.js +196 -0
- package/dist/cli/commands/orders.js.map +1 -0
- package/dist/cli/commands/pool-discovery.d.ts +3 -0
- package/dist/cli/commands/pool-discovery.d.ts.map +1 -0
- package/dist/cli/commands/pool-discovery.js +60 -0
- package/dist/cli/commands/pool-discovery.js.map +1 -0
- package/dist/cli/commands/ticker.d.ts +3 -0
- package/dist/cli/commands/ticker.d.ts.map +1 -0
- package/dist/cli/commands/ticker.js +51 -0
- package/dist/cli/commands/ticker.js.map +1 -0
- package/dist/cli/commands/trade.d.ts +3 -0
- package/dist/cli/commands/trade.d.ts.map +1 -0
- package/dist/cli/commands/trade.js +110 -0
- package/dist/cli/commands/trade.js.map +1 -0
- package/dist/cli/commands/trades.d.ts +3 -0
- package/dist/cli/commands/trades.d.ts.map +1 -0
- package/dist/cli/commands/trades.js +73 -0
- package/dist/cli/commands/trades.js.map +1 -0
- package/dist/cli/exchange-factory.d.ts +40 -0
- package/dist/cli/exchange-factory.d.ts.map +1 -0
- package/dist/cli/exchange-factory.js +77 -0
- package/dist/cli/exchange-factory.js.map +1 -0
- package/dist/cli/pool-discovery-core.d.ts +54 -0
- package/dist/cli/pool-discovery-core.d.ts.map +1 -0
- package/dist/cli/pool-discovery-core.js +193 -0
- package/dist/cli/pool-discovery-core.js.map +1 -0
- package/dist/cli/utils/error-handler.d.ts +40 -0
- package/dist/cli/utils/error-handler.d.ts.map +1 -0
- package/dist/cli/utils/error-handler.js +117 -0
- package/dist/cli/utils/error-handler.js.map +1 -0
- package/dist/cli/utils/validation.d.ts +45 -0
- package/dist/cli/utils/validation.d.ts.map +1 -0
- package/dist/cli/utils/validation.js +118 -0
- package/dist/cli/utils/validation.js.map +1 -0
- package/dist/config/environment.d.ts +25 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +72 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +21 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/launcher-config.d.ts +17 -0
- package/dist/config/launcher-config.d.ts.map +1 -0
- package/dist/config/launcher-config.js +14 -0
- package/dist/config/launcher-config.js.map +1 -0
- package/dist/config/price-aggregation.d.ts +49 -0
- package/dist/config/price-aggregation.d.ts.map +1 -0
- package/dist/config/price-aggregation.js +89 -0
- package/dist/config/price-aggregation.js.map +1 -0
- package/dist/core/exchange/base-exchange-connector.d.ts +45 -0
- package/dist/core/exchange/base-exchange-connector.d.ts.map +1 -0
- package/dist/core/exchange/base-exchange-connector.js +43 -0
- package/dist/core/exchange/base-exchange-connector.js.map +1 -0
- package/dist/core/exchange/base-exchange-data-mapper.d.ts +58 -0
- package/dist/core/exchange/base-exchange-data-mapper.d.ts.map +1 -0
- package/dist/core/exchange/base-exchange-data-mapper.js +60 -0
- package/dist/core/exchange/base-exchange-data-mapper.js.map +1 -0
- package/dist/core/price-aggregation/cardano-price-service.d.ts +31 -0
- package/dist/core/price-aggregation/cardano-price-service.d.ts.map +1 -0
- package/dist/core/price-aggregation/cardano-price-service.js +157 -0
- package/dist/core/price-aggregation/cardano-price-service.js.map +1 -0
- package/dist/core/price-aggregation/index.d.ts +11 -0
- package/dist/core/price-aggregation/index.d.ts.map +1 -0
- package/dist/core/price-aggregation/index.js +21 -0
- package/dist/core/price-aggregation/index.js.map +1 -0
- package/dist/core/price-aggregation/iris-api-client.d.ts +16 -0
- package/dist/core/price-aggregation/iris-api-client.d.ts.map +1 -0
- package/dist/core/price-aggregation/iris-api-client.js +62 -0
- package/dist/core/price-aggregation/iris-api-client.js.map +1 -0
- package/dist/core/price-aggregation/iris-pool-discovery.d.ts +37 -0
- package/dist/core/price-aggregation/iris-pool-discovery.d.ts.map +1 -0
- package/dist/core/price-aggregation/iris-pool-discovery.js +123 -0
- package/dist/core/price-aggregation/iris-pool-discovery.js.map +1 -0
- package/dist/core/price-aggregation/price-calculator.d.ts +27 -0
- package/dist/core/price-aggregation/price-calculator.d.ts.map +1 -0
- package/dist/core/price-aggregation/price-calculator.js +84 -0
- package/dist/core/price-aggregation/price-calculator.js.map +1 -0
- package/dist/core/risk-management/risk-manager.d.ts +14 -0
- package/dist/core/risk-management/risk-manager.d.ts.map +1 -0
- package/dist/core/risk-management/risk-manager.js +40 -0
- package/dist/core/risk-management/risk-manager.js.map +1 -0
- package/dist/core/strategy/base-strategy.d.ts +26 -0
- package/dist/core/strategy/base-strategy.d.ts.map +1 -0
- package/dist/core/strategy/base-strategy.js +46 -0
- package/dist/core/strategy/base-strategy.js.map +1 -0
- package/dist/core/strategy/strategy-factory.d.ts +7 -0
- package/dist/core/strategy/strategy-factory.d.ts.map +1 -0
- package/dist/core/strategy/strategy-factory.js +64 -0
- package/dist/core/strategy/strategy-factory.js.map +1 -0
- package/dist/exchanges/mexc/mexc-auth.d.ts +42 -0
- package/dist/exchanges/mexc/mexc-auth.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-auth.js +122 -0
- package/dist/exchanges/mexc/mexc-auth.js.map +1 -0
- package/dist/exchanges/mexc/mexc-connector.d.ts +125 -0
- package/dist/exchanges/mexc/mexc-connector.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-connector.js +422 -0
- package/dist/exchanges/mexc/mexc-connector.js.map +1 -0
- package/dist/exchanges/mexc/mexc-data-mapper.d.ts +50 -0
- package/dist/exchanges/mexc/mexc-data-mapper.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-data-mapper.js +127 -0
- package/dist/exchanges/mexc/mexc-data-mapper.js.map +1 -0
- package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts +43 -0
- package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-protobuf-decoder.js +235 -0
- package/dist/exchanges/mexc/mexc-protobuf-decoder.js.map +1 -0
- package/dist/exchanges/mexc/mexc-user-stream.d.ts +81 -0
- package/dist/exchanges/mexc/mexc-user-stream.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-user-stream.js +253 -0
- package/dist/exchanges/mexc/mexc-user-stream.js.map +1 -0
- package/dist/exchanges/mexc/mexc-utils.d.ts +31 -0
- package/dist/exchanges/mexc/mexc-utils.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-utils.js +186 -0
- package/dist/exchanges/mexc/mexc-utils.js.map +1 -0
- package/dist/exchanges/mexc/mexc-websocket.d.ts +124 -0
- package/dist/exchanges/mexc/mexc-websocket.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-websocket.js +496 -0
- package/dist/exchanges/mexc/mexc-websocket.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/strategies/grid/grid-calculator.d.ts +7 -0
- package/dist/strategies/grid/grid-calculator.d.ts.map +1 -0
- package/dist/strategies/grid/grid-calculator.js +34 -0
- package/dist/strategies/grid/grid-calculator.js.map +1 -0
- package/dist/strategies/grid/grid-order-manager.d.ts +23 -0
- package/dist/strategies/grid/grid-order-manager.d.ts.map +1 -0
- package/dist/strategies/grid/grid-order-manager.js +99 -0
- package/dist/strategies/grid/grid-order-manager.js.map +1 -0
- package/dist/strategies/grid/grid-strategy.d.ts +29 -0
- package/dist/strategies/grid/grid-strategy.d.ts.map +1 -0
- package/dist/strategies/grid/grid-strategy.js +185 -0
- package/dist/strategies/grid/grid-strategy.js.map +1 -0
- package/dist/types/account.d.ts +21 -0
- package/dist/types/account.d.ts.map +1 -0
- package/dist/types/account.js +3 -0
- package/dist/types/account.js.map +1 -0
- package/dist/types/exchange.d.ts +67 -0
- package/dist/types/exchange.d.ts.map +1 -0
- package/dist/types/exchange.js +3 -0
- package/dist/types/exchange.js.map +1 -0
- package/dist/types/grid.d.ts +10 -0
- package/dist/types/grid.d.ts.map +1 -0
- package/dist/types/grid.js +3 -0
- package/dist/types/grid.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +27 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/iris.d.ts +58 -0
- package/dist/types/iris.d.ts.map +1 -0
- package/dist/types/iris.js +7 -0
- package/dist/types/iris.js.map +1 -0
- package/dist/types/market.d.ts +16 -0
- package/dist/types/market.d.ts.map +1 -0
- package/dist/types/market.js +3 -0
- package/dist/types/market.js.map +1 -0
- package/dist/types/mexc-raw.d.ts +87 -0
- package/dist/types/mexc-raw.d.ts.map +1 -0
- package/dist/types/mexc-raw.js +7 -0
- package/dist/types/mexc-raw.js.map +1 -0
- package/dist/types/mexc.d.ts +57 -0
- package/dist/types/mexc.d.ts.map +1 -0
- package/dist/types/mexc.js +8 -0
- package/dist/types/mexc.js.map +1 -0
- package/dist/types/price.d.ts +37 -0
- package/dist/types/price.d.ts.map +1 -0
- package/dist/types/price.js +7 -0
- package/dist/types/price.js.map +1 -0
- package/dist/types/risk.d.ts +22 -0
- package/dist/types/risk.d.ts.map +1 -0
- package/dist/types/risk.js +6 -0
- package/dist/types/risk.js.map +1 -0
- package/dist/types/strategy.d.ts +46 -0
- package/dist/types/strategy.d.ts.map +1 -0
- package/dist/types/strategy.js +3 -0
- package/dist/types/strategy.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +29 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +108 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/symbol-utils.d.ts +17 -0
- package/dist/utils/symbol-utils.d.ts.map +1 -0
- package/dist/utils/symbol-utils.js +41 -0
- package/dist/utils/symbol-utils.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cardano-price-service.js","sourceRoot":"","sources":["../../../src/core/price-aggregation/cardano-price-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Price Aggregation Module
|
|
3
|
+
* Exports all components for Cardano native token price aggregation
|
|
4
|
+
*/
|
|
5
|
+
export { CardanoPriceService } from './cardano-price-service';
|
|
6
|
+
export { IrisPoolDiscovery } from './iris-pool-discovery';
|
|
7
|
+
export { IrisApiClient } from './iris-api-client';
|
|
8
|
+
export { getTokenConfig, isTokenSupported, getSupportedTokens, SUPPORTED_TOKENS, IRIS_CONFIG, CEX_API_CONFIG } from '../../config/price-aggregation';
|
|
9
|
+
export type { CardanoTokenConfig } from '../../types/price';
|
|
10
|
+
export type { LiquidityPool, IrisApiResponse, PriceCalculationResult } from '../../types/iris';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/price-aggregation/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACf,MAAM,gCAAgC,CAAC;AAExC,YAAY,EACV,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,aAAa,EACb,eAAe,EACf,sBAAsB,EACvB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Price Aggregation Module
|
|
4
|
+
* Exports all components for Cardano native token price aggregation
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.CEX_API_CONFIG = exports.IRIS_CONFIG = exports.SUPPORTED_TOKENS = exports.getSupportedTokens = exports.isTokenSupported = exports.getTokenConfig = exports.IrisApiClient = exports.IrisPoolDiscovery = exports.CardanoPriceService = void 0;
|
|
8
|
+
var cardano_price_service_1 = require("./cardano-price-service");
|
|
9
|
+
Object.defineProperty(exports, "CardanoPriceService", { enumerable: true, get: function () { return cardano_price_service_1.CardanoPriceService; } });
|
|
10
|
+
var iris_pool_discovery_1 = require("./iris-pool-discovery");
|
|
11
|
+
Object.defineProperty(exports, "IrisPoolDiscovery", { enumerable: true, get: function () { return iris_pool_discovery_1.IrisPoolDiscovery; } });
|
|
12
|
+
var iris_api_client_1 = require("./iris-api-client");
|
|
13
|
+
Object.defineProperty(exports, "IrisApiClient", { enumerable: true, get: function () { return iris_api_client_1.IrisApiClient; } });
|
|
14
|
+
var price_aggregation_1 = require("../../config/price-aggregation");
|
|
15
|
+
Object.defineProperty(exports, "getTokenConfig", { enumerable: true, get: function () { return price_aggregation_1.getTokenConfig; } });
|
|
16
|
+
Object.defineProperty(exports, "isTokenSupported", { enumerable: true, get: function () { return price_aggregation_1.isTokenSupported; } });
|
|
17
|
+
Object.defineProperty(exports, "getSupportedTokens", { enumerable: true, get: function () { return price_aggregation_1.getSupportedTokens; } });
|
|
18
|
+
Object.defineProperty(exports, "SUPPORTED_TOKENS", { enumerable: true, get: function () { return price_aggregation_1.SUPPORTED_TOKENS; } });
|
|
19
|
+
Object.defineProperty(exports, "IRIS_CONFIG", { enumerable: true, get: function () { return price_aggregation_1.IRIS_CONFIG; } });
|
|
20
|
+
Object.defineProperty(exports, "CEX_API_CONFIG", { enumerable: true, get: function () { return price_aggregation_1.CEX_API_CONFIG; } });
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/price-aggregation/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,qDAAkD;AAAzC,gHAAA,aAAa,OAAA;AACtB,oEAOwC;AANtC,mHAAA,cAAc,OAAA;AACd,qHAAA,gBAAgB,OAAA;AAChB,uHAAA,kBAAkB,OAAA;AAClB,qHAAA,gBAAgB,OAAA;AAChB,gHAAA,WAAW,OAAA;AACX,mHAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iris API Client
|
|
3
|
+
* Centralized client for all Iris API interactions
|
|
4
|
+
*/
|
|
5
|
+
export declare class IrisApiClient {
|
|
6
|
+
private readonly baseUrl;
|
|
7
|
+
/**
|
|
8
|
+
* Fetch prices from Iris prices API using pool identifiers
|
|
9
|
+
*/
|
|
10
|
+
fetchPrices(identifiers: string[], userAgent?: string): Promise<number[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Fetch all liquidity pools from Iris API
|
|
13
|
+
*/
|
|
14
|
+
fetchLiquidityPools(userAgent?: string): Promise<any[]>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=iris-api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iris-api-client.d.ts","sourceRoot":"","sources":["../../../src/core/price-aggregation/iris-api-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,MAAqC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiC7G;;OAEG;IACG,mBAAmB,CAAC,SAAS,GAAE,MAAqC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;CAiB5F"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Iris API Client
|
|
4
|
+
* Centralized client for all Iris API interactions
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.IrisApiClient = void 0;
|
|
8
|
+
const price_aggregation_1 = require("../../config/price-aggregation");
|
|
9
|
+
class IrisApiClient {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.baseUrl = price_aggregation_1.IRIS_CONFIG.BASE_URL;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Fetch prices from Iris prices API using pool identifiers
|
|
15
|
+
*/
|
|
16
|
+
async fetchPrices(identifiers, userAgent = 'OpenMM-PriceAggregator/1.0') {
|
|
17
|
+
const url = `${this.baseUrl}/api/liquidity-pools/prices`;
|
|
18
|
+
const response = await fetch(url, {
|
|
19
|
+
method: 'POST',
|
|
20
|
+
headers: {
|
|
21
|
+
'Content-Type': 'application/json',
|
|
22
|
+
'User-Agent': userAgent
|
|
23
|
+
},
|
|
24
|
+
body: JSON.stringify({
|
|
25
|
+
identifiers: identifiers
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
throw new Error(`Iris prices API error: ${response.status} ${response.statusText}`);
|
|
30
|
+
}
|
|
31
|
+
const data = await response.json();
|
|
32
|
+
if (!Array.isArray(data) || data.length === 0) {
|
|
33
|
+
throw new Error('Invalid response format from Iris prices API');
|
|
34
|
+
}
|
|
35
|
+
return data.map(entry => {
|
|
36
|
+
const price = parseFloat(entry.price);
|
|
37
|
+
if (isNaN(price) || price <= 0) {
|
|
38
|
+
throw new Error(`Invalid price value: ${entry.price}`);
|
|
39
|
+
}
|
|
40
|
+
return price;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Fetch all liquidity pools from Iris API
|
|
45
|
+
*/
|
|
46
|
+
async fetchLiquidityPools(userAgent = 'OpenMM-PriceAggregator/1.0') {
|
|
47
|
+
const url = `${this.baseUrl}/api/liquidity-pools`;
|
|
48
|
+
const response = await fetch(url, {
|
|
49
|
+
headers: {
|
|
50
|
+
'Content-Type': 'application/json',
|
|
51
|
+
'User-Agent': userAgent
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
throw new Error(`Iris API error: ${response.status} ${response.statusText}`);
|
|
56
|
+
}
|
|
57
|
+
const data = await response.json();
|
|
58
|
+
return data?.data || [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.IrisApiClient = IrisApiClient;
|
|
62
|
+
//# sourceMappingURL=iris-api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iris-api-client.js","sourceRoot":"","sources":["../../../src/core/price-aggregation/iris-api-client.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,sEAA6D;AAE7D,MAAa,aAAa;IAA1B;QACmB,YAAO,GAAG,+BAAW,CAAC,QAAQ,CAAC;IA0DlD,CAAC;IAxDC;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,WAAqB,EAAE,YAAoB,4BAA4B;QACvF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,6BAA6B,CAAC;QAEzD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,SAAS;aACxB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,WAAW,EAAE,WAAW;aACzB,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACtB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,YAAoB,4BAA4B;QACxE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,sBAAsB,CAAC;QAElD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,SAAS;aACxB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF;AA3DD,sCA2DC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iris Pool Discovery
|
|
3
|
+
* Handles automatic discovery and ranking of liquidity pools via Iris API
|
|
4
|
+
*/
|
|
5
|
+
import { LiquidityPool } from '../../types/iris';
|
|
6
|
+
import { CardanoTokenConfig } from '../../types/price';
|
|
7
|
+
export declare class IrisPoolDiscovery {
|
|
8
|
+
private irisClient;
|
|
9
|
+
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Discover and rank pools for a given token pair
|
|
12
|
+
* Sort by liquidity (TVL)
|
|
13
|
+
*/
|
|
14
|
+
discoverPools(baseAsset: string, tokenConfig: CardanoTokenConfig): Promise<LiquidityPool[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Fetch liquidity pools from Iris API
|
|
17
|
+
* Updated to work with actual API format: /api/liquidity-pools
|
|
18
|
+
*/
|
|
19
|
+
private fetchPoolsFromIris;
|
|
20
|
+
/**
|
|
21
|
+
* Filter pools to find those matching the specified token pair
|
|
22
|
+
*/
|
|
23
|
+
private filterPoolsByToken;
|
|
24
|
+
/**
|
|
25
|
+
* Check if pool contains the target token
|
|
26
|
+
*/
|
|
27
|
+
private poolContainsToken;
|
|
28
|
+
/**
|
|
29
|
+
* Check if pool contains the base asset (usually ADA/lovelace)
|
|
30
|
+
*/
|
|
31
|
+
private poolContainsBaseAsset;
|
|
32
|
+
/**
|
|
33
|
+
* Convert Iris API pool format to our LiquidityPool interface
|
|
34
|
+
*/
|
|
35
|
+
private convertToLiquidityPool;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=iris-pool-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iris-pool-discovery.d.ts","sourceRoot":"","sources":["../../../src/core/price-aggregation/iris-pool-discovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAGrD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAgB;;IAMlC;;;OAGG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC;IA+B3B;;;OAGG;YACW,kBAAkB;IAQhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA8B/B"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Iris Pool Discovery
|
|
4
|
+
* Handles automatic discovery and ranking of liquidity pools via Iris API
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.IrisPoolDiscovery = void 0;
|
|
8
|
+
const iris_api_client_1 = require("./iris-api-client");
|
|
9
|
+
class IrisPoolDiscovery {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.irisClient = new iris_api_client_1.IrisApiClient();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Discover and rank pools for a given token pair
|
|
15
|
+
* Sort by liquidity (TVL)
|
|
16
|
+
*/
|
|
17
|
+
async discoverPools(baseAsset, tokenConfig) {
|
|
18
|
+
try {
|
|
19
|
+
const pools = await this.fetchPoolsFromIris(baseAsset, tokenConfig);
|
|
20
|
+
if (pools.length === 0) {
|
|
21
|
+
throw new Error(`No liquidity pools found for ${tokenConfig.symbol}`);
|
|
22
|
+
}
|
|
23
|
+
const sortedPools = pools.sort((a, b) => Number(b.state?.tvl ?? 0) - Number(a.state?.tvl ?? 0));
|
|
24
|
+
const filteredPools = tokenConfig.minLiquidityThreshold
|
|
25
|
+
? sortedPools.filter(pool => Number(pool.state?.tvl ?? 0) >= tokenConfig.minLiquidityThreshold)
|
|
26
|
+
: sortedPools;
|
|
27
|
+
if (filteredPools.length === 0) {
|
|
28
|
+
throw new Error(`No pools meet minimum liquidity threshold for ${tokenConfig.symbol} ` +
|
|
29
|
+
`(minimum: ${tokenConfig.minLiquidityThreshold})`);
|
|
30
|
+
}
|
|
31
|
+
return filteredPools;
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
throw new Error(`Pool discovery failed for ${tokenConfig.symbol}: ${error}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Fetch liquidity pools from Iris API
|
|
39
|
+
* Updated to work with actual API format: /api/liquidity-pools
|
|
40
|
+
*/
|
|
41
|
+
async fetchPoolsFromIris(baseAsset, tokenConfig) {
|
|
42
|
+
const allPools = await this.irisClient.fetchLiquidityPools();
|
|
43
|
+
return this.filterPoolsByToken(allPools, baseAsset, tokenConfig);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Filter pools to find those matching the specified token pair
|
|
47
|
+
*/
|
|
48
|
+
filterPoolsByToken(pools, baseAsset, tokenConfig) {
|
|
49
|
+
const matchingPools = [];
|
|
50
|
+
for (const pool of pools) {
|
|
51
|
+
const hasTargetToken = this.poolContainsToken(pool, tokenConfig);
|
|
52
|
+
const hasBaseAsset = this.poolContainsBaseAsset(pool, baseAsset);
|
|
53
|
+
if (hasTargetToken && hasBaseAsset) {
|
|
54
|
+
const liquidityPool = this.convertToLiquidityPool(pool);
|
|
55
|
+
if (liquidityPool) {
|
|
56
|
+
matchingPools.push(liquidityPool);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return matchingPools;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check if pool contains the target token
|
|
64
|
+
*/
|
|
65
|
+
poolContainsToken(pool, tokenConfig) {
|
|
66
|
+
if (pool.tokenB && pool.tokenB.policyId === tokenConfig.policyId) {
|
|
67
|
+
const nameHex = pool.tokenB.nameHex?.toLowerCase();
|
|
68
|
+
const targetNameHex = tokenConfig.assetName.toLowerCase();
|
|
69
|
+
return nameHex === targetNameHex;
|
|
70
|
+
}
|
|
71
|
+
if (pool.tokenA && pool.tokenA.policyId === tokenConfig.policyId) {
|
|
72
|
+
const nameHex = pool.tokenA.nameHex?.toLowerCase();
|
|
73
|
+
const targetNameHex = tokenConfig.assetName.toLowerCase();
|
|
74
|
+
return nameHex === targetNameHex;
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if pool contains the base asset (usually ADA/lovelace)
|
|
80
|
+
*/
|
|
81
|
+
poolContainsBaseAsset(pool, baseAsset) {
|
|
82
|
+
if (baseAsset === 'lovelace') {
|
|
83
|
+
return pool.tokenA === null;
|
|
84
|
+
}
|
|
85
|
+
return ((pool.tokenA && pool.tokenA.policyId === baseAsset) ||
|
|
86
|
+
(pool.tokenB && pool.tokenB.policyId === baseAsset));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Convert Iris API pool format to our LiquidityPool interface
|
|
90
|
+
*/
|
|
91
|
+
convertToLiquidityPool(pool) {
|
|
92
|
+
try {
|
|
93
|
+
const tvl = pool.state?.tvl || 0;
|
|
94
|
+
const reserveA = pool.state?.reserveA || 0;
|
|
95
|
+
const reserveB = pool.state?.reserveB || 0;
|
|
96
|
+
return {
|
|
97
|
+
identifier: pool.identifier || '',
|
|
98
|
+
dex: pool.dex || 'unknown',
|
|
99
|
+
address: pool.address || '',
|
|
100
|
+
pair: {
|
|
101
|
+
tokenA: pool.tokenA || { symbol: 'ADA', policyId: null },
|
|
102
|
+
tokenB: pool.tokenB || { symbol: 'Unknown', policyId: null }
|
|
103
|
+
},
|
|
104
|
+
state: {
|
|
105
|
+
tvl,
|
|
106
|
+
reserveA,
|
|
107
|
+
reserveB,
|
|
108
|
+
price: reserveB > 0 && reserveA > 0 ? reserveA / reserveB : 0,
|
|
109
|
+
liquidityProvider: pool.state?.liquidityProvider || 'unknown'
|
|
110
|
+
},
|
|
111
|
+
createdSlot: pool.createdSlot || 0,
|
|
112
|
+
lastUpdated: new Date(),
|
|
113
|
+
isActive: tvl > 0 && reserveA > 0 && reserveB > 0
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.warn('Failed to convert pool:', pool, error);
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.IrisPoolDiscovery = IrisPoolDiscovery;
|
|
123
|
+
//# sourceMappingURL=iris-pool-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iris-pool-discovery.js","sourceRoot":"","sources":["../../../src/core/price-aggregation/iris-pool-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Price Calculator
|
|
3
|
+
* Handles liquidity-weighted price calculations following buyback bot patterns
|
|
4
|
+
*/
|
|
5
|
+
import { LiquidityPool, PriceCalculationResult } from '../../types';
|
|
6
|
+
export declare class PriceCalculator {
|
|
7
|
+
/**
|
|
8
|
+
* Calculate liquidity-weighted price (exactly like buyback bot)
|
|
9
|
+
* Weights each pool's price by its TVL relative to total liquidity
|
|
10
|
+
*/
|
|
11
|
+
calculateLiquidityWeightedPrice(pools: LiquidityPool[], priceOverrides?: number[]): PriceCalculationResult;
|
|
12
|
+
/**
|
|
13
|
+
* Calculate price from individual pool reserves
|
|
14
|
+
* Returns ADA per TOKEN (reserveB / reserveA)
|
|
15
|
+
* reserveA = Token reserves, reserveB = ADA reserves
|
|
16
|
+
*/
|
|
17
|
+
private calculatePoolPrice;
|
|
18
|
+
/**
|
|
19
|
+
* Calculate confidence score based on pool distribution and liquidity
|
|
20
|
+
*/
|
|
21
|
+
private calculateConfidence;
|
|
22
|
+
/**
|
|
23
|
+
* Validate pool has required data for price calculation
|
|
24
|
+
*/
|
|
25
|
+
private isValidPool;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=price-calculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"price-calculator.d.ts","sourceRoot":"","sources":["../../../src/core/price-aggregation/price-calculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,aAAa,EAAE,sBAAsB,EAAC,MAAM,aAAa,CAAC;AAElE,qBAAa,eAAe;IAC1B;;;OAGG;IACH,+BAA+B,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,sBAAsB;IAmC1G;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,WAAW;CAWpB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Price Calculator
|
|
4
|
+
* Handles liquidity-weighted price calculations following buyback bot patterns
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.PriceCalculator = void 0;
|
|
8
|
+
class PriceCalculator {
|
|
9
|
+
/**
|
|
10
|
+
* Calculate liquidity-weighted price (exactly like buyback bot)
|
|
11
|
+
* Weights each pool's price by its TVL relative to total liquidity
|
|
12
|
+
*/
|
|
13
|
+
calculateLiquidityWeightedPrice(pools, priceOverrides) {
|
|
14
|
+
if (pools.length === 0) {
|
|
15
|
+
throw new Error('No pools provided for price calculation');
|
|
16
|
+
}
|
|
17
|
+
const validPools = pools.filter(pool => this.isValidPool(pool));
|
|
18
|
+
if (validPools.length === 0) {
|
|
19
|
+
throw new Error('No valid pools found for price calculation');
|
|
20
|
+
}
|
|
21
|
+
const totalTvl = validPools.reduce((sum, pool) => sum + Number(pool.state?.tvl ?? 0), 0);
|
|
22
|
+
if (totalTvl === 0) {
|
|
23
|
+
throw new Error('No liquidity available for price calculation');
|
|
24
|
+
}
|
|
25
|
+
const weightedPrice = validPools.reduce((weightedSum, pool, index) => {
|
|
26
|
+
const weight = Number(pool.state?.tvl ?? 0) / totalTvl;
|
|
27
|
+
const poolPrice = priceOverrides ? priceOverrides[index] : this.calculatePoolPrice(pool);
|
|
28
|
+
return weightedSum + (poolPrice * weight);
|
|
29
|
+
}, 0);
|
|
30
|
+
const confidence = this.calculateConfidence(validPools, totalTvl);
|
|
31
|
+
return {
|
|
32
|
+
price: weightedPrice,
|
|
33
|
+
confidence,
|
|
34
|
+
poolsUsed: validPools.length,
|
|
35
|
+
totalLiquidity: totalTvl,
|
|
36
|
+
timestamp: new Date()
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Calculate price from individual pool reserves
|
|
41
|
+
* Returns ADA per TOKEN (reserveB / reserveA)
|
|
42
|
+
* reserveA = Token reserves, reserveB = ADA reserves
|
|
43
|
+
*/
|
|
44
|
+
calculatePoolPrice(pool) {
|
|
45
|
+
const { reserveA, reserveB } = pool.state;
|
|
46
|
+
if (!reserveA || !reserveB || reserveA === 0) {
|
|
47
|
+
throw new Error(`Invalid pool reserves for ${pool.identifier}: A=${reserveA}, B=${reserveB}`);
|
|
48
|
+
}
|
|
49
|
+
return reserveB / reserveA;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Calculate confidence score based on pool distribution and liquidity
|
|
53
|
+
*/
|
|
54
|
+
calculateConfidence(pools, totalTvl) {
|
|
55
|
+
if (pools.length === 0)
|
|
56
|
+
return 0;
|
|
57
|
+
if (pools.length === 1)
|
|
58
|
+
return 0.7;
|
|
59
|
+
let confidence = Math.min(0.9, 0.5 + (pools.length * 0.1));
|
|
60
|
+
const topPoolTvl = Number(pools[0].state?.tvl ?? 0);
|
|
61
|
+
const concentration = topPoolTvl / totalTvl;
|
|
62
|
+
if (concentration > 0.8) {
|
|
63
|
+
confidence *= 0.8;
|
|
64
|
+
}
|
|
65
|
+
else if (concentration > 0.6) {
|
|
66
|
+
confidence *= 0.9;
|
|
67
|
+
}
|
|
68
|
+
return Math.max(confidence, 0.5);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validate pool has required data for price calculation
|
|
72
|
+
*/
|
|
73
|
+
isValidPool(pool) {
|
|
74
|
+
return !!(pool.state &&
|
|
75
|
+
pool.state.tvl > 0 &&
|
|
76
|
+
pool.state.reserveA > 0 &&
|
|
77
|
+
pool.state.reserveB > 0 &&
|
|
78
|
+
isFinite(pool.state.reserveA) &&
|
|
79
|
+
isFinite(pool.state.reserveB) &&
|
|
80
|
+
isFinite(pool.state.tvl));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.PriceCalculator = PriceCalculator;
|
|
84
|
+
//# sourceMappingURL=price-calculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"price-calculator.js","sourceRoot":"","sources":["../../../src/core/price-aggregation/price-calculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Order, Balance, AggregatedPrice, RiskManagerConfig } from '../../types';
|
|
2
|
+
export declare class RiskManager {
|
|
3
|
+
private config;
|
|
4
|
+
constructor(config: RiskManagerConfig);
|
|
5
|
+
validatePosition(newOrder: Order, balance: Balance): boolean;
|
|
6
|
+
checkPriceConfidence(aggregatedPrice: AggregatedPrice): boolean;
|
|
7
|
+
calculateAvailableBalance(balance: Balance): number;
|
|
8
|
+
private getCurrentExposure;
|
|
9
|
+
validateTrade(order: Order, balance: Balance, aggregatedPrice: AggregatedPrice): {
|
|
10
|
+
valid: boolean;
|
|
11
|
+
reason?: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=risk-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk-manager.d.ts","sourceRoot":"","sources":["../../../src/core/risk-management/risk-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjF,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,EAAE,iBAAiB;IAIrC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAQ5D,oBAAoB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO;IAI/D,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAInD,OAAO,CAAC,kBAAkB;IAI1B,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,GAAG;QAC/E,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;CAiBF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RiskManager = void 0;
|
|
4
|
+
class RiskManager {
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.config = config;
|
|
7
|
+
}
|
|
8
|
+
validatePosition(newOrder, balance) {
|
|
9
|
+
const currentExposure = this.getCurrentExposure(balance);
|
|
10
|
+
const orderValue = newOrder.amount * (newOrder.price || 0);
|
|
11
|
+
const totalExposure = currentExposure + orderValue;
|
|
12
|
+
return totalExposure <= balance.total * this.config.maxPositionSize;
|
|
13
|
+
}
|
|
14
|
+
checkPriceConfidence(aggregatedPrice) {
|
|
15
|
+
return aggregatedPrice.confidence >= this.config.minConfidence;
|
|
16
|
+
}
|
|
17
|
+
calculateAvailableBalance(balance) {
|
|
18
|
+
return balance.total * (1 - this.config.safetyReservePercentage);
|
|
19
|
+
}
|
|
20
|
+
getCurrentExposure(balance) {
|
|
21
|
+
return balance.used;
|
|
22
|
+
}
|
|
23
|
+
validateTrade(order, balance, aggregatedPrice) {
|
|
24
|
+
if (!this.checkPriceConfidence(aggregatedPrice)) {
|
|
25
|
+
return {
|
|
26
|
+
valid: false,
|
|
27
|
+
reason: `Price confidence too low: ${aggregatedPrice.confidence} < ${this.config.minConfidence}`
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (!this.validatePosition(order, balance)) {
|
|
31
|
+
return {
|
|
32
|
+
valid: false,
|
|
33
|
+
reason: `Position size would exceed ${this.config.maxPositionSize * 100}% limit`
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
return { valid: true };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.RiskManager = RiskManager;
|
|
40
|
+
//# sourceMappingURL=risk-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk-manager.js","sourceRoot":"","sources":["../../../src/core/risk-management/risk-manager.ts"],"names":[],"mappings":";;;AAEA,MAAa,WAAW;IAGtB,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,gBAAgB,CAAC,QAAe,EAAE,OAAgB;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,eAAe,GAAG,UAAU,CAAC;QAEnD,OAAO,aAAa,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;IACtE,CAAC;IAED,oBAAoB,CAAC,eAAgC;QACnD,OAAO,eAAe,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;IACjE,CAAC;IAED,yBAAyB,CAAC,OAAgB;QACxC,OAAO,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACnE,CAAC;IAEO,kBAAkB,CAAC,OAAgB;QACzC,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IAED,aAAa,CAAC,KAAY,EAAE,OAAgB,EAAE,eAAgC;QAI5E,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,EAAE,CAAC;YAChD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,6BAA6B,eAAe,CAAC,UAAU,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;aACjG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YAC3C,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,8BAA8B,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,GAAG,SAAS;aACjF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;CACF;AA/CD,kCA+CC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Order } from '../../types';
|
|
2
|
+
import { StrategyType, StrategyStatus, StrategyConfig } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Abstract base class for all trading strategies
|
|
5
|
+
* Provides common functionality and defines the interface that all strategies must implement
|
|
6
|
+
*/
|
|
7
|
+
export declare abstract class BaseStrategy {
|
|
8
|
+
protected readonly strategyId: string;
|
|
9
|
+
protected readonly strategyType: StrategyType;
|
|
10
|
+
protected status: StrategyStatus;
|
|
11
|
+
protected config?: StrategyConfig;
|
|
12
|
+
constructor(id: string, type: StrategyType);
|
|
13
|
+
get id(): string;
|
|
14
|
+
get type(): StrategyType;
|
|
15
|
+
get currentStatus(): StrategyStatus;
|
|
16
|
+
abstract initialize(config: StrategyConfig): Promise<void>;
|
|
17
|
+
abstract start(): Promise<void>;
|
|
18
|
+
abstract stop(): Promise<void>;
|
|
19
|
+
abstract onPriceUpdate(symbol: string, price: number): Promise<void>;
|
|
20
|
+
abstract onOrderUpdate(order: Order): Promise<void>;
|
|
21
|
+
protected setStatus(status: StrategyStatus): void;
|
|
22
|
+
protected getConfig(): StrategyConfig;
|
|
23
|
+
protected validateConfig(config: StrategyConfig): void;
|
|
24
|
+
protected handleError(error: any, operation: string): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=base-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-strategy.d.ts","sourceRoot":"","sources":["../../../src/core/strategy/base-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE3E;;;GAGG;AACH,8BAAsB,YAAY;IAChC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C,SAAS,CAAC,MAAM,EAAE,cAAc,CAAU;IAC1C,SAAS,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;gBAEtB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY;IAK1C,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,IAAI,aAAa,IAAI,cAAc,CAElC;IAED,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1D,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9B,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACpE,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAGnD,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAIjD,SAAS,CAAC,SAAS,IAAI,cAAc;IAOrC,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAOtD,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAK3D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseStrategy = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Abstract base class for all trading strategies
|
|
6
|
+
* Provides common functionality and defines the interface that all strategies must implement
|
|
7
|
+
*/
|
|
8
|
+
class BaseStrategy {
|
|
9
|
+
constructor(id, type) {
|
|
10
|
+
this.status = 'idle';
|
|
11
|
+
this.strategyId = id;
|
|
12
|
+
this.strategyType = type;
|
|
13
|
+
}
|
|
14
|
+
get id() {
|
|
15
|
+
return this.strategyId;
|
|
16
|
+
}
|
|
17
|
+
get type() {
|
|
18
|
+
return this.strategyType;
|
|
19
|
+
}
|
|
20
|
+
get currentStatus() {
|
|
21
|
+
return this.status;
|
|
22
|
+
}
|
|
23
|
+
// Common utility methods
|
|
24
|
+
setStatus(status) {
|
|
25
|
+
this.status = status;
|
|
26
|
+
}
|
|
27
|
+
getConfig() {
|
|
28
|
+
if (!this.config) {
|
|
29
|
+
throw new Error(`Strategy ${this.strategyId} not initialized`);
|
|
30
|
+
}
|
|
31
|
+
return this.config;
|
|
32
|
+
}
|
|
33
|
+
validateConfig(config) {
|
|
34
|
+
if (!config.id || !config.type || !config.symbol || !config.exchange) {
|
|
35
|
+
throw new Error('Invalid strategy configuration');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Error handling helper
|
|
39
|
+
handleError(error, operation) {
|
|
40
|
+
const message = error?.message || error?.toString() || 'Unknown error';
|
|
41
|
+
this.setStatus('error');
|
|
42
|
+
throw new Error(`Strategy ${this.strategyId} ${operation} failed: ${message}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.BaseStrategy = BaseStrategy;
|
|
46
|
+
//# sourceMappingURL=base-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-strategy.js","sourceRoot":"","sources":["../../../src/core/strategy/base-strategy.ts"],"names":[],"mappings":";;;AAGA;;;GAGG;AACH,MAAsB,YAAY;IAMhC,YAAY,EAAU,EAAE,IAAkB;QAHhC,WAAM,GAAmB,MAAM,CAAC;QAIxC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IASD,yBAAyB;IACf,SAAS,CAAC,MAAsB;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAES,SAAS;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,UAAU,kBAAkB,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAES,cAAc,CAAC,MAAsB;QAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,wBAAwB;IACd,WAAW,CAAC,KAAU,EAAE,SAAiB;QACjD,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,QAAQ,EAAE,IAAI,eAAe,CAAC;QACvE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,UAAU,IAAI,SAAS,YAAY,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;CACF;AAtDD,oCAsDC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BaseStrategy } from './base-strategy';
|
|
2
|
+
import { LauncherConfig, GridLauncherParams } from '../../config/launcher-config';
|
|
3
|
+
export declare class StrategyFactory {
|
|
4
|
+
static create(config: LauncherConfig, params?: GridLauncherParams): Promise<BaseStrategy>;
|
|
5
|
+
private static createGridStrategy;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=strategy-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategy-factory.d.ts","sourceRoot":"","sources":["../../../src/core/strategy/strategy-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAuB,MAAM,8BAA8B,CAAC;AAIvG,qBAAa,eAAe;WACb,MAAM,CACjB,MAAM,EAAE,cAAc,EACtB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC;mBAgBH,kBAAkB;CAkDxC"}
|