@drakkar.software/octobot-client 0.4.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/README.md +140 -0
- package/dist/client/adapters/accounts.d.ts +66 -0
- package/dist/client/adapters/accounts.d.ts.map +1 -0
- package/dist/client/adapters/accounts.js +214 -0
- package/dist/client/adapters/accounts.js.map +1 -0
- package/dist/client/adapters/actionHandle.d.ts +29 -0
- package/dist/client/adapters/actionHandle.d.ts.map +1 -0
- package/dist/client/adapters/actionHandle.js +34 -0
- package/dist/client/adapters/actionHandle.js.map +1 -0
- package/dist/client/adapters/automations.d.ts +31 -0
- package/dist/client/adapters/automations.d.ts.map +1 -0
- package/dist/client/adapters/automations.js +79 -0
- package/dist/client/adapters/automations.js.map +1 -0
- package/dist/client/adapters/documents.d.ts +55 -0
- package/dist/client/adapters/documents.d.ts.map +1 -0
- package/dist/client/adapters/documents.js +66 -0
- package/dist/client/adapters/documents.js.map +1 -0
- package/dist/client/adapters/nodeApi.d.ts +25 -0
- package/dist/client/adapters/nodeApi.d.ts.map +1 -0
- package/dist/client/adapters/nodeApi.js +81 -0
- package/dist/client/adapters/nodeApi.js.map +1 -0
- package/dist/client/adapters/settings.d.ts +16 -0
- package/dist/client/adapters/settings.d.ts.map +1 -0
- package/dist/client/adapters/settings.js +43 -0
- package/dist/client/adapters/settings.js.map +1 -0
- package/dist/client/adapters/strategies.d.ts +17 -0
- package/dist/client/adapters/strategies.d.ts.map +1 -0
- package/dist/client/adapters/strategies.js +75 -0
- package/dist/client/adapters/strategies.js.map +1 -0
- package/dist/client/connect/connect.d.ts +40 -0
- package/dist/client/connect/connect.d.ts.map +1 -0
- package/dist/client/connect/connect.js +133 -0
- package/dist/client/connect/connect.js.map +1 -0
- package/dist/client/connect/readOnly.d.ts +97 -0
- package/dist/client/connect/readOnly.d.ts.map +1 -0
- package/dist/client/connect/readOnly.js +167 -0
- package/dist/client/connect/readOnly.js.map +1 -0
- package/dist/client/core/errors.d.ts +80 -0
- package/dist/client/core/errors.d.ts.map +1 -0
- package/dist/client/core/errors.js +154 -0
- package/dist/client/core/errors.js.map +1 -0
- package/dist/client/core/options.d.ts +44 -0
- package/dist/client/core/options.d.ts.map +1 -0
- package/dist/client/core/options.js +2 -0
- package/dist/client/core/options.js.map +1 -0
- package/dist/client/core/session.d.ts +90 -0
- package/dist/client/core/session.d.ts.map +1 -0
- package/dist/client/core/session.js +72 -0
- package/dist/client/core/session.js.map +1 -0
- package/dist/client/core/views.d.ts +40 -0
- package/dist/client/core/views.d.ts.map +1 -0
- package/dist/client/core/views.js +32 -0
- package/dist/client/core/views.js.map +1 -0
- package/dist/client/index.d.ts +16 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +9 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/mirror/collections.d.ts +125 -0
- package/dist/client/mirror/collections.d.ts.map +1 -0
- package/dist/client/mirror/collections.js +118 -0
- package/dist/client/mirror/collections.js.map +1 -0
- package/dist/client/mirror/index.d.ts +4 -0
- package/dist/client/mirror/index.d.ts.map +1 -0
- package/dist/client/mirror/index.js +4 -0
- package/dist/client/mirror/index.js.map +1 -0
- package/dist/client/mirror/writer.d.ts +39 -0
- package/dist/client/mirror/writer.d.ts.map +1 -0
- package/dist/client/mirror/writer.js +50 -0
- package/dist/client/mirror/writer.js.map +1 -0
- package/dist/client/pairing/mirrorGrant.d.ts +91 -0
- package/dist/client/pairing/mirrorGrant.d.ts.map +1 -0
- package/dist/client/pairing/mirrorGrant.js +99 -0
- package/dist/client/pairing/mirrorGrant.js.map +1 -0
- package/dist/client/pairing/mirrorReader.d.ts +99 -0
- package/dist/client/pairing/mirrorReader.d.ts.map +1 -0
- package/dist/client/pairing/mirrorReader.js +117 -0
- package/dist/client/pairing/mirrorReader.js.map +1 -0
- package/dist/client/pairing/pairingGrantExchange.d.ts +135 -0
- package/dist/client/pairing/pairingGrantExchange.d.ts.map +1 -0
- package/dist/client/pairing/pairingGrantExchange.js +186 -0
- package/dist/client/pairing/pairingGrantExchange.js.map +1 -0
- package/dist/client/pairing/pairingRequest.d.ts +82 -0
- package/dist/client/pairing/pairingRequest.d.ts.map +1 -0
- package/dist/client/pairing/pairingRequest.js +120 -0
- package/dist/client/pairing/pairingRequest.js.map +1 -0
- package/dist/client/strategy.d.ts +36 -0
- package/dist/client/strategy.d.ts.map +1 -0
- package/dist/client/strategy.js +26 -0
- package/dist/client/strategy.js.map +1 -0
- package/dist/collections/index.d.ts +3 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +3 -0
- package/dist/collections/index.js.map +1 -0
- package/dist/collections/nodeCollections.d.ts +57 -0
- package/dist/collections/nodeCollections.d.ts.map +1 -0
- package/dist/collections/nodeCollections.js +40 -0
- package/dist/collections/nodeCollections.js.map +1 -0
- package/dist/collections/paths.d.ts +7 -0
- package/dist/collections/paths.d.ts.map +1 -0
- package/dist/collections/paths.js +13 -0
- package/dist/collections/paths.js.map +1 -0
- package/dist/crypto/collectionKeys.d.ts +28 -0
- package/dist/crypto/collectionKeys.d.ts.map +1 -0
- package/dist/crypto/collectionKeys.js +53 -0
- package/dist/crypto/collectionKeys.js.map +1 -0
- package/dist/crypto/hkdf.d.ts +14 -0
- package/dist/crypto/hkdf.d.ts.map +1 -0
- package/dist/crypto/hkdf.js +19 -0
- package/dist/crypto/hkdf.js.map +1 -0
- package/dist/crypto/index.d.ts +5 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +5 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/secretEncryptor.d.ts +20 -0
- package/dist/crypto/secretEncryptor.d.ts.map +1 -0
- package/dist/crypto/secretEncryptor.js +82 -0
- package/dist/crypto/secretEncryptor.js.map +1 -0
- package/dist/crypto/wireConstants.d.ts +14 -0
- package/dist/crypto/wireConstants.d.ts.map +1 -0
- package/dist/crypto/wireConstants.js +17 -0
- package/dist/crypto/wireConstants.js.map +1 -0
- package/dist/identity/address.d.ts +3 -0
- package/dist/identity/address.d.ts.map +1 -0
- package/dist/identity/address.js +17 -0
- package/dist/identity/address.js.map +1 -0
- package/dist/identity/bip39-wordlist.d.ts +2 -0
- package/dist/identity/bip39-wordlist.d.ts.map +1 -0
- package/dist/identity/bip39-wordlist.js +2051 -0
- package/dist/identity/bip39-wordlist.js.map +1 -0
- package/dist/identity/capProvider.d.ts +45 -0
- package/dist/identity/capProvider.d.ts.map +1 -0
- package/dist/identity/capProvider.js +80 -0
- package/dist/identity/capProvider.js.map +1 -0
- package/dist/identity/derivationSchemes.d.ts +25 -0
- package/dist/identity/derivationSchemes.d.ts.map +1 -0
- package/dist/identity/derivationSchemes.js +34 -0
- package/dist/identity/derivationSchemes.js.map +1 -0
- package/dist/identity/evm.d.ts +8 -0
- package/dist/identity/evm.d.ts.map +1 -0
- package/dist/identity/evm.js +78 -0
- package/dist/identity/evm.js.map +1 -0
- package/dist/identity/index.d.ts +10 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +10 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/keys.d.ts +17 -0
- package/dist/identity/keys.d.ts.map +1 -0
- package/dist/identity/keys.js +36 -0
- package/dist/identity/keys.js.map +1 -0
- package/dist/identity/mnemonic.d.ts +4 -0
- package/dist/identity/mnemonic.d.ts.map +1 -0
- package/dist/identity/mnemonic.js +93 -0
- package/dist/identity/mnemonic.js.map +1 -0
- package/dist/identity/pairing.d.ts +45 -0
- package/dist/identity/pairing.d.ts.map +1 -0
- package/dist/identity/pairing.js +91 -0
- package/dist/identity/pairing.js.map +1 -0
- package/dist/identity/pairingRequest.d.ts +99 -0
- package/dist/identity/pairingRequest.d.ts.map +1 -0
- package/dist/identity/pairingRequest.js +217 -0
- package/dist/identity/pairingRequest.js.map +1 -0
- package/dist/identity/secret.d.ts +32 -0
- package/dist/identity/secret.d.ts.map +1 -0
- package/dist/identity/secret.js +54 -0
- package/dist/identity/secret.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/bytes.d.ts +11 -0
- package/dist/internal/bytes.d.ts.map +1 -0
- package/dist/internal/bytes.js +38 -0
- package/dist/internal/bytes.js.map +1 -0
- package/dist/node-api/dexPair.d.ts +24 -0
- package/dist/node-api/dexPair.d.ts.map +1 -0
- package/dist/node-api/dexPair.js +39 -0
- package/dist/node-api/dexPair.js.map +1 -0
- package/dist/node-api/dsl.d.ts +10 -0
- package/dist/node-api/dsl.d.ts.map +1 -0
- package/dist/node-api/dsl.js +7 -0
- package/dist/node-api/dsl.js.map +1 -0
- package/dist/node-api/exchanges.d.ts +49 -0
- package/dist/node-api/exchanges.d.ts.map +1 -0
- package/dist/node-api/exchanges.js +32 -0
- package/dist/node-api/exchanges.js.map +1 -0
- package/dist/node-api/index.d.ts +12 -0
- package/dist/node-api/index.d.ts.map +1 -0
- package/dist/node-api/index.js +12 -0
- package/dist/node-api/index.js.map +1 -0
- package/dist/node-api/marketMaking.d.ts +39 -0
- package/dist/node-api/marketMaking.d.ts.map +1 -0
- package/dist/node-api/marketMaking.js +44 -0
- package/dist/node-api/marketMaking.js.map +1 -0
- package/dist/node-api/octobots.d.ts +14 -0
- package/dist/node-api/octobots.d.ts.map +1 -0
- package/dist/node-api/octobots.js +16 -0
- package/dist/node-api/octobots.js.map +1 -0
- package/dist/node-api/orderBookPreview.d.ts +11 -0
- package/dist/node-api/orderBookPreview.d.ts.map +1 -0
- package/dist/node-api/orderBookPreview.js +7 -0
- package/dist/node-api/orderBookPreview.js.map +1 -0
- package/dist/node-api/pairing.d.ts +39 -0
- package/dist/node-api/pairing.d.ts.map +1 -0
- package/dist/node-api/pairing.js +61 -0
- package/dist/node-api/pairing.js.map +1 -0
- package/dist/node-api/pairs.d.ts +32 -0
- package/dist/node-api/pairs.d.ts.map +1 -0
- package/dist/node-api/pairs.js +72 -0
- package/dist/node-api/pairs.js.map +1 -0
- package/dist/node-api/requiredFunds.d.ts +11 -0
- package/dist/node-api/requiredFunds.d.ts.map +1 -0
- package/dist/node-api/requiredFunds.js +7 -0
- package/dist/node-api/requiredFunds.js.map +1 -0
- package/dist/node-api/setup.d.ts +25 -0
- package/dist/node-api/setup.d.ts.map +1 -0
- package/dist/node-api/setup.js +13 -0
- package/dist/node-api/setup.js.map +1 -0
- package/dist/node-api/wallet.d.ts +55 -0
- package/dist/node-api/wallet.d.ts.map +1 -0
- package/dist/node-api/wallet.js +87 -0
- package/dist/node-api/wallet.js.map +1 -0
- package/dist/protocol/actions.d.ts +40 -0
- package/dist/protocol/actions.d.ts.map +1 -0
- package/dist/protocol/actions.js +118 -0
- package/dist/protocol/actions.js.map +1 -0
- package/dist/protocol/documents.d.ts +25 -0
- package/dist/protocol/documents.d.ts.map +1 -0
- package/dist/protocol/documents.js +2 -0
- package/dist/protocol/documents.js.map +1 -0
- package/dist/protocol/index.d.ts +10 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +12 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/orchestration/createAutomation.d.ts +61 -0
- package/dist/protocol/orchestration/createAutomation.d.ts.map +1 -0
- package/dist/protocol/orchestration/createAutomation.js +71 -0
- package/dist/protocol/orchestration/createAutomation.js.map +1 -0
- package/dist/protocol/poll.d.ts +4 -0
- package/dist/protocol/poll.d.ts.map +1 -0
- package/dist/protocol/poll.js +4 -0
- package/dist/protocol/poll.js.map +1 -0
- package/dist/protocol/proposal.d.ts +36 -0
- package/dist/protocol/proposal.d.ts.map +1 -0
- package/dist/protocol/proposal.js +39 -0
- package/dist/protocol/proposal.js.map +1 -0
- package/dist/protocol/state.d.ts +87 -0
- package/dist/protocol/state.d.ts.map +1 -0
- package/dist/protocol/state.js +303 -0
- package/dist/protocol/state.js.map +1 -0
- package/dist/protocol/strategy/build.d.ts +44 -0
- package/dist/protocol/strategy/build.d.ts.map +1 -0
- package/dist/protocol/strategy/build.js +50 -0
- package/dist/protocol/strategy/build.js.map +1 -0
- package/dist/protocol/strategy/builders.d.ts +252 -0
- package/dist/protocol/strategy/builders.d.ts.map +1 -0
- package/dist/protocol/strategy/builders.js +382 -0
- package/dist/protocol/strategy/builders.js.map +1 -0
- package/dist/protocol/strategy/index.d.ts +5 -0
- package/dist/protocol/strategy/index.d.ts.map +1 -0
- package/dist/protocol/strategy/index.js +4 -0
- package/dist/protocol/strategy/index.js.map +1 -0
- package/dist/protocol/strategy/kinds.d.ts +2 -0
- package/dist/protocol/strategy/kinds.d.ts.map +1 -0
- package/dist/protocol/strategy/kinds.js +2 -0
- package/dist/protocol/strategy/kinds.js.map +1 -0
- package/dist/protocol/strategy/patch.d.ts +59 -0
- package/dist/protocol/strategy/patch.d.ts.map +1 -0
- package/dist/protocol/strategy/patch.js +253 -0
- package/dist/protocol/strategy/patch.js.map +1 -0
- package/dist/protocol/symbols.d.ts +8 -0
- package/dist/protocol/symbols.d.ts.map +1 -0
- package/dist/protocol/symbols.js +11 -0
- package/dist/protocol/symbols.js.map +1 -0
- package/dist/transport/constants.d.ts +8 -0
- package/dist/transport/constants.d.ts.map +1 -0
- package/dist/transport/constants.js +8 -0
- package/dist/transport/constants.js.map +1 -0
- package/dist/transport/documents.d.ts +27 -0
- package/dist/transport/documents.d.ts.map +1 -0
- package/dist/transport/documents.js +34 -0
- package/dist/transport/documents.js.map +1 -0
- package/dist/transport/index.d.ts +8 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +8 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/probe.d.ts +44 -0
- package/dist/transport/probe.d.ts.map +1 -0
- package/dist/transport/probe.js +121 -0
- package/dist/transport/probe.js.map +1 -0
- package/dist/transport/rendezvous.d.ts +116 -0
- package/dist/transport/rendezvous.d.ts.map +1 -0
- package/dist/transport/rendezvous.js +139 -0
- package/dist/transport/rendezvous.js.map +1 -0
- package/dist/transport/rest.d.ts +35 -0
- package/dist/transport/rest.d.ts.map +1 -0
- package/dist/transport/rest.js +58 -0
- package/dist/transport/rest.js.map +1 -0
- package/dist/transport/syncClient.d.ts +14 -0
- package/dist/transport/syncClient.d.ts.map +1 -0
- package/dist/transport/syncClient.js +30 -0
- package/dist/transport/syncClient.js.map +1 -0
- package/dist/transport/urls.d.ts +35 -0
- package/dist/transport/urls.d.ts.map +1 -0
- package/dist/transport/urls.js +126 -0
- package/dist/transport/urls.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
/** Constant per-pair-setting fields for GridTradingMode (StaggeredOrders subclass). */
|
|
2
|
+
const GRID_PAIR_SETTING_DEFAULTS = {
|
|
3
|
+
sell_funds: 0,
|
|
4
|
+
buy_funds: 0,
|
|
5
|
+
starting_price: 0,
|
|
6
|
+
buy_volume_per_order: 0,
|
|
7
|
+
sell_volume_per_order: 0,
|
|
8
|
+
ignore_exchange_fees: true,
|
|
9
|
+
reinvest_profits: true,
|
|
10
|
+
mirror_order_delay: 0,
|
|
11
|
+
use_existing_orders_only: false,
|
|
12
|
+
allow_funds_redispatch: false,
|
|
13
|
+
funds_redispatch_interval: 24,
|
|
14
|
+
enable_trailing_down: false,
|
|
15
|
+
};
|
|
16
|
+
function gridPairSettings(pair, flatSpread, flatIncrement, buyOrdersCount, sellOrdersCount, trailing) {
|
|
17
|
+
return {
|
|
18
|
+
pair,
|
|
19
|
+
flat_spread: flatSpread,
|
|
20
|
+
flat_increment: flatIncrement,
|
|
21
|
+
buy_orders_count: buyOrdersCount,
|
|
22
|
+
sell_orders_count: sellOrdersCount,
|
|
23
|
+
enable_trailing_up: trailing?.enableTrailingUp ?? GRID_INPUT_DEFAULTS.enableTrailingUp,
|
|
24
|
+
order_by_order_trailing: trailing?.orderByOrderTrailing ?? GRID_INPUT_DEFAULTS.orderByOrderTrailing,
|
|
25
|
+
...GRID_PAIR_SETTING_DEFAULTS,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** The wizard's only DCA trigger mode — evaluator-signal triggering needs
|
|
29
|
+
* evaluator config the wizard has no UI for. */
|
|
30
|
+
export const DCA_TRIGGER_MODE_TIME_BASED = 'Time based';
|
|
31
|
+
export const DCA_DEFAULTS = {
|
|
32
|
+
buy_order_amount: '10%t',
|
|
33
|
+
minutes_before_next_buy: 10080,
|
|
34
|
+
use_market_entry_orders: false,
|
|
35
|
+
entry_limit_orders_price_percent: 1,
|
|
36
|
+
use_take_profit_exit_orders: true,
|
|
37
|
+
exit_limit_orders_price_percent: 3,
|
|
38
|
+
};
|
|
39
|
+
/** GridInput-side defaults (spec example values), shared with a caller's own
|
|
40
|
+
* draft store so both layers agree on what an untouched grid emits. */
|
|
41
|
+
export const GRID_INPUT_DEFAULTS = {
|
|
42
|
+
buyOrdersCount: 10,
|
|
43
|
+
sellOrdersCount: 20,
|
|
44
|
+
enableTrailingUp: true,
|
|
45
|
+
orderByOrderTrailing: true,
|
|
46
|
+
};
|
|
47
|
+
export const INDEX_DEFAULTS = {
|
|
48
|
+
rebalance_trigger_min_percent: 5,
|
|
49
|
+
};
|
|
50
|
+
export function formatDcaAmount(value, unit) {
|
|
51
|
+
return `${String(value).trim()}${unit === 'base' ? '' : unit}`;
|
|
52
|
+
}
|
|
53
|
+
/** Split a protocol buy_order_amount string into value + unit. Unknown
|
|
54
|
+
* suffixes ('2%', '12a%'…) stay whole in `value` with unit 'base' so a
|
|
55
|
+
* foreign config re-emits verbatim (formatDcaAmount round-trips it). */
|
|
56
|
+
export function parseDcaAmount(amount) {
|
|
57
|
+
const trimmed = amount.trim();
|
|
58
|
+
if (trimmed.endsWith('%t'))
|
|
59
|
+
return { value: trimmed.slice(0, -2), unit: '%t' };
|
|
60
|
+
if (trimmed.endsWith('q') && Number.isFinite(Number.parseFloat(trimmed.slice(0, -1)))) {
|
|
61
|
+
return { value: trimmed.slice(0, -1), unit: 'q' };
|
|
62
|
+
}
|
|
63
|
+
return { value: trimmed, unit: 'base' };
|
|
64
|
+
}
|
|
65
|
+
/** Float hygiene for derived quote-price deltas. */
|
|
66
|
+
function round8(n) {
|
|
67
|
+
return Math.round(n * 1e8) / 1e8;
|
|
68
|
+
}
|
|
69
|
+
function num(v) {
|
|
70
|
+
const n = typeof v === 'string' ? Number.parseFloat(v) : v;
|
|
71
|
+
return typeof n === 'number' && Number.isFinite(n) ? n : 0;
|
|
72
|
+
}
|
|
73
|
+
/** Amounts/percentages from free-text inputs: the minus sign is typable on
|
|
74
|
+
* web and Android numeric keyboards, and the protocol's numeric fields are
|
|
75
|
+
* non-negative domains ('0 means unlimited'). */
|
|
76
|
+
function pos(v) {
|
|
77
|
+
return Math.max(0, num(v));
|
|
78
|
+
}
|
|
79
|
+
/** Order counts are whole and non-negative. */
|
|
80
|
+
function count(v) {
|
|
81
|
+
return Math.max(0, Math.round(num(v)));
|
|
82
|
+
}
|
|
83
|
+
function refsToProtocol(refs, exchange, tradingPair) {
|
|
84
|
+
// No configured references: quote the traded pair on the bot's own venue.
|
|
85
|
+
if (!refs?.length)
|
|
86
|
+
return [{ exchange, pair: tradingPair, weight: 1 }];
|
|
87
|
+
return refs.map((r) => ({
|
|
88
|
+
// A reference quoted on another venue (or a sentinel like 'local
|
|
89
|
+
// exchange price') keeps it across edits — only venue-less refs (all
|
|
90
|
+
// wizard-created ones) default to the bot's own exchange.
|
|
91
|
+
exchange: r.exchange ?? exchange,
|
|
92
|
+
pair: r.pair,
|
|
93
|
+
weight: r.weight,
|
|
94
|
+
formula: r.formula || undefined,
|
|
95
|
+
time_frame: r.timeframe,
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
function fundsDistribution(shape) {
|
|
99
|
+
if (shape === 'flat' || shape === 'linear')
|
|
100
|
+
return 'flat';
|
|
101
|
+
if (shape === 'expo')
|
|
102
|
+
return 'valley';
|
|
103
|
+
// 'custom' and 'random' both map to the protocol's 'random' distribution.
|
|
104
|
+
return 'random';
|
|
105
|
+
}
|
|
106
|
+
// The node requires average_price_counted_minutes >= 1 — 0/unset still falls
|
|
107
|
+
// back to the 60-minute default, but any typed value below 1 (e.g. '0.5') is
|
|
108
|
+
// floored to 1 rather than sent through unclamped.
|
|
109
|
+
function avgPriceMinutesOf(v) {
|
|
110
|
+
const raw = pos(v);
|
|
111
|
+
return raw > 0 ? Math.max(1, raw) : 60;
|
|
112
|
+
}
|
|
113
|
+
// Per-pair stop-conditions, real thresholds (no rule-toggle presets). 0
|
|
114
|
+
// (or unset) stays "not set", mirroring the protocol's own semantics.
|
|
115
|
+
function stopConditionsFor(sc) {
|
|
116
|
+
if (!sc?.enabled)
|
|
117
|
+
return undefined;
|
|
118
|
+
const conditions = {};
|
|
119
|
+
if (pos(sc.minBaseHolding) > 0)
|
|
120
|
+
conditions.min_base_holding = pos(sc.minBaseHolding);
|
|
121
|
+
if (pos(sc.minQuoteHolding) > 0)
|
|
122
|
+
conditions.min_quote_holding = pos(sc.minQuoteHolding);
|
|
123
|
+
if (pos(sc.maxPositivePct) > 0)
|
|
124
|
+
conditions.max_positive_percent_price_change = pos(sc.maxPositivePct);
|
|
125
|
+
if (pos(sc.maxNegativePct) > 0)
|
|
126
|
+
conditions.max_negative_percent_price_change = pos(sc.maxNegativePct);
|
|
127
|
+
conditions.average_price_counted_minutes = avgPriceMinutesOf(sc.avgPriceMinutes);
|
|
128
|
+
return conditions;
|
|
129
|
+
}
|
|
130
|
+
// hedging_engine_type is intentionally not user-configurable yet — no caller
|
|
131
|
+
// exposes anything but 'spot'.
|
|
132
|
+
function hedgingEngineFor(h) {
|
|
133
|
+
const engine = {
|
|
134
|
+
hedging_engine_type: 'spot',
|
|
135
|
+
hedging_exchange: h.exchange,
|
|
136
|
+
average_price_counted_minutes: avgPriceMinutesOf(h.avgPriceMinutes),
|
|
137
|
+
};
|
|
138
|
+
if (pos(h.maxLossThreshold) > 0)
|
|
139
|
+
engine.hedging_max_loss_threshold = pos(h.maxLossThreshold);
|
|
140
|
+
if (pos(h.maxNegativePct) > 0)
|
|
141
|
+
engine.max_negative_percent_price_change = pos(h.maxNegativePct);
|
|
142
|
+
if (pos(h.maxPositivePct) > 0)
|
|
143
|
+
engine.max_positive_percent_price_change = pos(h.maxPositivePct);
|
|
144
|
+
return engine;
|
|
145
|
+
}
|
|
146
|
+
export function buildMarketMakingConfig(input) {
|
|
147
|
+
// num()/pos()/count() everywhere so all fields share one parsing behavior —
|
|
148
|
+
// Number() and parseFloat disagree on partially-numeric strings like '1,000',
|
|
149
|
+
// and the protocol's numeric domains exclude negatives and fractional counts.
|
|
150
|
+
const minSpread = pos(input.spreadBp) / 100;
|
|
151
|
+
const baseSize = pos(input.sizeBase);
|
|
152
|
+
const pair_settings = input.pairs.map((pair) => {
|
|
153
|
+
const budget = input.budgetByPair?.[pair];
|
|
154
|
+
const volume = input.volumeByPair?.[pair];
|
|
155
|
+
const hedging = input.hedgingByPair?.[pair];
|
|
156
|
+
const orderBook = input.orderBookByPair?.[pair];
|
|
157
|
+
const stop_conditions = stopConditionsFor(input.stopsByPair?.[pair]);
|
|
158
|
+
return {
|
|
159
|
+
trading_pair: pair,
|
|
160
|
+
reference_price: refsToProtocol(input.refsByPair[pair], input.exchange, pair),
|
|
161
|
+
min_spread: orderBook ? pos(orderBook.minSpreadBp) / 100 : minSpread,
|
|
162
|
+
max_spread: orderBook ? pos(orderBook.maxSpreadBp) / 100 : minSpread * 2,
|
|
163
|
+
bids_count: orderBook ? count(orderBook.bidsCount) : count(input.perSide),
|
|
164
|
+
asks_count: orderBook ? count(orderBook.asksCount) : count(input.perSide),
|
|
165
|
+
orders_distribution: orderBook?.ordersDistribution ?? 'linear',
|
|
166
|
+
funds_distribution: orderBook?.fundsDistribution ?? fundsDistribution(input.shape),
|
|
167
|
+
...(orderBook
|
|
168
|
+
? {
|
|
169
|
+
order_book_depth: {
|
|
170
|
+
cumulated_volume_percent: pos(orderBook.cumulatedVolumePercent),
|
|
171
|
+
percent_daily_trading_volume: pos(orderBook.percentDailyTradingVolume),
|
|
172
|
+
},
|
|
173
|
+
}
|
|
174
|
+
: {}),
|
|
175
|
+
exchange: input.exchange,
|
|
176
|
+
max_base_budget: budget?.enabled ? pos(budget.maxBase) : baseSize,
|
|
177
|
+
...(budget?.enabled
|
|
178
|
+
? {
|
|
179
|
+
max_quote_budget: pos(budget.maxQuote),
|
|
180
|
+
min_base_budget: pos(budget.minBase),
|
|
181
|
+
min_quote_budget: pos(budget.minQuote),
|
|
182
|
+
}
|
|
183
|
+
: { max_quote_budget: baseSize }),
|
|
184
|
+
...(volume?.enabled
|
|
185
|
+
? {
|
|
186
|
+
scheduled_volume: {
|
|
187
|
+
// Free-text bounds: keep min <= max even if typed inverted.
|
|
188
|
+
min_amount: Math.min(pos(volume.minAmount), pos(volume.maxAmount)),
|
|
189
|
+
max_amount: Math.max(pos(volume.minAmount), pos(volume.maxAmount)),
|
|
190
|
+
min_interval_seconds: Math.min(pos(volume.minIntervalSeconds), pos(volume.maxIntervalSeconds)),
|
|
191
|
+
max_interval_seconds: Math.max(pos(volume.minIntervalSeconds), pos(volume.maxIntervalSeconds)),
|
|
192
|
+
},
|
|
193
|
+
}
|
|
194
|
+
: {}),
|
|
195
|
+
...(stop_conditions ? { stop_conditions } : {}),
|
|
196
|
+
...(hedging?.enabled ? { hedging_engine: hedgingEngineFor(hedging) } : {}),
|
|
197
|
+
};
|
|
198
|
+
});
|
|
199
|
+
return { configuration_type: 'market_making', pair_settings };
|
|
200
|
+
}
|
|
201
|
+
/** How many of a `levels`-order ladder sit on the buy side, given where the
|
|
202
|
+
* current price falls in the range (0 = at the lower bound, 100 = at the
|
|
203
|
+
* upper bound). The sell side takes the remainder, so the two always sum to
|
|
204
|
+
* `levels` — that is the whole contract.
|
|
205
|
+
*
|
|
206
|
+
* The index is rounded to 9 decimals before flooring so FP noise in the
|
|
207
|
+
* caller's division can't shift the split by a whole level (e.g.
|
|
208
|
+
* (0.3-0.2)/(0.4-0.2) is 0.49999999999999994, not 0.5).
|
|
209
|
+
*
|
|
210
|
+
* Exported so a caller's own preview UI shows exactly what gets submitted. */
|
|
211
|
+
export function gridBuyCount(positionPct, levels) {
|
|
212
|
+
const ratio = Math.min(1, Math.max(0, positionPct / 100));
|
|
213
|
+
return Math.min(levels, Math.floor(Math.round(ratio * levels * 1e9) / 1e9));
|
|
214
|
+
}
|
|
215
|
+
export function buildGridConfig(input) {
|
|
216
|
+
const symbol = input.pairs[0] ?? '';
|
|
217
|
+
const trailing = {
|
|
218
|
+
enableTrailingUp: input.enableTrailingUp,
|
|
219
|
+
orderByOrderTrailing: input.orderByOrderTrailing,
|
|
220
|
+
};
|
|
221
|
+
// Raw ladder params (advanced mode / edit rehydration) win over the range
|
|
222
|
+
// derivation — the only path that can express flat_spread ≠ flat_increment.
|
|
223
|
+
if (input.flatSpread != null && input.flatIncrement != null
|
|
224
|
+
&& input.buyOrdersCount != null && input.sellOrdersCount != null) {
|
|
225
|
+
return {
|
|
226
|
+
configuration_type: 'trading_tentacles',
|
|
227
|
+
name: 'GridTradingMode',
|
|
228
|
+
config: {
|
|
229
|
+
pair_settings: [
|
|
230
|
+
gridPairSettings(symbol, pos(input.flatSpread), pos(input.flatIncrement), count(input.buyOrdersCount), count(input.sellOrdersCount), trailing),
|
|
231
|
+
],
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
const lower = input.lower ?? null;
|
|
236
|
+
const upper = input.upper ?? null;
|
|
237
|
+
const levels = input.levels ?? null;
|
|
238
|
+
// `levels` counts orders, so 1 is a degenerate but representable ladder — an
|
|
239
|
+
// edit rehydrating a 0-buy/1-sell grid must round-trip through here. Only a
|
|
240
|
+
// zero-order ladder is unconfigured.
|
|
241
|
+
if (lower == null || upper == null || levels == null || !(upper > lower) || levels < 1) {
|
|
242
|
+
// Drafts that never visited the strategy step (template path) fall back to
|
|
243
|
+
// a zeroed pair_settings entry rather than inventing a ladder.
|
|
244
|
+
return {
|
|
245
|
+
configuration_type: 'trading_tentacles',
|
|
246
|
+
name: 'GridTradingMode',
|
|
247
|
+
config: { pair_settings: [gridPairSettings(symbol, 0, 0, 0, 0, trailing)] },
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
// Ladder step: consecutive same-side orders sit one step apart,
|
|
251
|
+
// quote-denominated. `levels` orders occupy `levels + 1` price lines across
|
|
252
|
+
// the range (the line the current price sits on carries no order), so the
|
|
253
|
+
// range divides into exactly `levels` intervals. A micro-range whose step
|
|
254
|
+
// rounds to zero is unconfigurable — treat as unset.
|
|
255
|
+
const step = round8((upper - lower) / levels);
|
|
256
|
+
if (!(step > 0)) {
|
|
257
|
+
return {
|
|
258
|
+
configuration_type: 'trading_tentacles',
|
|
259
|
+
name: 'GridTradingMode',
|
|
260
|
+
config: { pair_settings: [gridPairSettings(symbol, 0, 0, 0, 0, trailing)] },
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
const price = input.currentPrice ?? null;
|
|
264
|
+
// Buys below the current price, sells above — the exact split a preview
|
|
265
|
+
// should display. Out-of-range or missing price → symmetric split.
|
|
266
|
+
const positionPct = price != null && price >= lower && price <= upper
|
|
267
|
+
? ((price - lower) / (upper - lower)) * 100
|
|
268
|
+
: 50;
|
|
269
|
+
const buyCount = gridBuyCount(positionPct, levels);
|
|
270
|
+
// Spread defaults to 2x the increment (step) — a bare spread == increment
|
|
271
|
+
// ladder has zero profit margin per round-trip.
|
|
272
|
+
return {
|
|
273
|
+
configuration_type: 'trading_tentacles',
|
|
274
|
+
name: 'GridTradingMode',
|
|
275
|
+
config: {
|
|
276
|
+
pair_settings: [
|
|
277
|
+
gridPairSettings(symbol, round8(step * 2), step, buyCount, levels - buyCount, trailing),
|
|
278
|
+
],
|
|
279
|
+
},
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
export function buildDCAConfig(input) {
|
|
283
|
+
const amount = input.buyOrderAmount?.trim();
|
|
284
|
+
return {
|
|
285
|
+
configuration_type: 'trading_tentacles',
|
|
286
|
+
name: 'DCATradingMode',
|
|
287
|
+
config: {
|
|
288
|
+
trigger_mode: DCA_TRIGGER_MODE_TIME_BASED,
|
|
289
|
+
minutes_before_next_buy: Math.max(1, Math.round(num(input.minutesBeforeNextBuy) || DCA_DEFAULTS.minutes_before_next_buy)),
|
|
290
|
+
buy_order_amount: amount || DCA_DEFAULTS.buy_order_amount,
|
|
291
|
+
use_market_entry_orders: input.useMarketEntry ?? DCA_DEFAULTS.use_market_entry_orders,
|
|
292
|
+
entry_limit_orders_price_percent: input.entryLimitPricePercent != null
|
|
293
|
+
? pos(input.entryLimitPricePercent)
|
|
294
|
+
: DCA_DEFAULTS.entry_limit_orders_price_percent,
|
|
295
|
+
use_take_profit_exit_orders: input.useTakeProfit ?? DCA_DEFAULTS.use_take_profit_exit_orders,
|
|
296
|
+
exit_limit_orders_price_percent: input.exitLimitPricePercent != null
|
|
297
|
+
? pos(input.exitLimitPricePercent)
|
|
298
|
+
: DCA_DEFAULTS.exit_limit_orders_price_percent,
|
|
299
|
+
trading_pairs: input.pairs,
|
|
300
|
+
},
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
export function buildIndexConfig(input) {
|
|
304
|
+
const weights = input.basketWeights ?? {};
|
|
305
|
+
// index_content values are raw relative weights (70/30), not normalised
|
|
306
|
+
// fractions — the node computes each coin's ratio from the sum itself.
|
|
307
|
+
const index_content = input.pairs.map((p) => {
|
|
308
|
+
const symbol = p.includes('/') ? p.split('/')[0] : p;
|
|
309
|
+
return { name: symbol, value: weights[symbol] ?? 0 };
|
|
310
|
+
});
|
|
311
|
+
return {
|
|
312
|
+
configuration_type: 'trading_tentacles',
|
|
313
|
+
name: 'IndexTradingMode',
|
|
314
|
+
config: {
|
|
315
|
+
index_content,
|
|
316
|
+
rebalance_trigger_min_percent: input.rebalanceTriggerPct ?? INDEX_DEFAULTS.rebalance_trigger_min_percent,
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
export function buildCopyConfig(input) {
|
|
321
|
+
return { configuration_type: 'copy', strategy_id: input.sourceId ?? '' };
|
|
322
|
+
}
|
|
323
|
+
export function buildSignalConfig(input) {
|
|
324
|
+
const signal = {
|
|
325
|
+
version: 1,
|
|
326
|
+
webhook: { id: input.webhookId, secret: input.webhookSecret },
|
|
327
|
+
pair: input.pair,
|
|
328
|
+
side: {
|
|
329
|
+
mode: input.sideMode,
|
|
330
|
+
...(input.sideMode === 'payload' && input.sidePayloadField
|
|
331
|
+
? { payload_field: input.sidePayloadField }
|
|
332
|
+
: {}),
|
|
333
|
+
},
|
|
334
|
+
order: {
|
|
335
|
+
type: input.orderType,
|
|
336
|
+
...(input.orderType === 'limit'
|
|
337
|
+
? {
|
|
338
|
+
limit_offset_bp: num(input.limitOffsetBp),
|
|
339
|
+
limit_offset_direction: input.limitOffsetDir ?? 'below',
|
|
340
|
+
}
|
|
341
|
+
: {}),
|
|
342
|
+
},
|
|
343
|
+
size: { mode: input.sizeMode, value: num(input.sizeValue) },
|
|
344
|
+
...(input.tpEnabled ? { take_profit_percent: num(input.tpPct) } : {}),
|
|
345
|
+
...(input.slEnabled ? { stop_loss_percent: num(input.slPct) } : {}),
|
|
346
|
+
};
|
|
347
|
+
return { configuration_type: 'generic_process', profile_data: { signal } };
|
|
348
|
+
}
|
|
349
|
+
// Validates every field the inverse reads unguarded — a partial payload from
|
|
350
|
+
// a foreign producer or older schema must fall through to 'custom', not throw
|
|
351
|
+
// (or worse: round-trip an undefined webhook secret into a re-emitted config).
|
|
352
|
+
export function isSignalProfileData(data) {
|
|
353
|
+
const signal = data?.signal;
|
|
354
|
+
return typeof signal?.webhook?.id === 'string'
|
|
355
|
+
&& typeof signal.webhook.secret === 'string'
|
|
356
|
+
&& typeof signal.pair === 'string'
|
|
357
|
+
&& typeof signal.side?.mode === 'string'
|
|
358
|
+
&& typeof signal.order?.type === 'string'
|
|
359
|
+
&& typeof signal.size?.mode === 'string'
|
|
360
|
+
&& typeof signal.size.value === 'number';
|
|
361
|
+
}
|
|
362
|
+
export function signalProfileDataToInput(data) {
|
|
363
|
+
const s = data.signal;
|
|
364
|
+
return {
|
|
365
|
+
webhookId: s.webhook.id,
|
|
366
|
+
webhookSecret: s.webhook.secret,
|
|
367
|
+
pair: s.pair,
|
|
368
|
+
sideMode: s.side.mode,
|
|
369
|
+
...(s.side.payload_field ? { sidePayloadField: s.side.payload_field } : {}),
|
|
370
|
+
orderType: s.order.type,
|
|
371
|
+
...(s.order.limit_offset_bp != null ? { limitOffsetBp: s.order.limit_offset_bp } : {}),
|
|
372
|
+
...(s.order.limit_offset_direction ? { limitOffsetDir: s.order.limit_offset_direction } : {}),
|
|
373
|
+
sizeMode: s.size.mode,
|
|
374
|
+
sizeValue: s.size.value,
|
|
375
|
+
...(s.take_profit_percent != null ? { tpEnabled: true, tpPct: s.take_profit_percent } : {}),
|
|
376
|
+
...(s.stop_loss_percent != null ? { slEnabled: true, slPct: s.stop_loss_percent } : {}),
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
export function buildGenericProcessConfig() {
|
|
380
|
+
return { configuration_type: 'generic_process', profile_data: {} };
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=builders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builders.js","sourceRoot":"","sources":["../../../src/protocol/strategy/builders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { StrategyKind } from './kinds.js';
|
|
2
|
+
export { buildMarketMakingConfig, buildGridConfig, gridBuyCount, buildDCAConfig, buildIndexConfig, buildCopyConfig, buildSignalConfig, buildGenericProcessConfig, isSignalProfileData, signalProfileDataToInput, formatDcaAmount, parseDcaAmount, DCA_TRIGGER_MODE_TIME_BASED, DCA_DEFAULTS, GRID_INPUT_DEFAULTS, INDEX_DEFAULTS, type MmRefInput, type MmBudgetPairInput, type MmStopsPairInput, type MmVolumePairInput, type MmHedgingPairInput, type MmOrderBookPairInput, type MmInput, type MmInputPatch, type GridLadderGeometry, type GridInput, type DcaInput, type DcaAmountUnit, type IndexInput, type CopyInput, type SignalInput, type SignalProfileData, } from './builders.js';
|
|
3
|
+
export { buildStrategy, referenceMarketOf, type StrategyInput, type BuildStrategyOptions, } from './build.js';
|
|
4
|
+
export { protocolStrategyToInput, bumpStrategyPatchVersion, type StrategyInputPatch, type GridGeometryPatch, type DcaPatch, } from './patch.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/protocol/strategy/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,2BAA2B,EAC3B,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,oBAAoB,GAC1B,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { buildMarketMakingConfig, buildGridConfig, gridBuyCount, buildDCAConfig, buildIndexConfig, buildCopyConfig, buildSignalConfig, buildGenericProcessConfig, isSignalProfileData, signalProfileDataToInput, formatDcaAmount, parseDcaAmount, DCA_TRIGGER_MODE_TIME_BASED, DCA_DEFAULTS, GRID_INPUT_DEFAULTS, INDEX_DEFAULTS, } from './builders.js';
|
|
2
|
+
export { buildStrategy, referenceMarketOf, } from './build.js';
|
|
3
|
+
export { protocolStrategyToInput, bumpStrategyPatchVersion, } from './patch.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/protocol/strategy/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,2BAA2B,EAC3B,YAAY,EACZ,mBAAmB,EACnB,cAAc,GAiBf,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EACb,iBAAiB,GAGlB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GAIzB,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kinds.d.ts","sourceRoot":"","sources":["../../../src/protocol/strategy/kinds.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kinds.js","sourceRoot":"","sources":["../../../src/protocol/strategy/kinds.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Strategy } from '@drakkar.software/octobot-protocol';
|
|
2
|
+
import { type MmInputPatch, type IndexInput, type CopyInput, type SignalInput, type MmRefInput } from './builders.js';
|
|
3
|
+
/** Grid ladder geometry recovered from a protocol config. The absolute price
|
|
4
|
+
* bounds are not stored in GridConfiguration — an edit UI renders this raw
|
|
5
|
+
* geometry directly (advanced mode) and derives display bounds from the
|
|
6
|
+
* live price. */
|
|
7
|
+
export type GridGeometryPatch = {
|
|
8
|
+
spread: number;
|
|
9
|
+
increment: number;
|
|
10
|
+
buyCount: number;
|
|
11
|
+
sellCount: number;
|
|
12
|
+
levels: number;
|
|
13
|
+
enableTrailingUp: boolean;
|
|
14
|
+
orderByOrderTrailing: boolean;
|
|
15
|
+
};
|
|
16
|
+
export type DcaPatch = {
|
|
17
|
+
/** Verbatim protocol amount string ('10%t' / '25q' / '0.1'). */
|
|
18
|
+
buyOrderAmount: string;
|
|
19
|
+
minutesBeforeNextBuy: number;
|
|
20
|
+
useMarketEntry: boolean;
|
|
21
|
+
entryLimitPricePercent: number;
|
|
22
|
+
useTakeProfit: boolean;
|
|
23
|
+
exitLimitPricePercent: number;
|
|
24
|
+
};
|
|
25
|
+
export type StrategyInputPatch = ({
|
|
26
|
+
kind: 'mm';
|
|
27
|
+
mm: MmInputPatch;
|
|
28
|
+
pairs: string[];
|
|
29
|
+
refsByPair: Record<string, MmRefInput[]>;
|
|
30
|
+
} | {
|
|
31
|
+
kind: 'grid';
|
|
32
|
+
pairs: string[];
|
|
33
|
+
grid: GridGeometryPatch | null;
|
|
34
|
+
} | {
|
|
35
|
+
kind: 'dca';
|
|
36
|
+
pairs: string[];
|
|
37
|
+
dca: DcaPatch | null;
|
|
38
|
+
} | {
|
|
39
|
+
kind: 'basket';
|
|
40
|
+
pairs: string[];
|
|
41
|
+
basket: IndexInput;
|
|
42
|
+
} | {
|
|
43
|
+
kind: 'copy';
|
|
44
|
+
copy: CopyInput;
|
|
45
|
+
} | {
|
|
46
|
+
kind: 'signal';
|
|
47
|
+
signal: SignalInput;
|
|
48
|
+
} | {
|
|
49
|
+
kind: 'custom';
|
|
50
|
+
});
|
|
51
|
+
/** Recover an editable `StrategyInputPatch` from a protocol `Strategy`. The
|
|
52
|
+
* inverse of `buildStrategy` in ./build.ts, tolerant of configs written by
|
|
53
|
+
* older or foreign clients (never throws — unrecognized shapes fall to
|
|
54
|
+
* `{ kind: 'custom' }`). */
|
|
55
|
+
export declare function protocolStrategyToInput(strategy: Strategy): StrategyInputPatch;
|
|
56
|
+
/** Bump a semver-ish `MAJOR.MINOR.PATCH` string's patch component by one,
|
|
57
|
+
* zero-filling any missing component. */
|
|
58
|
+
export declare function bumpStrategyPatchVersion(version: string): string;
|
|
59
|
+
//# sourceMappingURL=patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/protocol/strategy/patch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAClE,OAAO,EAKL,KAAK,YAAY,EAMjB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,UAAU,EAChB,MAAM,eAAe,CAAA;AAOtB;;;kBAGkB;AAClB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,OAAO,CAAA;IACzB,oBAAoB,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAA;IACtB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,cAAc,EAAE,OAAO,CAAA;IACvB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,aAAa,EAAE,OAAO,CAAA;IACtB,qBAAqB,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC7B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAK,EAAE,EAAM,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;CAAE,GACnG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAG,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAG,IAAI,EAAE,SAAS,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CACrB,CAAA;AAkBD;;;6BAG6B;AAC7B,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,CAqP9E;AAED;0CAC0C;AAC1C,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKhE"}
|