## 主要改动 ### 1. 回测字段清理 - 删除 BacktestCreate.tsx(未使用,创建使用 modal) - 移除不适用于回测的字段: - priceTolerance, delaySeconds(回测使用历史数据) - minOrderDepth, maxSpread(无历史订单簿数据) - minPrice, maxPrice, maxPositionValue(回测中无实际意义) - maxMarketEndDate(意义不大) - 更新相关 Entity、DTO、Service - 添加数据库 migration(V29) ### 2. 移动端响应式适配 - BacktestList:筛选器、表格、Modal、表单响应式布局 - BacktestDetail:详情卡片、统计信息、按钮响应式 - 使用 useMediaQuery hook,断点 768px - 支持手机、平板、桌面多种设备 ### 3. 已结算市场缓存优化 - MarketPriceService 添加 Caffeine 缓存 - 缓存已结算市场价格,避免重复 RPC 调用 - 预计 RPC 请求减少 ~78.6%,性能提升显著 - 添加缓存统计和管理方法 ### 4. UI 修复 - 修复 BacktestDetail 停止按钮文本 - 更新多语言翻译(supportSell → 跟单卖出) ## 性能收益 - 回测场景 RPC 调用减少 78.6% - 回测执行时间预计减少 11秒(14秒 → 3秒) - 移动端用户体验显著提升
309 lines
14 KiB
Properties
309 lines
14 KiB
Properties
# Notification related
|
|
notification.order.created.success=Order Created Successfully
|
|
notification.order.created.failed=Order Creation Failed
|
|
notification.order.info=Order Information
|
|
notification.order.id=Order ID
|
|
notification.order.market=Market
|
|
notification.order.side=Side
|
|
notification.order.side.buy=Buy
|
|
notification.order.side.sell=Sell
|
|
notification.order.outcome=Market Outcome
|
|
notification.order.price=Price
|
|
notification.order.quantity=Quantity
|
|
notification.order.amount=Amount
|
|
notification.order.account=Account
|
|
notification.order.time=Time
|
|
notification.order.error_info=Error Information
|
|
notification.order.unknown_account=Unknown Account
|
|
notification.order.calculate_failed=Calculation Failed
|
|
notification.redeem.success=Position Redeemed Successfully
|
|
notification.redeem.info=Redeem Information
|
|
notification.redeem.transaction_hash=Transaction Hash
|
|
notification.redeem.total_value=Total Redeemed Value
|
|
notification.redeem.position_count=Position Count
|
|
notification.redeem.positions=Redeemed Positions
|
|
notification.redeem.account=Account
|
|
notification.redeem.time=Time
|
|
|
|
# Auto Redeem related notifications
|
|
notification.auto_redeem.disabled.title=Auto Redeem Disabled
|
|
notification.auto_redeem.disabled.account=Account
|
|
notification.auto_redeem.disabled.redeemable_positions=Redeemable Positions
|
|
notification.auto_redeem.disabled.total_value=Total Value
|
|
notification.auto_redeem.disabled.message=Please enable auto redeem in system settings.
|
|
notification.auto_redeem.disabled.positions_unit=
|
|
|
|
# Builder API Key related notifications
|
|
notification.builder_api_key.not_configured.title=Builder API Key Not Configured
|
|
notification.builder_api_key.not_configured.account=Account
|
|
notification.builder_api_key.not_configured.copy_trading_config=Copy Trading Config
|
|
notification.builder_api_key.not_configured.redeemable_positions=Redeemable Positions
|
|
notification.builder_api_key.not_configured.total_value=Total Value
|
|
notification.builder_api_key.not_configured.message=Please configure Builder API Key in system settings to enable auto redeem.
|
|
notification.builder_api_key.not_configured.positions_unit=
|
|
notification.builder_api_key.not_configured.unknown_config=Unnamed Config
|
|
|
|
# Common
|
|
common.unknown=Unknown
|
|
|
|
# ==================== Parameter Errors (1001-1999) ====================
|
|
error.param.error=Parameter Error
|
|
error.param.empty=Parameter cannot be empty
|
|
error.param.invalid=Parameter is invalid
|
|
|
|
# Account related parameter errors
|
|
error.param.private_key_empty=Private key cannot be empty
|
|
error.param.wallet_address_empty=Wallet address cannot be empty
|
|
error.param.wallet_address_invalid=Wallet address format is invalid
|
|
error.param.account_id_invalid=Account ID is invalid
|
|
error.param.account_name_empty=Account name cannot be empty
|
|
|
|
# Leader related parameter errors
|
|
error.param.leader_address_empty=Leader address cannot be empty
|
|
error.param.leader_address_invalid=Leader address format is invalid
|
|
error.param.leader_id_invalid=Leader ID is invalid
|
|
error.param.leader_name_empty=Leader name cannot be empty
|
|
error.param.category_invalid=Category is invalid, only supports sports or crypto
|
|
|
|
# Template related parameter errors
|
|
error.param.template_name_empty=Template name cannot be empty
|
|
error.param.template_id_invalid=Template ID is invalid
|
|
error.param.copy_mode_invalid=copyMode must be RATIO or FIXED
|
|
error.param.copy_ratio_invalid=Copy ratio is invalid
|
|
error.param.fixed_amount_invalid=Fixed amount is invalid
|
|
|
|
# Copy trading related parameter errors
|
|
error.param.copy_trading_id_invalid=Copy trading ID is invalid
|
|
error.param.order_type_invalid=Order type is invalid
|
|
error.param.order_type_must_be_market_or_limit=Order type must be MARKET or LIMIT
|
|
error.param.quantity_empty=Quantity cannot be empty
|
|
error.param.price_empty=Limit order must provide price
|
|
error.param.side_empty=Side cannot be empty
|
|
error.param.market_id_empty=Market ID cannot be empty
|
|
error.param.order_type_empty=Order type cannot be empty
|
|
|
|
# Market related parameter errors
|
|
error.param.token_id_empty=tokenId cannot be empty
|
|
error.param.condition_id_empty=conditionId cannot be empty
|
|
error.param.redeem_positions_empty=Redeem positions list cannot be empty
|
|
error.param.index_sets_invalid=Index sets is invalid
|
|
|
|
# Statistics related parameter errors
|
|
error.param.order_type_invalid_for_tracking=Order type is invalid, must be: buy, sell, matched
|
|
|
|
# ==================== Authentication/Permission Errors (2001-2999) ====================
|
|
error.auth.error=Authentication Failed
|
|
error.auth.token_invalid=Authentication token is invalid
|
|
error.auth.token_expired=Authentication token has expired
|
|
error.auth.permission_denied=Permission denied
|
|
error.auth.api_key_invalid=API Key is invalid
|
|
error.auth.api_secret_invalid=API Secret is invalid
|
|
error.auth.api_passphrase_invalid=API Passphrase is invalid
|
|
error.auth.api_credentials_missing=API credentials not configured
|
|
error.auth.username_or_password_error=Username or password is incorrect
|
|
error.auth.reset_key_invalid=Reset key is invalid
|
|
error.auth.reset_password_rate_limit=Rate limit: Maximum 3 attempts per minute, please try again later
|
|
error.auth.user_not_found=User not found
|
|
error.auth.password_weak=Password length does not meet requirements, at least 6 characters
|
|
|
|
# ==================== Resource Not Found (3001-3999) ====================
|
|
error.not_found=Resource not found
|
|
error.account_not_found=Account not found
|
|
error.leader_not_found=Leader not found
|
|
error.template_not_found=Template not found
|
|
error.copy_trading_not_found=Copy trading not found
|
|
error.market_not_found=Market not found
|
|
error.order_not_found=Order not found
|
|
error.position_not_found=Position not found
|
|
|
|
# ==================== Business Logic Errors (4001-4999) ====================
|
|
error.business.error=Business logic error
|
|
|
|
# Leader management
|
|
error.leader_already_exists=This Leader address already exists
|
|
error.leader_address_same_as_account=Leader address cannot be the same as your account address
|
|
error.leader_has_copy_tradings=This Leader still has copy trading relationships, please delete them first
|
|
|
|
# Template management
|
|
error.template_name_already_exists=Template name already exists
|
|
error.template_has_copy_tradings=This template is still being used by copy trading relationships, please delete them first
|
|
|
|
# Copy trading management
|
|
error.copy_trading_already_exists=This copy trading relationship already exists
|
|
error.copy_trading_disabled=Copy trading relationship is disabled
|
|
error.copy_trading_enabled=Copy trading relationship is enabled
|
|
error.no_enabled_copy_tradings=No enabled copy trading relationships
|
|
|
|
# Order related
|
|
error.order_create_failed=Failed to create order
|
|
error.order_cancel_failed=Failed to cancel order
|
|
error.order_not_matched=Order not matched
|
|
error.order_already_filled=Order already filled
|
|
error.order_insufficient_balance=Insufficient balance
|
|
error.order_amount_too_small=Order amount is below minimum limit
|
|
error.order_amount_too_large=Order amount exceeds maximum limit
|
|
error.order_price_invalid=Order price is invalid
|
|
error.order_quantity_invalid=Order quantity is invalid
|
|
|
|
# Market related
|
|
error.market_price_fetch_failed=Failed to fetch market price
|
|
error.market_orderbook_empty=Orderbook is empty
|
|
error.market_token_id_invalid=Token ID is invalid
|
|
|
|
# Position related
|
|
error.position_redeem_failed=Failed to redeem position
|
|
error.position_not_redeemable=Position is not redeemable
|
|
error.position_insufficient=Insufficient position
|
|
error.position_already_redeemed=Position already redeemed
|
|
|
|
# Notification config related
|
|
error.notification_config_not_found=Notification config not found
|
|
error.notification_config_id_empty=Config ID cannot be empty
|
|
error.notification_config_type_empty=Notification type cannot be empty
|
|
error.notification_config_name_empty=Config name cannot be empty
|
|
error.notification_config_data_empty=Config data cannot be empty
|
|
error.notification_config_bot_token_empty=Bot Token cannot be empty
|
|
error.notification_config_create_failed=Failed to create config
|
|
error.notification_config_update_failed=Failed to update config
|
|
error.notification_config_delete_failed=Failed to delete config
|
|
error.notification_config_update_enabled_failed=Failed to update enabled status
|
|
error.notification_config_fetch_failed=Failed to fetch config
|
|
error.notification_test_failed=Failed to send test message, please check config
|
|
error.notification_get_chat_ids_failed=Failed to get Chat IDs
|
|
|
|
# Account related business errors
|
|
error.account_already_exists=Account already exists
|
|
error.account_is_default=Account is already the default account
|
|
error.account_has_active_orders=Account has active orders
|
|
error.account_is_last_one=Cannot delete the last account
|
|
error.account_api_key_create_failed=Failed to automatically get API Key
|
|
error.account_proxy_address_fetch_failed=Failed to fetch proxy address
|
|
error.account_balance_fetch_failed=Failed to query account balance
|
|
error.account_positions_fetch_failed=Failed to query positions list
|
|
|
|
# Statistics related
|
|
error.statistics_fetch_failed=Failed to fetch statistics
|
|
error.order_list_fetch_failed=Failed to query order list
|
|
|
|
# ==================== Server Internal Errors (5001-5999) ====================
|
|
error.server.error=Server internal error
|
|
error.server.database_error=Database error
|
|
error.server.network_error=Network error
|
|
error.server.timeout=Request timeout
|
|
error.server.external_api_error=External API call failed
|
|
error.server.rpc_error=RPC call failed
|
|
error.server.websocket_error=WebSocket connection error
|
|
error.server.encryption_error=Encryption/decryption error
|
|
error.server.signature_error=Signature error
|
|
|
|
# Account service errors
|
|
error.server.account_import_failed=Failed to import account
|
|
error.server.account_update_failed=Failed to update account
|
|
error.server.account_delete_failed=Failed to delete account
|
|
error.server.account_list_fetch_failed=Failed to query account list
|
|
error.server.account_detail_fetch_failed=Failed to query account detail
|
|
error.server.account_balance_fetch_failed=Failed to query account balance
|
|
error.server.account_default_set_failed=Failed to set default account
|
|
error.server.account_positions_fetch_failed=Failed to query positions list
|
|
error.server.account_order_create_failed=Failed to create sell order
|
|
error.server.account_redeem_positions_failed=Failed to redeem positions
|
|
|
|
# Leader service errors
|
|
error.server.leader_add_failed=Failed to add Leader
|
|
error.server.leader_update_failed=Failed to update Leader
|
|
error.server.leader_delete_failed=Failed to delete Leader
|
|
error.server.leader_list_fetch_failed=Failed to query Leader list
|
|
error.server.leader_detail_fetch_failed=Failed to query Leader detail
|
|
|
|
# Template service errors
|
|
error.server.template_create_failed=Failed to create template
|
|
error.server.template_update_failed=Failed to update template
|
|
error.server.template_delete_failed=Failed to delete template
|
|
error.server.template_copy_failed=Failed to copy template
|
|
error.server.template_list_fetch_failed=Failed to query template list
|
|
error.server.template_detail_fetch_failed=Failed to query template detail
|
|
|
|
# Copy trading service errors
|
|
error.server.copy_trading_create_failed=Failed to create copy trading
|
|
error.server.copy_trading_update_failed=Failed to update copy trading
|
|
error.server.copy_trading_delete_failed=Failed to delete copy trading
|
|
error.server.copy_trading_list_fetch_failed=Failed to query copy trading list
|
|
error.server.copy_trading_templates_fetch_failed=Failed to query templates bound to wallet
|
|
|
|
# Market service errors
|
|
error.server.market_price_fetch_failed=Failed to fetch market price
|
|
error.server.market_latest_price_fetch_failed=Failed to fetch latest price
|
|
|
|
# Statistics service errors
|
|
error.server.statistics_fetch_failed=Failed to fetch statistics
|
|
error.server.order_tracking_list_fetch_failed=Failed to query order list
|
|
|
|
# Blockchain service errors
|
|
error.server.blockchain_rpc_error=Blockchain RPC call failed
|
|
error.server.blockchain_proxy_address_fetch_failed=Failed to fetch proxy address
|
|
error.server.blockchain_balance_fetch_failed=Failed to query balance
|
|
error.server.blockchain_positions_fetch_failed=Failed to query positions
|
|
error.server.blockchain_redeem_failed=Failed to redeem position transaction
|
|
|
|
# WebSocket service errors
|
|
error.server.websocket_connection_failed=WebSocket connection failed
|
|
error.server.websocket_message_send_failed=WebSocket message send failed
|
|
error.server.websocket_subscribe_failed=WebSocket subscribe failed
|
|
|
|
# Order tracking service errors
|
|
error.server.order_tracking_process_failed=Failed to process order tracking
|
|
error.server.order_tracking_buy_failed=Failed to process buy order
|
|
error.server.order_tracking_sell_failed=Failed to process sell order
|
|
error.server.order_tracking_match_failed=Order matching failed
|
|
|
|
# Backtest service errors
|
|
error.backtest.task_not_found=Backtest task not found
|
|
error.backtest.leader_not_found=Leader not found
|
|
error.backtest.days_invalid=Backtest days must be between 1-15 days
|
|
error.backtest.initial_balance_invalid=Invalid initial balance
|
|
error.backtest.task_running=Backtest task is running, cannot delete
|
|
error.server.backtest_create_failed=Failed to create backtest task
|
|
error.server.backtest_update_failed=Failed to update backtest task
|
|
error.server.backtest_delete_failed=Failed to delete backtest task
|
|
error.server.backtest_list_fetch_failed=Failed to fetch backtest list
|
|
error.server.backtest_detail_fetch_failed=Failed to fetch backtest detail
|
|
error.server.backtest_trades_fetch_failed=Failed to fetch backtest trades
|
|
error.server.backtest_execute_failed=Failed to execute backtest
|
|
error.server.backtest_historical_data_fetch_failed=Failed to fetch historical data
|
|
error.server.backtest_stop_failed=Failed to stop backtest task
|
|
error.server.backtest_retry_failed=Failed to retry backtest task
|
|
# Backtest Management
|
|
backtest.title=Backtest Management
|
|
backtest.create_task=Create Backtest
|
|
backtest.task_name=Task Name
|
|
backtest.leader=Leader
|
|
backtest.initial_balance=Initial Balance
|
|
backtest.backtest_days=Backtest Days
|
|
backtest.profit_amount=Profit Amount
|
|
backtest.profit_rate=Profit Rate
|
|
backtest.backtest_days_range=Backtest Days Range (1-15 days)
|
|
backtest.total_trades=Total Trades
|
|
backtest.buy_trades=Buy Trades
|
|
backtest.sell_trades=Sell Trades
|
|
backtest.win_trades=Win Trades
|
|
backtest.loss_trades=Loss Trades
|
|
backtest.win_rate=Win Rate
|
|
backtest.max_profit=Max Profit
|
|
backtest.max_loss=Max Loss
|
|
backtest.max_drawdown=Max Drawdown
|
|
backtest.avg_holding_time=Avg Holding Time
|
|
|
|
# Backtest Status
|
|
backtest.status.pending=Pending
|
|
backtest.status.running=Running
|
|
backtest.status.completed=Completed
|
|
backtest.status.stopped=Stopped
|
|
backtest.status.failed=Failed
|
|
|
|
# Backtest Config
|
|
backtest.copy_mode.ratio=Ratio Mode
|
|
backtest.copy_mode.fixed=Fixed Amount
|
|
backtest.price_tolerance=Price Tolerance
|
|
backtest.delay_seconds=Delay Seconds
|
|
backtest.support_sell=Support Sell
|