@clawnch/clawncher-sdk 0.1.3 → 0.2.0
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/analytics.d.ts +157 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +468 -0
- package/dist/analytics.js.map +1 -0
- package/dist/api-deployer.d.ts.map +1 -1
- package/dist/api-deployer.js +38 -35
- package/dist/api-deployer.js.map +1 -1
- package/dist/claimer.d.ts.map +1 -1
- package/dist/claimer.js +9 -7
- package/dist/claimer.js.map +1 -1
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +47 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/liquidity.d.ts +1 -1
- package/dist/liquidity.d.ts.map +1 -1
- package/dist/liquidity.js +5 -42
- package/dist/liquidity.js.map +1 -1
- package/dist/orders.d.ts +338 -0
- package/dist/orders.d.ts.map +1 -0
- package/dist/orders.js +611 -0
- package/dist/orders.js.map +1 -0
- package/dist/price.d.ts +95 -0
- package/dist/price.d.ts.map +1 -0
- package/dist/price.js +207 -0
- package/dist/price.js.map +1 -0
- package/dist/swap.d.ts.map +1 -1
- package/dist/swap.js +21 -19
- package/dist/swap.js.map +1 -1
- package/dist/trader.d.ts +188 -0
- package/dist/trader.d.ts.map +1 -0
- package/dist/trader.js +277 -0
- package/dist/trader.js.map +1 -0
- package/dist/watcher.d.ts +117 -2
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +147 -2
- package/dist/watcher.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClawnchAnalytics — Price history aggregation and technical indicators.
|
|
3
|
+
*
|
|
4
|
+
* Builds OHLCV candles from on-chain swap events and computes basic
|
|
5
|
+
* technical indicators the agent can use for trading decisions.
|
|
6
|
+
*
|
|
7
|
+
* Indicators:
|
|
8
|
+
* - SMA (Simple Moving Average) — trend direction
|
|
9
|
+
* - EMA (Exponential Moving Average) — responsive trend
|
|
10
|
+
* - RSI (Relative Strength Index) — overbought/oversold
|
|
11
|
+
* - Bollinger Bands — volatility + mean reversion
|
|
12
|
+
* - VWAP (Volume-Weighted Average Price) — fair price
|
|
13
|
+
* - Volatility (annualized, from returns)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const analytics = new ClawnchAnalytics();
|
|
18
|
+
*
|
|
19
|
+
* // Build candles from swap events
|
|
20
|
+
* const swaps = await watcher.getRecentSwaps(poolId, { fromBlock: 1000n });
|
|
21
|
+
* const candles = analytics.buildCandles(swaps, wethSide, '1h');
|
|
22
|
+
*
|
|
23
|
+
* // Compute indicators
|
|
24
|
+
* const sma20 = analytics.sma(candles, 20);
|
|
25
|
+
* const rsi14 = analytics.rsi(candles, 14);
|
|
26
|
+
* const bb = analytics.bollingerBands(candles, 20, 2);
|
|
27
|
+
*
|
|
28
|
+
* // Get a full analysis
|
|
29
|
+
* const analysis = analytics.analyze(candles);
|
|
30
|
+
* console.log(analysis.signal); // 'bullish' | 'bearish' | 'neutral'
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
import type { PoolSwapEvent } from './watcher.js';
|
|
34
|
+
export interface Candle {
|
|
35
|
+
/** Period start timestamp (ms) */
|
|
36
|
+
timestamp: number;
|
|
37
|
+
/** Opening price in ETH */
|
|
38
|
+
open: number;
|
|
39
|
+
/** Highest price in period */
|
|
40
|
+
high: number;
|
|
41
|
+
/** Lowest price in period */
|
|
42
|
+
low: number;
|
|
43
|
+
/** Closing price in ETH */
|
|
44
|
+
close: number;
|
|
45
|
+
/** Volume in ETH (absolute value of WETH side) */
|
|
46
|
+
volume: number;
|
|
47
|
+
/** Number of swaps in this candle */
|
|
48
|
+
swapCount: number;
|
|
49
|
+
}
|
|
50
|
+
export type CandleInterval = '5m' | '15m' | '1h' | '4h' | '1d';
|
|
51
|
+
export interface BollingerBand {
|
|
52
|
+
upper: number;
|
|
53
|
+
middle: number;
|
|
54
|
+
lower: number;
|
|
55
|
+
bandwidth: number;
|
|
56
|
+
}
|
|
57
|
+
export type Signal = 'strong_buy' | 'buy' | 'neutral' | 'sell' | 'strong_sell';
|
|
58
|
+
export interface MarketAnalysis {
|
|
59
|
+
/** Overall signal */
|
|
60
|
+
signal: Signal;
|
|
61
|
+
/** Signal strength 0-100 */
|
|
62
|
+
strength: number;
|
|
63
|
+
/** Individual indicator signals */
|
|
64
|
+
indicators: {
|
|
65
|
+
sma20: {
|
|
66
|
+
value: number;
|
|
67
|
+
signal: Signal;
|
|
68
|
+
};
|
|
69
|
+
sma50: {
|
|
70
|
+
value: number;
|
|
71
|
+
signal: Signal;
|
|
72
|
+
};
|
|
73
|
+
rsi14: {
|
|
74
|
+
value: number;
|
|
75
|
+
signal: Signal;
|
|
76
|
+
};
|
|
77
|
+
bollinger: {
|
|
78
|
+
band: BollingerBand;
|
|
79
|
+
signal: Signal;
|
|
80
|
+
};
|
|
81
|
+
vwap: {
|
|
82
|
+
value: number;
|
|
83
|
+
signal: Signal;
|
|
84
|
+
};
|
|
85
|
+
volatility: {
|
|
86
|
+
annualized: number;
|
|
87
|
+
signal: Signal;
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
/** Current price */
|
|
91
|
+
currentPrice: number;
|
|
92
|
+
/** Volume trend */
|
|
93
|
+
volumeTrend: 'increasing' | 'decreasing' | 'stable';
|
|
94
|
+
/** Human-readable summary for agent prompt */
|
|
95
|
+
summary: string;
|
|
96
|
+
}
|
|
97
|
+
export declare class ClawnchAnalytics {
|
|
98
|
+
/**
|
|
99
|
+
* Build OHLCV candles from raw swap events.
|
|
100
|
+
*
|
|
101
|
+
* @param swaps - Pool swap events (from ClawnchWatcher.getRecentSwaps)
|
|
102
|
+
* @param wethSide - Which side WETH is on in the pool (0 or 1)
|
|
103
|
+
* @param interval - Candle interval
|
|
104
|
+
* @param tokenDecimals - Token decimals (default 18)
|
|
105
|
+
* @returns Sorted candles (oldest first)
|
|
106
|
+
*/
|
|
107
|
+
buildCandles(swaps: PoolSwapEvent[], wethSide: 0 | 1, interval?: CandleInterval, tokenDecimals?: number): Candle[];
|
|
108
|
+
/**
|
|
109
|
+
* Build candles from pre-priced data (e.g. from a price feed or manual entries).
|
|
110
|
+
* Useful when you already have timestamp + price data rather than raw swap events.
|
|
111
|
+
*/
|
|
112
|
+
buildCandlesFromPrices(data: Array<{
|
|
113
|
+
timestamp: number;
|
|
114
|
+
price: number;
|
|
115
|
+
volume?: number;
|
|
116
|
+
}>, interval?: CandleInterval): Candle[];
|
|
117
|
+
/**
|
|
118
|
+
* Simple Moving Average over closing prices.
|
|
119
|
+
*/
|
|
120
|
+
sma(candles: Candle[], period: number): number[];
|
|
121
|
+
/**
|
|
122
|
+
* Exponential Moving Average over closing prices.
|
|
123
|
+
*/
|
|
124
|
+
ema(candles: Candle[], period: number): number[];
|
|
125
|
+
/**
|
|
126
|
+
* Relative Strength Index.
|
|
127
|
+
* RSI < 30 → oversold, RSI > 70 → overbought.
|
|
128
|
+
*/
|
|
129
|
+
rsi(candles: Candle[], period?: number): number[];
|
|
130
|
+
/**
|
|
131
|
+
* Bollinger Bands (SMA ± k standard deviations).
|
|
132
|
+
*/
|
|
133
|
+
bollingerBands(candles: Candle[], period?: number, k?: number): BollingerBand[];
|
|
134
|
+
/**
|
|
135
|
+
* Volume-Weighted Average Price.
|
|
136
|
+
*/
|
|
137
|
+
vwap(candles: Candle[]): number;
|
|
138
|
+
/**
|
|
139
|
+
* Annualized volatility from closing prices.
|
|
140
|
+
* Uses log returns and scales to annual (assuming 24h candles for daily vol,
|
|
141
|
+
* or scaled by intervals per year).
|
|
142
|
+
*/
|
|
143
|
+
volatility(candles: Candle[], interval?: CandleInterval): number;
|
|
144
|
+
/**
|
|
145
|
+
* Run all indicators and produce a combined signal + human summary.
|
|
146
|
+
*/
|
|
147
|
+
analyze(candles: Candle[], interval?: CandleInterval): MarketAnalysis | null;
|
|
148
|
+
private smaFromValues;
|
|
149
|
+
private emaFromValues;
|
|
150
|
+
private signalFromSMA;
|
|
151
|
+
private signalFromRSI;
|
|
152
|
+
private signalFromBB;
|
|
153
|
+
private signalFromVWAP;
|
|
154
|
+
private signalFromVolatility;
|
|
155
|
+
private compositeSignal;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClawnchAnalytics — Price history aggregation and technical indicators.
|
|
3
|
+
*
|
|
4
|
+
* Builds OHLCV candles from on-chain swap events and computes basic
|
|
5
|
+
* technical indicators the agent can use for trading decisions.
|
|
6
|
+
*
|
|
7
|
+
* Indicators:
|
|
8
|
+
* - SMA (Simple Moving Average) — trend direction
|
|
9
|
+
* - EMA (Exponential Moving Average) — responsive trend
|
|
10
|
+
* - RSI (Relative Strength Index) — overbought/oversold
|
|
11
|
+
* - Bollinger Bands — volatility + mean reversion
|
|
12
|
+
* - VWAP (Volume-Weighted Average Price) — fair price
|
|
13
|
+
* - Volatility (annualized, from returns)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const analytics = new ClawnchAnalytics();
|
|
18
|
+
*
|
|
19
|
+
* // Build candles from swap events
|
|
20
|
+
* const swaps = await watcher.getRecentSwaps(poolId, { fromBlock: 1000n });
|
|
21
|
+
* const candles = analytics.buildCandles(swaps, wethSide, '1h');
|
|
22
|
+
*
|
|
23
|
+
* // Compute indicators
|
|
24
|
+
* const sma20 = analytics.sma(candles, 20);
|
|
25
|
+
* const rsi14 = analytics.rsi(candles, 14);
|
|
26
|
+
* const bb = analytics.bollingerBands(candles, 20, 2);
|
|
27
|
+
*
|
|
28
|
+
* // Get a full analysis
|
|
29
|
+
* const analysis = analytics.analyze(candles);
|
|
30
|
+
* console.log(analysis.signal); // 'bullish' | 'bearish' | 'neutral'
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// Interval durations
|
|
35
|
+
// ============================================================================
|
|
36
|
+
const INTERVAL_MS = {
|
|
37
|
+
'5m': 5 * 60 * 1000,
|
|
38
|
+
'15m': 15 * 60 * 1000,
|
|
39
|
+
'1h': 60 * 60 * 1000,
|
|
40
|
+
'4h': 4 * 60 * 60 * 1000,
|
|
41
|
+
'1d': 24 * 60 * 60 * 1000,
|
|
42
|
+
};
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// ClawnchAnalytics
|
|
45
|
+
// ============================================================================
|
|
46
|
+
export class ClawnchAnalytics {
|
|
47
|
+
// --------------------------------------------------------------------------
|
|
48
|
+
// Candle construction
|
|
49
|
+
// --------------------------------------------------------------------------
|
|
50
|
+
/**
|
|
51
|
+
* Build OHLCV candles from raw swap events.
|
|
52
|
+
*
|
|
53
|
+
* @param swaps - Pool swap events (from ClawnchWatcher.getRecentSwaps)
|
|
54
|
+
* @param wethSide - Which side WETH is on in the pool (0 or 1)
|
|
55
|
+
* @param interval - Candle interval
|
|
56
|
+
* @param tokenDecimals - Token decimals (default 18)
|
|
57
|
+
* @returns Sorted candles (oldest first)
|
|
58
|
+
*/
|
|
59
|
+
buildCandles(swaps, wethSide, interval = '1h', tokenDecimals = 18) {
|
|
60
|
+
if (swaps.length === 0)
|
|
61
|
+
return [];
|
|
62
|
+
const intervalMs = INTERVAL_MS[interval];
|
|
63
|
+
const priced = [];
|
|
64
|
+
for (const swap of swaps) {
|
|
65
|
+
// Extract WETH and token amounts
|
|
66
|
+
const amount0 = Number(swap.amount0) / 1e18;
|
|
67
|
+
const amount1 = Number(swap.amount1) / (10 ** tokenDecimals);
|
|
68
|
+
let wethAmount;
|
|
69
|
+
let tokenAmount;
|
|
70
|
+
if (wethSide === 0) {
|
|
71
|
+
wethAmount = Math.abs(amount0);
|
|
72
|
+
tokenAmount = Math.abs(amount1);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
wethAmount = Math.abs(amount1);
|
|
76
|
+
tokenAmount = Math.abs(amount0);
|
|
77
|
+
}
|
|
78
|
+
// Price = WETH per token
|
|
79
|
+
if (tokenAmount === 0)
|
|
80
|
+
continue;
|
|
81
|
+
const price = wethAmount / tokenAmount;
|
|
82
|
+
if (!isFinite(price) || price <= 0)
|
|
83
|
+
continue;
|
|
84
|
+
// We don't have timestamps on swap events (only block numbers).
|
|
85
|
+
// Use blockNumber as a proxy — caller should provide events from a known time range.
|
|
86
|
+
// For now, approximate timestamp from block number (Base ~2s blocks).
|
|
87
|
+
// Better: caller provides a block-to-timestamp mapping.
|
|
88
|
+
const approxTimestamp = Number(swap.blockNumber) * 2000; // rough approximation
|
|
89
|
+
priced.push({
|
|
90
|
+
timestamp: approxTimestamp,
|
|
91
|
+
price,
|
|
92
|
+
volume: wethAmount,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (priced.length === 0)
|
|
96
|
+
return [];
|
|
97
|
+
// Sort by timestamp
|
|
98
|
+
priced.sort((a, b) => a.timestamp - b.timestamp);
|
|
99
|
+
// Group into candles
|
|
100
|
+
const candles = [];
|
|
101
|
+
let currentBucket = Math.floor(priced[0].timestamp / intervalMs) * intervalMs;
|
|
102
|
+
let candle = {
|
|
103
|
+
timestamp: currentBucket,
|
|
104
|
+
open: priced[0].price,
|
|
105
|
+
high: priced[0].price,
|
|
106
|
+
low: priced[0].price,
|
|
107
|
+
close: priced[0].price,
|
|
108
|
+
volume: 0,
|
|
109
|
+
swapCount: 0,
|
|
110
|
+
};
|
|
111
|
+
for (const p of priced) {
|
|
112
|
+
const bucket = Math.floor(p.timestamp / intervalMs) * intervalMs;
|
|
113
|
+
if (bucket !== currentBucket) {
|
|
114
|
+
candles.push(candle);
|
|
115
|
+
currentBucket = bucket;
|
|
116
|
+
candle = {
|
|
117
|
+
timestamp: bucket,
|
|
118
|
+
open: p.price,
|
|
119
|
+
high: p.price,
|
|
120
|
+
low: p.price,
|
|
121
|
+
close: p.price,
|
|
122
|
+
volume: 0,
|
|
123
|
+
swapCount: 0,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
candle.high = Math.max(candle.high, p.price);
|
|
127
|
+
candle.low = Math.min(candle.low, p.price);
|
|
128
|
+
candle.close = p.price;
|
|
129
|
+
candle.volume += p.volume;
|
|
130
|
+
candle.swapCount++;
|
|
131
|
+
}
|
|
132
|
+
candles.push(candle); // push the last candle
|
|
133
|
+
return candles;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Build candles from pre-priced data (e.g. from a price feed or manual entries).
|
|
137
|
+
* Useful when you already have timestamp + price data rather than raw swap events.
|
|
138
|
+
*/
|
|
139
|
+
buildCandlesFromPrices(data, interval = '1h') {
|
|
140
|
+
if (data.length === 0)
|
|
141
|
+
return [];
|
|
142
|
+
const intervalMs = INTERVAL_MS[interval];
|
|
143
|
+
const sorted = [...data].sort((a, b) => a.timestamp - b.timestamp);
|
|
144
|
+
const candles = [];
|
|
145
|
+
let currentBucket = Math.floor(sorted[0].timestamp / intervalMs) * intervalMs;
|
|
146
|
+
let candle = {
|
|
147
|
+
timestamp: currentBucket,
|
|
148
|
+
open: sorted[0].price,
|
|
149
|
+
high: sorted[0].price,
|
|
150
|
+
low: sorted[0].price,
|
|
151
|
+
close: sorted[0].price,
|
|
152
|
+
volume: 0,
|
|
153
|
+
swapCount: 0,
|
|
154
|
+
};
|
|
155
|
+
for (const p of sorted) {
|
|
156
|
+
const bucket = Math.floor(p.timestamp / intervalMs) * intervalMs;
|
|
157
|
+
if (bucket !== currentBucket) {
|
|
158
|
+
candles.push(candle);
|
|
159
|
+
currentBucket = bucket;
|
|
160
|
+
candle = {
|
|
161
|
+
timestamp: bucket,
|
|
162
|
+
open: p.price,
|
|
163
|
+
high: p.price,
|
|
164
|
+
low: p.price,
|
|
165
|
+
close: p.price,
|
|
166
|
+
volume: 0,
|
|
167
|
+
swapCount: 0,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
candle.high = Math.max(candle.high, p.price);
|
|
171
|
+
candle.low = Math.min(candle.low, p.price);
|
|
172
|
+
candle.close = p.price;
|
|
173
|
+
candle.volume += p.volume ?? 0;
|
|
174
|
+
candle.swapCount++;
|
|
175
|
+
}
|
|
176
|
+
candles.push(candle);
|
|
177
|
+
return candles;
|
|
178
|
+
}
|
|
179
|
+
// --------------------------------------------------------------------------
|
|
180
|
+
// Technical indicators
|
|
181
|
+
// --------------------------------------------------------------------------
|
|
182
|
+
/**
|
|
183
|
+
* Simple Moving Average over closing prices.
|
|
184
|
+
*/
|
|
185
|
+
sma(candles, period) {
|
|
186
|
+
const closes = candles.map(c => c.close);
|
|
187
|
+
return this.smaFromValues(closes, period);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Exponential Moving Average over closing prices.
|
|
191
|
+
*/
|
|
192
|
+
ema(candles, period) {
|
|
193
|
+
const closes = candles.map(c => c.close);
|
|
194
|
+
return this.emaFromValues(closes, period);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Relative Strength Index.
|
|
198
|
+
* RSI < 30 → oversold, RSI > 70 → overbought.
|
|
199
|
+
*/
|
|
200
|
+
rsi(candles, period = 14) {
|
|
201
|
+
const closes = candles.map(c => c.close);
|
|
202
|
+
if (closes.length < period + 1)
|
|
203
|
+
return [];
|
|
204
|
+
const changes = [];
|
|
205
|
+
for (let i = 1; i < closes.length; i++) {
|
|
206
|
+
changes.push(closes[i] - closes[i - 1]);
|
|
207
|
+
}
|
|
208
|
+
const result = [];
|
|
209
|
+
// Initial averages
|
|
210
|
+
let avgGain = 0;
|
|
211
|
+
let avgLoss = 0;
|
|
212
|
+
for (let i = 0; i < period; i++) {
|
|
213
|
+
if (changes[i] >= 0)
|
|
214
|
+
avgGain += changes[i];
|
|
215
|
+
else
|
|
216
|
+
avgLoss += Math.abs(changes[i]);
|
|
217
|
+
}
|
|
218
|
+
avgGain /= period;
|
|
219
|
+
avgLoss /= period;
|
|
220
|
+
const rs0 = avgLoss === 0 ? 100 : avgGain / avgLoss;
|
|
221
|
+
result.push(100 - 100 / (1 + rs0));
|
|
222
|
+
// Subsequent values (smoothed)
|
|
223
|
+
for (let i = period; i < changes.length; i++) {
|
|
224
|
+
const gain = changes[i] >= 0 ? changes[i] : 0;
|
|
225
|
+
const loss = changes[i] < 0 ? Math.abs(changes[i]) : 0;
|
|
226
|
+
avgGain = (avgGain * (period - 1) + gain) / period;
|
|
227
|
+
avgLoss = (avgLoss * (period - 1) + loss) / period;
|
|
228
|
+
const rs = avgLoss === 0 ? 100 : avgGain / avgLoss;
|
|
229
|
+
result.push(100 - 100 / (1 + rs));
|
|
230
|
+
}
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Bollinger Bands (SMA ± k standard deviations).
|
|
235
|
+
*/
|
|
236
|
+
bollingerBands(candles, period = 20, k = 2) {
|
|
237
|
+
const closes = candles.map(c => c.close);
|
|
238
|
+
if (closes.length < period)
|
|
239
|
+
return [];
|
|
240
|
+
const result = [];
|
|
241
|
+
for (let i = period - 1; i < closes.length; i++) {
|
|
242
|
+
const slice = closes.slice(i - period + 1, i + 1);
|
|
243
|
+
const mean = slice.reduce((a, b) => a + b, 0) / period;
|
|
244
|
+
const variance = slice.reduce((sum, v) => sum + (v - mean) ** 2, 0) / period;
|
|
245
|
+
const stdDev = Math.sqrt(variance);
|
|
246
|
+
result.push({
|
|
247
|
+
upper: mean + k * stdDev,
|
|
248
|
+
middle: mean,
|
|
249
|
+
lower: mean - k * stdDev,
|
|
250
|
+
bandwidth: stdDev > 0 ? (2 * k * stdDev) / mean : 0,
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Volume-Weighted Average Price.
|
|
257
|
+
*/
|
|
258
|
+
vwap(candles) {
|
|
259
|
+
let totalPriceVolume = 0;
|
|
260
|
+
let totalVolume = 0;
|
|
261
|
+
for (const c of candles) {
|
|
262
|
+
const typicalPrice = (c.high + c.low + c.close) / 3;
|
|
263
|
+
totalPriceVolume += typicalPrice * c.volume;
|
|
264
|
+
totalVolume += c.volume;
|
|
265
|
+
}
|
|
266
|
+
return totalVolume > 0 ? totalPriceVolume / totalVolume : 0;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Annualized volatility from closing prices.
|
|
270
|
+
* Uses log returns and scales to annual (assuming 24h candles for daily vol,
|
|
271
|
+
* or scaled by intervals per year).
|
|
272
|
+
*/
|
|
273
|
+
volatility(candles, interval = '1h') {
|
|
274
|
+
if (candles.length < 2)
|
|
275
|
+
return 0;
|
|
276
|
+
const closes = candles.map(c => c.close);
|
|
277
|
+
const logReturns = [];
|
|
278
|
+
for (let i = 1; i < closes.length; i++) {
|
|
279
|
+
if (closes[i - 1] > 0 && closes[i] > 0) {
|
|
280
|
+
logReturns.push(Math.log(closes[i] / closes[i - 1]));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (logReturns.length === 0)
|
|
284
|
+
return 0;
|
|
285
|
+
const mean = logReturns.reduce((a, b) => a + b, 0) / logReturns.length;
|
|
286
|
+
const variance = logReturns.reduce((sum, r) => sum + (r - mean) ** 2, 0) / logReturns.length;
|
|
287
|
+
const stdDev = Math.sqrt(variance);
|
|
288
|
+
// Annualize: multiply by sqrt(periods per year)
|
|
289
|
+
const intervalMs = INTERVAL_MS[interval];
|
|
290
|
+
const periodsPerYear = (365.25 * 24 * 60 * 60 * 1000) / intervalMs;
|
|
291
|
+
return stdDev * Math.sqrt(periodsPerYear);
|
|
292
|
+
}
|
|
293
|
+
// --------------------------------------------------------------------------
|
|
294
|
+
// Full analysis
|
|
295
|
+
// --------------------------------------------------------------------------
|
|
296
|
+
/**
|
|
297
|
+
* Run all indicators and produce a combined signal + human summary.
|
|
298
|
+
*/
|
|
299
|
+
analyze(candles, interval = '1h') {
|
|
300
|
+
if (candles.length < 50) {
|
|
301
|
+
// Not enough data for meaningful analysis
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
const currentPrice = candles[candles.length - 1].close;
|
|
305
|
+
const sma20Values = this.sma(candles, 20);
|
|
306
|
+
const sma50Values = this.sma(candles, 50);
|
|
307
|
+
const rsi14Values = this.rsi(candles, 14);
|
|
308
|
+
const bbValues = this.bollingerBands(candles, 20, 2);
|
|
309
|
+
const vwapValue = this.vwap(candles.slice(-20)); // VWAP over recent candles
|
|
310
|
+
const vol = this.volatility(candles, interval);
|
|
311
|
+
const sma20 = sma20Values[sma20Values.length - 1] ?? 0;
|
|
312
|
+
const sma50 = sma50Values[sma50Values.length - 1] ?? 0;
|
|
313
|
+
const rsi14 = rsi14Values[rsi14Values.length - 1] ?? 50;
|
|
314
|
+
const bb = bbValues[bbValues.length - 1] ?? { upper: 0, middle: 0, lower: 0, bandwidth: 0 };
|
|
315
|
+
// Individual signals
|
|
316
|
+
const sma20Signal = this.signalFromSMA(currentPrice, sma20);
|
|
317
|
+
const sma50Signal = this.signalFromSMA(currentPrice, sma50);
|
|
318
|
+
const rsiSignal = this.signalFromRSI(rsi14);
|
|
319
|
+
const bbSignal = this.signalFromBB(currentPrice, bb);
|
|
320
|
+
const vwapSignal = this.signalFromVWAP(currentPrice, vwapValue);
|
|
321
|
+
const volSignal = this.signalFromVolatility(vol);
|
|
322
|
+
// Volume trend
|
|
323
|
+
const recentVol = candles.slice(-10).reduce((s, c) => s + c.volume, 0);
|
|
324
|
+
const olderVol = candles.slice(-20, -10).reduce((s, c) => s + c.volume, 0);
|
|
325
|
+
const volumeTrend = olderVol > 0 && recentVol > olderVol * 1.3 ? 'increasing' :
|
|
326
|
+
olderVol > 0 && recentVol < olderVol * 0.7 ? 'decreasing' : 'stable';
|
|
327
|
+
// Composite signal
|
|
328
|
+
const signals = [sma20Signal, sma50Signal, rsiSignal, bbSignal, vwapSignal];
|
|
329
|
+
const { signal, strength } = this.compositeSignal(signals);
|
|
330
|
+
// Summary text
|
|
331
|
+
const summaryLines = [];
|
|
332
|
+
summaryLines.push(`Price: ${currentPrice.toExponential(4)} ETH`);
|
|
333
|
+
summaryLines.push(`SMA20: ${sma20.toExponential(4)} (${sma20Signal}) | SMA50: ${sma50.toExponential(4)} (${sma50Signal})`);
|
|
334
|
+
summaryLines.push(`RSI(14): ${rsi14.toFixed(1)} (${rsiSignal})`);
|
|
335
|
+
summaryLines.push(`BB: [${bb.lower.toExponential(3)} — ${bb.middle.toExponential(3)} — ${bb.upper.toExponential(3)}] (${bbSignal})`);
|
|
336
|
+
summaryLines.push(`VWAP: ${vwapValue.toExponential(4)} (${vwapSignal}) | Vol: ${(vol * 100).toFixed(0)}% ann. (${volSignal})`);
|
|
337
|
+
summaryLines.push(`Volume: ${volumeTrend}`);
|
|
338
|
+
summaryLines.push(`Signal: ${signal.toUpperCase()} (strength: ${strength}/100)`);
|
|
339
|
+
return {
|
|
340
|
+
signal,
|
|
341
|
+
strength,
|
|
342
|
+
indicators: {
|
|
343
|
+
sma20: { value: sma20, signal: sma20Signal },
|
|
344
|
+
sma50: { value: sma50, signal: sma50Signal },
|
|
345
|
+
rsi14: { value: rsi14, signal: rsiSignal },
|
|
346
|
+
bollinger: { band: bb, signal: bbSignal },
|
|
347
|
+
vwap: { value: vwapValue, signal: vwapSignal },
|
|
348
|
+
volatility: { annualized: vol, signal: volSignal },
|
|
349
|
+
},
|
|
350
|
+
currentPrice,
|
|
351
|
+
volumeTrend,
|
|
352
|
+
summary: summaryLines.join('\n'),
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
// --------------------------------------------------------------------------
|
|
356
|
+
// Internal helpers
|
|
357
|
+
// --------------------------------------------------------------------------
|
|
358
|
+
smaFromValues(values, period) {
|
|
359
|
+
if (values.length < period)
|
|
360
|
+
return [];
|
|
361
|
+
const result = [];
|
|
362
|
+
let sum = 0;
|
|
363
|
+
for (let i = 0; i < period; i++)
|
|
364
|
+
sum += values[i];
|
|
365
|
+
result.push(sum / period);
|
|
366
|
+
for (let i = period; i < values.length; i++) {
|
|
367
|
+
sum += values[i] - values[i - period];
|
|
368
|
+
result.push(sum / period);
|
|
369
|
+
}
|
|
370
|
+
return result;
|
|
371
|
+
}
|
|
372
|
+
emaFromValues(values, period) {
|
|
373
|
+
if (values.length < period)
|
|
374
|
+
return [];
|
|
375
|
+
const k = 2 / (period + 1);
|
|
376
|
+
// Seed with SMA
|
|
377
|
+
let ema = values.slice(0, period).reduce((a, b) => a + b, 0) / period;
|
|
378
|
+
const result = [ema];
|
|
379
|
+
for (let i = period; i < values.length; i++) {
|
|
380
|
+
ema = values[i] * k + ema * (1 - k);
|
|
381
|
+
result.push(ema);
|
|
382
|
+
}
|
|
383
|
+
return result;
|
|
384
|
+
}
|
|
385
|
+
signalFromSMA(price, sma) {
|
|
386
|
+
if (sma === 0)
|
|
387
|
+
return 'neutral';
|
|
388
|
+
const pctAbove = ((price - sma) / sma) * 100;
|
|
389
|
+
if (pctAbove > 10)
|
|
390
|
+
return 'strong_buy';
|
|
391
|
+
if (pctAbove > 2)
|
|
392
|
+
return 'buy';
|
|
393
|
+
if (pctAbove < -10)
|
|
394
|
+
return 'strong_sell';
|
|
395
|
+
if (pctAbove < -2)
|
|
396
|
+
return 'sell';
|
|
397
|
+
return 'neutral';
|
|
398
|
+
}
|
|
399
|
+
signalFromRSI(rsi) {
|
|
400
|
+
if (rsi < 20)
|
|
401
|
+
return 'strong_buy';
|
|
402
|
+
if (rsi < 30)
|
|
403
|
+
return 'buy';
|
|
404
|
+
if (rsi > 80)
|
|
405
|
+
return 'strong_sell';
|
|
406
|
+
if (rsi > 70)
|
|
407
|
+
return 'sell';
|
|
408
|
+
return 'neutral';
|
|
409
|
+
}
|
|
410
|
+
signalFromBB(price, bb) {
|
|
411
|
+
if (bb.upper === bb.lower)
|
|
412
|
+
return 'neutral';
|
|
413
|
+
const position = (price - bb.lower) / (bb.upper - bb.lower); // 0 = lower band, 1 = upper
|
|
414
|
+
if (position < 0.05)
|
|
415
|
+
return 'strong_buy'; // below lower band
|
|
416
|
+
if (position < 0.2)
|
|
417
|
+
return 'buy';
|
|
418
|
+
if (position > 0.95)
|
|
419
|
+
return 'strong_sell'; // above upper band
|
|
420
|
+
if (position > 0.8)
|
|
421
|
+
return 'sell';
|
|
422
|
+
return 'neutral';
|
|
423
|
+
}
|
|
424
|
+
signalFromVWAP(price, vwap) {
|
|
425
|
+
if (vwap === 0)
|
|
426
|
+
return 'neutral';
|
|
427
|
+
const pctDiff = ((price - vwap) / vwap) * 100;
|
|
428
|
+
if (pctDiff < -5)
|
|
429
|
+
return 'buy'; // trading below fair value
|
|
430
|
+
if (pctDiff > 5)
|
|
431
|
+
return 'sell'; // trading above fair value
|
|
432
|
+
return 'neutral';
|
|
433
|
+
}
|
|
434
|
+
signalFromVolatility(vol) {
|
|
435
|
+
// High volatility = caution (wider stops needed)
|
|
436
|
+
if (vol > 5)
|
|
437
|
+
return 'sell'; // extremely volatile, reduce exposure
|
|
438
|
+
if (vol > 3)
|
|
439
|
+
return 'neutral';
|
|
440
|
+
return 'buy'; // low vol, ok to take positions
|
|
441
|
+
}
|
|
442
|
+
compositeSignal(signals) {
|
|
443
|
+
const scores = {
|
|
444
|
+
strong_buy: 2,
|
|
445
|
+
buy: 1,
|
|
446
|
+
neutral: 0,
|
|
447
|
+
sell: -1,
|
|
448
|
+
strong_sell: -2,
|
|
449
|
+
};
|
|
450
|
+
const totalScore = signals.reduce((sum, s) => sum + scores[s], 0);
|
|
451
|
+
const maxPossible = signals.length * 2;
|
|
452
|
+
const normalized = maxPossible > 0 ? totalScore / maxPossible : 0; // -1 to 1
|
|
453
|
+
const strength = Math.round(Math.abs(normalized) * 100);
|
|
454
|
+
let signal;
|
|
455
|
+
if (normalized > 0.5)
|
|
456
|
+
signal = 'strong_buy';
|
|
457
|
+
else if (normalized > 0.15)
|
|
458
|
+
signal = 'buy';
|
|
459
|
+
else if (normalized < -0.5)
|
|
460
|
+
signal = 'strong_sell';
|
|
461
|
+
else if (normalized < -0.15)
|
|
462
|
+
signal = 'sell';
|
|
463
|
+
else
|
|
464
|
+
signal = 'neutral';
|
|
465
|
+
return { signal, strength };
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-deployer.d.ts","sourceRoot":"","sources":["../src/api-deployer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,EACL,KAAK,OAAO,EAQb,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EAGf,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EAEf,MAAM,yBAAyB,CAAC;AAejC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,EAAE,iBAAiB;IA8BrC;;;;;;;;OAQG;WACU,QAAQ,CACnB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC;IAoD1B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IAQvC;;;;;;;;OAQG;IACG,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"api-deployer.d.ts","sourceRoot":"","sources":["../src/api-deployer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,EACL,KAAK,OAAO,EAQb,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,eAAe,EAGf,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EAEf,MAAM,yBAAyB,CAAC;AAejC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoC;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,EAAE,iBAAiB;IA8BrC;;;;;;;;OAQG;WACU,QAAQ,CACnB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,cAAc,CAAC;IAoD1B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC;IAQvC;;;;;;;;OAQG;IACG,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAiChE;;OAEG;IACG,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAU5D;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAc1C;;;;;;;;;;;;;;OAcG;IACG,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6BnE;;;;;;;;;;OAUG;IACG,YAAY,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAwDzE;;OAEG;YACW,UAAU;CAmDzB"}
|