@autonomaai/agent-core 1.0.2
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/base-agent.d.ts +112 -0
- package/dist/base-agent.d.ts.map +1 -0
- package/dist/base-agent.js +173 -0
- package/dist/base-agent.js.map +1 -0
- package/dist/core.d.ts +81 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +633 -0
- package/dist/core.js.map +1 -0
- package/dist/error-handler.d.ts +78 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/error-handler.js +129 -0
- package/dist/error-handler.js.map +1 -0
- package/dist/factory.d.ts +60 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +621 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/streaming.d.ts +24 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +36 -0
- package/dist/streaming.js.map +1 -0
- package/dist/trading/formatters.d.ts +167 -0
- package/dist/trading/formatters.d.ts.map +1 -0
- package/dist/trading/formatters.js +271 -0
- package/dist/trading/formatters.js.map +1 -0
- package/dist/trading/index.d.ts +9 -0
- package/dist/trading/index.d.ts.map +1 -0
- package/dist/trading/index.js +10 -0
- package/dist/trading/index.js.map +1 -0
- package/dist/trading/types.d.ts +205 -0
- package/dist/trading/types.d.ts.map +1 -0
- package/dist/trading/types.js +7 -0
- package/dist/trading/types.js.map +1 -0
- package/dist/trading/utils.d.ts +120 -0
- package/dist/trading/utils.d.ts.map +1 -0
- package/dist/trading/utils.js +291 -0
- package/dist/trading/utils.js.map +1 -0
- package/dist/trading/validation.d.ts +40 -0
- package/dist/trading/validation.d.ts.map +1 -0
- package/dist/trading/validation.js +247 -0
- package/dist/trading/validation.js.map +1 -0
- package/dist/types.d.ts +282 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +21 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
- package/src/base-agent.ts +263 -0
- package/src/core.ts +792 -0
- package/src/error-handler.ts +166 -0
- package/src/factory.ts +687 -0
- package/src/global.d.ts +12 -0
- package/src/index.ts +24 -0
- package/src/streaming.ts +50 -0
- package/src/trading/formatters.ts +363 -0
- package/src/trading/index.ts +10 -0
- package/src/trading/types.ts +263 -0
- package/src/trading/utils.ts +355 -0
- package/src/trading/validation.ts +321 -0
- package/src/types.ts +402 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trading Types for autonoma Agent Core
|
|
3
|
+
*
|
|
4
|
+
* Standardized trading types used across all trading agents.
|
|
5
|
+
*/
|
|
6
|
+
export interface TokenPrice {
|
|
7
|
+
symbol: string;
|
|
8
|
+
price: number;
|
|
9
|
+
change24h: number;
|
|
10
|
+
volume24h: number;
|
|
11
|
+
marketCap?: number;
|
|
12
|
+
timestamp: Date;
|
|
13
|
+
source: string;
|
|
14
|
+
}
|
|
15
|
+
export interface OHLCV {
|
|
16
|
+
open: number;
|
|
17
|
+
high: number;
|
|
18
|
+
low: number;
|
|
19
|
+
close: number;
|
|
20
|
+
volume: number;
|
|
21
|
+
timestamp: Date;
|
|
22
|
+
}
|
|
23
|
+
export interface OrderBook {
|
|
24
|
+
symbol: string;
|
|
25
|
+
bids: OrderBookLevel[];
|
|
26
|
+
asks: OrderBookLevel[];
|
|
27
|
+
timestamp: Date;
|
|
28
|
+
}
|
|
29
|
+
export interface OrderBookLevel {
|
|
30
|
+
price: number;
|
|
31
|
+
quantity: number;
|
|
32
|
+
}
|
|
33
|
+
export type OrderSide = 'buy' | 'sell';
|
|
34
|
+
export type OrderType = 'market' | 'limit' | 'stop' | 'stop-limit';
|
|
35
|
+
export type OrderStatus = 'pending' | 'open' | 'filled' | 'canceled' | 'rejected';
|
|
36
|
+
export type TimeInForce = 'GTC' | 'IOC' | 'FOK' | 'DAY';
|
|
37
|
+
export interface Order {
|
|
38
|
+
id: string;
|
|
39
|
+
symbol: string;
|
|
40
|
+
side: OrderSide;
|
|
41
|
+
type: OrderType;
|
|
42
|
+
quantity: number;
|
|
43
|
+
price?: number;
|
|
44
|
+
stopPrice?: number;
|
|
45
|
+
timeInForce: TimeInForce;
|
|
46
|
+
status: OrderStatus;
|
|
47
|
+
filledQuantity: number;
|
|
48
|
+
averagePrice?: number;
|
|
49
|
+
createdAt: Date;
|
|
50
|
+
updatedAt: Date;
|
|
51
|
+
exchange: string;
|
|
52
|
+
}
|
|
53
|
+
export interface OrderRequest {
|
|
54
|
+
symbol: string;
|
|
55
|
+
side: OrderSide;
|
|
56
|
+
type: OrderType;
|
|
57
|
+
quantity: number;
|
|
58
|
+
price?: number;
|
|
59
|
+
stopPrice?: number;
|
|
60
|
+
timeInForce?: TimeInForce;
|
|
61
|
+
}
|
|
62
|
+
export interface Position {
|
|
63
|
+
symbol: string;
|
|
64
|
+
quantity: number;
|
|
65
|
+
averagePrice: number;
|
|
66
|
+
marketValue: number;
|
|
67
|
+
unrealizedPnL: number;
|
|
68
|
+
realizedPnL: number;
|
|
69
|
+
costBasis: number;
|
|
70
|
+
exchange: string;
|
|
71
|
+
lastUpdate: Date;
|
|
72
|
+
}
|
|
73
|
+
export interface Portfolio {
|
|
74
|
+
id: string;
|
|
75
|
+
totalValue: number;
|
|
76
|
+
cash: number;
|
|
77
|
+
positions: Position[];
|
|
78
|
+
totalPnL: number;
|
|
79
|
+
dayPnL: number;
|
|
80
|
+
lastUpdate: Date;
|
|
81
|
+
}
|
|
82
|
+
export interface YieldOpportunity {
|
|
83
|
+
protocol: string;
|
|
84
|
+
pool: string;
|
|
85
|
+
token: string;
|
|
86
|
+
apy: number;
|
|
87
|
+
tvl: number;
|
|
88
|
+
risk: 'low' | 'medium' | 'high';
|
|
89
|
+
blockchain: string;
|
|
90
|
+
category: 'lending' | 'liquidity' | 'staking' | 'farming';
|
|
91
|
+
minimumDeposit?: number;
|
|
92
|
+
lockPeriod?: number;
|
|
93
|
+
}
|
|
94
|
+
export interface LiquidityPool {
|
|
95
|
+
id: string;
|
|
96
|
+
protocol: string;
|
|
97
|
+
tokens: string[];
|
|
98
|
+
reserves: number[];
|
|
99
|
+
fee: number;
|
|
100
|
+
apy: number;
|
|
101
|
+
volume24h: number;
|
|
102
|
+
tvl: number;
|
|
103
|
+
}
|
|
104
|
+
export interface StakingPosition {
|
|
105
|
+
protocol: string;
|
|
106
|
+
token: string;
|
|
107
|
+
amount: number;
|
|
108
|
+
apy: number;
|
|
109
|
+
claimableRewards: number;
|
|
110
|
+
lockEndDate?: Date;
|
|
111
|
+
autoCompound: boolean;
|
|
112
|
+
}
|
|
113
|
+
export interface RiskLimits {
|
|
114
|
+
maxPositionSize: number;
|
|
115
|
+
maxDailyLoss: number;
|
|
116
|
+
maxDrawdown: number;
|
|
117
|
+
maxLeverage: number;
|
|
118
|
+
blacklistedSymbols: string[];
|
|
119
|
+
allowedExchanges: string[];
|
|
120
|
+
}
|
|
121
|
+
export interface RiskMetrics {
|
|
122
|
+
portfolioVar: number;
|
|
123
|
+
sharpeRatio: number;
|
|
124
|
+
maxDrawdown: number;
|
|
125
|
+
volatility: number;
|
|
126
|
+
beta: number;
|
|
127
|
+
alpha: number;
|
|
128
|
+
positionConcentration: number;
|
|
129
|
+
}
|
|
130
|
+
export interface StrategyConfig {
|
|
131
|
+
name: string;
|
|
132
|
+
type: 'market_making' | 'arbitrage' | 'yield_farming' | 'momentum' | 'mean_reversion';
|
|
133
|
+
enabled: boolean;
|
|
134
|
+
parameters: Record<string, any>;
|
|
135
|
+
riskLimits: RiskLimits;
|
|
136
|
+
targetAllocation: number;
|
|
137
|
+
}
|
|
138
|
+
export interface StrategyPerformance {
|
|
139
|
+
strategyName: string;
|
|
140
|
+
totalTrades: number;
|
|
141
|
+
winRate: number;
|
|
142
|
+
totalPnL: number;
|
|
143
|
+
sharpeRatio: number;
|
|
144
|
+
maxDrawdown: number;
|
|
145
|
+
averageHoldTime: number;
|
|
146
|
+
lastExecuted: Date;
|
|
147
|
+
}
|
|
148
|
+
export interface ExchangeConfig {
|
|
149
|
+
name: string;
|
|
150
|
+
apiKey: string;
|
|
151
|
+
apiSecret: string;
|
|
152
|
+
passphrase?: string;
|
|
153
|
+
sandbox: boolean;
|
|
154
|
+
rateLimit: number;
|
|
155
|
+
}
|
|
156
|
+
export interface ExchangeStatus {
|
|
157
|
+
name: string;
|
|
158
|
+
connected: boolean;
|
|
159
|
+
lastHeartbeat: Date;
|
|
160
|
+
latency: number;
|
|
161
|
+
orderCount24h: number;
|
|
162
|
+
rateLimitRemaining: number;
|
|
163
|
+
}
|
|
164
|
+
export interface MarketMakingConfig {
|
|
165
|
+
symbol: string;
|
|
166
|
+
bidSpread: number;
|
|
167
|
+
askSpread: number;
|
|
168
|
+
orderAmount: number;
|
|
169
|
+
maxInventory: number;
|
|
170
|
+
skewFactor: number;
|
|
171
|
+
minOrderGap: number;
|
|
172
|
+
}
|
|
173
|
+
export interface SpreadAnalysis {
|
|
174
|
+
symbol: string;
|
|
175
|
+
currentSpread: number;
|
|
176
|
+
averageSpread24h: number;
|
|
177
|
+
spreadVolatility: number;
|
|
178
|
+
optimalSpread: number;
|
|
179
|
+
competitorAnalysis: {
|
|
180
|
+
topBid: number;
|
|
181
|
+
topAsk: number;
|
|
182
|
+
bidDepth: number;
|
|
183
|
+
askDepth: number;
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
export interface TimeFrame {
|
|
187
|
+
value: number;
|
|
188
|
+
unit: 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month';
|
|
189
|
+
}
|
|
190
|
+
export interface PriceRange {
|
|
191
|
+
min: number;
|
|
192
|
+
max: number;
|
|
193
|
+
current: number;
|
|
194
|
+
}
|
|
195
|
+
export interface TradingSession {
|
|
196
|
+
id: string;
|
|
197
|
+
startTime: Date;
|
|
198
|
+
endTime?: Date;
|
|
199
|
+
initialBalance: number;
|
|
200
|
+
currentBalance: number;
|
|
201
|
+
totalTrades: number;
|
|
202
|
+
pnl: number;
|
|
203
|
+
strategies: string[];
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/trading/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/trading/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trading Utilities for autonoma Agent Core
|
|
3
|
+
*
|
|
4
|
+
* Common utility functions for trading calculations and operations.
|
|
5
|
+
*/
|
|
6
|
+
import { Order, Position, Portfolio, OrderSide, YieldOpportunity, TimeFrame, PriceRange, OHLCV } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Calculate percentage change between two prices
|
|
9
|
+
*/
|
|
10
|
+
export declare function calculatePriceChange(oldPrice: number, newPrice: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Calculate simple moving average
|
|
13
|
+
*/
|
|
14
|
+
export declare function calculateSMA(prices: number[], period: number): number;
|
|
15
|
+
/**
|
|
16
|
+
* Calculate exponential moving average
|
|
17
|
+
*/
|
|
18
|
+
export declare function calculateEMA(prices: number[], period: number): number;
|
|
19
|
+
/**
|
|
20
|
+
* Calculate volatility (standard deviation) of price returns
|
|
21
|
+
*/
|
|
22
|
+
export declare function calculateVolatility(prices: number[]): number;
|
|
23
|
+
/**
|
|
24
|
+
* Calculate support and resistance levels
|
|
25
|
+
*/
|
|
26
|
+
export declare function findSupportResistance(ohlcv: OHLCV[], lookback?: number): {
|
|
27
|
+
support: number;
|
|
28
|
+
resistance: number;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Calculate portfolio total value
|
|
32
|
+
*/
|
|
33
|
+
export declare function calculatePortfolioValue(portfolio: Portfolio): number;
|
|
34
|
+
/**
|
|
35
|
+
* Calculate position size as percentage of portfolio
|
|
36
|
+
*/
|
|
37
|
+
export declare function calculatePositionWeight(position: Position, portfolioValue: number): number;
|
|
38
|
+
/**
|
|
39
|
+
* Calculate unrealized P&L for a position
|
|
40
|
+
*/
|
|
41
|
+
export declare function calculateUnrealizedPnL(position: Position, currentPrice: number): number;
|
|
42
|
+
/**
|
|
43
|
+
* Calculate Sharpe ratio
|
|
44
|
+
*/
|
|
45
|
+
export declare function calculateSharpeRatio(returns: number[], riskFreeRate?: number): number;
|
|
46
|
+
/**
|
|
47
|
+
* Calculate maximum drawdown
|
|
48
|
+
*/
|
|
49
|
+
export declare function calculateMaxDrawdown(portfolioValues: number[]): number;
|
|
50
|
+
/**
|
|
51
|
+
* Calculate Value at Risk (VaR) using historical simulation
|
|
52
|
+
*/
|
|
53
|
+
export declare function calculateVaR(returns: number[], confidence?: number): number;
|
|
54
|
+
/**
|
|
55
|
+
* Calculate order fill ratio
|
|
56
|
+
*/
|
|
57
|
+
export declare function calculateFillRatio(order: Order): number;
|
|
58
|
+
/**
|
|
59
|
+
* Calculate slippage
|
|
60
|
+
*/
|
|
61
|
+
export declare function calculateSlippage(expectedPrice: number, executedPrice: number, side: OrderSide): number;
|
|
62
|
+
/**
|
|
63
|
+
* Calculate optimal order size based on market impact
|
|
64
|
+
*/
|
|
65
|
+
export declare function calculateOptimalOrderSize(availableLiquidity: number, targetSize: number, maxMarketImpact?: number): number;
|
|
66
|
+
/**
|
|
67
|
+
* Calculate APY from APR
|
|
68
|
+
*/
|
|
69
|
+
export declare function aprToApy(apr: number, compoundingPeriods?: number): number;
|
|
70
|
+
/**
|
|
71
|
+
* Calculate yield farming returns
|
|
72
|
+
*/
|
|
73
|
+
export declare function calculateYieldFarmingReturns(principal: number, apy: number, days: number, compounding?: boolean): {
|
|
74
|
+
totalReturn: number;
|
|
75
|
+
profit: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Calculate impermanent loss for liquidity provision
|
|
79
|
+
*/
|
|
80
|
+
export declare function calculateImpermanentLoss(initialPrice1: number, initialPrice2: number, currentPrice1: number, currentPrice2: number): number;
|
|
81
|
+
/**
|
|
82
|
+
* Compare yield opportunities
|
|
83
|
+
*/
|
|
84
|
+
export declare function rankYieldOpportunities(opportunities: YieldOpportunity[]): YieldOpportunity[];
|
|
85
|
+
/**
|
|
86
|
+
* Convert timeframe to milliseconds
|
|
87
|
+
*/
|
|
88
|
+
export declare function timeFrameToMs(timeFrame: TimeFrame): number;
|
|
89
|
+
/**
|
|
90
|
+
* Format currency with appropriate decimal places
|
|
91
|
+
*/
|
|
92
|
+
export declare function formatCurrency(amount: number, decimals?: number): string;
|
|
93
|
+
/**
|
|
94
|
+
* Format percentage with sign
|
|
95
|
+
*/
|
|
96
|
+
export declare function formatPercentage(value: number, decimals?: number): string;
|
|
97
|
+
/**
|
|
98
|
+
* Check if price is within range
|
|
99
|
+
*/
|
|
100
|
+
export declare function isPriceInRange(price: number, range: PriceRange): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Calculate distance from price to range bounds
|
|
103
|
+
*/
|
|
104
|
+
export declare function distanceToRange(price: number, range: PriceRange): {
|
|
105
|
+
toMin: number;
|
|
106
|
+
toMax: number;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Generate trading session ID
|
|
110
|
+
*/
|
|
111
|
+
export declare function generateSessionId(): string;
|
|
112
|
+
/**
|
|
113
|
+
* Validate trading symbol format
|
|
114
|
+
*/
|
|
115
|
+
export declare function isValidSymbol(symbol: string): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Normalize symbol format
|
|
118
|
+
*/
|
|
119
|
+
export declare function normalizeSymbol(symbol: string): string;
|
|
120
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/trading/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,EACL,QAAQ,EACR,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,KAAK,EACN,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAerE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAgB5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,GAAE,MAAW,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAWpH;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAMpE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAG1F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,GAAE,MAAa,GAAG,MAAM,CAS3F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,MAAM,CAmBtE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,UAAU,GAAE,MAAa,GAAG,MAAM,CAOjF;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAGvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAQvG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,kBAAkB,EAAE,MAAM,EAC1B,UAAU,EAAE,MAAM,EAClB,eAAe,GAAE,MAAY,GAC5B,MAAM,CAGR;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,GAAE,MAAY,GAAG,MAAM,CAE9E;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,OAAc,GAC1B;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAYzC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,GACpB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAS5F;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAW1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAO3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAG5E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAExE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAKlG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAIrD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trading Utilities for autonoma Agent Core
|
|
3
|
+
*
|
|
4
|
+
* Common utility functions for trading calculations and operations.
|
|
5
|
+
*/
|
|
6
|
+
// =============================================================================
|
|
7
|
+
// Price & Market Calculations
|
|
8
|
+
// =============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Calculate percentage change between two prices
|
|
11
|
+
*/
|
|
12
|
+
export function calculatePriceChange(oldPrice, newPrice) {
|
|
13
|
+
if (oldPrice === 0)
|
|
14
|
+
return 0;
|
|
15
|
+
return ((newPrice - oldPrice) / oldPrice) * 100;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Calculate simple moving average
|
|
19
|
+
*/
|
|
20
|
+
export function calculateSMA(prices, period) {
|
|
21
|
+
if (prices.length < period)
|
|
22
|
+
return 0;
|
|
23
|
+
const sum = prices.slice(-period).reduce((acc, price) => acc + price, 0);
|
|
24
|
+
return sum / period;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Calculate exponential moving average
|
|
28
|
+
*/
|
|
29
|
+
export function calculateEMA(prices, period) {
|
|
30
|
+
if (prices.length === 0)
|
|
31
|
+
return 0;
|
|
32
|
+
if (prices.length === 1)
|
|
33
|
+
return prices[0];
|
|
34
|
+
const multiplier = 2 / (period + 1);
|
|
35
|
+
let ema = prices[0];
|
|
36
|
+
for (let i = 1; i < prices.length; i++) {
|
|
37
|
+
const price = prices[i];
|
|
38
|
+
if (price !== undefined) {
|
|
39
|
+
ema = (price * multiplier) + (ema * (1 - multiplier));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return ema;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Calculate volatility (standard deviation) of price returns
|
|
46
|
+
*/
|
|
47
|
+
export function calculateVolatility(prices) {
|
|
48
|
+
if (prices.length < 2)
|
|
49
|
+
return 0;
|
|
50
|
+
const returns = [];
|
|
51
|
+
for (let i = 1; i < prices.length; i++) {
|
|
52
|
+
const current = prices[i];
|
|
53
|
+
const previous = prices[i - 1];
|
|
54
|
+
if (current !== undefined && previous !== undefined && previous !== 0) {
|
|
55
|
+
returns.push((current - previous) / previous);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const mean = returns.reduce((sum, ret) => sum + ret, 0) / returns.length;
|
|
59
|
+
const variance = returns.reduce((sum, ret) => sum + Math.pow(ret - mean, 2), 0) / returns.length;
|
|
60
|
+
return Math.sqrt(variance) * Math.sqrt(252); // Annualized volatility
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Calculate support and resistance levels
|
|
64
|
+
*/
|
|
65
|
+
export function findSupportResistance(ohlcv, lookback = 20) {
|
|
66
|
+
if (ohlcv.length < lookback)
|
|
67
|
+
return { support: 0, resistance: 0 };
|
|
68
|
+
const recent = ohlcv.slice(-lookback);
|
|
69
|
+
const highs = recent.map(candle => candle.high);
|
|
70
|
+
const lows = recent.map(candle => candle.low);
|
|
71
|
+
const support = lows.reduce((min, low) => Math.min(min, low), lows[0] ?? 0);
|
|
72
|
+
const resistance = highs.reduce((max, high) => Math.max(max, high), highs[0] ?? 0);
|
|
73
|
+
return { support, resistance };
|
|
74
|
+
}
|
|
75
|
+
// =============================================================================
|
|
76
|
+
// Portfolio & Risk Calculations
|
|
77
|
+
// =============================================================================
|
|
78
|
+
/**
|
|
79
|
+
* Calculate portfolio total value
|
|
80
|
+
*/
|
|
81
|
+
export function calculatePortfolioValue(portfolio) {
|
|
82
|
+
const positionsValue = portfolio.positions.reduce((total, position) => {
|
|
83
|
+
return total + position.marketValue;
|
|
84
|
+
}, 0);
|
|
85
|
+
return portfolio.cash + positionsValue;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Calculate position size as percentage of portfolio
|
|
89
|
+
*/
|
|
90
|
+
export function calculatePositionWeight(position, portfolioValue) {
|
|
91
|
+
if (portfolioValue === 0)
|
|
92
|
+
return 0;
|
|
93
|
+
return (position.marketValue / portfolioValue) * 100;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Calculate unrealized P&L for a position
|
|
97
|
+
*/
|
|
98
|
+
export function calculateUnrealizedPnL(position, currentPrice) {
|
|
99
|
+
return (currentPrice - position.averagePrice) * position.quantity;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Calculate Sharpe ratio
|
|
103
|
+
*/
|
|
104
|
+
export function calculateSharpeRatio(returns, riskFreeRate = 0.02) {
|
|
105
|
+
if (returns.length === 0)
|
|
106
|
+
return 0;
|
|
107
|
+
const avgReturn = returns.reduce((sum, ret) => sum + ret, 0) / returns.length;
|
|
108
|
+
const variance = returns.reduce((sum, ret) => sum + Math.pow(ret - avgReturn, 2), 0) / returns.length;
|
|
109
|
+
const stdDev = Math.sqrt(variance);
|
|
110
|
+
if (stdDev === 0)
|
|
111
|
+
return 0;
|
|
112
|
+
return (avgReturn - riskFreeRate) / stdDev;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Calculate maximum drawdown
|
|
116
|
+
*/
|
|
117
|
+
export function calculateMaxDrawdown(portfolioValues) {
|
|
118
|
+
if (portfolioValues.length < 2)
|
|
119
|
+
return 0;
|
|
120
|
+
let maxDrawdown = 0;
|
|
121
|
+
let peak = portfolioValues[0] ?? 0;
|
|
122
|
+
for (let i = 1; i < portfolioValues.length; i++) {
|
|
123
|
+
const value = portfolioValues[i];
|
|
124
|
+
if (value !== undefined) {
|
|
125
|
+
if (value > peak) {
|
|
126
|
+
peak = value;
|
|
127
|
+
}
|
|
128
|
+
else if (peak > 0) {
|
|
129
|
+
const drawdown = (peak - value) / peak;
|
|
130
|
+
maxDrawdown = Math.max(maxDrawdown, drawdown);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return maxDrawdown * 100; // Return as percentage
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Calculate Value at Risk (VaR) using historical simulation
|
|
138
|
+
*/
|
|
139
|
+
export function calculateVaR(returns, confidence = 0.05) {
|
|
140
|
+
if (returns.length === 0)
|
|
141
|
+
return 0;
|
|
142
|
+
const sortedReturns = [...returns].sort((a, b) => a - b);
|
|
143
|
+
const index = Math.floor(returns.length * confidence);
|
|
144
|
+
return Math.abs(sortedReturns[index] || 0);
|
|
145
|
+
}
|
|
146
|
+
// =============================================================================
|
|
147
|
+
// Order & Trading Calculations
|
|
148
|
+
// =============================================================================
|
|
149
|
+
/**
|
|
150
|
+
* Calculate order fill ratio
|
|
151
|
+
*/
|
|
152
|
+
export function calculateFillRatio(order) {
|
|
153
|
+
if (order.quantity === 0)
|
|
154
|
+
return 0;
|
|
155
|
+
return (order.filledQuantity / order.quantity) * 100;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Calculate slippage
|
|
159
|
+
*/
|
|
160
|
+
export function calculateSlippage(expectedPrice, executedPrice, side) {
|
|
161
|
+
if (expectedPrice === 0)
|
|
162
|
+
return 0;
|
|
163
|
+
const diff = side === 'buy'
|
|
164
|
+
? executedPrice - expectedPrice
|
|
165
|
+
: expectedPrice - executedPrice;
|
|
166
|
+
return (diff / expectedPrice) * 100;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Calculate optimal order size based on market impact
|
|
170
|
+
*/
|
|
171
|
+
export function calculateOptimalOrderSize(availableLiquidity, targetSize, maxMarketImpact = 0.5 // 0.5% max impact
|
|
172
|
+
) {
|
|
173
|
+
const maxSafeSize = availableLiquidity * (maxMarketImpact / 100);
|
|
174
|
+
return Math.min(targetSize, maxSafeSize);
|
|
175
|
+
}
|
|
176
|
+
// =============================================================================
|
|
177
|
+
// DeFi Calculations
|
|
178
|
+
// =============================================================================
|
|
179
|
+
/**
|
|
180
|
+
* Calculate APY from APR
|
|
181
|
+
*/
|
|
182
|
+
export function aprToApy(apr, compoundingPeriods = 365) {
|
|
183
|
+
return (Math.pow(1 + (apr / compoundingPeriods), compoundingPeriods) - 1) * 100;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Calculate yield farming returns
|
|
187
|
+
*/
|
|
188
|
+
export function calculateYieldFarmingReturns(principal, apy, days, compounding = true) {
|
|
189
|
+
const periods = compounding ? days : 1;
|
|
190
|
+
const rate = apy / 100 / (compounding ? 365 : 1);
|
|
191
|
+
const totalReturn = compounding
|
|
192
|
+
? principal * Math.pow(1 + rate, periods)
|
|
193
|
+
: principal + (principal * rate * days);
|
|
194
|
+
return {
|
|
195
|
+
totalReturn,
|
|
196
|
+
profit: totalReturn - principal
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Calculate impermanent loss for liquidity provision
|
|
201
|
+
*/
|
|
202
|
+
export function calculateImpermanentLoss(initialPrice1, initialPrice2, currentPrice1, currentPrice2) {
|
|
203
|
+
const priceRatio = (currentPrice1 / currentPrice2) / (initialPrice1 / initialPrice2);
|
|
204
|
+
const impermanentLoss = (2 * Math.sqrt(priceRatio)) / (1 + priceRatio) - 1;
|
|
205
|
+
return Math.abs(impermanentLoss) * 100;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Compare yield opportunities
|
|
209
|
+
*/
|
|
210
|
+
export function rankYieldOpportunities(opportunities) {
|
|
211
|
+
return opportunities.sort((a, b) => {
|
|
212
|
+
// Risk-adjusted APY calculation (simple risk penalty)
|
|
213
|
+
const riskPenalty = { low: 1, medium: 0.8, high: 0.6 };
|
|
214
|
+
const adjustedApyA = a.apy * riskPenalty[a.risk];
|
|
215
|
+
const adjustedApyB = b.apy * riskPenalty[b.risk];
|
|
216
|
+
return adjustedApyB - adjustedApyA;
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
// =============================================================================
|
|
220
|
+
// Utility Functions
|
|
221
|
+
// =============================================================================
|
|
222
|
+
/**
|
|
223
|
+
* Convert timeframe to milliseconds
|
|
224
|
+
*/
|
|
225
|
+
export function timeFrameToMs(timeFrame) {
|
|
226
|
+
const units = {
|
|
227
|
+
second: 1000,
|
|
228
|
+
minute: 60 * 1000,
|
|
229
|
+
hour: 60 * 60 * 1000,
|
|
230
|
+
day: 24 * 60 * 60 * 1000,
|
|
231
|
+
week: 7 * 24 * 60 * 60 * 1000,
|
|
232
|
+
month: 30 * 24 * 60 * 60 * 1000
|
|
233
|
+
};
|
|
234
|
+
return timeFrame.value * units[timeFrame.unit];
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Format currency with appropriate decimal places
|
|
238
|
+
*/
|
|
239
|
+
export function formatCurrency(amount, decimals = 2) {
|
|
240
|
+
return new Intl.NumberFormat('en-US', {
|
|
241
|
+
style: 'currency',
|
|
242
|
+
currency: 'USD',
|
|
243
|
+
minimumFractionDigits: decimals,
|
|
244
|
+
maximumFractionDigits: decimals
|
|
245
|
+
}).format(amount);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Format percentage with sign
|
|
249
|
+
*/
|
|
250
|
+
export function formatPercentage(value, decimals = 2) {
|
|
251
|
+
const sign = value >= 0 ? '+' : '';
|
|
252
|
+
return `${sign}${value.toFixed(decimals)}%`;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Check if price is within range
|
|
256
|
+
*/
|
|
257
|
+
export function isPriceInRange(price, range) {
|
|
258
|
+
return price >= range.min && price <= range.max;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Calculate distance from price to range bounds
|
|
262
|
+
*/
|
|
263
|
+
export function distanceToRange(price, range) {
|
|
264
|
+
return {
|
|
265
|
+
toMin: Math.abs(price - range.min),
|
|
266
|
+
toMax: Math.abs(price - range.max)
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Generate trading session ID
|
|
271
|
+
*/
|
|
272
|
+
export function generateSessionId() {
|
|
273
|
+
const timestamp = Date.now().toString(36);
|
|
274
|
+
const random = Math.random().toString(36).substr(2, 5);
|
|
275
|
+
return `${timestamp}-${random}`;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Validate trading symbol format
|
|
279
|
+
*/
|
|
280
|
+
export function isValidSymbol(symbol) {
|
|
281
|
+
// Basic validation for crypto trading pairs
|
|
282
|
+
const regex = /^[A-Z]{2,10}[\/\-][A-Z]{2,10}$/;
|
|
283
|
+
return regex.test(symbol);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Normalize symbol format
|
|
287
|
+
*/
|
|
288
|
+
export function normalizeSymbol(symbol) {
|
|
289
|
+
return symbol.toUpperCase().replace('-', '/');
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/trading/utils.ts"],"names":[],"mappings":"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"}
|