feat: add debate arena and fix multiple issues

- Add AI debate arena for multi-AI trading decisions
- Fix debate consensus calculation and display
- Fix vote parsing to support both <decision> and <final_vote> tags
- Fix JSON field name compatibility (stop_loss/stop_loss_pct)
- Fix symbol validation to prevent AI hallucinating invalid symbols
- Fix Bybit position side display (was uppercase, now lowercase for consistency)
- Fix NOFX logo navigation to home page
- Add detailed logging for debugging trade execution
This commit is contained in:
tinkle-community
2025-12-12 11:24:32 +08:00
parent e5703ffab6
commit f5ae22d85c
14 changed files with 4133 additions and 32 deletions

View File

@@ -22,6 +22,7 @@ export const translations = {
configNav: 'Config',
dashboardNav: 'Dashboard',
strategyNav: 'Strategy',
debateNav: 'Debate Arena',
faqNav: 'FAQ',
// Footer
@@ -1017,6 +1018,75 @@ export const translations = {
'Invalid private key format (should be 64 hex characters)',
privatekeyObfuscationFailed: 'Clipboard obfuscation failed',
},
// Debate Arena Page
debatePage: {
title: 'Market Debate Arena',
subtitle: 'Watch AI models debate market conditions and reach consensus',
newDebate: 'New Debate',
noDebates: 'No debates yet',
createFirst: 'Create your first debate to get started',
selectDebate: 'Select a debate to view details',
createDebate: 'Create Debate',
creating: 'Creating...',
debateName: 'Debate Name',
debateNamePlaceholder: 'e.g., BTC Bull or Bear?',
tradingPair: 'Trading Pair',
strategy: 'Strategy',
selectStrategy: 'Select a strategy',
maxRounds: 'Max Rounds',
autoExecute: 'Auto Execute',
autoExecuteHint: 'Automatically execute the consensus trade',
participants: 'Participants',
addParticipant: 'Add AI Participant',
noModels: 'No AI models available',
atLeast2: 'Add at least 2 participants',
personalities: {
bull: 'Aggressive Bull',
bear: 'Cautious Bear',
analyst: 'Data Analyst',
contrarian: 'Contrarian',
risk_manager: 'Risk Manager',
},
status: {
pending: 'Pending',
running: 'Running',
voting: 'Voting',
completed: 'Completed',
cancelled: 'Cancelled',
},
actions: {
start: 'Start Debate',
starting: 'Starting...',
cancel: 'Cancel',
delete: 'Delete',
execute: 'Execute Trade',
},
round: 'Round',
roundOf: 'Round {current} of {max}',
messages: 'Messages',
noMessages: 'No messages yet',
waitingStart: 'Waiting for debate to start...',
votes: 'Votes',
consensus: 'Consensus',
finalDecision: 'Final Decision',
confidence: 'Confidence',
votesCount: '{count} votes',
decision: {
open_long: 'Open Long',
open_short: 'Open Short',
close_long: 'Close Long',
close_short: 'Close Short',
hold: 'Hold',
wait: 'Wait',
},
messageTypes: {
analysis: 'Analysis',
rebuttal: 'Rebuttal',
vote: 'Vote',
summary: 'Summary',
},
},
},
zh: {
// Header
@@ -1039,6 +1109,7 @@ export const translations = {
configNav: '配置',
dashboardNav: '看板',
strategyNav: '策略',
debateNav: '行情辩论',
faqNav: '常见问题',
// Footer
@@ -1974,6 +2045,75 @@ export const translations = {
privatekeyInvalidFormat: '私钥格式无效应为64位十六进制字符',
privatekeyObfuscationFailed: '剪贴板混淆失败',
},
// Debate Arena Page
debatePage: {
title: '行情辩论大赛',
subtitle: '观看AI模型辩论市场行情并达成共识',
newDebate: '新建辩论',
noDebates: '暂无辩论',
createFirst: '创建您的第一场辩论开始',
selectDebate: '选择辩论查看详情',
createDebate: '创建辩论',
creating: '创建中...',
debateName: '辩论名称',
debateNamePlaceholder: '例如BTC是牛还是熊',
tradingPair: '交易对',
strategy: '策略',
selectStrategy: '选择策略',
maxRounds: '最大回合',
autoExecute: '自动执行',
autoExecuteHint: '自动执行共识交易',
participants: '参与者',
addParticipant: '添加AI参与者',
noModels: '暂无可用AI模型',
atLeast2: '至少添加2名参与者',
personalities: {
bull: '激进多头',
bear: '谨慎空头',
analyst: '数据分析师',
contrarian: '逆势者',
risk_manager: '风控经理',
},
status: {
pending: '待开始',
running: '进行中',
voting: '投票中',
completed: '已完成',
cancelled: '已取消',
},
actions: {
start: '开始辩论',
starting: '启动中...',
cancel: '取消',
delete: '删除',
execute: '执行交易',
},
round: '回合',
roundOf: '第 {current} / {max} 回合',
messages: '消息',
noMessages: '暂无消息',
waitingStart: '等待辩论开始...',
votes: '投票',
consensus: '共识',
finalDecision: '最终决定',
confidence: '信心度',
votesCount: '{count} 票',
decision: {
open_long: '开多',
open_short: '开空',
close_long: '平多',
close_short: '平空',
hold: '持有',
wait: '观望',
},
messageTypes: {
analysis: '分析',
rebuttal: '反驳',
vote: '投票',
summary: '总结',
},
},
},
}