@wrcb/cb-common 1.0.882 → 1.0.884
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/build/events/subjects.d.ts +4 -1
- package/build/events/subjects.js +4 -0
- package/build/events/trader/autopilotActedEvent.d.ts +13 -0
- package/build/events/trader/autopilotActedEvent.js +2 -0
- package/build/events/trader/autopilotActedPublisher.d.ts +6 -0
- package/build/events/trader/autopilotActedPublisher.js +12 -0
- package/build/events/trader/collectorStalledEvent.d.ts +10 -0
- package/build/events/trader/collectorStalledEvent.js +2 -0
- package/build/events/trader/collectorStalledPublisher.d.ts +6 -0
- package/build/events/trader/collectorStalledPublisher.js +12 -0
- package/build/events/trader/index.d.ts +6 -0
- package/build/events/trader/index.js +22 -0
- package/build/events/trader/sessionHaltedEvent.d.ts +15 -0
- package/build/events/trader/sessionHaltedEvent.js +2 -0
- package/build/events/trader/sessionHaltedPublisher.d.ts +6 -0
- package/build/events/trader/sessionHaltedPublisher.js +12 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +3 -0
- package/build/server.d.ts +1 -0
- package/build/server.js +2 -0
- package/build/services/TenantDataService.js +97 -0
- package/build/types/tenant.d.ts +3 -1
- package/build/types/tenant.js +2 -0
- package/build/types/trader.d.ts +187 -0
- package/build/types/trader.js +78 -0
- package/package.json +1 -1
|
@@ -79,5 +79,8 @@ export declare enum Subjects {
|
|
|
79
79
|
ThoOrderPaid = "tho:order:paid",
|
|
80
80
|
ThoOrderStatusUpdated = "tho:order:status-updated",
|
|
81
81
|
ThoOrderWalletChargeRequested = "tho:order:wallet-charge-requested",
|
|
82
|
-
ThoOrderSettled = "tho:order:settled"
|
|
82
|
+
ThoOrderSettled = "tho:order:settled",
|
|
83
|
+
TrdSessionHalted = "trd:session:halted",
|
|
84
|
+
TrdCollectorStalled = "trd:collector:stalled",
|
|
85
|
+
TrdAutopilotActed = "trd:autopilot:acted"
|
|
83
86
|
}
|
package/build/events/subjects.js
CHANGED
|
@@ -95,4 +95,8 @@ var Subjects;
|
|
|
95
95
|
Subjects["ThoOrderStatusUpdated"] = "tho:order:status-updated";
|
|
96
96
|
Subjects["ThoOrderWalletChargeRequested"] = "tho:order:wallet-charge-requested";
|
|
97
97
|
Subjects["ThoOrderSettled"] = "tho:order:settled";
|
|
98
|
+
// bot-trader (simulação de estratégias na MEXC spot)
|
|
99
|
+
Subjects["TrdSessionHalted"] = "trd:session:halted";
|
|
100
|
+
Subjects["TrdCollectorStalled"] = "trd:collector:stalled";
|
|
101
|
+
Subjects["TrdAutopilotActed"] = "trd:autopilot:acted";
|
|
98
102
|
})(Subjects || (exports.Subjects = Subjects = {}));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Subjects } from '../subjects';
|
|
2
|
+
import { TraderAutopilotAction, TraderStrategy } from '../../types/trader';
|
|
3
|
+
export interface TrdAutopilotActedEvent {
|
|
4
|
+
subject: Subjects.TrdAutopilotActed;
|
|
5
|
+
data: {
|
|
6
|
+
action: TraderAutopilotAction;
|
|
7
|
+
symbol: string;
|
|
8
|
+
strategy: TraderStrategy | null;
|
|
9
|
+
sessionId: string | null;
|
|
10
|
+
reason: string;
|
|
11
|
+
at: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Publisher } from '../basePublisher';
|
|
2
|
+
import { TrdAutopilotActedEvent } from './autopilotActedEvent';
|
|
3
|
+
import { Subjects } from '../subjects';
|
|
4
|
+
export declare class TrdAutopilotActedPublisher extends Publisher<TrdAutopilotActedEvent> {
|
|
5
|
+
subject: Subjects.TrdAutopilotActed;
|
|
6
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TrdAutopilotActedPublisher = void 0;
|
|
4
|
+
const basePublisher_1 = require("../basePublisher");
|
|
5
|
+
const subjects_1 = require("../subjects");
|
|
6
|
+
class TrdAutopilotActedPublisher extends basePublisher_1.Publisher {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.subject = subjects_1.Subjects.TrdAutopilotActed;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.TrdAutopilotActedPublisher = TrdAutopilotActedPublisher;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Publisher } from '../basePublisher';
|
|
2
|
+
import { TrdCollectorStalledEvent } from './collectorStalledEvent';
|
|
3
|
+
import { Subjects } from '../subjects';
|
|
4
|
+
export declare class TrdCollectorStalledPublisher extends Publisher<TrdCollectorStalledEvent> {
|
|
5
|
+
subject: Subjects.TrdCollectorStalled;
|
|
6
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TrdCollectorStalledPublisher = void 0;
|
|
4
|
+
const basePublisher_1 = require("../basePublisher");
|
|
5
|
+
const subjects_1 = require("../subjects");
|
|
6
|
+
class TrdCollectorStalledPublisher extends basePublisher_1.Publisher {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.subject = subjects_1.Subjects.TrdCollectorStalled;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.TrdCollectorStalledPublisher = TrdCollectorStalledPublisher;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./sessionHaltedEvent"), exports);
|
|
18
|
+
__exportStar(require("./sessionHaltedPublisher"), exports);
|
|
19
|
+
__exportStar(require("./collectorStalledEvent"), exports);
|
|
20
|
+
__exportStar(require("./collectorStalledPublisher"), exports);
|
|
21
|
+
__exportStar(require("./autopilotActedEvent"), exports);
|
|
22
|
+
__exportStar(require("./autopilotActedPublisher"), exports);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Subjects } from '../subjects';
|
|
2
|
+
import { TraderHaltReason, TraderStrategy } from '../../types/trader';
|
|
3
|
+
export interface TrdSessionHaltedEvent {
|
|
4
|
+
subject: Subjects.TrdSessionHalted;
|
|
5
|
+
data: {
|
|
6
|
+
sessionId: string;
|
|
7
|
+
label: string;
|
|
8
|
+
symbol: string;
|
|
9
|
+
strategy: TraderStrategy;
|
|
10
|
+
reason: TraderHaltReason;
|
|
11
|
+
totalPnlQuote: number;
|
|
12
|
+
inventoryBase: number;
|
|
13
|
+
haltedAt: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Publisher } from '../basePublisher';
|
|
2
|
+
import { TrdSessionHaltedEvent } from './sessionHaltedEvent';
|
|
3
|
+
import { Subjects } from '../subjects';
|
|
4
|
+
export declare class TrdSessionHaltedPublisher extends Publisher<TrdSessionHaltedEvent> {
|
|
5
|
+
subject: Subjects.TrdSessionHalted;
|
|
6
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TrdSessionHaltedPublisher = void 0;
|
|
4
|
+
const basePublisher_1 = require("../basePublisher");
|
|
5
|
+
const subjects_1 = require("../subjects");
|
|
6
|
+
class TrdSessionHaltedPublisher extends basePublisher_1.Publisher {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.subject = subjects_1.Subjects.TrdSessionHalted;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.TrdSessionHaltedPublisher = TrdSessionHaltedPublisher;
|
package/build/index.d.ts
CHANGED
|
@@ -57,6 +57,7 @@ export * from './types/betStatus';
|
|
|
57
57
|
export * from './types/predictionType';
|
|
58
58
|
export * from './types/trabalhoHomeOffice';
|
|
59
59
|
export * from './types/crm';
|
|
60
|
+
export * from './types/trader';
|
|
60
61
|
export * from './events/subjects';
|
|
61
62
|
export * from './events/baseListener';
|
|
62
63
|
export * from './events/basePublisher';
|
|
@@ -65,6 +66,7 @@ export * from './events/social-media-automator';
|
|
|
65
66
|
export * from './events/ai';
|
|
66
67
|
export * from './events/notas-br';
|
|
67
68
|
export * from './events/trabalho-home-office';
|
|
69
|
+
export * from './events/trader';
|
|
68
70
|
export * from './services/TenantDataService';
|
|
69
71
|
export * from './services/CurrencyService';
|
|
70
72
|
export * from './config/notasBrBilling';
|
package/build/index.js
CHANGED
|
@@ -85,6 +85,8 @@ __exportStar(require("./types/predictionType"), exports);
|
|
|
85
85
|
__exportStar(require("./types/trabalhoHomeOffice"), exports);
|
|
86
86
|
// crm — núcleo multi-tenant (pipeline configurável + agente de IA)
|
|
87
87
|
__exportStar(require("./types/crm"), exports);
|
|
88
|
+
// bot-trader — simulação de estratégias na MEXC spot
|
|
89
|
+
__exportStar(require("./types/trader"), exports);
|
|
88
90
|
__exportStar(require("./events/subjects"), exports);
|
|
89
91
|
__exportStar(require("./events/baseListener"), exports);
|
|
90
92
|
__exportStar(require("./events/basePublisher"), exports);
|
|
@@ -93,6 +95,7 @@ __exportStar(require("./events/social-media-automator"), exports);
|
|
|
93
95
|
__exportStar(require("./events/ai"), exports);
|
|
94
96
|
__exportStar(require("./events/notas-br"), exports);
|
|
95
97
|
__exportStar(require("./events/trabalho-home-office"), exports);
|
|
98
|
+
__exportStar(require("./events/trader"), exports);
|
|
96
99
|
__exportStar(require("./services/TenantDataService"), exports);
|
|
97
100
|
__exportStar(require("./services/CurrencyService"), exports);
|
|
98
101
|
// notas-br — tabela de billing compartilhada entre gn-business e cb-payments
|
package/build/server.d.ts
CHANGED
|
@@ -90,6 +90,7 @@ export * from './events/apps/creativeVideoReadyEvent';
|
|
|
90
90
|
export * from './events/realstate/realStateVideoCreatedEvent';
|
|
91
91
|
export * from './events/notas-br';
|
|
92
92
|
export * from './events/trabalho-home-office';
|
|
93
|
+
export * from './events/trader';
|
|
93
94
|
export * from './events/linkedin-automator/linkedinPostGeneratedEvent';
|
|
94
95
|
export * from './events/linkedin-automator/linkedinPostGeneratedPublisher';
|
|
95
96
|
export * from './events/linkedin-automator/linkedinPostPublishedEvent';
|
package/build/server.js
CHANGED
|
@@ -108,6 +108,8 @@ __exportStar(require("./events/realstate/realStateVideoCreatedEvent"), exports);
|
|
|
108
108
|
__exportStar(require("./events/notas-br"), exports);
|
|
109
109
|
// trabalho-home-office
|
|
110
110
|
__exportStar(require("./events/trabalho-home-office"), exports);
|
|
111
|
+
// bot-trader
|
|
112
|
+
__exportStar(require("./events/trader"), exports);
|
|
111
113
|
// linkedin-automator
|
|
112
114
|
__exportStar(require("./events/linkedin-automator/linkedinPostGeneratedEvent"), exports);
|
|
113
115
|
__exportStar(require("./events/linkedin-automator/linkedinPostGeneratedPublisher"), exports);
|
|
@@ -1186,5 +1186,102 @@ TenantDataService.tenantDataMap = {
|
|
|
1186
1186
|
}
|
|
1187
1187
|
},
|
|
1188
1188
|
RATING_CRITERIA: undefined
|
|
1189
|
+
},
|
|
1190
|
+
[tenant_1.Tenant.MercadoProfissional]: {
|
|
1191
|
+
TENANT: tenant_1.Tenant.MercadoProfissional,
|
|
1192
|
+
BACKEND_API_VERSION: '1',
|
|
1193
|
+
SITE_NAME: 'Mercado Profissional',
|
|
1194
|
+
// TODO: domínio ainda não definido. Enquanto estiver com este valor,
|
|
1195
|
+
// o canonical e os links de e-mail apontam para um endereço que não
|
|
1196
|
+
// existe — trocar antes de qualquer página ir ao ar.
|
|
1197
|
+
SITE_URL: 'https://www.mercadoprofissional.com.br',
|
|
1198
|
+
SITE_WHATSAPP_SUPPORT: '',
|
|
1199
|
+
SITE_WHATSAPP_BOT: '',
|
|
1200
|
+
WHATSAPP_BOT_NUMBER_ID: '',
|
|
1201
|
+
WHATSAPP_TOKEN: '',
|
|
1202
|
+
WHATSAPP_API_URL: '',
|
|
1203
|
+
WHATSAPP_API_VERSION: '',
|
|
1204
|
+
IOS_APP_DOWNLOAD_LINK: '',
|
|
1205
|
+
ANDROID_APP_DOWNLOAD_LINK: '',
|
|
1206
|
+
SITE_DESCRIPTION: 'Encontre pedreiro, eletricista, jardineiro e outros profissionais na sua cidade, e fale direto com eles.',
|
|
1207
|
+
KEYWORDS: ['profissionais', 'servicos', 'orcamento'],
|
|
1208
|
+
SOCIAL_X: '',
|
|
1209
|
+
SOCIAL_YOUTUBE: '',
|
|
1210
|
+
SOCIAL_INSTAGRAM: '',
|
|
1211
|
+
SOCIAL_FACEBOOK: '',
|
|
1212
|
+
USER_CATEGORIES_CONFIG: {},
|
|
1213
|
+
COUPONS_TYPE_ALLOWED_TO_BE_CREATED_BY_SELLER: [],
|
|
1214
|
+
COUPONS_TYPE_ALLOWED_TO_BE_CREATED_BY_ADMIN: [],
|
|
1215
|
+
EMAIL_HOST: 'smtp.gmail.com',
|
|
1216
|
+
EMAIL_PORT: '587',
|
|
1217
|
+
EMAIL_USER: 'wrsolucoesdig@gmail.com',
|
|
1218
|
+
EMAIL_PASS: 'lwegguaqrzauawsg',
|
|
1219
|
+
AUTH_FACEBOOK_APP_ID: '',
|
|
1220
|
+
AUTH_GOOGLE_ID: '',
|
|
1221
|
+
AUTH_GOOGLE_SECRET: '',
|
|
1222
|
+
GOOGLE_ANALYTICS_MEASUREMENT_ID: '',
|
|
1223
|
+
GOOGLE_VERIFICATION: '',
|
|
1224
|
+
MEDIA_CONFIG: {
|
|
1225
|
+
maxPhotoSizeMB: 5,
|
|
1226
|
+
maxVideoSizeMB: 20,
|
|
1227
|
+
allowedImageFormats: ['jpg', 'jpeg', 'png', 'webp'],
|
|
1228
|
+
allowedVideoFormats: ['mp4', 'webm'],
|
|
1229
|
+
imageQualities: {
|
|
1230
|
+
thumbnail: { width: 150, height: 150, quality: 80 },
|
|
1231
|
+
medium: { width: 800, height: 800, quality: 85 },
|
|
1232
|
+
large: { width: 1200, height: 1200, quality: 90 }
|
|
1233
|
+
}
|
|
1234
|
+
},
|
|
1235
|
+
RATING_CRITERIA: undefined
|
|
1236
|
+
},
|
|
1237
|
+
// Ferramenta interna, não produto: não há site público, cadastro de
|
|
1238
|
+
// usuário, e-mail transacional nem mídia enviada por ninguém. Os campos
|
|
1239
|
+
// ficam vazios de propósito — preenchê-los com valor de fachada faria o
|
|
1240
|
+
// TenantDataService devolver dado que parece configuração e não é.
|
|
1241
|
+
// O que este tenant realmente identifica é a origem dos dados em
|
|
1242
|
+
// trd_* e o login do painel no cb-auth.
|
|
1243
|
+
[tenant_1.Tenant.BotTrader]: {
|
|
1244
|
+
TENANT: tenant_1.Tenant.BotTrader,
|
|
1245
|
+
BACKEND_API_VERSION: '1',
|
|
1246
|
+
SITE_NAME: 'BotTrader',
|
|
1247
|
+
SITE_URL: 'https://trader.wrsolucoesdigitais.com.br',
|
|
1248
|
+
SITE_WHATSAPP_SUPPORT: '',
|
|
1249
|
+
SITE_WHATSAPP_BOT: '',
|
|
1250
|
+
WHATSAPP_BOT_NUMBER_ID: '',
|
|
1251
|
+
WHATSAPP_TOKEN: '',
|
|
1252
|
+
WHATSAPP_API_URL: '',
|
|
1253
|
+
WHATSAPP_API_VERSION: '',
|
|
1254
|
+
IOS_APP_DOWNLOAD_LINK: '',
|
|
1255
|
+
ANDROID_APP_DOWNLOAD_LINK: '',
|
|
1256
|
+
SITE_DESCRIPTION: 'Simulação de estratégias de market making e grade na MEXC spot.',
|
|
1257
|
+
KEYWORDS: [],
|
|
1258
|
+
SOCIAL_X: '',
|
|
1259
|
+
SOCIAL_YOUTUBE: '',
|
|
1260
|
+
SOCIAL_INSTAGRAM: '',
|
|
1261
|
+
SOCIAL_FACEBOOK: '',
|
|
1262
|
+
USER_CATEGORIES_CONFIG: {},
|
|
1263
|
+
COUPONS_TYPE_ALLOWED_TO_BE_CREATED_BY_SELLER: [],
|
|
1264
|
+
COUPONS_TYPE_ALLOWED_TO_BE_CREATED_BY_ADMIN: [],
|
|
1265
|
+
EMAIL_HOST: 'smtp.gmail.com',
|
|
1266
|
+
EMAIL_PORT: '587',
|
|
1267
|
+
EMAIL_USER: 'wrsolucoesdig@gmail.com',
|
|
1268
|
+
EMAIL_PASS: 'lwegguaqrzauawsg',
|
|
1269
|
+
AUTH_FACEBOOK_APP_ID: '',
|
|
1270
|
+
AUTH_GOOGLE_ID: '',
|
|
1271
|
+
AUTH_GOOGLE_SECRET: '',
|
|
1272
|
+
GOOGLE_ANALYTICS_MEASUREMENT_ID: '',
|
|
1273
|
+
GOOGLE_VERIFICATION: '',
|
|
1274
|
+
MEDIA_CONFIG: {
|
|
1275
|
+
maxPhotoSizeMB: 5,
|
|
1276
|
+
maxVideoSizeMB: 20,
|
|
1277
|
+
allowedImageFormats: ['jpg', 'jpeg', 'png', 'webp'],
|
|
1278
|
+
allowedVideoFormats: ['mp4', 'webm'],
|
|
1279
|
+
imageQualities: {
|
|
1280
|
+
thumbnail: { width: 150, height: 150, quality: 80 },
|
|
1281
|
+
medium: { width: 800, height: 800, quality: 85 },
|
|
1282
|
+
large: { width: 1200, height: 1200, quality: 90 }
|
|
1283
|
+
}
|
|
1284
|
+
},
|
|
1285
|
+
RATING_CRITERIA: undefined
|
|
1189
1286
|
}
|
|
1190
1287
|
};
|
package/build/types/tenant.d.ts
CHANGED
|
@@ -14,5 +14,7 @@ export declare enum Tenant {
|
|
|
14
14
|
BreadOfLife = "BreadOfLife",
|
|
15
15
|
LinkedinAutomator = "LinkedinAutomator",
|
|
16
16
|
NotasBr = "NotasBr",
|
|
17
|
-
TrabalhoHomeOffice = "TrabalhoHomeOffice"
|
|
17
|
+
TrabalhoHomeOffice = "TrabalhoHomeOffice",
|
|
18
|
+
MercadoProfissional = "MercadoProfissional",
|
|
19
|
+
BotTrader = "BotTrader"
|
|
18
20
|
}
|
package/build/types/tenant.js
CHANGED
|
@@ -19,4 +19,6 @@ var Tenant;
|
|
|
19
19
|
Tenant["LinkedinAutomator"] = "LinkedinAutomator";
|
|
20
20
|
Tenant["NotasBr"] = "NotasBr";
|
|
21
21
|
Tenant["TrabalhoHomeOffice"] = "TrabalhoHomeOffice";
|
|
22
|
+
Tenant["MercadoProfissional"] = "MercadoProfissional";
|
|
23
|
+
Tenant["BotTrader"] = "BotTrader";
|
|
22
24
|
})(Tenant || (exports.Tenant = Tenant = {}));
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
export declare enum TraderStrategy {
|
|
2
|
+
MarketMaking = "MarketMaking",
|
|
3
|
+
Grid = "Grid"
|
|
4
|
+
}
|
|
5
|
+
export declare enum TraderExecutionMode {
|
|
6
|
+
Paper = "Paper",
|
|
7
|
+
Live = "Live"
|
|
8
|
+
}
|
|
9
|
+
export declare enum TraderSessionStatus {
|
|
10
|
+
Running = "Running",
|
|
11
|
+
Stopped = "Stopped",
|
|
12
|
+
Halted = "Halted"
|
|
13
|
+
}
|
|
14
|
+
export declare enum TraderSide {
|
|
15
|
+
Buy = "Buy",
|
|
16
|
+
Sell = "Sell"
|
|
17
|
+
}
|
|
18
|
+
export declare enum TraderOrderStatus {
|
|
19
|
+
Open = "Open",
|
|
20
|
+
Filled = "Filled",
|
|
21
|
+
Cancelled = "Cancelled"
|
|
22
|
+
}
|
|
23
|
+
export declare enum TraderHaltReason {
|
|
24
|
+
DailyLossLimit = "DailyLossLimit",
|
|
25
|
+
InventoryLimit = "InventoryLimit",
|
|
26
|
+
MaxDrawdown = "MaxDrawdown",
|
|
27
|
+
FeedStale = "FeedStale",
|
|
28
|
+
Manual = "Manual"
|
|
29
|
+
}
|
|
30
|
+
export declare enum TraderPairStatus {
|
|
31
|
+
Collecting = "Collecting",
|
|
32
|
+
Paused = "Paused"
|
|
33
|
+
}
|
|
34
|
+
export declare enum TraderMarketRegime {
|
|
35
|
+
Ranging = "Ranging",
|
|
36
|
+
Trending = "Trending",
|
|
37
|
+
Volatile = "Volatile"
|
|
38
|
+
}
|
|
39
|
+
export interface TraderMarketMakingParams {
|
|
40
|
+
baseSpreadBps: number;
|
|
41
|
+
volatilityMultiplier: number;
|
|
42
|
+
inventorySkewBps: number;
|
|
43
|
+
orderSizeQuote: number;
|
|
44
|
+
requoteToleranceBps: number;
|
|
45
|
+
pauseOutsideRanging: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface TraderGridParams {
|
|
48
|
+
gridLevels: number;
|
|
49
|
+
gridStepBps: number;
|
|
50
|
+
orderSizeQuote: number;
|
|
51
|
+
recenterThresholdBps: number;
|
|
52
|
+
}
|
|
53
|
+
export interface TraderSessionParams {
|
|
54
|
+
marketMaking?: TraderMarketMakingParams;
|
|
55
|
+
grid?: TraderGridParams;
|
|
56
|
+
}
|
|
57
|
+
export interface TraderRiskLimits {
|
|
58
|
+
maxInventoryQuote: number;
|
|
59
|
+
dailyLossLimitQuote: number;
|
|
60
|
+
maxDrawdownPercent: number;
|
|
61
|
+
feedStaleSeconds: number;
|
|
62
|
+
}
|
|
63
|
+
export interface TraderFeeConfig {
|
|
64
|
+
makerFeeBps: number;
|
|
65
|
+
takerFeeBps: number;
|
|
66
|
+
}
|
|
67
|
+
export interface TraderPnlBreakdown {
|
|
68
|
+
spreadPnlQuote: number;
|
|
69
|
+
inventoryPnlQuote: number;
|
|
70
|
+
feesQuote: number;
|
|
71
|
+
totalPnlQuote: number;
|
|
72
|
+
}
|
|
73
|
+
export interface TraderSessionMetrics extends TraderPnlBreakdown {
|
|
74
|
+
placedOrders: number;
|
|
75
|
+
filledOrders: number;
|
|
76
|
+
cancelledOrders: number;
|
|
77
|
+
fillRate: number;
|
|
78
|
+
roundTrips: number;
|
|
79
|
+
inventoryBase: number;
|
|
80
|
+
inventoryValueQuote: number;
|
|
81
|
+
peakInventoryQuote: number;
|
|
82
|
+
maxDrawdownPercent: number;
|
|
83
|
+
capturedSpreadBps: number;
|
|
84
|
+
}
|
|
85
|
+
export interface TraderPairDTO {
|
|
86
|
+
id: string;
|
|
87
|
+
symbol: string;
|
|
88
|
+
baseAsset: string;
|
|
89
|
+
quoteAsset: string;
|
|
90
|
+
status: TraderPairStatus;
|
|
91
|
+
tickSize: number;
|
|
92
|
+
stepSize: number;
|
|
93
|
+
minNotional: number;
|
|
94
|
+
lastTickAt: string | null;
|
|
95
|
+
bookSnapshots: number;
|
|
96
|
+
tradesCollected: number;
|
|
97
|
+
createdAt: string;
|
|
98
|
+
}
|
|
99
|
+
export interface TraderSessionDTO {
|
|
100
|
+
id: string;
|
|
101
|
+
label: string;
|
|
102
|
+
symbol: string;
|
|
103
|
+
strategy: TraderStrategy;
|
|
104
|
+
mode: TraderExecutionMode;
|
|
105
|
+
status: TraderSessionStatus;
|
|
106
|
+
haltReason: TraderHaltReason | null;
|
|
107
|
+
params: TraderSessionParams;
|
|
108
|
+
risk: TraderRiskLimits;
|
|
109
|
+
fees: TraderFeeConfig;
|
|
110
|
+
startingCapitalQuote: number;
|
|
111
|
+
metrics: TraderSessionMetrics;
|
|
112
|
+
startedAt: string;
|
|
113
|
+
stoppedAt: string | null;
|
|
114
|
+
}
|
|
115
|
+
export interface TraderFillDTO {
|
|
116
|
+
id: string;
|
|
117
|
+
sessionId: string;
|
|
118
|
+
symbol: string;
|
|
119
|
+
side: TraderSide;
|
|
120
|
+
price: number;
|
|
121
|
+
quantity: number;
|
|
122
|
+
notionalQuote: number;
|
|
123
|
+
feeQuote: number;
|
|
124
|
+
inventoryBaseAfter: number;
|
|
125
|
+
realizedPnlQuote: number | null;
|
|
126
|
+
filledAt: string;
|
|
127
|
+
}
|
|
128
|
+
export interface TraderSessionSnapshotDTO {
|
|
129
|
+
sessionId: string;
|
|
130
|
+
at: string;
|
|
131
|
+
midPrice: number;
|
|
132
|
+
metrics: TraderSessionMetrics;
|
|
133
|
+
regime: TraderMarketRegime;
|
|
134
|
+
}
|
|
135
|
+
export interface TraderComparisonRowDTO {
|
|
136
|
+
sessionId: string;
|
|
137
|
+
label: string;
|
|
138
|
+
symbol: string;
|
|
139
|
+
strategy: TraderStrategy;
|
|
140
|
+
status: TraderSessionStatus;
|
|
141
|
+
metrics: TraderSessionMetrics;
|
|
142
|
+
hoursRunning: number;
|
|
143
|
+
}
|
|
144
|
+
export declare enum TraderRiskProfile {
|
|
145
|
+
Conservative = "Conservative",
|
|
146
|
+
Moderate = "Moderate",
|
|
147
|
+
Aggressive = "Aggressive"
|
|
148
|
+
}
|
|
149
|
+
export declare enum TraderAutopilotAction {
|
|
150
|
+
SessionOpened = "SessionOpened",
|
|
151
|
+
SessionClosed = "SessionClosed",
|
|
152
|
+
Skipped = "Skipped"
|
|
153
|
+
}
|
|
154
|
+
export interface TraderAutopilotConfig {
|
|
155
|
+
enabled: boolean;
|
|
156
|
+
riskProfile: TraderRiskProfile;
|
|
157
|
+
capitalQuote: number;
|
|
158
|
+
maxPairs: number;
|
|
159
|
+
evaluationHours: number;
|
|
160
|
+
lastRunAt: string | null;
|
|
161
|
+
nextRunAt: string | null;
|
|
162
|
+
}
|
|
163
|
+
export interface TraderAutopilotDecisionDTO {
|
|
164
|
+
id: string;
|
|
165
|
+
at: string;
|
|
166
|
+
action: TraderAutopilotAction;
|
|
167
|
+
symbol: string;
|
|
168
|
+
strategy: TraderStrategy | null;
|
|
169
|
+
sessionId: string | null;
|
|
170
|
+
reason: string;
|
|
171
|
+
metrics: {
|
|
172
|
+
medianSpreadBps?: number;
|
|
173
|
+
tradesPerHour?: number;
|
|
174
|
+
score?: number;
|
|
175
|
+
spreadPnlQuote?: number;
|
|
176
|
+
feesQuote?: number;
|
|
177
|
+
hoursRunning?: number;
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
export interface TraderCandidateDTO {
|
|
181
|
+
symbol: string;
|
|
182
|
+
medianSpreadBps: number;
|
|
183
|
+
tradesPerHour: number;
|
|
184
|
+
score: number;
|
|
185
|
+
eligible: boolean;
|
|
186
|
+
rejection: string | null;
|
|
187
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// bot-trader — simulação de estratégias de market making e grid na MEXC spot.
|
|
3
|
+
//
|
|
4
|
+
// Todo dinheiro aqui é em "quote" (o lado USDT do par) e toda distância de
|
|
5
|
+
// preço é em basis points (1 bps = 0,01%), nunca em percentual solto — é o
|
|
6
|
+
// que evita confundir "0,5" de 0,5% com 0,5 bps na hora de calibrar.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.TraderAutopilotAction = exports.TraderRiskProfile = exports.TraderMarketRegime = exports.TraderPairStatus = exports.TraderHaltReason = exports.TraderOrderStatus = exports.TraderSide = exports.TraderSessionStatus = exports.TraderExecutionMode = exports.TraderStrategy = void 0;
|
|
9
|
+
var TraderStrategy;
|
|
10
|
+
(function (TraderStrategy) {
|
|
11
|
+
TraderStrategy["MarketMaking"] = "MarketMaking";
|
|
12
|
+
TraderStrategy["Grid"] = "Grid";
|
|
13
|
+
})(TraderStrategy || (exports.TraderStrategy = TraderStrategy = {}));
|
|
14
|
+
// Só Paper existe de fato hoje. Live está declarado porque as rotas precisam
|
|
15
|
+
// recusá-lo explicitamente enquanto não houver decisão de por capital real —
|
|
16
|
+
// um enum sem o valor deixaria a recusa implícita e fácil de esquecer.
|
|
17
|
+
var TraderExecutionMode;
|
|
18
|
+
(function (TraderExecutionMode) {
|
|
19
|
+
TraderExecutionMode["Paper"] = "Paper";
|
|
20
|
+
TraderExecutionMode["Live"] = "Live";
|
|
21
|
+
})(TraderExecutionMode || (exports.TraderExecutionMode = TraderExecutionMode = {}));
|
|
22
|
+
var TraderSessionStatus;
|
|
23
|
+
(function (TraderSessionStatus) {
|
|
24
|
+
TraderSessionStatus["Running"] = "Running";
|
|
25
|
+
TraderSessionStatus["Stopped"] = "Stopped";
|
|
26
|
+
TraderSessionStatus["Halted"] = "Halted";
|
|
27
|
+
})(TraderSessionStatus || (exports.TraderSessionStatus = TraderSessionStatus = {}));
|
|
28
|
+
var TraderSide;
|
|
29
|
+
(function (TraderSide) {
|
|
30
|
+
TraderSide["Buy"] = "Buy";
|
|
31
|
+
TraderSide["Sell"] = "Sell";
|
|
32
|
+
})(TraderSide || (exports.TraderSide = TraderSide = {}));
|
|
33
|
+
var TraderOrderStatus;
|
|
34
|
+
(function (TraderOrderStatus) {
|
|
35
|
+
TraderOrderStatus["Open"] = "Open";
|
|
36
|
+
TraderOrderStatus["Filled"] = "Filled";
|
|
37
|
+
TraderOrderStatus["Cancelled"] = "Cancelled";
|
|
38
|
+
})(TraderOrderStatus || (exports.TraderOrderStatus = TraderOrderStatus = {}));
|
|
39
|
+
// Por que a sessão parou sozinha. Manual é o botão do painel.
|
|
40
|
+
var TraderHaltReason;
|
|
41
|
+
(function (TraderHaltReason) {
|
|
42
|
+
TraderHaltReason["DailyLossLimit"] = "DailyLossLimit";
|
|
43
|
+
TraderHaltReason["InventoryLimit"] = "InventoryLimit";
|
|
44
|
+
TraderHaltReason["MaxDrawdown"] = "MaxDrawdown";
|
|
45
|
+
TraderHaltReason["FeedStale"] = "FeedStale";
|
|
46
|
+
TraderHaltReason["Manual"] = "Manual";
|
|
47
|
+
})(TraderHaltReason || (exports.TraderHaltReason = TraderHaltReason = {}));
|
|
48
|
+
var TraderPairStatus;
|
|
49
|
+
(function (TraderPairStatus) {
|
|
50
|
+
TraderPairStatus["Collecting"] = "Collecting";
|
|
51
|
+
TraderPairStatus["Paused"] = "Paused";
|
|
52
|
+
})(TraderPairStatus || (exports.TraderPairStatus = TraderPairStatus = {}));
|
|
53
|
+
// Regime detectado na janela recente. O market making desliga em Trending —
|
|
54
|
+
// é exatamente o cenário em que ele acumula inventário do lado errado.
|
|
55
|
+
var TraderMarketRegime;
|
|
56
|
+
(function (TraderMarketRegime) {
|
|
57
|
+
TraderMarketRegime["Ranging"] = "Ranging";
|
|
58
|
+
TraderMarketRegime["Trending"] = "Trending";
|
|
59
|
+
TraderMarketRegime["Volatile"] = "Volatile";
|
|
60
|
+
})(TraderMarketRegime || (exports.TraderMarketRegime = TraderMarketRegime = {}));
|
|
61
|
+
// ---------------------------------------------------------------- piloto
|
|
62
|
+
//
|
|
63
|
+
// O piloto automático existe porque preencher spread, skew e teto de
|
|
64
|
+
// inventário à mão exige já saber a resposta. Ele traduz uma escolha de
|
|
65
|
+
// apetite a risco nos números, escolhe os pares com o dado que o coletor
|
|
66
|
+
// gravou e mata o que não está capturando spread.
|
|
67
|
+
var TraderRiskProfile;
|
|
68
|
+
(function (TraderRiskProfile) {
|
|
69
|
+
TraderRiskProfile["Conservative"] = "Conservative";
|
|
70
|
+
TraderRiskProfile["Moderate"] = "Moderate";
|
|
71
|
+
TraderRiskProfile["Aggressive"] = "Aggressive";
|
|
72
|
+
})(TraderRiskProfile || (exports.TraderRiskProfile = TraderRiskProfile = {}));
|
|
73
|
+
var TraderAutopilotAction;
|
|
74
|
+
(function (TraderAutopilotAction) {
|
|
75
|
+
TraderAutopilotAction["SessionOpened"] = "SessionOpened";
|
|
76
|
+
TraderAutopilotAction["SessionClosed"] = "SessionClosed";
|
|
77
|
+
TraderAutopilotAction["Skipped"] = "Skipped";
|
|
78
|
+
})(TraderAutopilotAction || (exports.TraderAutopilotAction = TraderAutopilotAction = {}));
|