@microcosmmoney/portal-react 3.13.4 → 3.13.6
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/main-portal/components/auctions/AuctionsPage.js +2 -2
- package/dist/main-portal/components/income/ManagerIncomePage.js +1 -16
- package/dist/main-portal/components/layout/AppSidebar.js +1 -1
- package/dist/main-portal/components/layout/TerminalSidebar.js +1 -1
- package/dist/main-portal/components/mining/MiningModal.js +2 -2
- package/dist/main-portal/components/profile/ProfilePage.js +2 -2
- package/dist/main-portal/components/providers/SolanaWalletProvider.js +1 -1
- package/dist/main-portal/components/queue/QueueStatusPage.js +2 -71
- package/dist/main-portal/components/resources/public-mining-modal.js +1 -1
- package/dist/main-portal/components/stations/StationDetailPage.js +1 -3
- package/dist/main-portal/components/stations/StationListPage.js +2 -4
- package/dist/main-portal/components/stations/StationsPage.js +2 -5
- package/dist/main-portal/config/menu-config.d.ts +0 -2
- package/dist/main-portal/config/menu-config.js +14 -67
- package/dist/main-portal/hooks/useAuth.d.ts +1 -2
- package/dist/main-portal/hooks/useAuth.js +0 -2
- package/dist/main-portal/lib/api/blockchain.d.ts +0 -44
- package/dist/main-portal/lib/api/blockchain.js +0 -195
- package/dist/main-portal/lib/api/services/index.d.ts +0 -1
- package/dist/main-portal/lib/api/services/index.js +0 -1
- package/dist/main-portal/lib/api/services/organization.d.ts +1 -6
- package/dist/main-portal/lib/api/services/organization.js +0 -12
- package/dist/main-portal/lib/oauth-config.js +3 -3
- package/dist/main-portal/lib/types/common.types.d.ts +0 -32
- package/dist/main-portal/lib/types/user.types.d.ts +1 -33
- package/package.json +1 -1
- package/dist/main-portal/hooks/useStrategies.d.ts +0 -134
- package/dist/main-portal/hooks/useStrategies.js +0 -28
- package/dist/main-portal/lib/api/services/ai.d.ts +0 -139
- package/dist/main-portal/lib/api/services/ai.js +0 -214
- package/dist/main-portal/lib/order-id-generator.d.ts +0 -19
- package/dist/main-portal/lib/order-id-generator.js +0 -97
- package/dist/main-portal/lib/strategy/defaults.d.ts +0 -2
- package/dist/main-portal/lib/strategy/defaults.js +0 -58
- package/dist/main-portal/lib/strategy/index.d.ts +0 -3
- package/dist/main-portal/lib/strategy/index.js +0 -20
- package/dist/main-portal/lib/strategy/tooltips.d.ts +0 -1
- package/dist/main-portal/lib/strategy/tooltips.js +0 -50
- package/dist/main-portal/lib/strategy/types.d.ts +0 -74
- package/dist/main-portal/lib/strategy/types.js +0 -2
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getAIProducts = getAIProducts;
|
|
4
|
-
exports.getAIProductDetail = getAIProductDetail;
|
|
5
|
-
exports.submitAIRequest = submitAIRequest;
|
|
6
|
-
exports.getUserAIRequests = getUserAIRequests;
|
|
7
|
-
exports.getAIRequestDetail = getAIRequestDetail;
|
|
8
|
-
exports.cancelAIRequest = cancelAIRequest;
|
|
9
|
-
exports.stopAIStrategy = stopAIStrategy;
|
|
10
|
-
exports.getPendingAIRequests = getPendingAIRequests;
|
|
11
|
-
exports.acceptAIRequest = acceptAIRequest;
|
|
12
|
-
exports.configureAIStrategy = configureAIStrategy;
|
|
13
|
-
exports.startAIStrategy = startAIStrategy;
|
|
14
|
-
exports.rejectAIRequest = rejectAIRequest;
|
|
15
|
-
exports.chatWithAIProduct = chatWithAIProduct;
|
|
16
|
-
exports.getMyAIRequests = getMyAIRequests;
|
|
17
|
-
exports.getAISuggestions = getAISuggestions;
|
|
18
|
-
exports.getAISuggestionDetail = getAISuggestionDetail;
|
|
19
|
-
exports.approveAISuggestion = approveAISuggestion;
|
|
20
|
-
exports.rejectAISuggestion = rejectAISuggestion;
|
|
21
|
-
exports.generateAISuggestions = generateAISuggestions;
|
|
22
|
-
exports.getAISuggestionStats = getAISuggestionStats;
|
|
23
|
-
exports.getMarketState = getMarketState;
|
|
24
|
-
exports.cancelBinanceOrder = cancelBinanceOrder;
|
|
25
|
-
exports.placeBinanceOrder = placeBinanceOrder;
|
|
26
|
-
exports.modifyBinanceOrder = modifyBinanceOrder;
|
|
27
|
-
const core_1 = require("../core");
|
|
28
|
-
const auth_service_1 = require("../../auth-service");
|
|
29
|
-
async function getAIProducts(params) {
|
|
30
|
-
const queryParams = new URLSearchParams();
|
|
31
|
-
if (params?.status)
|
|
32
|
-
queryParams.append('status', params.status);
|
|
33
|
-
if (params?.risk_level)
|
|
34
|
-
queryParams.append('risk_level', params.risk_level);
|
|
35
|
-
if (params?.sort)
|
|
36
|
-
queryParams.append('sort', params.sort);
|
|
37
|
-
const queryString = queryParams.toString();
|
|
38
|
-
const url = `/api/ai-products${queryString ? `?${queryString}` : ''}`;
|
|
39
|
-
const response = await fetch(url);
|
|
40
|
-
return response.json();
|
|
41
|
-
}
|
|
42
|
-
async function getAIProductDetail(productId) {
|
|
43
|
-
const response = await fetch(`/api/ai-products/${productId}`);
|
|
44
|
-
return response.json();
|
|
45
|
-
}
|
|
46
|
-
async function submitAIRequest(data) {
|
|
47
|
-
return (0, core_1.fetchApi)('/user/ai-requests', {
|
|
48
|
-
method: 'POST',
|
|
49
|
-
body: JSON.stringify(data)
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
async function getUserAIRequests(status) {
|
|
53
|
-
const token = await (0, core_1.getCurrentUserToken)();
|
|
54
|
-
const url = status
|
|
55
|
-
? `/api/user/ai-requests?status=${status}`
|
|
56
|
-
: '/api/user/ai-requests';
|
|
57
|
-
const response = await fetch(url, {
|
|
58
|
-
headers: { 'Authorization': `Bearer ${token}` }
|
|
59
|
-
});
|
|
60
|
-
(0, auth_service_1.guardAuthResponse)(response);
|
|
61
|
-
return response.json();
|
|
62
|
-
}
|
|
63
|
-
async function getAIRequestDetail(requestId) {
|
|
64
|
-
const token = await (0, core_1.getCurrentUserToken)();
|
|
65
|
-
const response = await fetch(`/api/user/ai-requests/${requestId}`, {
|
|
66
|
-
headers: { 'Authorization': `Bearer ${token}` }
|
|
67
|
-
});
|
|
68
|
-
(0, auth_service_1.guardAuthResponse)(response);
|
|
69
|
-
return response.json();
|
|
70
|
-
}
|
|
71
|
-
async function cancelAIRequest(requestId) {
|
|
72
|
-
const token = await (0, core_1.getCurrentUserToken)();
|
|
73
|
-
const response = await fetch(`/api/user/ai-requests/${requestId}`, {
|
|
74
|
-
method: 'DELETE',
|
|
75
|
-
headers: { 'Authorization': `Bearer ${token}` }
|
|
76
|
-
});
|
|
77
|
-
(0, auth_service_1.guardAuthResponse)(response);
|
|
78
|
-
return response.json();
|
|
79
|
-
}
|
|
80
|
-
async function stopAIStrategy(requestId, reason) {
|
|
81
|
-
const token = await (0, core_1.getCurrentUserToken)();
|
|
82
|
-
const response = await fetch(`/api/user/ai-requests/${requestId}/stop`, {
|
|
83
|
-
method: 'POST',
|
|
84
|
-
headers: {
|
|
85
|
-
'Content-Type': 'application/json',
|
|
86
|
-
'Authorization': `Bearer ${token}`
|
|
87
|
-
},
|
|
88
|
-
body: JSON.stringify({ reason })
|
|
89
|
-
});
|
|
90
|
-
(0, auth_service_1.guardAuthResponse)(response);
|
|
91
|
-
return response.json();
|
|
92
|
-
}
|
|
93
|
-
async function getPendingAIRequests() {
|
|
94
|
-
return (0, core_1.fetchApi)('/trader/ai-requests/pending');
|
|
95
|
-
}
|
|
96
|
-
async function acceptAIRequest(requestId) {
|
|
97
|
-
return (0, core_1.fetchApi)(`/trader/ai-requests/${requestId}/accept`, { method: 'POST' });
|
|
98
|
-
}
|
|
99
|
-
async function configureAIStrategy(requestId, config) {
|
|
100
|
-
return (0, core_1.fetchApi)(`/trader/ai-requests/${requestId}/configure`, {
|
|
101
|
-
method: 'POST',
|
|
102
|
-
body: JSON.stringify(config)
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
async function startAIStrategy(requestId) {
|
|
106
|
-
return (0, core_1.fetchApi)(`/trader/ai-requests/${requestId}/start`, { method: 'POST' });
|
|
107
|
-
}
|
|
108
|
-
async function rejectAIRequest(requestId, reason) {
|
|
109
|
-
return (0, core_1.fetchApi)(`/trader/ai-requests/${requestId}/reject`, {
|
|
110
|
-
method: 'POST',
|
|
111
|
-
body: JSON.stringify({ reason })
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
async function chatWithAIProduct(data) {
|
|
115
|
-
const response = await fetch('/api/ai-product-chat', {
|
|
116
|
-
method: 'POST',
|
|
117
|
-
headers: { 'Content-Type': 'application/json' },
|
|
118
|
-
body: JSON.stringify(data)
|
|
119
|
-
});
|
|
120
|
-
return response.json();
|
|
121
|
-
}
|
|
122
|
-
async function getMyAIRequests(status) {
|
|
123
|
-
const url = status
|
|
124
|
-
? `/trader/ai-requests/my-requests?status=${status}`
|
|
125
|
-
: '/trader/ai-requests/my-requests';
|
|
126
|
-
return (0, core_1.fetchApi)(url);
|
|
127
|
-
}
|
|
128
|
-
async function getAISuggestions(params) {
|
|
129
|
-
const queryParams = new URLSearchParams();
|
|
130
|
-
if (params?.trader_uid)
|
|
131
|
-
queryParams.append('trader_uid', params.trader_uid);
|
|
132
|
-
if (params?.status)
|
|
133
|
-
queryParams.append('status', params.status);
|
|
134
|
-
if (params?.limit)
|
|
135
|
-
queryParams.append('limit', params.limit.toString());
|
|
136
|
-
const queryString = queryParams.toString();
|
|
137
|
-
return (0, core_1.fetchApi)(`/data-service/indicators/suggestions${queryString ? `?${queryString}` : ''}`);
|
|
138
|
-
}
|
|
139
|
-
async function getAISuggestionDetail(suggestionId) {
|
|
140
|
-
return (0, core_1.fetchApi)(`/data-service/indicators/suggestions/${suggestionId}`);
|
|
141
|
-
}
|
|
142
|
-
async function approveAISuggestion(suggestionId, reviewer, modifiedValues) {
|
|
143
|
-
return (0, core_1.fetchApi)(`/data-service/indicators/suggestions/${suggestionId}/approve`, {
|
|
144
|
-
method: 'POST',
|
|
145
|
-
body: JSON.stringify({ reviewer, modified_values: modifiedValues })
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
async function rejectAISuggestion(suggestionId, reviewer, feedback) {
|
|
149
|
-
return (0, core_1.fetchApi)(`/data-service/indicators/suggestions/${suggestionId}/reject`, {
|
|
150
|
-
method: 'POST',
|
|
151
|
-
body: JSON.stringify({ reviewer, feedback })
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
async function generateAISuggestions(timeframe) {
|
|
155
|
-
return (0, core_1.fetchApi)('/data-service/indicators/suggestions/generate', {
|
|
156
|
-
method: 'POST',
|
|
157
|
-
body: JSON.stringify({ timeframe: timeframe || '4h' })
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
async function getAISuggestionStats(trader_uid) {
|
|
161
|
-
const params = new URLSearchParams();
|
|
162
|
-
if (trader_uid)
|
|
163
|
-
params.append('trader_uid', trader_uid);
|
|
164
|
-
const queryString = params.toString();
|
|
165
|
-
return (0, core_1.fetchApi)(`/data-service/indicators/suggestions/stats${queryString ? `?${queryString}` : ''}`);
|
|
166
|
-
}
|
|
167
|
-
async function getMarketState(symbol, timeframe, refresh) {
|
|
168
|
-
const params = new URLSearchParams();
|
|
169
|
-
if (timeframe)
|
|
170
|
-
params.append('timeframe', timeframe);
|
|
171
|
-
if (refresh)
|
|
172
|
-
params.append('refresh', 'true');
|
|
173
|
-
const queryString = params.toString();
|
|
174
|
-
return (0, core_1.fetchApi)(`/data-service/indicators/market-state/${symbol}${queryString ? `?${queryString}` : ''}`);
|
|
175
|
-
}
|
|
176
|
-
async function cancelBinanceOrder(symbol, clientOrderId) {
|
|
177
|
-
const token = await (0, core_1.getCurrentUserToken)();
|
|
178
|
-
const response = await fetch('/api/trading/binance/cancel-order', {
|
|
179
|
-
method: 'POST',
|
|
180
|
-
headers: {
|
|
181
|
-
'Content-Type': 'application/json',
|
|
182
|
-
'Authorization': `Bearer ${token}`
|
|
183
|
-
},
|
|
184
|
-
body: JSON.stringify({ symbol, clientOrderId })
|
|
185
|
-
});
|
|
186
|
-
(0, auth_service_1.guardAuthResponse)(response);
|
|
187
|
-
return response.json();
|
|
188
|
-
}
|
|
189
|
-
async function placeBinanceOrder(data) {
|
|
190
|
-
const token = await (0, core_1.getCurrentUserToken)();
|
|
191
|
-
const response = await fetch('/api/trading/binance/place-order', {
|
|
192
|
-
method: 'POST',
|
|
193
|
-
headers: {
|
|
194
|
-
'Content-Type': 'application/json',
|
|
195
|
-
'Authorization': `Bearer ${token}`
|
|
196
|
-
},
|
|
197
|
-
body: JSON.stringify(data)
|
|
198
|
-
});
|
|
199
|
-
(0, auth_service_1.guardAuthResponse)(response);
|
|
200
|
-
return response.json();
|
|
201
|
-
}
|
|
202
|
-
async function modifyBinanceOrder(symbol, clientOrderId, newPrice) {
|
|
203
|
-
const token = await (0, core_1.getCurrentUserToken)();
|
|
204
|
-
const response = await fetch('/api/trading/binance/modify-order', {
|
|
205
|
-
method: 'POST',
|
|
206
|
-
headers: {
|
|
207
|
-
'Content-Type': 'application/json',
|
|
208
|
-
'Authorization': `Bearer ${token}`
|
|
209
|
-
},
|
|
210
|
-
body: JSON.stringify({ symbol, clientOrderId, newPrice })
|
|
211
|
-
});
|
|
212
|
-
(0, auth_service_1.guardAuthResponse)(response);
|
|
213
|
-
return response.json();
|
|
214
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export type Platform = 'web' | 'android' | 'ios';
|
|
2
|
-
export type UserOrderAction = 'open' | 'close' | 'modify' | 'cancel' | 'add';
|
|
3
|
-
export declare class OrderIDGenerator {
|
|
4
|
-
static generateUserOrderId(platform: Platform, action: UserOrderAction): string;
|
|
5
|
-
static parseOrderSource(clientOrderId: string): {
|
|
6
|
-
source: 'bot' | 'user' | 'unknown';
|
|
7
|
-
strategy: 'energy' | 'power' | 'claude' | null;
|
|
8
|
-
platform: Platform | null;
|
|
9
|
-
action: string | null;
|
|
10
|
-
};
|
|
11
|
-
static isBotOrder(clientOrderId: string): boolean;
|
|
12
|
-
static isUserOrder(clientOrderId: string): boolean;
|
|
13
|
-
static getOrderSourceText(clientOrderId: string): string;
|
|
14
|
-
}
|
|
15
|
-
export declare const generateUserOrderId: typeof OrderIDGenerator.generateUserOrderId;
|
|
16
|
-
export declare const parseOrderSource: typeof OrderIDGenerator.parseOrderSource;
|
|
17
|
-
export declare const isBotOrder: typeof OrderIDGenerator.isBotOrder;
|
|
18
|
-
export declare const isUserOrder: typeof OrderIDGenerator.isUserOrder;
|
|
19
|
-
export declare const getOrderSourceText: typeof OrderIDGenerator.getOrderSourceText;
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getOrderSourceText = exports.isUserOrder = exports.isBotOrder = exports.parseOrderSource = exports.generateUserOrderId = exports.OrderIDGenerator = void 0;
|
|
4
|
-
class OrderIDGenerator {
|
|
5
|
-
static generateUserOrderId(platform, action) {
|
|
6
|
-
const timestamp = Date.now();
|
|
7
|
-
const clientOrderId = `user-${platform}-${action}-${timestamp}`;
|
|
8
|
-
if (clientOrderId.length > 32) {
|
|
9
|
-
throw new Error(`生成的订单ID长度超过32字符: ${clientOrderId} (${clientOrderId.length}字符)`);
|
|
10
|
-
}
|
|
11
|
-
return clientOrderId;
|
|
12
|
-
}
|
|
13
|
-
static parseOrderSource(clientOrderId) {
|
|
14
|
-
const parts = clientOrderId.split('-');
|
|
15
|
-
if (parts[0] === 'energy') {
|
|
16
|
-
return {
|
|
17
|
-
source: 'bot',
|
|
18
|
-
strategy: 'energy',
|
|
19
|
-
platform: null,
|
|
20
|
-
action: parts[1] || null
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
if (parts[0] === 'power') {
|
|
24
|
-
return {
|
|
25
|
-
source: 'bot',
|
|
26
|
-
strategy: 'power',
|
|
27
|
-
platform: null,
|
|
28
|
-
action: parts[1] || null
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
if (parts[0] === 'claude') {
|
|
32
|
-
return {
|
|
33
|
-
source: 'bot',
|
|
34
|
-
strategy: 'claude',
|
|
35
|
-
platform: null,
|
|
36
|
-
action: parts[1] || null
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
if (parts[0] === 'user') {
|
|
40
|
-
return {
|
|
41
|
-
source: 'user',
|
|
42
|
-
strategy: null,
|
|
43
|
-
platform: parts[1] || null,
|
|
44
|
-
action: parts[2] || null
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
return {
|
|
48
|
-
source: 'unknown',
|
|
49
|
-
strategy: null,
|
|
50
|
-
platform: null,
|
|
51
|
-
action: null
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
static isBotOrder(clientOrderId) {
|
|
55
|
-
const { source } = this.parseOrderSource(clientOrderId);
|
|
56
|
-
return source === 'bot';
|
|
57
|
-
}
|
|
58
|
-
static isUserOrder(clientOrderId) {
|
|
59
|
-
const { source } = this.parseOrderSource(clientOrderId);
|
|
60
|
-
return source === 'user';
|
|
61
|
-
}
|
|
62
|
-
static getOrderSourceText(clientOrderId) {
|
|
63
|
-
const info = this.parseOrderSource(clientOrderId);
|
|
64
|
-
if (info.source === 'bot') {
|
|
65
|
-
const strategyNames = {
|
|
66
|
-
energy: 'Energy策略',
|
|
67
|
-
power: 'Power策略',
|
|
68
|
-
claude: 'Claude AI策略'
|
|
69
|
-
};
|
|
70
|
-
return strategyNames[info.strategy || ''] || 'Bot策略';
|
|
71
|
-
}
|
|
72
|
-
if (info.source === 'user') {
|
|
73
|
-
const platformNames = {
|
|
74
|
-
web: '网页',
|
|
75
|
-
android: 'Android',
|
|
76
|
-
ios: 'iOS'
|
|
77
|
-
};
|
|
78
|
-
const platform = platformNames[info.platform || 'web'] || '未知平台';
|
|
79
|
-
const actionNames = {
|
|
80
|
-
open: '开仓',
|
|
81
|
-
close: '平仓',
|
|
82
|
-
add: '加仓',
|
|
83
|
-
modify: '修改',
|
|
84
|
-
cancel: '取消'
|
|
85
|
-
};
|
|
86
|
-
const action = actionNames[info.action || ''] || '操作';
|
|
87
|
-
return `${platform} - ${action}`;
|
|
88
|
-
}
|
|
89
|
-
return '未知来源';
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
exports.OrderIDGenerator = OrderIDGenerator;
|
|
93
|
-
exports.generateUserOrderId = OrderIDGenerator.generateUserOrderId.bind(OrderIDGenerator);
|
|
94
|
-
exports.parseOrderSource = OrderIDGenerator.parseOrderSource.bind(OrderIDGenerator);
|
|
95
|
-
exports.isBotOrder = OrderIDGenerator.isBotOrder.bind(OrderIDGenerator);
|
|
96
|
-
exports.isUserOrder = OrderIDGenerator.isUserOrder.bind(OrderIDGenerator);
|
|
97
|
-
exports.getOrderSourceText = OrderIDGenerator.getOrderSourceText.bind(OrderIDGenerator);
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.initialStrategyParams = void 0;
|
|
4
|
-
exports.initialStrategyParams = {
|
|
5
|
-
name: 'Double Helix',
|
|
6
|
-
base: {
|
|
7
|
-
exchange: 'Binance',
|
|
8
|
-
symbol: 'BTCUSDT',
|
|
9
|
-
leverage: 50,
|
|
10
|
-
margin_mode: 'Cross',
|
|
11
|
-
kline_period: '1m',
|
|
12
|
-
max_net_position: 0.001,
|
|
13
|
-
global_drawdown_limit: 0.20,
|
|
14
|
-
account_id: "main",
|
|
15
|
-
stop_loss_enabled: false,
|
|
16
|
-
stop_loss_pct: 0.05
|
|
17
|
-
},
|
|
18
|
-
energy: {
|
|
19
|
-
max_capital_pct: 0.20,
|
|
20
|
-
alt_hedge_enabled: true,
|
|
21
|
-
alt_add_pos_quantity_multiplier: 2,
|
|
22
|
-
alt_add_pos_distance_multiplier: 1.0,
|
|
23
|
-
alt_price_adjust_threshold_pct: 0.1,
|
|
24
|
-
alt_quantity_adjust_threshold_pct: 0.1,
|
|
25
|
-
sync_hedge_enabled: true,
|
|
26
|
-
sync_add_pos_loss_trigger_pct: 0.10,
|
|
27
|
-
take_profit_trigger_pct: 0.01,
|
|
28
|
-
sync_add_pos_quantity_multiplier: 0.5,
|
|
29
|
-
tp_form_a_min_profit_pct: 0.01,
|
|
30
|
-
tp_form_b_min_ratio_pct: 0.5,
|
|
31
|
-
unilateral_add_enabled: false,
|
|
32
|
-
unilateral_add_mode: 'fixed',
|
|
33
|
-
unilateral_add_loss_trigger_pct: 0.05,
|
|
34
|
-
unilateral_fib_base_pct: 0.01,
|
|
35
|
-
unilateral_add_quantity_pct: 0.20,
|
|
36
|
-
balance_check_enabled: true,
|
|
37
|
-
balance_min_ratio_pct: 0.25,
|
|
38
|
-
balance_add_quantity_pct: 0.50,
|
|
39
|
-
stop_loss_enabled: false,
|
|
40
|
-
stop_loss_pct: 0.05
|
|
41
|
-
},
|
|
42
|
-
power: {
|
|
43
|
-
start_condition_mode: "profit",
|
|
44
|
-
start_energy_profit_pct: 0.01,
|
|
45
|
-
start_price_gap_pct: 0.02,
|
|
46
|
-
start_pos_thickness_pct: 0.002,
|
|
47
|
-
open_pos_quantity: 0.002,
|
|
48
|
-
take_profit_pct: 0.001,
|
|
49
|
-
max_open_orders: 20,
|
|
50
|
-
stale_pos_cleanup_days: 18,
|
|
51
|
-
order_merge_count_threshold: 10,
|
|
52
|
-
order_merge_batch_multiplier: 1,
|
|
53
|
-
order_cleanup_loss_trigger_pct: 0.01,
|
|
54
|
-
open_order_price_buffer_pct: 0.001,
|
|
55
|
-
open_order_spacing_multiplier: 1.0,
|
|
56
|
-
max_total_orders: 100
|
|
57
|
-
}
|
|
58
|
-
};
|
|
@@ -1,20 +0,0 @@
|
|
|
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
|
-
// AI-generated · AI-managed · AI-maintained
|
|
18
|
-
__exportStar(require("./types"), exports);
|
|
19
|
-
__exportStar(require("./tooltips"), exports);
|
|
20
|
-
__exportStar(require("./defaults"), exports);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const tooltipTexts: Record<string, string>;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.tooltipTexts = void 0;
|
|
4
|
-
// AI-generated · AI-managed · AI-maintained
|
|
5
|
-
exports.tooltipTexts = {
|
|
6
|
-
name: "策略名称\n\n为您的策略起一个容易识别的名字,方便在策略列表中快速找到。\n\n示例:'BTC稳健策略'、'ETH激进策略'",
|
|
7
|
-
exchange: "交易所选择\n\n目前仅支持币安(Binance)合约交易。",
|
|
8
|
-
account_id: "账户选择\n\n选择要使用哪个API密钥账户。\n• 主账户:使用您配置的默认API密钥\n• 子账户:如果配置了多个账户,可以选择其他账户",
|
|
9
|
-
symbol: "交易对\n\n选择要交易的币种,如 BTCUSDT、ETHUSDT 等。\n\n建议:\n• 新手选择主流币种(BTC、ETH)\n• 有经验后可尝试山寨币",
|
|
10
|
-
leverage: "杠杆倍数\n\n交易时使用的杠杆。杠杆越高,收益和风险都会放大。\n\n示例:\n• 杠杆20倍:1000U保证金 = 20000U仓位\n• 价格涨5% → 盈利100% (1000U)\n• 价格跌5% → 亏损100% (爆仓)\n\n建议:10-50倍",
|
|
11
|
-
margin_mode: "保证金模式\n\n• 全仓模式(Cross):所有仓位共享保证金,风险集中管理\n• 逐仓模式(Isolated):每个仓位独立保证金,风险隔离\n\n说明:\n• 全仓模式:适合对冲策略,收益稳定\n• 逐仓模式:适合高风险交易,可控制单个仓位损失\n\n建议:全仓(Cross)- 适合双螺旋策略",
|
|
12
|
-
energy_stop_loss_enabled: "Energy止损开关\n\n启用后,当Energy持仓亏损达到止损比例时,自动平仓止损。\n\n注意:\n• 止损会立即触发市价平仓\n• 可能产生滑点损失\n• 建议配合全局回撤熔断使用\n\n建议:根据风险承受能力决定是否启用",
|
|
13
|
-
energy_stop_loss_pct: "Energy止损比例\n\nEnergy持仓浮亏达到此比例时触发止损。\n\n示例:\n• 设置5% (0.05)\n• Energy持仓成本10000U\n• 当浮亏达到500U时触发止损\n\n建议:0.03-0.10 (3%-10%)",
|
|
14
|
-
max_net_position: "净持仓上限(张数)\n\n多头和空头数量之差的最大值。用于控制单边风险。\n\n示例:\n• 多头100张,空头50张 → 净持仓50张\n• 多头100张,空头100张 → 净持仓0张(完全对冲)\n\n建议:根据账户资金设置,如300-1000张",
|
|
15
|
-
kline_period: "K线周期\n\n用于计算KDJ等技术指标的时间周期。\n\n说明:\n• 1分钟:反应快,信号多但可能误判\n• 5分钟:平衡选择\n• 15分钟:信号稳定但反应慢\n\n建议:1m(默认)",
|
|
16
|
-
max_capital_pct: "Energy最大资金占比\n\nEnergy策略最多可以使用账户余额的百分比。\n\n示例:\n• 账户余额10000U,设置30% (0.3)\n• Energy最多使用3000U\n• 剩余7000U可供Power策略使用\n\n建议:0.2-0.5 (20%-50%)",
|
|
17
|
-
sync_add_pos_loss_trigger_pct: "同步补仓触发亏损率\n\n当某一方向的浮动亏损率达到此值时,触发同步补仓(双向同时加仓)。\n\n示例:\n• 设置10% (0.10)\n• 多头持仓成本5.0,当前价4.5\n• 亏损率 = (4.5-5.0)/5.0 = -10%\n• 触发同步补仓,多空同时加仓\n\n建议:0.05-0.15 (5%-15%)",
|
|
18
|
-
sync_add_pos_quantity_multiplier: "同步补仓数量倍数\n\n同步补仓时,新增仓位 = 当前持仓 × 此倍数。\n\n示例:\n• 多头当前50张,倍数0.5\n• 触发补仓时加仓:50 × 0.5 = 25张\n• 补仓后:75张\n\n建议:0.1-1.0 (10%-100%)",
|
|
19
|
-
take_profit_trigger_pct: "止盈触发阈值(占钱包余额百分比)\n\n总盈利达到钱包余额的此百分比时才触发止盈。\n\n示例:\n• 钱包余额10000U,设置1% (0.01)\n• 止盈阈值 = 10000 × 1% = 100U\n• 当总盈利 ≥ 100U时触发止盈\n\n⚠️ 重要:\n• 设置100% (1.0)意味着要盈利10000U才止盈,几乎不可能\n• 建议设置0.01-0.05 (1%-5%)",
|
|
20
|
-
tp_form_a_min_profit_pct: "A计划止盈最小盈利率\n\nA计划要求多空双向都盈利,此参数是每个方向的最小盈利率。\n\n示例:\n• 设置1% (0.01)\n• 多头盈利率2%,空头盈利率1.5%\n• 两边都 ≥ 1%,满足A计划条件\n• 如果空头是-2%(亏损),不满足\n\n说明:A计划会同时平掉多空仓位\n\n建议:0.005-0.02 (0.5%-2%)",
|
|
21
|
-
tp_form_b_min_ratio_pct: "B计划最小持仓比例\n\nB计划减仓后,盈利方剩余持仓占对方持仓的最小比例。\n\n示例:\n• 设置50% (0.5)\n• 多头100张(盈利),空头50张\n• 最多平:100 - 50×0.5 = 75张\n• 平仓后:多头25张,空头50张\n• 比例:25/50 = 50% ✅\n\n作用:避免过度减仓,保持一定的对冲\n\n建议:0.3-0.7 (30%-70%)",
|
|
22
|
-
alt_add_pos_quantity_multiplier: "交替补仓数量倍数\n\n交替补仓时,新增仓位 = 当前持仓 × 此倍数。\n\n示例:\n• 空头当前30张,倍数2\n• 触发交替补仓(只加空头)\n• 加仓:30 × 2 = 60张\n• 补仓后:90张\n\n建议:1-3",
|
|
23
|
-
alt_add_pos_distance_multiplier: "交替补仓距离倍数\n\n控制交替补仓的触发距离。\n\n说明:距离倍数越大,补仓越不频繁\n\n建议:1.0-2.0",
|
|
24
|
-
alt_price_adjust_threshold_pct: "交替补仓价格调整阈值\n\n当多空持仓价差变化超过此比例时,自动调整交替补仓订单的价格。\n\n示例:\n• 阈值设为 20%\n• 原始价差 $1.00\n• 当前价差 $1.25(变化25%)\n• 触发价格调整\n\n建议:10%-30%(0.1-0.3)",
|
|
25
|
-
alt_quantity_adjust_threshold_pct: "交替补仓数量调整阈值\n\n当持仓变化导致订单数量偏差超过此比例时,自动调整订单数量。\n\n场景:\n• 用户手工操作\n• 站岗转化\n• 其他持仓变化\n\n示例:\n• 阈值设为 10%\n• 原订单 100张\n• 持仓变化后应为 120张(变化20%)\n• 触发数量调整\n\n建议:5%-15%(0.05-0.15)",
|
|
26
|
-
open_pos_quantity: "Power开仓数量(张)\n\nPower策略每次开仓的固定数量。\n\n示例:\n• 设置4张\n• 每次开仓都是4张\n• 如果触发100次,就是400张\n\n⚠️ 注意:\n• 此值会影响订单合并功能\n• 小订单(≤此值)会被合并\n• 大订单(>此值)不会被合并\n\n建议:2-10张",
|
|
27
|
-
take_profit_pct: "Power止盈百分比\n\nPower每笔订单的止盈目标。\n\n示例:\n• 设置0.5% (0.005)\n• 开仓价5.0,止盈价5.025\n• 盈利 = 5.025/5.0 - 1 = 0.5%\n\n建议:0.003-0.01 (0.3%-1%)",
|
|
28
|
-
power_stop_loss_pct: "Power止损百分比\n\nPower每笔订单的止损比例。\n\n示例:\n• 设置0.5% (0.005)\n• 开仓价100,止损价99.5\n• 亏损 = 99.5/100 - 1 = -0.5%\n• 达到止损价时自动平仓\n\n建议:与止盈比例相当或略小",
|
|
29
|
-
open_order_price_buffer_pct: "Power开仓价格缓冲\n\n开仓价相对当前价的缓冲距离。\n\n示例:\n• 当前价5.0,缓冲0.1% (0.001)\n• 做多开仓价 = 5.0 × (1-0.001) = 4.995\n• 做空开仓价 = 5.0 × (1+0.001) = 5.005\n\n作用:避免立即成交,等待更好价格\n\n建议:0.0005-0.002 (0.05%-0.2%)",
|
|
30
|
-
open_order_spacing_multiplier: "开仓订单间距倍数\n\n控制新开仓订单与现有订单的最小价格间距。\n\n计算公式:\n最小间距 = 开仓价格缓冲 × 间距倍数\n\n示例:\n• 开仓价格缓冲 0.5% (0.005)\n• 间距倍数 2.0\n• 最小间距 = 0.5% × 2.0 = 1.0%\n• 新订单必须与现有订单间距 ≥ 1%\n\n作用:防止订单在相近价格堆积\n\n特殊值:\n• 设置 0 = 禁用间距检查\n\n建议:1.0-3.0",
|
|
31
|
-
max_open_orders: "Power最大开仓单数\n\nPower策略单边(多或空)最多可以开多少个仓位。\n\n示例:\n• 设置88\n• 做多最多88个订单\n• 做空最多88个订单\n• 总计最多176个订单\n\n建议:50-100",
|
|
32
|
-
start_condition_mode: "Power启动条件模式\n\n• 盈利模式(profit):当Energy浮盈达标时启动\n• 价差模式(price_gap):当多空成本价差达标时启动\n\n说明:\n盈利模式更保守,等待盈利后再进攻\n价差模式更激进,有价差就进攻\n\n建议:profit(默认)",
|
|
33
|
-
start_energy_profit_pct: "启动条件:Energy盈利率\n\n(盈利模式下)Energy浮盈达到账户余额的此百分比时,激活Power。\n\n示例:\n• 账户余额10000U,设置1% (0.01)\n• Energy浮盈达到100U时\n• Power策略开始工作\n\n建议:0.005-0.02 (0.5%-2%)",
|
|
34
|
-
start_price_gap_pct: "启动条件:价格间距\n\n(价差模式下)多空成本价差达到此百分比时,激活Power。\n\n示例:\n• 多头成本5.0,空头成本5.1\n• 价差 = (5.1-5.0)/5.0 = 2%\n• 如果设置1%,满足条件\n\n建议:0.005-0.02 (0.5%-2%)",
|
|
35
|
-
start_pos_thickness_pct: "启动条件:持仓厚度\n\nEnergy持仓量达到最大净持仓的此百分比时,才允许Power启动。\n\n示例:\n• 最大净持仓300张,设置1% (0.01)\n• 需要持仓达到3张以上\n• Power才能启动\n\n作用:确保Energy有足够基础仓位\n\n建议:0.01-0.05 (1%-5%)",
|
|
36
|
-
stale_pos_cleanup_days: "站岗清理天数\n\nPower订单超过此天数未成交,会被转化为Energy策略管理。\n\n示例:\n• 设置38天\n• Power开仓订单挂了38天都没成交\n• 自动转给Energy管理(称为'站岗转化')\n\n建议:30-60天",
|
|
37
|
-
order_merge_count_threshold: "订单合并数量阈值\n\n单方向订单数量达到此值时,触发订单合并。\n\n示例:\n• 设置10\n• 做多有100个订单(每个4张)\n• 每10个合并成1个(40张)\n• 最终变成10个订单\n\n作用:减少订单数量,降低管理成本\n\n建议:10-20",
|
|
38
|
-
order_merge_batch_multiplier: "批次处理倍数\n\n每次处理订单数 = 合并阈值 × 此倍数。\n\n示例:\n• 合并阈值10,倍数1\n• 每次处理10个订单\n• 如果有100个待合并,需要10次\n\n作用:避免一次处理太多,影响系统性能\n\n建议:1-2",
|
|
39
|
-
order_cleanup_loss_trigger_pct: "清理触发亏损率\n\n亏损率达到此值时,才触发订单清理和合并。\n\n示例:\n• 设置1% (0.01)\n• 多头亏损率达到-1%\n• 立即取消所有多头开仓订单\n• 合并所有多头止盈订单\n\n作用:及时止损,避免更大亏损\n\n建议:0.01-0.05 (1%-5%)",
|
|
40
|
-
global_drawdown_limit: "全局回撤熔断(占账户百分比)\n\n账户整体亏损达到此百分比时,停止所有策略。\n\n示例:\n• 账户初始10000U,设置10% (0.10)\n• 当前余额降到9000U\n• 亏损率 = (10000-9000)/10000 = 10%\n• 触发熔断,所有策略停止\n\n⚠️ 这是最后的风险保护!\n\n建议:0.10-0.30 (10%-30%)",
|
|
41
|
-
unilateral_add_enabled: "单边补仓开关\n\n是否启用基于亏损率和KDJ信号的智能单边补仓。\n\n工作原理:\n1. 检测到单边亏损达到阈值\n2. KDJ指标确认趋势\n3. 只补亏损的那一边\n\n建议:谨慎启用,适合有经验的用户",
|
|
42
|
-
unilateral_add_mode: "单边补仓模式\n\n• 固定模式(fixed):固定亏损率触发\n• 斐波那契模式(fibonacci):亏损率递增触发\n\n固定模式:\n每次都是5%亏损触发\n\n斐波那契模式:\n第1次:1%触发\n第2次:2%触发\n第3次:3%触发\n第4次:5%触发\n\n建议:固定模式更容易理解",
|
|
43
|
-
unilateral_add_loss_trigger_pct: "单边补仓触发亏损率(固定模式)\n\n示例:\n• 设置5% (0.05)\n• 多头亏损率达到-5%\n• KDJ显示看涨信号\n• 触发单边补仓(只补多头)\n\n建议:0.03-0.10 (3%-10%)",
|
|
44
|
-
unilateral_fib_base_pct: "斐波那契基础值\n\n斐波那契模式的起始亏损率。\n\n示例:\n• 基础值1% (0.01)\n• 触发序列:1%, 2%, 3%, 5%, 8%...\n\n建议:0.01-0.03 (1%-3%)",
|
|
45
|
-
unilateral_add_quantity_pct: "单边补仓数量比例\n\n补仓数量 = 当前持仓 × 此比例。\n\n示例:\n• 多头当前50张,比例10% (0.10)\n• 补仓数量 = 50 × 0.10 = 5张\n• 补仓后:55张\n\n建议:0.10-0.50 (10%-50%)",
|
|
46
|
-
balance_check_enabled: "对向平衡补仓开关\n\n当多空持仓比例失衡时,自动补仓弱势方。\n\n示例:\n• 多头100张,空头20张\n• 空头占比 = 20/100 = 20%\n• 如果最小比例设置25%\n• 触发平衡补仓(只补空头)\n\n作用:保持对冲效果,控制风险",
|
|
47
|
-
balance_min_ratio_pct: "最小持仓比例\n\n弱势方持仓占强势方的最小比例。\n\n示例:\n• 设置25% (0.25)\n• 多头100张,空头需要 ≥ 25张\n• 如果空头只有20张\n• 触发平衡补仓\n\n建议:0.20-0.40 (20%-40%)",
|
|
48
|
-
balance_add_quantity_pct: "平衡补仓数量比例\n\n补仓数量 = 弱势方当前持仓 × 此比例。\n\n示例:\n• 空头当前20张,比例50% (0.50)\n• 补仓数量 = 20 × 0.50 = 10张\n• 补仓后:30张\n\n建议:0.30-0.80 (30%-80%)",
|
|
49
|
-
max_total_orders: "订单整理触发阈值\n\n单方向(多或空)的订单总数(开仓单+止盈单)达到此值时,触发订单整理。\n\n整理方式:\n• 开仓单:删除间距过近的订单\n• 止盈单:合并间距过近的订单\n\n价格间距标准:使用「开仓价格缓冲」参数\n\n示例:\n• 设置100\n• 做多方向有100个订单时触发\n• 保留间距>0.1%的订单,其余删除或合并\n\n建议:50-100"
|
|
50
|
-
};
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
export interface BaseParams {
|
|
2
|
-
exchange: string;
|
|
3
|
-
symbol: string;
|
|
4
|
-
leverage: number;
|
|
5
|
-
margin_mode: string;
|
|
6
|
-
kline_period: string;
|
|
7
|
-
max_net_position: number;
|
|
8
|
-
global_drawdown_limit: number;
|
|
9
|
-
account_id: string;
|
|
10
|
-
stop_loss_enabled: boolean;
|
|
11
|
-
stop_loss_pct: number;
|
|
12
|
-
}
|
|
13
|
-
export interface EnergyParams {
|
|
14
|
-
max_capital_pct: number;
|
|
15
|
-
alt_hedge_enabled: boolean;
|
|
16
|
-
alt_add_pos_quantity_multiplier: number;
|
|
17
|
-
alt_add_pos_distance_multiplier: number;
|
|
18
|
-
alt_price_adjust_threshold_pct: number;
|
|
19
|
-
alt_quantity_adjust_threshold_pct: number;
|
|
20
|
-
sync_hedge_enabled: boolean;
|
|
21
|
-
sync_add_pos_loss_trigger_pct: number;
|
|
22
|
-
take_profit_trigger_pct: number;
|
|
23
|
-
sync_add_pos_quantity_multiplier: number;
|
|
24
|
-
tp_form_a_min_profit_pct: number;
|
|
25
|
-
tp_form_b_min_ratio_pct: number;
|
|
26
|
-
unilateral_add_enabled: boolean;
|
|
27
|
-
unilateral_add_mode: string;
|
|
28
|
-
unilateral_add_loss_trigger_pct: number;
|
|
29
|
-
unilateral_fib_base_pct: number;
|
|
30
|
-
unilateral_add_quantity_pct: number;
|
|
31
|
-
balance_check_enabled: boolean;
|
|
32
|
-
balance_min_ratio_pct: number;
|
|
33
|
-
balance_add_quantity_pct: number;
|
|
34
|
-
stop_loss_enabled: boolean;
|
|
35
|
-
stop_loss_pct: number;
|
|
36
|
-
}
|
|
37
|
-
export interface PowerParams {
|
|
38
|
-
start_condition_mode: string;
|
|
39
|
-
start_energy_profit_pct: number;
|
|
40
|
-
start_price_gap_pct: number;
|
|
41
|
-
start_pos_thickness_pct: number;
|
|
42
|
-
open_pos_quantity: number;
|
|
43
|
-
take_profit_pct: number;
|
|
44
|
-
max_open_orders: number;
|
|
45
|
-
stale_pos_cleanup_days: number;
|
|
46
|
-
order_merge_count_threshold: number;
|
|
47
|
-
order_merge_batch_multiplier: number;
|
|
48
|
-
order_cleanup_loss_trigger_pct: number;
|
|
49
|
-
open_order_price_buffer_pct: number;
|
|
50
|
-
open_order_spacing_multiplier: number;
|
|
51
|
-
max_total_orders: number;
|
|
52
|
-
}
|
|
53
|
-
export interface StrategyParams {
|
|
54
|
-
name: string;
|
|
55
|
-
base: BaseParams;
|
|
56
|
-
energy: EnergyParams;
|
|
57
|
-
power: PowerParams;
|
|
58
|
-
}
|
|
59
|
-
export interface Account {
|
|
60
|
-
account_name: string;
|
|
61
|
-
display_name: string;
|
|
62
|
-
is_default: boolean;
|
|
63
|
-
}
|
|
64
|
-
export interface FundPoolInfo {
|
|
65
|
-
fund_pool_total: number;
|
|
66
|
-
used_capital: number;
|
|
67
|
-
used_percentage: number;
|
|
68
|
-
remaining_capital: number;
|
|
69
|
-
recommended_max_pct: number;
|
|
70
|
-
pool_percentage: number;
|
|
71
|
-
}
|
|
72
|
-
export interface ExchangeData {
|
|
73
|
-
accounts: Record<string, Account>;
|
|
74
|
-
}
|