@one_deploy/sdk 1.2.0 → 1.2.2
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/{ForexPoolDataGenerator--__twRwl.d.mts → ForexPoolDataGenerator-JxTPpJPz.d.mts} +1 -1
- package/dist/{ForexPoolDataGenerator-eUgwsU_B.d.ts → ForexPoolDataGenerator-qwWv6sCE.d.ts} +1 -1
- package/dist/{OneForexTradeHistory-TlKxjbFF.d.ts → OneForexTradeHistory-BE4rJH5t.d.ts} +1 -1
- package/dist/{OneForexTradeHistory-iDySMcw0.d.mts → OneForexTradeHistory-DbuHXRy0.d.mts} +1 -1
- package/dist/components/index.d.mts +2 -2
- package/dist/components/index.d.ts +2 -2
- package/dist/config/index.d.mts +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/{console-BfTMA7ah.d.mts → console-Dvf-N9Gr.d.mts} +7 -0
- package/dist/{console-BfTMA7ah.d.ts → console-Dvf-N9Gr.d.ts} +7 -0
- package/dist/hooks/index.d.mts +2 -2
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.js +399 -38
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +399 -38
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +399 -38
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +399 -38
- package/dist/index.mjs.map +1 -1
- package/dist/providers/index.d.mts +1 -1
- package/dist/providers/index.d.ts +1 -1
- package/dist/react-native.d.mts +4 -4
- package/dist/react-native.d.ts +4 -4
- package/dist/react-native.js +239 -36
- package/dist/react-native.js.map +1 -1
- package/dist/react-native.mjs +239 -36
- package/dist/react-native.mjs.map +1 -1
- package/dist/services/index.d.mts +2 -2
- package/dist/services/index.d.ts +2 -2
- package/dist/services/index.js +239 -36
- package/dist/services/index.js.map +1 -1
- package/dist/services/index.mjs +239 -36
- package/dist/services/index.mjs.map +1 -1
- package/dist/types/index.d.mts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/{useForexTrading-ZgW_G40Q.d.ts → useForexTrading-CA2DPQVf.d.ts} +1 -1
- package/dist/{useForexTrading-BleeSor8.d.mts → useForexTrading-I7nIQyog.d.mts} +1 -1
- package/package.json +1 -1
- package/src/services/forex/BotSimulationEngine.ts +463 -35
- package/src/services/forex/index.ts +12 -1
package/dist/types/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { M as AGENT_STATUS_COLORS, G as AIDecision, A as AILogType, D as AIPosition, U as AIQuantConsoleOptions, y as AI_LOG_COLORS, V as AgentConsoleOptions, L as AgentStatus, a as BotLogEntry, B as BotLogType, c as BotState, N as CombinedLogEntry, K as ConsoleMetrics, Y as DEFAULT_CONSOLE_METRICS, W as DEFAULT_CONSOLE_OPTIONS, X as DEFAULT_RISK_STATUS, E as DecisionAction, v as FOREX_AGENT, F as FOREX_CAPITAL_SPLIT, h as FOREX_CURRENCY_PAIRS, f as FOREX_CYCLE_OPTIONS, z as FOREX_LOG_COLORS, k as FOREX_POOL_DEFAULTS, u as ForexAgent, g as ForexCurrencyPair, e as ForexCycleOption, p as ForexInvestment, t as ForexLogEntry, s as ForexLogType, j as ForexPool, n as ForexPoolDailySnapshot, m as ForexPoolTransaction, l as ForexPoolTransactionType, i as ForexPoolType, o as ForexPosition, r as ForexTradeRecord, q as ForexTradeStatus, I as IndicatorSnapshot, P as PositionSide, C as PositionStatus, H as RISK_LEVEL_COLORS, R as RiskStatus, S as StrategyPersonality, J as TRADING_STATUS_COLORS, Q as TradingConsoleOptions, O as TradingConsoleState, T as TradingStatus, w as calculateForexNetProfit, Z as calculateRiskLevel, d as computePoolAllocations, x as estimateForexProfit, $ as formatPercent, _ as formatPnl } from '../console-
|
|
1
|
+
export { M as AGENT_STATUS_COLORS, G as AIDecision, A as AILogType, D as AIPosition, U as AIQuantConsoleOptions, y as AI_LOG_COLORS, V as AgentConsoleOptions, L as AgentStatus, a as BotLogEntry, B as BotLogType, c as BotState, N as CombinedLogEntry, K as ConsoleMetrics, Y as DEFAULT_CONSOLE_METRICS, W as DEFAULT_CONSOLE_OPTIONS, X as DEFAULT_RISK_STATUS, E as DecisionAction, v as FOREX_AGENT, F as FOREX_CAPITAL_SPLIT, h as FOREX_CURRENCY_PAIRS, f as FOREX_CYCLE_OPTIONS, z as FOREX_LOG_COLORS, k as FOREX_POOL_DEFAULTS, u as ForexAgent, g as ForexCurrencyPair, e as ForexCycleOption, p as ForexInvestment, t as ForexLogEntry, s as ForexLogType, j as ForexPool, n as ForexPoolDailySnapshot, m as ForexPoolTransaction, l as ForexPoolTransactionType, i as ForexPoolType, o as ForexPosition, r as ForexTradeRecord, q as ForexTradeStatus, I as IndicatorSnapshot, P as PositionSide, C as PositionStatus, H as RISK_LEVEL_COLORS, R as RiskStatus, S as StrategyPersonality, J as TRADING_STATUS_COLORS, Q as TradingConsoleOptions, O as TradingConsoleState, T as TradingStatus, w as calculateForexNetProfit, Z as calculateRiskLevel, d as computePoolAllocations, x as estimateForexProfit, $ as formatPercent, _ as formatPnl } from '../console-Dvf-N9Gr.mjs';
|
|
2
2
|
|
|
3
3
|
type StrategyCategory$1 = 'conservative' | 'balanced' | 'aggressive' | 'hedge' | 'arbitrage' | 'trend' | 'grid' | 'dca';
|
|
4
4
|
type OrderStatus = 'pending' | 'active' | 'paused' | 'completed' | 'cancelled' | 'pending_redemption' | 'redeemed';
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { M as AGENT_STATUS_COLORS, G as AIDecision, A as AILogType, D as AIPosition, U as AIQuantConsoleOptions, y as AI_LOG_COLORS, V as AgentConsoleOptions, L as AgentStatus, a as BotLogEntry, B as BotLogType, c as BotState, N as CombinedLogEntry, K as ConsoleMetrics, Y as DEFAULT_CONSOLE_METRICS, W as DEFAULT_CONSOLE_OPTIONS, X as DEFAULT_RISK_STATUS, E as DecisionAction, v as FOREX_AGENT, F as FOREX_CAPITAL_SPLIT, h as FOREX_CURRENCY_PAIRS, f as FOREX_CYCLE_OPTIONS, z as FOREX_LOG_COLORS, k as FOREX_POOL_DEFAULTS, u as ForexAgent, g as ForexCurrencyPair, e as ForexCycleOption, p as ForexInvestment, t as ForexLogEntry, s as ForexLogType, j as ForexPool, n as ForexPoolDailySnapshot, m as ForexPoolTransaction, l as ForexPoolTransactionType, i as ForexPoolType, o as ForexPosition, r as ForexTradeRecord, q as ForexTradeStatus, I as IndicatorSnapshot, P as PositionSide, C as PositionStatus, H as RISK_LEVEL_COLORS, R as RiskStatus, S as StrategyPersonality, J as TRADING_STATUS_COLORS, Q as TradingConsoleOptions, O as TradingConsoleState, T as TradingStatus, w as calculateForexNetProfit, Z as calculateRiskLevel, d as computePoolAllocations, x as estimateForexProfit, $ as formatPercent, _ as formatPnl } from '../console-
|
|
1
|
+
export { M as AGENT_STATUS_COLORS, G as AIDecision, A as AILogType, D as AIPosition, U as AIQuantConsoleOptions, y as AI_LOG_COLORS, V as AgentConsoleOptions, L as AgentStatus, a as BotLogEntry, B as BotLogType, c as BotState, N as CombinedLogEntry, K as ConsoleMetrics, Y as DEFAULT_CONSOLE_METRICS, W as DEFAULT_CONSOLE_OPTIONS, X as DEFAULT_RISK_STATUS, E as DecisionAction, v as FOREX_AGENT, F as FOREX_CAPITAL_SPLIT, h as FOREX_CURRENCY_PAIRS, f as FOREX_CYCLE_OPTIONS, z as FOREX_LOG_COLORS, k as FOREX_POOL_DEFAULTS, u as ForexAgent, g as ForexCurrencyPair, e as ForexCycleOption, p as ForexInvestment, t as ForexLogEntry, s as ForexLogType, j as ForexPool, n as ForexPoolDailySnapshot, m as ForexPoolTransaction, l as ForexPoolTransactionType, i as ForexPoolType, o as ForexPosition, r as ForexTradeRecord, q as ForexTradeStatus, I as IndicatorSnapshot, P as PositionSide, C as PositionStatus, H as RISK_LEVEL_COLORS, R as RiskStatus, S as StrategyPersonality, J as TRADING_STATUS_COLORS, Q as TradingConsoleOptions, O as TradingConsoleState, T as TradingStatus, w as calculateForexNetProfit, Z as calculateRiskLevel, d as computePoolAllocations, x as estimateForexProfit, $ as formatPercent, _ as formatPnl } from '../console-Dvf-N9Gr.js';
|
|
2
2
|
|
|
3
3
|
type StrategyCategory$1 = 'conservative' | 'balanced' | 'aggressive' | 'hedge' | 'arbitrage' | 'trend' | 'grid' | 'dca';
|
|
4
4
|
type OrderStatus = 'pending' | 'active' | 'paused' | 'completed' | 'cancelled' | 'pending_redemption' | 'redeemed';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { j as ForexPool, p as ForexInvestment, t as ForexLogEntry, m as ForexPoolTransaction, i as ForexPoolType, n as ForexPoolDailySnapshot, F as FOREX_CAPITAL_SPLIT, v as FOREX_AGENT, h as FOREX_CURRENCY_PAIRS, f as FOREX_CYCLE_OPTIONS, d as computePoolAllocations, x as estimateForexProfit } from './console-
|
|
1
|
+
import { j as ForexPool, p as ForexInvestment, t as ForexLogEntry, m as ForexPoolTransaction, i as ForexPoolType, n as ForexPoolDailySnapshot, F as FOREX_CAPITAL_SPLIT, v as FOREX_AGENT, h as FOREX_CURRENCY_PAIRS, f as FOREX_CYCLE_OPTIONS, d as computePoolAllocations, x as estimateForexProfit } from './console-Dvf-N9Gr.js';
|
|
2
2
|
|
|
3
3
|
/** Set the access token for authenticated forex API calls */
|
|
4
4
|
declare function setForexAccessToken(token: string): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { j as ForexPool, p as ForexInvestment, t as ForexLogEntry, m as ForexPoolTransaction, i as ForexPoolType, n as ForexPoolDailySnapshot, F as FOREX_CAPITAL_SPLIT, v as FOREX_AGENT, h as FOREX_CURRENCY_PAIRS, f as FOREX_CYCLE_OPTIONS, d as computePoolAllocations, x as estimateForexProfit } from './console-
|
|
1
|
+
import { j as ForexPool, p as ForexInvestment, t as ForexLogEntry, m as ForexPoolTransaction, i as ForexPoolType, n as ForexPoolDailySnapshot, F as FOREX_CAPITAL_SPLIT, v as FOREX_AGENT, h as FOREX_CURRENCY_PAIRS, f as FOREX_CYCLE_OPTIONS, d as computePoolAllocations, x as estimateForexProfit } from './console-Dvf-N9Gr.mjs';
|
|
2
2
|
|
|
3
3
|
/** Set the access token for authenticated forex API calls */
|
|
4
4
|
declare function setForexAccessToken(token: string): void;
|
package/package.json
CHANGED
|
@@ -80,6 +80,224 @@ export interface StrategyPersonality {
|
|
|
80
80
|
riskTolerance: 'low' | 'medium' | 'high';
|
|
81
81
|
preferredPairs: string[];
|
|
82
82
|
rsiBias: number;
|
|
83
|
+
// Yield configuration
|
|
84
|
+
tier: InvestmentTier;
|
|
85
|
+
dailyYieldMin: number; // Min daily interest rate (%)
|
|
86
|
+
dailyYieldMax: number; // Max daily interest rate (%)
|
|
87
|
+
description: string;
|
|
88
|
+
category: StrategyCategory;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export type StrategyCategory =
|
|
92
|
+
| 'conservative' // 保守型 - 稳健收益
|
|
93
|
+
| 'balanced' // 平衡型 - 风险收益均衡
|
|
94
|
+
| 'growth' // 成长型 - 较高收益
|
|
95
|
+
| 'aggressive' // 激进型 - 高风险高收益
|
|
96
|
+
| 'quantitative'; // 量化型 - AI驱动
|
|
97
|
+
|
|
98
|
+
export type InvestmentTier = 'starter' | 'basic' | 'standard' | 'premium' | 'elite' | 'vip';
|
|
99
|
+
|
|
100
|
+
// ── Investment Tier Configuration ─────────────────────────────────────────────
|
|
101
|
+
|
|
102
|
+
export interface TierConfig {
|
|
103
|
+
id: InvestmentTier;
|
|
104
|
+
name: string;
|
|
105
|
+
nameCn: string;
|
|
106
|
+
minInvestment: number;
|
|
107
|
+
maxInvestment: number;
|
|
108
|
+
color: string;
|
|
109
|
+
icon: string;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export const INVESTMENT_TIERS: Record<InvestmentTier, TierConfig> = {
|
|
113
|
+
starter: {
|
|
114
|
+
id: 'starter',
|
|
115
|
+
name: 'Starter',
|
|
116
|
+
nameCn: '入门版',
|
|
117
|
+
minInvestment: 100,
|
|
118
|
+
maxInvestment: 999,
|
|
119
|
+
color: '#6B7280',
|
|
120
|
+
icon: '🌱',
|
|
121
|
+
},
|
|
122
|
+
basic: {
|
|
123
|
+
id: 'basic',
|
|
124
|
+
name: 'Basic',
|
|
125
|
+
nameCn: '基础版',
|
|
126
|
+
minInvestment: 1000,
|
|
127
|
+
maxInvestment: 4999,
|
|
128
|
+
color: '#3B82F6',
|
|
129
|
+
icon: '📊',
|
|
130
|
+
},
|
|
131
|
+
standard: {
|
|
132
|
+
id: 'standard',
|
|
133
|
+
name: 'Standard',
|
|
134
|
+
nameCn: '标准版',
|
|
135
|
+
minInvestment: 5000,
|
|
136
|
+
maxInvestment: 19999,
|
|
137
|
+
color: '#10B981',
|
|
138
|
+
icon: '💎',
|
|
139
|
+
},
|
|
140
|
+
premium: {
|
|
141
|
+
id: 'premium',
|
|
142
|
+
name: 'Premium',
|
|
143
|
+
nameCn: '高级版',
|
|
144
|
+
minInvestment: 20000,
|
|
145
|
+
maxInvestment: 49999,
|
|
146
|
+
color: '#8B5CF6',
|
|
147
|
+
icon: '👑',
|
|
148
|
+
},
|
|
149
|
+
elite: {
|
|
150
|
+
id: 'elite',
|
|
151
|
+
name: 'Elite',
|
|
152
|
+
nameCn: '精英版',
|
|
153
|
+
minInvestment: 50000,
|
|
154
|
+
maxInvestment: 99999,
|
|
155
|
+
color: '#F59E0B',
|
|
156
|
+
icon: '🏆',
|
|
157
|
+
},
|
|
158
|
+
vip: {
|
|
159
|
+
id: 'vip',
|
|
160
|
+
name: 'VIP',
|
|
161
|
+
nameCn: 'VIP专属',
|
|
162
|
+
minInvestment: 100000,
|
|
163
|
+
maxInvestment: Infinity,
|
|
164
|
+
color: '#EF4444',
|
|
165
|
+
icon: '🔥',
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
// ── Investment Cycle Configuration ────────────────────────────────────────────
|
|
170
|
+
|
|
171
|
+
export interface CycleConfig {
|
|
172
|
+
id: string;
|
|
173
|
+
days: number;
|
|
174
|
+
name: string;
|
|
175
|
+
nameCn: string;
|
|
176
|
+
profitSharePercent: number; // Platform takes this %, user gets (100 - this)%
|
|
177
|
+
bonusMultiplier: number; // Bonus yield multiplier for longer cycles
|
|
178
|
+
earlyWithdrawPenalty: number; // Penalty % for early withdrawal
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export const INVESTMENT_CYCLES: CycleConfig[] = [
|
|
182
|
+
{
|
|
183
|
+
id: 'flexible',
|
|
184
|
+
days: 0,
|
|
185
|
+
name: 'Flexible',
|
|
186
|
+
nameCn: '灵活期',
|
|
187
|
+
profitSharePercent: 30, // Platform 30%, User 70%
|
|
188
|
+
bonusMultiplier: 1.0,
|
|
189
|
+
earlyWithdrawPenalty: 0,
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
id: 'week',
|
|
193
|
+
days: 7,
|
|
194
|
+
name: '7 Days',
|
|
195
|
+
nameCn: '7天期',
|
|
196
|
+
profitSharePercent: 25, // Platform 25%, User 75%
|
|
197
|
+
bonusMultiplier: 1.1,
|
|
198
|
+
earlyWithdrawPenalty: 5,
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
id: 'biweek',
|
|
202
|
+
days: 14,
|
|
203
|
+
name: '14 Days',
|
|
204
|
+
nameCn: '14天期',
|
|
205
|
+
profitSharePercent: 22, // Platform 22%, User 78%
|
|
206
|
+
bonusMultiplier: 1.2,
|
|
207
|
+
earlyWithdrawPenalty: 8,
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
id: 'month',
|
|
211
|
+
days: 30,
|
|
212
|
+
name: '30 Days',
|
|
213
|
+
nameCn: '30天期',
|
|
214
|
+
profitSharePercent: 20, // Platform 20%, User 80%
|
|
215
|
+
bonusMultiplier: 1.35,
|
|
216
|
+
earlyWithdrawPenalty: 10,
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
id: 'quarter',
|
|
220
|
+
days: 90,
|
|
221
|
+
name: '90 Days',
|
|
222
|
+
nameCn: '90天期',
|
|
223
|
+
profitSharePercent: 15, // Platform 15%, User 85%
|
|
224
|
+
bonusMultiplier: 1.5,
|
|
225
|
+
earlyWithdrawPenalty: 15,
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
id: 'halfyear',
|
|
229
|
+
days: 180,
|
|
230
|
+
name: '180 Days',
|
|
231
|
+
nameCn: '180天期',
|
|
232
|
+
profitSharePercent: 12, // Platform 12%, User 88%
|
|
233
|
+
bonusMultiplier: 1.8,
|
|
234
|
+
earlyWithdrawPenalty: 20,
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
id: 'year',
|
|
238
|
+
days: 365,
|
|
239
|
+
name: '365 Days',
|
|
240
|
+
nameCn: '365天期',
|
|
241
|
+
profitSharePercent: 10, // Platform 10%, User 90%
|
|
242
|
+
bonusMultiplier: 2.0,
|
|
243
|
+
earlyWithdrawPenalty: 25,
|
|
244
|
+
},
|
|
245
|
+
];
|
|
246
|
+
|
|
247
|
+
// ── Yield Calculator ──────────────────────────────────────────────────────────
|
|
248
|
+
|
|
249
|
+
export function calculateDailyYield(
|
|
250
|
+
strategy: StrategyPersonality,
|
|
251
|
+
tier: InvestmentTier,
|
|
252
|
+
cycle: CycleConfig
|
|
253
|
+
): { grossYield: number; netYield: number; platformFee: number } {
|
|
254
|
+
// Base yield from strategy
|
|
255
|
+
const baseYield = (strategy.dailyYieldMin + strategy.dailyYieldMax) / 2;
|
|
256
|
+
|
|
257
|
+
// Tier bonus (higher tiers get slightly better rates)
|
|
258
|
+
const tierBonuses: Record<InvestmentTier, number> = {
|
|
259
|
+
starter: 0,
|
|
260
|
+
basic: 0.02,
|
|
261
|
+
standard: 0.05,
|
|
262
|
+
premium: 0.08,
|
|
263
|
+
elite: 0.12,
|
|
264
|
+
vip: 0.15,
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
// Calculate gross yield with bonuses
|
|
268
|
+
const grossYield = baseYield * cycle.bonusMultiplier * (1 + tierBonuses[tier]);
|
|
269
|
+
|
|
270
|
+
// Calculate platform fee and net yield
|
|
271
|
+
const platformFee = grossYield * (cycle.profitSharePercent / 100);
|
|
272
|
+
const netYield = grossYield - platformFee;
|
|
273
|
+
|
|
274
|
+
return { grossYield, netYield, platformFee };
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export function estimateReturns(
|
|
278
|
+
principal: number,
|
|
279
|
+
strategy: StrategyPersonality,
|
|
280
|
+
tier: InvestmentTier,
|
|
281
|
+
cycle: CycleConfig
|
|
282
|
+
): {
|
|
283
|
+
dailyReturn: number;
|
|
284
|
+
totalReturn: number;
|
|
285
|
+
finalAmount: number;
|
|
286
|
+
platformProfit: number;
|
|
287
|
+
userProfit: number;
|
|
288
|
+
apr: number;
|
|
289
|
+
} {
|
|
290
|
+
const { netYield, platformFee } = calculateDailyYield(strategy, tier, cycle);
|
|
291
|
+
const days = cycle.days || 30; // Default to 30 days for flexible
|
|
292
|
+
|
|
293
|
+
const dailyReturn = principal * (netYield / 100);
|
|
294
|
+
const totalReturn = dailyReturn * days;
|
|
295
|
+
const finalAmount = principal + totalReturn;
|
|
296
|
+
const platformProfit = principal * (platformFee / 100) * days;
|
|
297
|
+
const userProfit = totalReturn;
|
|
298
|
+
const apr = netYield * 365;
|
|
299
|
+
|
|
300
|
+
return { dailyReturn, totalReturn, finalAmount, platformProfit, userProfit, apr };
|
|
83
301
|
}
|
|
84
302
|
|
|
85
303
|
type LogCallback = (entry: BotLogEntry) => void;
|
|
@@ -87,13 +305,64 @@ type LogCallback = (entry: BotLogEntry) => void;
|
|
|
87
305
|
// ── Strategy Personalities ─────────────────────────────────────────────────────
|
|
88
306
|
|
|
89
307
|
export const STRATEGY_PERSONALITIES: StrategyPersonality[] = [
|
|
308
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
309
|
+
// CONSERVATIVE STRATEGIES (保守型) - Low risk, stable returns
|
|
310
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
311
|
+
{
|
|
312
|
+
id: 'stable-yield-01',
|
|
313
|
+
name: 'Stable Yield',
|
|
314
|
+
shortName: 'STB',
|
|
315
|
+
color: '#6B7280',
|
|
316
|
+
scanIntervalMin: 80000,
|
|
317
|
+
scanIntervalMax: 120000,
|
|
318
|
+
tradeFrequency: 0.15,
|
|
319
|
+
positionSizeMin: 5,
|
|
320
|
+
positionSizeMax: 15,
|
|
321
|
+
leverageMin: 1,
|
|
322
|
+
leverageMax: 3,
|
|
323
|
+
primaryIndicators: ['Bollinger', 'Volume'],
|
|
324
|
+
riskTolerance: 'low',
|
|
325
|
+
preferredPairs: ['BTC/USDT', 'ETH/USDT'],
|
|
326
|
+
rsiBias: 45,
|
|
327
|
+
tier: 'starter',
|
|
328
|
+
dailyYieldMin: 0.15,
|
|
329
|
+
dailyYieldMax: 0.25,
|
|
330
|
+
description: '稳健收益策略,低风险低波动,适合新手入门',
|
|
331
|
+
category: 'conservative',
|
|
332
|
+
},
|
|
90
333
|
{
|
|
91
|
-
id: '
|
|
334
|
+
id: 'conservative-shield-01',
|
|
335
|
+
name: 'Conservative Shield',
|
|
336
|
+
shortName: 'CON',
|
|
337
|
+
color: '#10B981',
|
|
338
|
+
scanIntervalMin: 60000,
|
|
339
|
+
scanIntervalMax: 90000,
|
|
340
|
+
tradeFrequency: 0.25,
|
|
341
|
+
positionSizeMin: 10,
|
|
342
|
+
positionSizeMax: 20,
|
|
343
|
+
leverageMin: 2,
|
|
344
|
+
leverageMax: 5,
|
|
345
|
+
primaryIndicators: ['Bollinger', 'Volume', 'RSI'],
|
|
346
|
+
riskTolerance: 'low',
|
|
347
|
+
preferredPairs: ['BTC/USDT', 'ETH/USDT'],
|
|
348
|
+
rsiBias: 45,
|
|
349
|
+
tier: 'basic',
|
|
350
|
+
dailyYieldMin: 0.25,
|
|
351
|
+
dailyYieldMax: 0.40,
|
|
352
|
+
description: '保守防御策略,注重资金安全,稳定收益',
|
|
353
|
+
category: 'conservative',
|
|
354
|
+
},
|
|
355
|
+
|
|
356
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
357
|
+
// BALANCED STRATEGIES (平衡型) - Moderate risk, balanced returns
|
|
358
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
359
|
+
{
|
|
360
|
+
id: 'balanced-alpha-01',
|
|
92
361
|
name: 'Balanced Alpha',
|
|
93
362
|
shortName: 'BAL',
|
|
94
363
|
color: '#3B82F6',
|
|
95
|
-
scanIntervalMin:
|
|
96
|
-
scanIntervalMax:
|
|
364
|
+
scanIntervalMin: 45000,
|
|
365
|
+
scanIntervalMax: 70000,
|
|
97
366
|
tradeFrequency: 0.4,
|
|
98
367
|
positionSizeMin: 15,
|
|
99
368
|
positionSizeMax: 35,
|
|
@@ -103,31 +372,93 @@ export const STRATEGY_PERSONALITIES: StrategyPersonality[] = [
|
|
|
103
372
|
riskTolerance: 'medium',
|
|
104
373
|
preferredPairs: ['BTC/USDT', 'ETH/USDT', 'SOL/USDT'],
|
|
105
374
|
rsiBias: 50,
|
|
375
|
+
tier: 'standard',
|
|
376
|
+
dailyYieldMin: 0.40,
|
|
377
|
+
dailyYieldMax: 0.65,
|
|
378
|
+
description: '平衡型策略,风险收益均衡,适合稳健投资者',
|
|
379
|
+
category: 'balanced',
|
|
106
380
|
},
|
|
107
381
|
{
|
|
108
|
-
id: '
|
|
109
|
-
name: '
|
|
110
|
-
shortName: '
|
|
111
|
-
color: '#
|
|
112
|
-
scanIntervalMin:
|
|
382
|
+
id: 'smart-rebalance-01',
|
|
383
|
+
name: 'Smart Rebalance',
|
|
384
|
+
shortName: 'SRB',
|
|
385
|
+
color: '#06B6D4',
|
|
386
|
+
scanIntervalMin: 50000,
|
|
387
|
+
scanIntervalMax: 75000,
|
|
388
|
+
tradeFrequency: 0.35,
|
|
389
|
+
positionSizeMin: 12,
|
|
390
|
+
positionSizeMax: 30,
|
|
391
|
+
leverageMin: 3,
|
|
392
|
+
leverageMax: 8,
|
|
393
|
+
primaryIndicators: ['RSI', 'EMA', 'Volume'],
|
|
394
|
+
riskTolerance: 'medium',
|
|
395
|
+
preferredPairs: ['BTC/USDT', 'ETH/USDT', 'BNB/USDT', 'SOL/USDT'],
|
|
396
|
+
rsiBias: 50,
|
|
397
|
+
tier: 'standard',
|
|
398
|
+
dailyYieldMin: 0.45,
|
|
399
|
+
dailyYieldMax: 0.70,
|
|
400
|
+
description: '智能再平衡策略,动态调整持仓,优化收益',
|
|
401
|
+
category: 'balanced',
|
|
402
|
+
},
|
|
403
|
+
|
|
404
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
405
|
+
// GROWTH STRATEGIES (成长型) - Higher risk, higher returns
|
|
406
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
407
|
+
{
|
|
408
|
+
id: 'growth-momentum-01',
|
|
409
|
+
name: 'Growth Momentum',
|
|
410
|
+
shortName: 'GRO',
|
|
411
|
+
color: '#8B5CF6',
|
|
412
|
+
scanIntervalMin: 40000,
|
|
413
|
+
scanIntervalMax: 60000,
|
|
414
|
+
tradeFrequency: 0.45,
|
|
415
|
+
positionSizeMin: 20,
|
|
416
|
+
positionSizeMax: 40,
|
|
417
|
+
leverageMin: 5,
|
|
418
|
+
leverageMax: 12,
|
|
419
|
+
primaryIndicators: ['RSI', 'MACD', 'EMA'],
|
|
420
|
+
riskTolerance: 'medium',
|
|
421
|
+
preferredPairs: ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'AVAX/USDT'],
|
|
422
|
+
rsiBias: 52,
|
|
423
|
+
tier: 'premium',
|
|
424
|
+
dailyYieldMin: 0.60,
|
|
425
|
+
dailyYieldMax: 0.95,
|
|
426
|
+
description: '成长动量策略,追求较高收益,适合有经验投资者',
|
|
427
|
+
category: 'growth',
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
id: 'trend-hunter-01',
|
|
431
|
+
name: 'Trend Hunter',
|
|
432
|
+
shortName: 'TRH',
|
|
433
|
+
color: '#EC4899',
|
|
434
|
+
scanIntervalMin: 38000,
|
|
113
435
|
scanIntervalMax: 55000,
|
|
114
|
-
tradeFrequency: 0.
|
|
115
|
-
positionSizeMin:
|
|
116
|
-
positionSizeMax:
|
|
117
|
-
leverageMin:
|
|
118
|
-
leverageMax:
|
|
119
|
-
primaryIndicators: ['
|
|
120
|
-
riskTolerance: '
|
|
121
|
-
preferredPairs: ['BTC/USDT', 'ETH/USDT'],
|
|
122
|
-
rsiBias:
|
|
436
|
+
tradeFrequency: 0.48,
|
|
437
|
+
positionSizeMin: 22,
|
|
438
|
+
positionSizeMax: 42,
|
|
439
|
+
leverageMin: 5,
|
|
440
|
+
leverageMax: 15,
|
|
441
|
+
primaryIndicators: ['EMA', 'MACD', 'Volume', 'Bollinger'],
|
|
442
|
+
riskTolerance: 'medium',
|
|
443
|
+
preferredPairs: ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'ARB/USDT', 'OP/USDT'],
|
|
444
|
+
rsiBias: 53,
|
|
445
|
+
tier: 'premium',
|
|
446
|
+
dailyYieldMin: 0.65,
|
|
447
|
+
dailyYieldMax: 1.00,
|
|
448
|
+
description: '趋势猎手策略,捕捉市场趋势,追求超额收益',
|
|
449
|
+
category: 'growth',
|
|
123
450
|
},
|
|
451
|
+
|
|
452
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
453
|
+
// AGGRESSIVE STRATEGIES (激进型) - High risk, high returns
|
|
454
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
124
455
|
{
|
|
125
|
-
id: 'aggressive-01',
|
|
456
|
+
id: 'aggressive-momentum-01',
|
|
126
457
|
name: 'Aggressive Momentum',
|
|
127
458
|
shortName: 'AGG',
|
|
128
459
|
color: '#EF4444',
|
|
129
|
-
scanIntervalMin:
|
|
130
|
-
scanIntervalMax:
|
|
460
|
+
scanIntervalMin: 35000,
|
|
461
|
+
scanIntervalMax: 55000,
|
|
131
462
|
tradeFrequency: 0.5,
|
|
132
463
|
positionSizeMin: 25,
|
|
133
464
|
positionSizeMax: 50,
|
|
@@ -137,6 +468,103 @@ export const STRATEGY_PERSONALITIES: StrategyPersonality[] = [
|
|
|
137
468
|
riskTolerance: 'high',
|
|
138
469
|
preferredPairs: ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'DOGE/USDT', 'AVAX/USDT'],
|
|
139
470
|
rsiBias: 55,
|
|
471
|
+
tier: 'elite',
|
|
472
|
+
dailyYieldMin: 0.85,
|
|
473
|
+
dailyYieldMax: 1.40,
|
|
474
|
+
description: '激进动量策略,高风险高收益,适合风险承受能力强的投资者',
|
|
475
|
+
category: 'aggressive',
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
id: 'leverage-maximizer-01',
|
|
479
|
+
name: 'Leverage Maximizer',
|
|
480
|
+
shortName: 'LEV',
|
|
481
|
+
color: '#F97316',
|
|
482
|
+
scanIntervalMin: 30000,
|
|
483
|
+
scanIntervalMax: 50000,
|
|
484
|
+
tradeFrequency: 0.55,
|
|
485
|
+
positionSizeMin: 30,
|
|
486
|
+
positionSizeMax: 55,
|
|
487
|
+
leverageMin: 10,
|
|
488
|
+
leverageMax: 25,
|
|
489
|
+
primaryIndicators: ['RSI', 'MACD', 'EMA', 'Volume', 'Bollinger'],
|
|
490
|
+
riskTolerance: 'high',
|
|
491
|
+
preferredPairs: ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'DOGE/USDT', 'AVAX/USDT', 'ARB/USDT'],
|
|
492
|
+
rsiBias: 55,
|
|
493
|
+
tier: 'elite',
|
|
494
|
+
dailyYieldMin: 1.00,
|
|
495
|
+
dailyYieldMax: 1.80,
|
|
496
|
+
description: '杠杆最大化策略,追求极致收益,需要专业投资经验',
|
|
497
|
+
category: 'aggressive',
|
|
498
|
+
},
|
|
499
|
+
|
|
500
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
501
|
+
// QUANTITATIVE STRATEGIES (量化型) - AI-driven, advanced algorithms
|
|
502
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
503
|
+
{
|
|
504
|
+
id: 'ai-quant-alpha-01',
|
|
505
|
+
name: 'AI Quant Alpha',
|
|
506
|
+
shortName: 'AQA',
|
|
507
|
+
color: '#A855F7',
|
|
508
|
+
scanIntervalMin: 42000,
|
|
509
|
+
scanIntervalMax: 65000,
|
|
510
|
+
tradeFrequency: 0.42,
|
|
511
|
+
positionSizeMin: 18,
|
|
512
|
+
positionSizeMax: 38,
|
|
513
|
+
leverageMin: 4,
|
|
514
|
+
leverageMax: 12,
|
|
515
|
+
primaryIndicators: ['RSI', 'MACD', 'EMA', 'Volume', 'Bollinger'],
|
|
516
|
+
riskTolerance: 'medium',
|
|
517
|
+
preferredPairs: ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'BNB/USDT'],
|
|
518
|
+
rsiBias: 51,
|
|
519
|
+
tier: 'premium',
|
|
520
|
+
dailyYieldMin: 0.70,
|
|
521
|
+
dailyYieldMax: 1.10,
|
|
522
|
+
description: 'AI量化Alpha策略,机器学习驱动,智能风控',
|
|
523
|
+
category: 'quantitative',
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
id: 'neural-trader-01',
|
|
527
|
+
name: 'Neural Trader',
|
|
528
|
+
shortName: 'NRT',
|
|
529
|
+
color: '#14B8A6',
|
|
530
|
+
scanIntervalMin: 40000,
|
|
531
|
+
scanIntervalMax: 62000,
|
|
532
|
+
tradeFrequency: 0.44,
|
|
533
|
+
positionSizeMin: 20,
|
|
534
|
+
positionSizeMax: 40,
|
|
535
|
+
leverageMin: 5,
|
|
536
|
+
leverageMax: 15,
|
|
537
|
+
primaryIndicators: ['RSI', 'MACD', 'EMA', 'Volume', 'Bollinger'],
|
|
538
|
+
riskTolerance: 'medium',
|
|
539
|
+
preferredPairs: ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'AVAX/USDT', 'LINK/USDT'],
|
|
540
|
+
rsiBias: 52,
|
|
541
|
+
tier: 'elite',
|
|
542
|
+
dailyYieldMin: 0.80,
|
|
543
|
+
dailyYieldMax: 1.25,
|
|
544
|
+
description: '神经网络交易策略,深度学习模型,自适应市场',
|
|
545
|
+
category: 'quantitative',
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
id: 'quantum-edge-01',
|
|
549
|
+
name: 'Quantum Edge',
|
|
550
|
+
shortName: 'QTE',
|
|
551
|
+
color: '#6366F1',
|
|
552
|
+
scanIntervalMin: 35000,
|
|
553
|
+
scanIntervalMax: 55000,
|
|
554
|
+
tradeFrequency: 0.5,
|
|
555
|
+
positionSizeMin: 25,
|
|
556
|
+
positionSizeMax: 50,
|
|
557
|
+
leverageMin: 8,
|
|
558
|
+
leverageMax: 20,
|
|
559
|
+
primaryIndicators: ['RSI', 'MACD', 'EMA', 'Volume', 'Bollinger'],
|
|
560
|
+
riskTolerance: 'high',
|
|
561
|
+
preferredPairs: ['BTC/USDT', 'ETH/USDT', 'SOL/USDT', 'AVAX/USDT', 'ARB/USDT', 'OP/USDT'],
|
|
562
|
+
rsiBias: 54,
|
|
563
|
+
tier: 'vip',
|
|
564
|
+
dailyYieldMin: 1.20,
|
|
565
|
+
dailyYieldMax: 2.00,
|
|
566
|
+
description: 'VIP量子优势策略,顶级AI算法,极致收益追求',
|
|
567
|
+
category: 'quantitative',
|
|
140
568
|
},
|
|
141
569
|
];
|
|
142
570
|
|
|
@@ -428,7 +856,7 @@ class BotSimulationEngine {
|
|
|
428
856
|
},
|
|
429
857
|
delay,
|
|
430
858
|
});
|
|
431
|
-
delay += rand(
|
|
859
|
+
delay += rand(2000, 3500); // 2-3.5s after SCAN
|
|
432
860
|
|
|
433
861
|
// 2. THINKING - AI reasoning process (new)
|
|
434
862
|
const thinkingMessages = this.generateThinkingProcess(strategy, pair, price);
|
|
@@ -443,7 +871,7 @@ class BotSimulationEngine {
|
|
|
443
871
|
},
|
|
444
872
|
delay,
|
|
445
873
|
});
|
|
446
|
-
delay += rand(
|
|
874
|
+
delay += rand(1500, 2500); // 1.5-2.5s between thoughts
|
|
447
875
|
}
|
|
448
876
|
|
|
449
877
|
// 3. INDICATOR - Always (slower delay)
|
|
@@ -478,9 +906,9 @@ class BotSimulationEngine {
|
|
|
478
906
|
},
|
|
479
907
|
delay,
|
|
480
908
|
});
|
|
481
|
-
delay += rand(
|
|
909
|
+
delay += rand(2000, 3500); // 2-3.5s after INDICATOR
|
|
482
910
|
|
|
483
|
-
// 4. NEWS - 12% chance
|
|
911
|
+
// 4. NEWS - 12% chance
|
|
484
912
|
if (Math.random() < 0.12) {
|
|
485
913
|
const sentiment = Math.random() > 0.4 ? 'Bullish' : 'Bearish';
|
|
486
914
|
entries.push({
|
|
@@ -493,10 +921,10 @@ class BotSimulationEngine {
|
|
|
493
921
|
},
|
|
494
922
|
delay,
|
|
495
923
|
});
|
|
496
|
-
delay += rand(
|
|
924
|
+
delay += rand(2500, 4000); // 2.5-4s after NEWS
|
|
497
925
|
}
|
|
498
926
|
|
|
499
|
-
// 5. ANALYSIS - 40% chance
|
|
927
|
+
// 5. ANALYSIS - 40% chance
|
|
500
928
|
if (Math.random() < 0.4) {
|
|
501
929
|
const analysis = this.generateAnalysis(strategy, indicators, pair);
|
|
502
930
|
entries.push({
|
|
@@ -509,7 +937,7 @@ class BotSimulationEngine {
|
|
|
509
937
|
},
|
|
510
938
|
delay,
|
|
511
939
|
});
|
|
512
|
-
delay += rand(
|
|
940
|
+
delay += rand(2500, 4000); // 2.5-4s after ANALYSIS
|
|
513
941
|
}
|
|
514
942
|
|
|
515
943
|
// 6-10. Signal evaluation and potential trade
|
|
@@ -537,7 +965,7 @@ class BotSimulationEngine {
|
|
|
537
965
|
},
|
|
538
966
|
delay,
|
|
539
967
|
});
|
|
540
|
-
delay += rand(
|
|
968
|
+
delay += rand(3000, 5000); // 3-5s after STRATEGY
|
|
541
969
|
|
|
542
970
|
// 7. SIGNAL
|
|
543
971
|
entries.push({
|
|
@@ -551,7 +979,7 @@ class BotSimulationEngine {
|
|
|
551
979
|
},
|
|
552
980
|
delay,
|
|
553
981
|
});
|
|
554
|
-
delay += rand(
|
|
982
|
+
delay += rand(3000, 4500); // 3-4.5s after SIGNAL
|
|
555
983
|
|
|
556
984
|
// 8. DECISION
|
|
557
985
|
const decision = this.makeTradeDecision(strategy, signal, state);
|
|
@@ -573,7 +1001,7 @@ class BotSimulationEngine {
|
|
|
573
1001
|
},
|
|
574
1002
|
delay,
|
|
575
1003
|
});
|
|
576
|
-
delay += rand(
|
|
1004
|
+
delay += rand(2500, 4000); // 2.5-4s after DECISION
|
|
577
1005
|
|
|
578
1006
|
// 9. ORDER
|
|
579
1007
|
const orderId = `ORD_${Date.now().toString(36).toUpperCase()}`;
|
|
@@ -603,7 +1031,7 @@ class BotSimulationEngine {
|
|
|
603
1031
|
},
|
|
604
1032
|
delay,
|
|
605
1033
|
});
|
|
606
|
-
delay += rand(
|
|
1034
|
+
delay += rand(4000, 7000); // 4-7s for order execution
|
|
607
1035
|
|
|
608
1036
|
// 10. FILLED
|
|
609
1037
|
const fillPrice = orderPrice * (1 + rand(-0.0003, 0.0003));
|
|
@@ -656,9 +1084,9 @@ class BotSimulationEngine {
|
|
|
656
1084
|
}
|
|
657
1085
|
}
|
|
658
1086
|
|
|
659
|
-
// 11. PNL - Update open positions
|
|
1087
|
+
// 11. PNL - Update open positions
|
|
660
1088
|
if (state.openPositions.length > 0 && Math.random() < 0.5) {
|
|
661
|
-
delay += rand(
|
|
1089
|
+
delay += rand(3500, 5500); // 3.5-5.5s before PNL
|
|
662
1090
|
let totalPositionPnl = 0;
|
|
663
1091
|
const pnlParts: string[] = [];
|
|
664
1092
|
|
|
@@ -701,9 +1129,9 @@ class BotSimulationEngine {
|
|
|
701
1129
|
});
|
|
702
1130
|
}
|
|
703
1131
|
|
|
704
|
-
// 12. RISK - Periodic check
|
|
1132
|
+
// 12. RISK - Periodic check
|
|
705
1133
|
if (Math.random() < 0.2) {
|
|
706
|
-
delay += rand(
|
|
1134
|
+
delay += rand(3000, 5000); // 3-5s before RISK
|
|
707
1135
|
const exposure = state.openPositions.reduce((sum, p) => sum + p.size * p.leverage, 0);
|
|
708
1136
|
const maxDrawdown = rand(2, 12);
|
|
709
1137
|
entries.push({
|
|
@@ -11,11 +11,22 @@ export type { PairState } from './ForexSimulationEngine';
|
|
|
11
11
|
export { ForexPoolDataGenerator } from './ForexPoolDataGenerator';
|
|
12
12
|
|
|
13
13
|
// Bot Simulation Engine (AI crypto trading strategies)
|
|
14
|
-
export {
|
|
14
|
+
export {
|
|
15
|
+
botSimulationEngine,
|
|
16
|
+
STRATEGY_PERSONALITIES,
|
|
17
|
+
INVESTMENT_TIERS,
|
|
18
|
+
INVESTMENT_CYCLES,
|
|
19
|
+
calculateDailyYield,
|
|
20
|
+
estimateReturns,
|
|
21
|
+
} from './BotSimulationEngine';
|
|
15
22
|
export type {
|
|
16
23
|
BotLogType,
|
|
17
24
|
BotLogEntry,
|
|
18
25
|
IndicatorSnapshot,
|
|
19
26
|
BotState,
|
|
20
27
|
StrategyPersonality,
|
|
28
|
+
StrategyCategory,
|
|
29
|
+
InvestmentTier,
|
|
30
|
+
TierConfig,
|
|
31
|
+
CycleConfig,
|
|
21
32
|
} from './BotSimulationEngine';
|