@continuumdao/continuum-node-sdk 1.3.30 → 1.3.32
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/agent-host-catalog.json +7 -0
- package/dist/core/chart/analysis/analysis-agent-view.d.ts.map +1 -1
- package/dist/core/chart/analysis/analysis-agent-view.js +48 -7
- package/dist/core/chart/analysis/analysis-agent-view.js.map +1 -1
- package/dist/core/chart/analysis/analysis-catalog.d.ts +19 -13
- package/dist/core/chart/analysis/analysis-catalog.d.ts.map +1 -1
- package/dist/core/chart/analysis/analysis-catalog.js +132 -106
- package/dist/core/chart/analysis/analysis-catalog.js.map +1 -1
- package/dist/core/chart/analysis/elliott-wave-drawings-tools.d.ts +31 -0
- package/dist/core/chart/analysis/elliott-wave-drawings-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/elliott-wave-drawings-tools.js +301 -0
- package/dist/core/chart/analysis/elliott-wave-drawings-tools.js.map +1 -0
- package/dist/core/chart/analysis/elliott-waves-analyze-tools.d.ts +161 -0
- package/dist/core/chart/analysis/elliott-waves-analyze-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/elliott-waves-analyze-tools.js +139 -0
- package/dist/core/chart/analysis/elliott-waves-analyze-tools.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/build-trade-uniswap-limit.d.ts +10 -0
- package/dist/core/chart/analysis/trade-setups/build-trade-uniswap-limit.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/build-trade-uniswap-limit.js +123 -0
- package/dist/core/chart/analysis/trade-setups/build-trade-uniswap-limit.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/build-trade.d.ts +29 -1
- package/dist/core/chart/analysis/trade-setups/build-trade.d.ts.map +1 -1
- package/dist/core/chart/analysis/trade-setups/build-trade.js +267 -8
- package/dist/core/chart/analysis/trade-setups/build-trade.js.map +1 -1
- package/dist/core/chart/analysis/trade-setups/elliott-waves-trade-setup.d.ts +50 -0
- package/dist/core/chart/analysis/trade-setups/elliott-waves-trade-setup.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/elliott-waves-trade-setup.js +116 -0
- package/dist/core/chart/analysis/trade-setups/elliott-waves-trade-setup.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/shared.d.ts +1 -1
- package/dist/core/chart/analysis/trade-setups/shared.d.ts.map +1 -1
- package/dist/core/chart/analysis/trade-setups/shared.js +2 -0
- package/dist/core/chart/analysis/trade-setups/shared.js.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.d.ts +13 -1
- package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.d.ts.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.js +11 -0
- package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.js.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts +2 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trade-idea-list.js +38 -3
- package/dist/core/chart/analysis/trade-setups/trade-idea-list.js.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts +4 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trade-idea.js +4 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea.js.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trade-purpose-format.d.ts +2 -0
- package/dist/core/chart/analysis/trade-setups/trade-purpose-format.d.ts.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trade-purpose-format.js +6 -0
- package/dist/core/chart/analysis/trade-setups/trade-purpose-format.js.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trade-setup-selection.d.ts +8 -1
- package/dist/core/chart/analysis/trade-setups/trade-setup-selection.d.ts.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trade-setup-selection.js +13 -0
- package/dist/core/chart/analysis/trade-setups/trade-setup-selection.js.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.d.ts +20 -0
- package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.d.ts.map +1 -1
- package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.js +54 -0
- package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.js.map +1 -1
- package/dist/core/chart/analysis/trade-setups/uniswap-tpsl-monitor.d.ts +41 -0
- package/dist/core/chart/analysis/trade-setups/uniswap-tpsl-monitor.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/uniswap-tpsl-monitor.js +80 -0
- package/dist/core/chart/analysis/trade-setups/uniswap-tpsl-monitor.js.map +1 -0
- package/dist/core/chart/fetch-agent-view.d.ts +17 -0
- package/dist/core/chart/fetch-agent-view.d.ts.map +1 -0
- package/dist/core/chart/fetch-agent-view.js +39 -0
- package/dist/core/chart/fetch-agent-view.js.map +1 -0
- package/dist/core/chart/live/binding-extract.d.ts.map +1 -1
- package/dist/core/chart/live/binding-extract.js +34 -2
- package/dist/core/chart/live/binding-extract.js.map +1 -1
- package/dist/core/chart/live/fetch-tick.d.ts.map +1 -1
- package/dist/core/chart/live/fetch-tick.js +25 -1
- package/dist/core/chart/live/fetch-tick.js.map +1 -1
- package/dist/core/chart/live/index.d.ts +1 -1
- package/dist/core/chart/live/index.d.ts.map +1 -1
- package/dist/core/chart/live/index.js +1 -1
- package/dist/core/chart/live/index.js.map +1 -1
- package/dist/core/chart/live/schemas.d.ts +1 -0
- package/dist/core/chart/live/schemas.d.ts.map +1 -1
- package/dist/core/chart/live/schemas.js +1 -0
- package/dist/core/chart/live/schemas.js.map +1 -1
- package/dist/core/chart/overlay-schemas.d.ts +241 -0
- package/dist/core/chart/overlay-schemas.d.ts.map +1 -1
- package/dist/core/chart/overlay-schemas.js +63 -0
- package/dist/core/chart/overlay-schemas.js.map +1 -1
- package/dist/core/chart/overlays.d.ts.map +1 -1
- package/dist/core/chart/overlays.js +72 -1
- package/dist/core/chart/overlays.js.map +1 -1
- package/dist/core/chart/prepare-from-rows.d.ts +60 -0
- package/dist/core/chart/prepare-from-rows.d.ts.map +1 -1
- package/dist/core/chart/schemas.d.ts +240 -0
- package/dist/core/chart/schemas.d.ts.map +1 -1
- package/dist/core/coinmarketcap/schemas.d.ts +2 -2
- package/dist/core/elliott-waves/analyze.d.ts +38 -0
- package/dist/core/elliott-waves/analyze.d.ts.map +1 -0
- package/dist/core/elliott-waves/analyze.js +276 -0
- package/dist/core/elliott-waves/analyze.js.map +1 -0
- package/dist/core/elliott-waves/constants.d.ts +24 -0
- package/dist/core/elliott-waves/constants.d.ts.map +1 -0
- package/dist/core/elliott-waves/constants.js +24 -0
- package/dist/core/elliott-waves/constants.js.map +1 -0
- package/dist/core/elliott-waves/data-requirements.d.ts +22 -0
- package/dist/core/elliott-waves/data-requirements.d.ts.map +1 -0
- package/dist/core/elliott-waves/data-requirements.js +105 -0
- package/dist/core/elliott-waves/data-requirements.js.map +1 -0
- package/dist/core/elliott-waves/fibonacci-projector.d.ts +7 -0
- package/dist/core/elliott-waves/fibonacci-projector.d.ts.map +1 -0
- package/dist/core/elliott-waves/fibonacci-projector.js +20 -0
- package/dist/core/elliott-waves/fibonacci-projector.js.map +1 -0
- package/dist/core/elliott-waves/impulse-detector.d.ts +11 -0
- package/dist/core/elliott-waves/impulse-detector.d.ts.map +1 -0
- package/dist/core/elliott-waves/impulse-detector.js +294 -0
- package/dist/core/elliott-waves/impulse-detector.js.map +1 -0
- package/dist/core/elliott-waves/index.d.ts +10 -0
- package/dist/core/elliott-waves/index.d.ts.map +1 -0
- package/dist/core/elliott-waves/index.js +10 -0
- package/dist/core/elliott-waves/index.js.map +1 -0
- package/dist/core/elliott-waves/pivot-scanner.d.ts +40 -0
- package/dist/core/elliott-waves/pivot-scanner.d.ts.map +1 -0
- package/dist/core/elliott-waves/pivot-scanner.js +121 -0
- package/dist/core/elliott-waves/pivot-scanner.js.map +1 -0
- package/dist/core/elliott-waves/projection-builder.d.ts +32 -0
- package/dist/core/elliott-waves/projection-builder.d.ts.map +1 -0
- package/dist/core/elliott-waves/projection-builder.js +153 -0
- package/dist/core/elliott-waves/projection-builder.js.map +1 -0
- package/dist/core/elliott-waves/types.d.ts +117 -0
- package/dist/core/elliott-waves/types.d.ts.map +1 -0
- package/dist/core/elliott-waves/types.js +6 -0
- package/dist/core/elliott-waves/types.js.map +1 -0
- package/dist/core/elliott-waves/wave-labeler.d.ts +34 -0
- package/dist/core/elliott-waves/wave-labeler.d.ts.map +1 -0
- package/dist/core/elliott-waves/wave-labeler.js +95 -0
- package/dist/core/elliott-waves/wave-labeler.js.map +1 -0
- package/dist/core/elliott-waves/wave-math.d.ts +10 -0
- package/dist/core/elliott-waves/wave-math.d.ts.map +1 -0
- package/dist/core/elliott-waves/wave-math.js +61 -0
- package/dist/core/elliott-waves/wave-math.js.map +1 -0
- package/dist/core/mpc/broadcast-sign-result.d.ts +1 -0
- package/dist/core/mpc/broadcast-sign-result.d.ts.map +1 -1
- package/dist/core/mpc/broadcast-sign-result.js +129 -0
- package/dist/core/mpc/broadcast-sign-result.js.map +1 -1
- package/dist/core/mpc/deliver-arcus-exchange.d.ts +17 -0
- package/dist/core/mpc/deliver-arcus-exchange.d.ts.map +1 -0
- package/dist/core/mpc/deliver-arcus-exchange.js +380 -0
- package/dist/core/mpc/deliver-arcus-exchange.js.map +1 -0
- package/dist/core/mpc/deliver-hyperliquid-exchange.d.ts +13 -0
- package/dist/core/mpc/deliver-hyperliquid-exchange.d.ts.map +1 -0
- package/dist/core/mpc/deliver-hyperliquid-exchange.js +93 -0
- package/dist/core/mpc/deliver-hyperliquid-exchange.js.map +1 -0
- package/dist/core/mpc/deliver-personal-sign.d.ts +13 -0
- package/dist/core/mpc/deliver-personal-sign.d.ts.map +1 -0
- package/dist/core/mpc/deliver-personal-sign.js +17 -0
- package/dist/core/mpc/deliver-personal-sign.js.map +1 -0
- package/dist/core/mpc/deliver-uniswapx-limit-order.d.ts +6 -0
- package/dist/core/mpc/deliver-uniswapx-limit-order.d.ts.map +1 -0
- package/dist/core/mpc/deliver-uniswapx-limit-order.js +59 -0
- package/dist/core/mpc/deliver-uniswapx-limit-order.js.map +1 -0
- package/dist/core/mpc/eip712-sign-request.d.ts +8 -0
- package/dist/core/mpc/eip712-sign-request.d.ts.map +1 -0
- package/dist/core/mpc/eip712-sign-request.js +65 -0
- package/dist/core/mpc/eip712-sign-request.js.map +1 -0
- package/dist/core/mpc/trigger-sign-result.d.ts.map +1 -1
- package/dist/core/mpc/trigger-sign-result.js +15 -1
- package/dist/core/mpc/trigger-sign-result.js.map +1 -1
- package/dist/mcp/agent-host-catalog.d.ts +1 -1
- package/dist/mcp/agent-host-catalog.d.ts.map +1 -1
- package/dist/mcp/agent-host-catalog.js +2 -1
- package/dist/mcp/agent-host-catalog.js.map +1 -1
- package/dist/mcp/chart.d.ts.map +1 -1
- package/dist/mcp/chart.js +33 -4
- package/dist/mcp/chart.js.map +1 -1
- package/dist/mcp/deferred/tool-group-map.d.ts.map +1 -1
- package/dist/mcp/deferred/tool-group-map.js +7 -0
- package/dist/mcp/deferred/tool-group-map.js.map +1 -1
- package/dist/mcp/defi/bitquery-api-key.d.ts +16 -0
- package/dist/mcp/defi/bitquery-api-key.d.ts.map +1 -0
- package/dist/mcp/defi/bitquery-api-key.js +86 -0
- package/dist/mcp/defi/bitquery-api-key.js.map +1 -0
- package/dist/mcp/defi/catalog-adapter.d.ts +3 -2
- package/dist/mcp/defi/catalog-adapter.d.ts.map +1 -1
- package/dist/mcp/defi/catalog-adapter.js +7 -2
- package/dist/mcp/defi/catalog-adapter.js.map +1 -1
- package/dist/mcp/defi/defi-protocol-fetch-meta.d.ts.map +1 -1
- package/dist/mcp/defi/defi-protocol-fetch-meta.js +8 -4
- package/dist/mcp/defi/defi-protocol-fetch-meta.js.map +1 -1
- package/dist/mcp/defi/eip712-multisign.d.ts +26 -0
- package/dist/mcp/defi/eip712-multisign.d.ts.map +1 -0
- package/dist/mcp/defi/eip712-multisign.js +74 -0
- package/dist/mcp/defi/eip712-multisign.js.map +1 -0
- package/dist/mcp/defi/handler.d.ts.map +1 -1
- package/dist/mcp/defi/handler.js +46 -29
- package/dist/mcp/defi/handler.js.map +1 -1
- package/dist/mcp/defi/ohlcv-chart-workflow.d.ts +4 -2
- package/dist/mcp/defi/ohlcv-chart-workflow.d.ts.map +1 -1
- package/dist/mcp/defi/ohlcv-chart-workflow.js +20 -8
- package/dist/mcp/defi/ohlcv-chart-workflow.js.map +1 -1
- package/dist/mcp/defi/register-protocol-tools.d.ts.map +1 -1
- package/dist/mcp/defi/register-protocol-tools.js +36 -5
- package/dist/mcp/defi/register-protocol-tools.js.map +1 -1
- package/dist/mcp/defi/tool-schemas.d.ts +1 -3
- package/dist/mcp/defi/tool-schemas.d.ts.map +1 -1
- package/dist/mcp/defi/uniswap-api-key.d.ts.map +1 -1
- package/dist/mcp/defi/uniswap-api-key.js +3 -0
- package/dist/mcp/defi/uniswap-api-key.js.map +1 -1
- package/dist/mcp/defi/uniswap-limit-order-input.d.ts +10 -0
- package/dist/mcp/defi/uniswap-limit-order-input.d.ts.map +1 -0
- package/dist/mcp/defi/uniswap-limit-order-input.js +39 -0
- package/dist/mcp/defi/uniswap-limit-order-input.js.map +1 -0
- package/dist/mcp/defi/uniswap-quote-input.d.ts.map +1 -1
- package/dist/mcp/defi/uniswap-quote-input.js +45 -26
- package/dist/mcp/defi/uniswap-quote-input.js.map +1 -1
- package/dist/mcp/defi/uniswap-v4-ohlcv-chains.d.ts +2 -2
- package/dist/mcp/defi/uniswap-v4-ohlcv-chains.js +3 -3
- package/dist/mcp/defi/uniswap-v4-ohlcv-chains.js.map +1 -1
- package/dist/mcp/ohlcv-session-wrapper.d.ts.map +1 -1
- package/dist/mcp/ohlcv-session-wrapper.js +56 -2
- package/dist/mcp/ohlcv-session-wrapper.js.map +1 -1
- package/dist/mcp/resources/agent-cron-jobs.md +22 -1
- package/dist/mcp/resources/chart-analysis.md +37 -3
- package/dist/mcp/resources/chart.md +5 -2
- package/dist/mcp/resources/uniswap-tpsl-monitor-cron.example.md +27 -0
- package/dist/mcp/trade-tools.d.ts.map +1 -1
- package/dist/mcp/trade-tools.js +192 -4
- package/dist/mcp/trade-tools.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { FIB_EXT_C, THRESHOLDS } from './constants.js';
|
|
2
|
+
import { buildExtensionProjection, buildRetracementProjection, buildW5Projection, makeJustification, w2RetraceLevels, w3ExtensionLevels, w4RetraceLevels, } from './projection-builder.js';
|
|
3
|
+
import { findAbsoluteExtreme, findConfirmedExtreme, findFibExtensionPivot, findFibRetracementPivot, findWave1, hasRecovery, } from './pivot-scanner.js';
|
|
4
|
+
import { exceedsInDirection, logDistance, logPrice } from './wave-math.js';
|
|
5
|
+
import { createCorrectiveWaves, createImpulseWaves, createInProgressWave, } from './wave-labeler.js';
|
|
6
|
+
function findW0(bars) {
|
|
7
|
+
const absLow = findAbsoluteExtreme(bars, false);
|
|
8
|
+
const absHigh = findAbsoluteExtreme(bars, true);
|
|
9
|
+
if (absLow.index <= absHigh.index) {
|
|
10
|
+
return { w0: absLow, isUptrend: true };
|
|
11
|
+
}
|
|
12
|
+
if (absHigh.index > 0) {
|
|
13
|
+
const w0 = findAbsoluteExtreme(bars, false, 0, absHigh.index);
|
|
14
|
+
return { w0, isUptrend: true };
|
|
15
|
+
}
|
|
16
|
+
return { w0: absHigh, isUptrend: false };
|
|
17
|
+
}
|
|
18
|
+
function hasSignificantReversal(bars, extreme, priorPoint, isUptrend, threshold = THRESHOLDS.defaultRecoveryThreshold) {
|
|
19
|
+
if (extreme.index >= bars.length - 1) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
const logExtreme = logPrice(extreme.price);
|
|
23
|
+
const logPrior = logPrice(priorPoint.price);
|
|
24
|
+
const move = Math.abs(logExtreme - logPrior);
|
|
25
|
+
return hasRecovery(bars, extreme.index, bars.length - 1, logExtreme, move, isUptrend, threshold);
|
|
26
|
+
}
|
|
27
|
+
function buildW2InProgress(w0, w1, degree) {
|
|
28
|
+
const w2Projection = buildRetracementProjection(w0.price, w1.price, w2RetraceLevels(), w0.price);
|
|
29
|
+
return createImpulseWaves({
|
|
30
|
+
pivots: [w0, w1],
|
|
31
|
+
justifications: [null],
|
|
32
|
+
degree,
|
|
33
|
+
inProgressLabel: 'Two',
|
|
34
|
+
inProgressProjection: w2Projection,
|
|
35
|
+
inProgressStart: w1,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function buildCorrectiveFromMorph(w0, w1, w2, bars, degree) {
|
|
39
|
+
const pivots = [w0, w1, w2];
|
|
40
|
+
const lastClose = bars[bars.length - 1].close;
|
|
41
|
+
const cProjection = buildExtensionProjection({
|
|
42
|
+
waveStart: w0.price,
|
|
43
|
+
waveEnd: w1.price,
|
|
44
|
+
extensionBase: w2.price,
|
|
45
|
+
levels: FIB_EXT_C,
|
|
46
|
+
invalidation: w0.price,
|
|
47
|
+
currentPrice: lastClose,
|
|
48
|
+
});
|
|
49
|
+
return createCorrectiveWaves({
|
|
50
|
+
pivots,
|
|
51
|
+
justifications: [null, null],
|
|
52
|
+
degree,
|
|
53
|
+
patternType: 'ZigZag',
|
|
54
|
+
inProgressLabel: 'C',
|
|
55
|
+
inProgressProjection: cProjection,
|
|
56
|
+
inProgressStart: w2,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function findW1(bars, w0, isUptrend) {
|
|
60
|
+
const result = findWave1(bars, w0, isUptrend);
|
|
61
|
+
if (result) {
|
|
62
|
+
return result.w1;
|
|
63
|
+
}
|
|
64
|
+
const ath = findAbsoluteExtreme(bars, isUptrend, w0.index + 1);
|
|
65
|
+
return ath.index < bars.length - 1 ? ath : null;
|
|
66
|
+
}
|
|
67
|
+
function isDiagonalOverlap(w4, w1, isUptrend) {
|
|
68
|
+
return isUptrend ? w4.price <= w1.price : w4.price >= w1.price;
|
|
69
|
+
}
|
|
70
|
+
export function detectImpulseWaves(bars, degree) {
|
|
71
|
+
if (bars.length < 2) {
|
|
72
|
+
const w0 = findAbsoluteExtreme(bars, true);
|
|
73
|
+
return {
|
|
74
|
+
waves: [createInProgressWave({
|
|
75
|
+
start: w0,
|
|
76
|
+
label: 'One',
|
|
77
|
+
degree,
|
|
78
|
+
projection: { targets: [], invalidationPoint: null },
|
|
79
|
+
})],
|
|
80
|
+
trendDirection: 'up',
|
|
81
|
+
patternType: 'impulse',
|
|
82
|
+
confirmedWaveCount: 0,
|
|
83
|
+
inProgressWave: 'One',
|
|
84
|
+
w0,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const { w0, isUptrend } = findW0(bars);
|
|
88
|
+
const trendDirection = isUptrend ? 'up' : 'down';
|
|
89
|
+
const isIntermediate = degree === 'minor' || degree === 'intermediate';
|
|
90
|
+
const lastClose = bars[bars.length - 1].close;
|
|
91
|
+
const w1 = findW1(bars, w0, isUptrend);
|
|
92
|
+
if (!w1) {
|
|
93
|
+
return {
|
|
94
|
+
waves: [createInProgressWave({
|
|
95
|
+
start: w0,
|
|
96
|
+
label: 'One',
|
|
97
|
+
degree,
|
|
98
|
+
projection: { targets: [], invalidationPoint: null },
|
|
99
|
+
})],
|
|
100
|
+
trendDirection,
|
|
101
|
+
patternType: 'impulse',
|
|
102
|
+
confirmedWaveCount: 0,
|
|
103
|
+
inProgressWave: 'One',
|
|
104
|
+
w0,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
const w2Match = findFibRetracementPivot({
|
|
108
|
+
bars,
|
|
109
|
+
waveStart: w0,
|
|
110
|
+
waveEnd: w1,
|
|
111
|
+
levels: w2RetraceLevels(),
|
|
112
|
+
isUptrend,
|
|
113
|
+
fromIndex: w1.index + 1,
|
|
114
|
+
});
|
|
115
|
+
const w2 = w2Match?.pivot ??
|
|
116
|
+
findConfirmedExtreme(bars, w1, !isUptrend);
|
|
117
|
+
if (!w2) {
|
|
118
|
+
const waves = buildW2InProgress(w0, w1, degree);
|
|
119
|
+
return {
|
|
120
|
+
waves,
|
|
121
|
+
trendDirection,
|
|
122
|
+
patternType: 'impulse',
|
|
123
|
+
confirmedWaveCount: 1,
|
|
124
|
+
inProgressWave: 'Two',
|
|
125
|
+
w0,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
if (isUptrend ? w2.price <= w0.price : w2.price >= w0.price) {
|
|
129
|
+
const waves = buildCorrectiveFromMorph(w0, w1, w2, bars, degree);
|
|
130
|
+
return {
|
|
131
|
+
waves,
|
|
132
|
+
trendDirection,
|
|
133
|
+
patternType: 'corrective',
|
|
134
|
+
confirmedWaveCount: 2,
|
|
135
|
+
inProgressWave: 'C',
|
|
136
|
+
w0,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const w2Just = w2Match
|
|
140
|
+
? makeJustification({
|
|
141
|
+
fibLevel: w2Match.fibLevel,
|
|
142
|
+
deviation: w2Match.deviation,
|
|
143
|
+
type: 'Retracement',
|
|
144
|
+
description: `${(w2Match.fibLevel * 100).toFixed(1)}% retrace of W0→W1`,
|
|
145
|
+
})
|
|
146
|
+
: null;
|
|
147
|
+
const w3Match = findFibExtensionPivot({
|
|
148
|
+
bars,
|
|
149
|
+
waveStart: w0.price,
|
|
150
|
+
waveEnd: w1.price,
|
|
151
|
+
extensionBase: w2,
|
|
152
|
+
levels: w3ExtensionLevels(isIntermediate),
|
|
153
|
+
isUptrend,
|
|
154
|
+
fromIndex: w2.index + 1,
|
|
155
|
+
});
|
|
156
|
+
let w3 = w3Match?.pivot ?? findAbsoluteExtreme(bars, isUptrend, w2.index + 1);
|
|
157
|
+
const w3ExceedsW1 = exceedsInDirection(w3.price, w1.price, isUptrend);
|
|
158
|
+
const w1LogLen = logDistance(w0.price, w1.price);
|
|
159
|
+
const w3LogLen = logDistance(w2.price, w3.price);
|
|
160
|
+
const w3LengthOk = w3LogLen >= w1LogLen * THRESHOLDS.w3LengthTolerance;
|
|
161
|
+
const w3Confirmed = w3ExceedsW1 && w3LengthOk && hasSignificantReversal(bars, w3, w2, isUptrend);
|
|
162
|
+
if (!w3ExceedsW1 || !w3LengthOk || !w3Confirmed) {
|
|
163
|
+
const w2Completed = w3ExceedsW1;
|
|
164
|
+
if (w2Completed) {
|
|
165
|
+
const w3Projection = buildExtensionProjection({
|
|
166
|
+
waveStart: w0.price,
|
|
167
|
+
waveEnd: w1.price,
|
|
168
|
+
extensionBase: w2.price,
|
|
169
|
+
levels: w3ExtensionLevels(isIntermediate),
|
|
170
|
+
invalidation: w0.price,
|
|
171
|
+
isW3: true,
|
|
172
|
+
isIntermediate,
|
|
173
|
+
currentPrice: lastClose,
|
|
174
|
+
});
|
|
175
|
+
const waves = createImpulseWaves({
|
|
176
|
+
pivots: [w0, w1, w2],
|
|
177
|
+
justifications: [null, w2Just],
|
|
178
|
+
degree,
|
|
179
|
+
inProgressLabel: 'Three',
|
|
180
|
+
inProgressProjection: w3Projection,
|
|
181
|
+
inProgressStart: w2,
|
|
182
|
+
});
|
|
183
|
+
return {
|
|
184
|
+
waves,
|
|
185
|
+
trendDirection,
|
|
186
|
+
patternType: 'impulse',
|
|
187
|
+
confirmedWaveCount: 2,
|
|
188
|
+
inProgressWave: 'Three',
|
|
189
|
+
w0,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
const waves = buildW2InProgress(w0, w1, degree);
|
|
193
|
+
return {
|
|
194
|
+
waves,
|
|
195
|
+
trendDirection,
|
|
196
|
+
patternType: 'impulse',
|
|
197
|
+
confirmedWaveCount: 1,
|
|
198
|
+
inProgressWave: 'Two',
|
|
199
|
+
w0,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
const w3Just = w3Match
|
|
203
|
+
? makeJustification({
|
|
204
|
+
fibLevel: w3Match.fibLevel,
|
|
205
|
+
deviation: w3Match.deviation,
|
|
206
|
+
type: 'Extension',
|
|
207
|
+
description: `${w3Match.fibLevel}× extension of W1 from W2`,
|
|
208
|
+
})
|
|
209
|
+
: null;
|
|
210
|
+
const w4Match = findFibRetracementPivot({
|
|
211
|
+
bars,
|
|
212
|
+
waveStart: w2,
|
|
213
|
+
waveEnd: w3,
|
|
214
|
+
levels: w4RetraceLevels(),
|
|
215
|
+
isUptrend,
|
|
216
|
+
fromIndex: w3.index + 1,
|
|
217
|
+
});
|
|
218
|
+
const w4 = w4Match?.pivot ?? findConfirmedExtreme(bars, w3, !isUptrend);
|
|
219
|
+
if (!w4) {
|
|
220
|
+
const w4Projection = buildRetracementProjection(w2.price, w3.price, w4RetraceLevels(), w0.price);
|
|
221
|
+
const waves = createImpulseWaves({
|
|
222
|
+
pivots: [w0, w1, w2, w3],
|
|
223
|
+
justifications: [null, w2Just, w3Just],
|
|
224
|
+
degree,
|
|
225
|
+
inProgressLabel: 'Four',
|
|
226
|
+
inProgressProjection: w4Projection,
|
|
227
|
+
inProgressStart: w3,
|
|
228
|
+
});
|
|
229
|
+
return {
|
|
230
|
+
waves,
|
|
231
|
+
trendDirection,
|
|
232
|
+
patternType: 'impulse',
|
|
233
|
+
confirmedWaveCount: 3,
|
|
234
|
+
inProgressWave: 'Four',
|
|
235
|
+
w0,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
if (isUptrend ? w4.price <= w0.price : w4.price >= w0.price) {
|
|
239
|
+
const waves = buildCorrectiveFromMorph(w0, w1, w2, bars, degree);
|
|
240
|
+
return {
|
|
241
|
+
waves,
|
|
242
|
+
trendDirection,
|
|
243
|
+
patternType: 'corrective',
|
|
244
|
+
confirmedWaveCount: 2,
|
|
245
|
+
inProgressWave: 'C',
|
|
246
|
+
w0,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
const isDiagonal = isDiagonalOverlap(w4, w1, isUptrend);
|
|
250
|
+
const w4Just = w4Match
|
|
251
|
+
? makeJustification({
|
|
252
|
+
fibLevel: w4Match.fibLevel,
|
|
253
|
+
deviation: w4Match.deviation,
|
|
254
|
+
type: 'Retracement',
|
|
255
|
+
description: `${(w4Match.fibLevel * 100).toFixed(1)}% retrace of W2→W3`,
|
|
256
|
+
})
|
|
257
|
+
: null;
|
|
258
|
+
const w5Projection = buildW5Projection(w0, w1, w4, w3.price);
|
|
259
|
+
const waves = createImpulseWaves({
|
|
260
|
+
pivots: [w0, w1, w2, w3, w4],
|
|
261
|
+
justifications: [null, w2Just, w3Just, w4Just],
|
|
262
|
+
degree,
|
|
263
|
+
isDiagonal,
|
|
264
|
+
inProgressLabel: 'Five',
|
|
265
|
+
inProgressProjection: w5Projection,
|
|
266
|
+
inProgressStart: w4,
|
|
267
|
+
});
|
|
268
|
+
return {
|
|
269
|
+
waves,
|
|
270
|
+
trendDirection,
|
|
271
|
+
patternType: isDiagonal ? 'diagonal' : 'impulse',
|
|
272
|
+
confirmedWaveCount: 4,
|
|
273
|
+
inProgressWave: 'Five',
|
|
274
|
+
w0,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
export function analysisFromWaves(waves) {
|
|
278
|
+
const inProgress = waves.find(w => w.isInProgress);
|
|
279
|
+
const confirmed = waves.filter(w => !w.isInProgress).length;
|
|
280
|
+
const firstPattern = waves[0]?.patternType;
|
|
281
|
+
let patternType = 'impulse';
|
|
282
|
+
if (firstPattern === 'ZigZag' || firstPattern === 'Flat' || firstPattern === 'Triangle') {
|
|
283
|
+
patternType = 'corrective';
|
|
284
|
+
}
|
|
285
|
+
else if (firstPattern === 'Diagonal' || waves.some(w => w.patternType === 'Diagonal')) {
|
|
286
|
+
patternType = 'diagonal';
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
patternType,
|
|
290
|
+
confirmedWaveCount: confirmed,
|
|
291
|
+
inProgressWave: inProgress?.label,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=impulse-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impulse-detector.js","sourceRoot":"","sources":["../../../src/core/elliott-waves/impulse-detector.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACN,wBAAwB,EACxB,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,eAAe,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,SAAS,EACT,WAAW,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,kBAAkB,EAAE,WAAW,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACzE,OAAO,EACN,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,SAAS,MAAM,CAAC,IAAgB;IAC/B,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEhD,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,OAAO,EAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;IAC9B,CAAC;IACD,OAAO,EAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAC,CAAC;AACxC,CAAC;AAED,SAAS,sBAAsB,CAC9B,IAAgB,EAChB,OAAmB,EACnB,UAAsB,EACtB,SAAkB,EAClB,SAAS,GAAG,UAAU,CAAC,wBAAwB;IAE/C,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;IAC7C,OAAO,WAAW,CACjB,IAAI,EACJ,OAAO,CAAC,KAAK,EACb,IAAI,CAAC,MAAM,GAAG,CAAC,EACf,UAAU,EACV,IAAI,EACJ,SAAS,EACT,SAAS,CACT,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACzB,EAAc,EACd,EAAc,EACd,MAA2B;IAE3B,MAAM,YAAY,GAAG,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACjG,OAAO,kBAAkB,CAAC;QACzB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QAChB,cAAc,EAAE,CAAC,IAAI,CAAC;QACtB,MAAM;QACN,eAAe,EAAE,KAAK;QACtB,oBAAoB,EAAE,YAAY;QAClC,eAAe,EAAE,EAAE;KACnB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAChC,EAAc,EACd,EAAc,EACd,EAAc,EACd,IAAgB,EAChB,MAA2B;IAE3B,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,KAAK,CAAC;IAC/C,MAAM,WAAW,GAAG,wBAAwB,CAAC;QAC5C,SAAS,EAAE,EAAE,CAAC,KAAK;QACnB,OAAO,EAAE,EAAE,CAAC,KAAK;QACjB,aAAa,EAAE,EAAE,CAAC,KAAK;QACvB,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE,EAAE,CAAC,KAAK;QACtB,YAAY,EAAE,SAAS;KACvB,CAAC,CAAC;IACH,OAAO,qBAAqB,CAAC;QAC5B,MAAM;QACN,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QAC5B,MAAM;QACN,WAAW,EAAE,QAAQ;QACrB,eAAe,EAAE,GAAG;QACpB,oBAAoB,EAAE,WAAW;QACjC,eAAe,EAAE,EAAE;KACnB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,IAAgB,EAAE,EAAc,EAAE,SAAkB;IACnE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9C,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC,EAAE,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC/D,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAc,EAAE,EAAc,EAAE,SAAkB;IAC5E,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,IAAgB,EAChB,MAA2B;IAE3B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,OAAO;YACN,KAAK,EAAE,CAAC,oBAAoB,CAAC;oBAC5B,KAAK,EAAE,EAAE;oBACT,KAAK,EAAE,KAAK;oBACZ,MAAM;oBACN,UAAU,EAAE,EAAC,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAC;iBAClD,CAAC,CAAC;YACH,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,SAAS;YACtB,kBAAkB,EAAE,CAAC;YACrB,cAAc,EAAE,KAAK;YACrB,EAAE;SACF,CAAC;IACH,CAAC;IAED,MAAM,EAAC,EAAE,EAAE,SAAS,EAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,cAAc,GAAG,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,cAAc,CAAC;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,KAAK,CAAC;IAE/C,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,EAAE,CAAC;QACT,OAAO;YACN,KAAK,EAAE,CAAC,oBAAoB,CAAC;oBAC5B,KAAK,EAAE,EAAE;oBACT,KAAK,EAAE,KAAK;oBACZ,MAAM;oBACN,UAAU,EAAE,EAAC,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAC;iBAClD,CAAC,CAAC;YACH,cAAc;YACd,WAAW,EAAE,SAAS;YACtB,kBAAkB,EAAE,CAAC;YACrB,cAAc,EAAE,KAAK;YACrB,EAAE;SACF,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,uBAAuB,CAAC;QACvC,IAAI;QACJ,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,eAAe,EAAE;QACzB,SAAS;QACT,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,EAAE,GACP,OAAO,EAAE,KAAK;QACd,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;IAE5C,IAAI,CAAC,EAAE,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO;YACN,KAAK;YACL,cAAc;YACd,WAAW,EAAE,SAAS;YACtB,kBAAkB,EAAE,CAAC;YACrB,cAAc,EAAE,KAAK;YACrB,EAAE;SACF,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACjE,OAAO;YACN,KAAK;YACL,cAAc;YACd,WAAW,EAAE,YAAY;YACzB,kBAAkB,EAAE,CAAC;YACrB,cAAc,EAAE,GAAG;YACnB,EAAE;SACF,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO;QACrB,CAAC,CAAC,iBAAiB,CAAC;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;SACvE,CAAC;QACH,CAAC,CAAC,IAAI,CAAC;IAER,MAAM,OAAO,GAAG,qBAAqB,CAAC;QACrC,IAAI;QACJ,SAAS,EAAE,EAAE,CAAC,KAAK;QACnB,OAAO,EAAE,EAAE,CAAC,KAAK;QACjB,aAAa,EAAE,EAAE;QACjB,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC;QACzC,SAAS;QACT,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC;KACvB,CAAC,CAAC;IAEH,IAAI,EAAE,GAAG,OAAO,EAAE,KAAK,IAAI,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9E,MAAM,WAAW,GAAG,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,QAAQ,IAAI,QAAQ,GAAG,UAAU,CAAC,iBAAiB,CAAC;IACvE,MAAM,WAAW,GAAG,WAAW,IAAI,UAAU,IAAI,sBAAsB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAEjG,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;QACjD,MAAM,WAAW,GAAG,WAAW,CAAC;QAChC,IAAI,WAAW,EAAE,CAAC;YACjB,MAAM,YAAY,GAAG,wBAAwB,CAAC;gBAC7C,SAAS,EAAE,EAAE,CAAC,KAAK;gBACnB,OAAO,EAAE,EAAE,CAAC,KAAK;gBACjB,aAAa,EAAE,EAAE,CAAC,KAAK;gBACvB,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC;gBACzC,YAAY,EAAE,EAAE,CAAC,KAAK;gBACtB,IAAI,EAAE,IAAI;gBACV,cAAc;gBACd,YAAY,EAAE,SAAS;aACvB,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,kBAAkB,CAAC;gBAChC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;gBACpB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;gBAC9B,MAAM;gBACN,eAAe,EAAE,OAAO;gBACxB,oBAAoB,EAAE,YAAY;gBAClC,eAAe,EAAE,EAAE;aACnB,CAAC,CAAC;YACH,OAAO;gBACN,KAAK;gBACL,cAAc;gBACd,WAAW,EAAE,SAAS;gBACtB,kBAAkB,EAAE,CAAC;gBACrB,cAAc,EAAE,OAAO;gBACvB,EAAE;aACF,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO;YACN,KAAK;YACL,cAAc;YACd,WAAW,EAAE,SAAS;YACtB,kBAAkB,EAAE,CAAC;YACrB,cAAc,EAAE,KAAK;YACrB,EAAE;SACF,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO;QACrB,CAAC,CAAC,iBAAiB,CAAC;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,GAAG,OAAO,CAAC,QAAQ,2BAA2B;SAC3D,CAAC;QACH,CAAC,CAAC,IAAI,CAAC;IAER,MAAM,OAAO,GAAG,uBAAuB,CAAC;QACvC,IAAI;QACJ,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,eAAe,EAAE;QACzB,SAAS;QACT,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,OAAO,EAAE,KAAK,IAAI,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;IAExE,IAAI,CAAC,EAAE,EAAE,CAAC;QACT,MAAM,YAAY,GAAG,0BAA0B,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,kBAAkB,CAAC;YAChC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YACxB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;YACtC,MAAM;YACN,eAAe,EAAE,MAAM;YACvB,oBAAoB,EAAE,YAAY;YAClC,eAAe,EAAE,EAAE;SACnB,CAAC,CAAC;QACH,OAAO;YACN,KAAK;YACL,cAAc;YACd,WAAW,EAAE,SAAS;YACtB,kBAAkB,EAAE,CAAC;YACrB,cAAc,EAAE,MAAM;YACtB,EAAE;SACF,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACjE,OAAO;YACN,KAAK;YACL,cAAc;YACd,WAAW,EAAE,YAAY;YACzB,kBAAkB,EAAE,CAAC;YACrB,cAAc,EAAE,GAAG;YACnB,EAAE;SACF,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO;QACrB,CAAC,CAAC,iBAAiB,CAAC;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;SACvE,CAAC;QACH,CAAC,CAAC,IAAI,CAAC;IAER,MAAM,YAAY,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,kBAAkB,CAAC;QAChC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC5B,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QAC9C,MAAM;QACN,UAAU;QACV,eAAe,EAAE,MAAM;QACvB,oBAAoB,EAAE,YAAY;QAClC,eAAe,EAAE,EAAE;KACnB,CAAC,CAAC;IAEH,OAAO;QACN,KAAK;QACL,cAAc;QACd,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAChD,kBAAkB,EAAE,CAAC;QACrB,cAAc,EAAE,MAAM;QACtB,EAAE;KACF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IAKrD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;IAC3C,IAAI,WAAW,GAA0C,SAAS,CAAC;IACnE,IAAI,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;QACzF,WAAW,GAAG,YAAY,CAAC;IAC5B,CAAC;SAAM,IAAI,YAAY,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC,EAAE,CAAC;QACzF,WAAW,GAAG,UAAU,CAAC;IAC1B,CAAC;IACD,OAAO;QACN,WAAW;QACX,kBAAkB,EAAE,SAAS;QAC7B,cAAc,EAAE,UAAU,EAAE,KAAK;KACjC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './constants.js';
|
|
3
|
+
export * from './wave-math.js';
|
|
4
|
+
export * from './fibonacci-projector.js';
|
|
5
|
+
export * from './pivot-scanner.js';
|
|
6
|
+
export * from './wave-labeler.js';
|
|
7
|
+
export * from './impulse-detector.js';
|
|
8
|
+
export * from './data-requirements.js';
|
|
9
|
+
export * from './analyze.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/elliott-waves/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './types.js';
|
|
2
|
+
export * from './constants.js';
|
|
3
|
+
export * from './wave-math.js';
|
|
4
|
+
export * from './fibonacci-projector.js';
|
|
5
|
+
export * from './pivot-scanner.js';
|
|
6
|
+
export * from './wave-labeler.js';
|
|
7
|
+
export * from './impulse-detector.js';
|
|
8
|
+
export * from './data-requirements.js';
|
|
9
|
+
export * from './analyze.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/elliott-waves/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { OhlcvBar, PivotPoint } from './types.js';
|
|
2
|
+
export declare function findAbsoluteExtreme(bars: OhlcvBar[], findHigh: boolean, fromIndex?: number, toIndex?: number): PivotPoint;
|
|
3
|
+
export declare function hasRecovery(bars: OhlcvBar[], fromIndex: number, toIndex: number, logExtreme: number, move: number, extremeIsHigh: boolean, threshold: number): boolean;
|
|
4
|
+
export declare function findWave1(bars: OhlcvBar[], w0: PivotPoint, isUptrend: boolean, maxIndex?: number, retraceThreshold?: 0.5, minGap?: number, minLogMove?: number): {
|
|
5
|
+
w1: PivotPoint;
|
|
6
|
+
retracePoint: PivotPoint;
|
|
7
|
+
} | null;
|
|
8
|
+
/** Find countertrend pivot nearest a Fibonacci retracement level (most extreme level first). */
|
|
9
|
+
export declare function findFibRetracementPivot(input: {
|
|
10
|
+
bars: OhlcvBar[];
|
|
11
|
+
waveStart: PivotPoint;
|
|
12
|
+
waveEnd: PivotPoint;
|
|
13
|
+
levels: readonly number[];
|
|
14
|
+
isUptrend: boolean;
|
|
15
|
+
fromIndex: number;
|
|
16
|
+
toIndex?: number;
|
|
17
|
+
toleranceLog?: number;
|
|
18
|
+
}): {
|
|
19
|
+
pivot: PivotPoint;
|
|
20
|
+
fibLevel: number;
|
|
21
|
+
deviation: number;
|
|
22
|
+
} | null;
|
|
23
|
+
/** Find trend-direction pivot nearest a Fibonacci extension level (most extreme first). */
|
|
24
|
+
export declare function findFibExtensionPivot(input: {
|
|
25
|
+
bars: OhlcvBar[];
|
|
26
|
+
waveStart: number;
|
|
27
|
+
waveEnd: number;
|
|
28
|
+
extensionBase: PivotPoint;
|
|
29
|
+
levels: readonly number[];
|
|
30
|
+
isUptrend: boolean;
|
|
31
|
+
fromIndex: number;
|
|
32
|
+
toIndex?: number;
|
|
33
|
+
toleranceLog?: number;
|
|
34
|
+
}): {
|
|
35
|
+
pivot: PivotPoint;
|
|
36
|
+
fibLevel: number;
|
|
37
|
+
deviation: number;
|
|
38
|
+
} | null;
|
|
39
|
+
export declare function findConfirmedExtreme(bars: OhlcvBar[], fromPoint: PivotPoint, findHigh: boolean, recoveryThreshold?: 0.1): PivotPoint | null;
|
|
40
|
+
//# sourceMappingURL=pivot-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pivot-scanner.d.ts","sourceRoot":"","sources":["../../../src/core/elliott-waves/pivot-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AAmBhE,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,QAAQ,EAAE,EAChB,QAAQ,EAAE,OAAO,EACjB,SAAS,SAAI,EACb,OAAO,SAAK,GACV,UAAU,CAYZ;AAED,wBAAgB,WAAW,CAC1B,IAAI,EAAE,QAAQ,EAAE,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,OAAO,EACtB,SAAS,EAAE,MAAM,GACf,OAAO,CAST;AAED,wBAAgB,SAAS,CACxB,IAAI,EAAE,QAAQ,EAAE,EAChB,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,OAAO,EAClB,QAAQ,SAAK,EACb,gBAAgB,MAAmC,EACnD,MAAM,SAAI,EACV,UAAU,SAAI,GACZ;IAAC,EAAE,EAAE,UAAU,CAAC;IAAC,YAAY,EAAE,UAAU,CAAA;CAAC,GAAG,IAAI,CA6BnD;AAED,gGAAgG;AAChG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC9C,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,UAAU,CAAC;IACpB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAqBlE;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC5C,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,UAAU,CAAC;IAC1B,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CA0BlE;AAED,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,QAAQ,EAAE,EAChB,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,OAAO,EACjB,iBAAiB,MAAsC,GACrD,UAAU,GAAG,IAAI,CAyBnB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { projectExtensions, projectRetracements } from './fibonacci-projector.js';
|
|
2
|
+
import { logPrice } from './wave-math.js';
|
|
3
|
+
import { THRESHOLDS } from './constants.js';
|
|
4
|
+
function createPivot(index, bars, price, pointType) {
|
|
5
|
+
return {
|
|
6
|
+
index,
|
|
7
|
+
timeSec: bars[index].timeSec,
|
|
8
|
+
price,
|
|
9
|
+
pointType,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function findAbsoluteExtreme(bars, findHigh, fromIndex = 0, toIndex = -1) {
|
|
13
|
+
const end = toIndex < 0 ? bars.length - 1 : toIndex;
|
|
14
|
+
let bestIdx = fromIndex;
|
|
15
|
+
let bestPrice = findHigh ? bars[fromIndex].high : bars[fromIndex].low;
|
|
16
|
+
for (let i = fromIndex + 1; i <= end; i++) {
|
|
17
|
+
const price = findHigh ? bars[i].high : bars[i].low;
|
|
18
|
+
if (findHigh ? price > bestPrice : price < bestPrice) {
|
|
19
|
+
bestPrice = price;
|
|
20
|
+
bestIdx = i;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return createPivot(bestIdx, bars, bestPrice, findHigh ? 'High' : 'Low');
|
|
24
|
+
}
|
|
25
|
+
export function hasRecovery(bars, fromIndex, toIndex, logExtreme, move, extremeIsHigh, threshold) {
|
|
26
|
+
for (let i = fromIndex + 1; i <= toIndex; i++) {
|
|
27
|
+
const recoveryPrice = extremeIsHigh ? bars[i].low : bars[i].high;
|
|
28
|
+
const recovery = Math.abs(logPrice(recoveryPrice) - logExtreme);
|
|
29
|
+
if (move > 0 && recovery / move >= threshold) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
export function findWave1(bars, w0, isUptrend, maxIndex = -1, retraceThreshold = THRESHOLDS.w1ConfirmationRetrace, minGap = 0, minLogMove = 0) {
|
|
36
|
+
const end = maxIndex < 0 ? bars.length - 1 : maxIndex;
|
|
37
|
+
let runningExtreme = w0.price;
|
|
38
|
+
let runningExtremeIdx = w0.index;
|
|
39
|
+
const logW0 = logPrice(w0.price);
|
|
40
|
+
for (let i = w0.index + 1; i <= end; i++) {
|
|
41
|
+
const trendPrice = isUptrend ? bars[i].high : bars[i].low;
|
|
42
|
+
const retracePrice = isUptrend ? bars[i].low : bars[i].high;
|
|
43
|
+
if (isUptrend ? trendPrice > runningExtreme : trendPrice < runningExtreme) {
|
|
44
|
+
runningExtreme = trendPrice;
|
|
45
|
+
runningExtremeIdx = i;
|
|
46
|
+
}
|
|
47
|
+
if (runningExtremeIdx > w0.index && i > runningExtremeIdx + minGap) {
|
|
48
|
+
const logExtreme = logPrice(runningExtreme);
|
|
49
|
+
const logRetrace = logPrice(retracePrice);
|
|
50
|
+
const move = Math.abs(logExtreme - logW0);
|
|
51
|
+
const retrace = Math.abs(logExtreme - logRetrace);
|
|
52
|
+
if (move >= minLogMove && move > 0 && retrace / move > retraceThreshold) {
|
|
53
|
+
const w1 = findAbsoluteExtreme(bars, isUptrend, w0.index, i);
|
|
54
|
+
const retracePoint = createPivot(i, bars, retracePrice, isUptrend ? 'Low' : 'High');
|
|
55
|
+
return { w1, retracePoint };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
/** Find countertrend pivot nearest a Fibonacci retracement level (most extreme level first). */
|
|
62
|
+
export function findFibRetracementPivot(input) {
|
|
63
|
+
const end = input.toIndex ?? input.bars.length - 1;
|
|
64
|
+
const targets = projectRetracements(input.waveStart.price, input.waveEnd.price, input.levels);
|
|
65
|
+
const tolerance = input.toleranceLog ?? THRESHOLDS.fibToleranceLog;
|
|
66
|
+
for (const target of targets) {
|
|
67
|
+
let best = null;
|
|
68
|
+
let bestDev = Infinity;
|
|
69
|
+
for (let i = input.fromIndex; i <= end; i++) {
|
|
70
|
+
const price = input.isUptrend ? input.bars[i].low : input.bars[i].high;
|
|
71
|
+
const dev = Math.abs(logPrice(price) - logPrice(target.price));
|
|
72
|
+
if (dev <= tolerance && dev < bestDev) {
|
|
73
|
+
best = createPivot(i, input.bars, price, input.isUptrend ? 'Low' : 'High');
|
|
74
|
+
bestDev = dev;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (best) {
|
|
78
|
+
return { pivot: best, fibLevel: target.fibLevel, deviation: bestDev };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
/** Find trend-direction pivot nearest a Fibonacci extension level (most extreme first). */
|
|
84
|
+
export function findFibExtensionPivot(input) {
|
|
85
|
+
const end = input.toIndex ?? input.bars.length - 1;
|
|
86
|
+
const targets = projectExtensions(input.waveStart, input.waveEnd, input.extensionBase.price, input.levels);
|
|
87
|
+
const tolerance = input.toleranceLog ?? THRESHOLDS.fibToleranceLog;
|
|
88
|
+
for (const target of targets) {
|
|
89
|
+
let best = null;
|
|
90
|
+
let bestDev = Infinity;
|
|
91
|
+
for (let i = input.fromIndex; i <= end; i++) {
|
|
92
|
+
const price = input.isUptrend ? input.bars[i].high : input.bars[i].low;
|
|
93
|
+
const dev = Math.abs(logPrice(price) - logPrice(target.price));
|
|
94
|
+
if (dev <= tolerance && dev < bestDev) {
|
|
95
|
+
best = createPivot(i, input.bars, price, input.isUptrend ? 'High' : 'Low');
|
|
96
|
+
bestDev = dev;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (best) {
|
|
100
|
+
return { pivot: best, fibLevel: target.fibLevel, deviation: bestDev };
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
export function findConfirmedExtreme(bars, fromPoint, findHigh, recoveryThreshold = THRESHOLDS.defaultRecoveryThreshold) {
|
|
106
|
+
if (fromPoint.index >= bars.length - 2) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
const extreme = findAbsoluteExtreme(bars, findHigh, fromPoint.index + 1);
|
|
110
|
+
if (extreme.index >= bars.length - 1) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const logFrom = logPrice(fromPoint.price);
|
|
114
|
+
const logExtreme = logPrice(extreme.price);
|
|
115
|
+
const move = Math.abs(logExtreme - logFrom);
|
|
116
|
+
if (!hasRecovery(bars, extreme.index, bars.length - 1, logExtreme, move, findHigh, recoveryThreshold)) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
return extreme;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=pivot-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pivot-scanner.js","sourceRoot":"","sources":["../../../src/core/elliott-waves/pivot-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { PivotPoint, WaveProjection } from './types.js';
|
|
2
|
+
import type { FibonacciJustification } from './types.js';
|
|
3
|
+
import { FIB_W5, FIB_EXT_C, FIB_EXT_W3, FIB_EXT_W3_INTERMEDIATE, FIB_RETRACE_W2, FIB_RETRACE_W4 } from './constants.js';
|
|
4
|
+
export type ProjectionTarget = {
|
|
5
|
+
price: number;
|
|
6
|
+
fibonacciLevel: number;
|
|
7
|
+
probability: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function buildRetracementProjection(waveStart: number, waveEnd: number, levels: readonly number[], invalidation: number | null): WaveProjection;
|
|
10
|
+
export declare function buildExtensionProjection(input: {
|
|
11
|
+
waveStart: number;
|
|
12
|
+
waveEnd: number;
|
|
13
|
+
extensionBase: number;
|
|
14
|
+
levels: readonly number[];
|
|
15
|
+
invalidation: number | null;
|
|
16
|
+
isW3?: boolean;
|
|
17
|
+
isIntermediate?: boolean;
|
|
18
|
+
currentPrice?: number;
|
|
19
|
+
}): WaveProjection;
|
|
20
|
+
export declare function buildW5Projection(w0: PivotPoint, w1: PivotPoint, w4: PivotPoint, invalidation: number | null): WaveProjection;
|
|
21
|
+
export declare function w2RetraceLevels(): readonly number[];
|
|
22
|
+
export declare function w4RetraceLevels(): readonly number[];
|
|
23
|
+
export declare function w3ExtensionLevels(isIntermediate: boolean): readonly number[];
|
|
24
|
+
export declare function cExtensionLevels(): readonly number[];
|
|
25
|
+
export declare function makeJustification(input: {
|
|
26
|
+
fibLevel: number;
|
|
27
|
+
deviation: number;
|
|
28
|
+
type: 'Retracement' | 'Extension';
|
|
29
|
+
description: string;
|
|
30
|
+
}): FibonacciJustification;
|
|
31
|
+
export { FIB_RETRACE_W2, FIB_RETRACE_W4, FIB_EXT_W3, FIB_EXT_W3_INTERMEDIATE, FIB_W5, FIB_EXT_C };
|
|
32
|
+
//# sourceMappingURL=projection-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection-builder.d.ts","sourceRoot":"","sources":["../../../src/core/elliott-waves/projection-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAc,cAAc,EAAmC,MAAM,YAAY,CAAC;AACzG,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,YAAY,CAAC;AACvD,OAAO,EAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,uBAAuB,EAAE,cAAc,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAGtH,MAAM,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC;AAqFF,wBAAgB,0BAA0B,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,YAAY,EAAE,MAAM,GAAG,IAAI,GACzB,cAAc,CAQhB;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,cAAc,CAkDjB;AAED,wBAAgB,iBAAiB,CAChC,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,YAAY,EAAE,MAAM,GAAG,IAAI,GACzB,cAAc,CAQhB;AAED,wBAAgB,eAAe,IAAI,SAAS,MAAM,EAAE,CAEnD;AAED,wBAAgB,eAAe,IAAI,SAAS,MAAM,EAAE,CAEnD;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAE5E;AAED,wBAAgB,gBAAgB,IAAI,SAAS,MAAM,EAAE,CAEpD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,GAAG,WAAW,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACpB,GAAG,sBAAsB,CAOzB;AAED,OAAO,EAAC,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,EAAE,SAAS,EAAC,CAAC"}
|