mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-17 17:34:39 +08:00
Merge branch 'dev' into ai-grid
This commit is contained in:
@@ -42,6 +42,12 @@
|
|||||||
- **Tinkle** - [@Web3Tinkle](https://x.com/Web3Tinkle)
|
- **Tinkle** - [@Web3Tinkle](https://x.com/Web3Tinkle)
|
||||||
- **Official Twitter** - [@nofx_official](https://x.com/nofx_official)
|
- **Official Twitter** - [@nofx_official](https://x.com/nofx_official)
|
||||||
|
|
||||||
|
### Official Links
|
||||||
|
|
||||||
|
- **Official Website**: [https://nofxai.com](https://nofxai.com)
|
||||||
|
- **Data Dashboard**: [https://nofxos.ai/dashboard](https://nofxos.ai/dashboard)
|
||||||
|
- **API Documentation**: [https://nofxos.ai/api-docs](https://nofxos.ai/api-docs)
|
||||||
|
|
||||||
> **Risk Warning**: This system is experimental. AI auto-trading carries significant risks. Strongly recommended for learning/research purposes or testing with small amounts only!
|
> **Risk Warning**: This system is experimental. AI auto-trading carries significant risks. Strongly recommended for learning/research purposes or testing with small amounts only!
|
||||||
|
|
||||||
## Developer Community
|
## Developer Community
|
||||||
|
|||||||
@@ -22,6 +22,12 @@
|
|||||||
- **Web ベース設定**: JSON 編集不要 - Web インターフェースですべて設定
|
- **Web ベース設定**: JSON 編集不要 - Web インターフェースですべて設定
|
||||||
- **リアルタイムダッシュボード**: ライブポジション、損益追跡、思考連鎖付き AI 決定ログ
|
- **リアルタイムダッシュボード**: ライブポジション、損益追跡、思考連鎖付き AI 決定ログ
|
||||||
|
|
||||||
|
### 公式リンク
|
||||||
|
|
||||||
|
- **公式サイト**: [https://nofxai.com](https://nofxai.com)
|
||||||
|
- **データダッシュボード**: [https://nofxos.ai/dashboard](https://nofxos.ai/dashboard)
|
||||||
|
- **API ドキュメント**: [https://nofxos.ai/api-docs](https://nofxos.ai/api-docs)
|
||||||
|
|
||||||
> **リスク警告**: このシステムは実験的です。AI 自動取引には重大なリスクがあります。学習/研究目的または少額でのテストのみを強くお勧めします!
|
> **リスク警告**: このシステムは実験的です。AI 自動取引には重大なリスクがあります。学習/研究目的または少額でのテストのみを強くお勧めします!
|
||||||
|
|
||||||
## 開発者コミュニティ
|
## 開発者コミュニティ
|
||||||
|
|||||||
@@ -22,6 +22,12 @@
|
|||||||
- **웹 기반 설정**: JSON 편집 불필요 - 웹 인터페이스에서 모든 설정 완료
|
- **웹 기반 설정**: JSON 편집 불필요 - 웹 인터페이스에서 모든 설정 완료
|
||||||
- **실시간 대시보드**: 실시간 포지션, 손익 추적, 사고의 연쇄가 포함된 AI 결정 로그
|
- **실시간 대시보드**: 실시간 포지션, 손익 추적, 사고의 연쇄가 포함된 AI 결정 로그
|
||||||
|
|
||||||
|
### 공식 링크
|
||||||
|
|
||||||
|
- **공식 웹사이트**: [https://nofxai.com](https://nofxai.com)
|
||||||
|
- **데이터 대시보드**: [https://nofxos.ai/dashboard](https://nofxos.ai/dashboard)
|
||||||
|
- **API 문서**: [https://nofxos.ai/api-docs](https://nofxos.ai/api-docs)
|
||||||
|
|
||||||
> **위험 경고**: 이 시스템은 실험적입니다. AI 자동 거래에는 상당한 위험이 있습니다. 학습/연구 목적 또는 소액 테스트만 강력히 권장합니다!
|
> **위험 경고**: 이 시스템은 실험적입니다. AI 자동 거래에는 상당한 위험이 있습니다. 학습/연구 목적 또는 소액 테스트만 강력히 권장합니다!
|
||||||
|
|
||||||
## 개발자 커뮤니티
|
## 개발자 커뮤니티
|
||||||
|
|||||||
@@ -22,6 +22,12 @@
|
|||||||
- **Веб-конфигурация**: Без редактирования JSON — настройка всего через веб-интерфейс
|
- **Веб-конфигурация**: Без редактирования JSON — настройка всего через веб-интерфейс
|
||||||
- **Панель реального времени**: Живые позиции, отслеживание P/L, логи решений AI с цепочкой рассуждений
|
- **Панель реального времени**: Живые позиции, отслеживание P/L, логи решений AI с цепочкой рассуждений
|
||||||
|
|
||||||
|
### Официальные ссылки
|
||||||
|
|
||||||
|
- **Официальный сайт**: [https://nofxai.com](https://nofxai.com)
|
||||||
|
- **Панель данных**: [https://nofxos.ai/dashboard](https://nofxos.ai/dashboard)
|
||||||
|
- **Документация API**: [https://nofxos.ai/api-docs](https://nofxos.ai/api-docs)
|
||||||
|
|
||||||
> **Предупреждение о рисках**: Эта система экспериментальная. AI автоторговля несёт значительные риски. Настоятельно рекомендуется использовать только для обучения/исследований или тестирования с небольшими суммами!
|
> **Предупреждение о рисках**: Эта система экспериментальная. AI автоторговля несёт значительные риски. Настоятельно рекомендуется использовать только для обучения/исследований или тестирования с небольшими суммами!
|
||||||
|
|
||||||
## Сообщество разработчиков
|
## Сообщество разработчиков
|
||||||
|
|||||||
@@ -22,6 +22,12 @@
|
|||||||
- **Веб-конфігурація**: Без редагування JSON — налаштування всього через веб-інтерфейс
|
- **Веб-конфігурація**: Без редагування JSON — налаштування всього через веб-інтерфейс
|
||||||
- **Панель реального часу**: Живі позиції, відстеження P/L, логи рішень AI з ланцюжком міркувань
|
- **Панель реального часу**: Живі позиції, відстеження P/L, логи рішень AI з ланцюжком міркувань
|
||||||
|
|
||||||
|
### Офіційні посилання
|
||||||
|
|
||||||
|
- **Офіційний сайт**: [https://nofxai.com](https://nofxai.com)
|
||||||
|
- **Панель даних**: [https://nofxos.ai/dashboard](https://nofxos.ai/dashboard)
|
||||||
|
- **Документація API**: [https://nofxos.ai/api-docs](https://nofxos.ai/api-docs)
|
||||||
|
|
||||||
> **Попередження про ризики**: Ця система експериментальна. AI автоторгівля несе значні ризики. Наполегливо рекомендується використовувати лише для навчання/досліджень або тестування з невеликими сумами!
|
> **Попередження про ризики**: Ця система експериментальна. AI автоторгівля несе значні ризики. Наполегливо рекомендується використовувати лише для навчання/досліджень або тестування з невеликими сумами!
|
||||||
|
|
||||||
## Спільнота розробників
|
## Спільнота розробників
|
||||||
|
|||||||
@@ -22,6 +22,12 @@
|
|||||||
- **Cấu Hình Web**: Không cần chỉnh sửa JSON - cấu hình mọi thứ qua giao diện web
|
- **Cấu Hình Web**: Không cần chỉnh sửa JSON - cấu hình mọi thứ qua giao diện web
|
||||||
- **Dashboard Thời Gian Thực**: Vị thế trực tiếp, theo dõi P/L, nhật ký quyết định AI với chuỗi suy luận
|
- **Dashboard Thời Gian Thực**: Vị thế trực tiếp, theo dõi P/L, nhật ký quyết định AI với chuỗi suy luận
|
||||||
|
|
||||||
|
### Liên Kết Chính Thức
|
||||||
|
|
||||||
|
- **Website Chính Thức**: [https://nofxai.com](https://nofxai.com)
|
||||||
|
- **Bảng Điều Khiển Dữ Liệu**: [https://nofxos.ai/dashboard](https://nofxos.ai/dashboard)
|
||||||
|
- **Tài Liệu API**: [https://nofxos.ai/api-docs](https://nofxos.ai/api-docs)
|
||||||
|
|
||||||
> **Cảnh Báo Rủi Ro**: Hệ thống này mang tính thử nghiệm. Giao dịch tự động AI có rủi ro đáng kể. Chỉ nên sử dụng cho mục đích học tập/nghiên cứu hoặc kiểm tra với số tiền nhỏ!
|
> **Cảnh Báo Rủi Ro**: Hệ thống này mang tính thử nghiệm. Giao dịch tự động AI có rủi ro đáng kể. Chỉ nên sử dụng cho mục đích học tập/nghiên cứu hoặc kiểm tra với số tiền nhỏ!
|
||||||
|
|
||||||
## Cộng Đồng Nhà Phát Triển
|
## Cộng Đồng Nhà Phát Triển
|
||||||
|
|||||||
@@ -34,6 +34,12 @@
|
|||||||
- **Tinkle** - [@Web3Tinkle](https://x.com/Web3Tinkle)
|
- **Tinkle** - [@Web3Tinkle](https://x.com/Web3Tinkle)
|
||||||
- **官方 Twitter** - [@nofx_official](https://x.com/nofx_official)
|
- **官方 Twitter** - [@nofx_official](https://x.com/nofx_official)
|
||||||
|
|
||||||
|
### 官方链接
|
||||||
|
|
||||||
|
- **官网**: [https://nofxai.com](https://nofxai.com)
|
||||||
|
- **数据站点**: [https://nofxos.ai/dashboard](https://nofxos.ai/dashboard)
|
||||||
|
- **API 文档**: [https://nofxos.ai/api-docs](https://nofxos.ai/api-docs)
|
||||||
|
|
||||||
> **风险提示**: 本系统为实验性质。AI 自动交易存在重大风险。强烈建议仅用于学习/研究目的或小额测试!
|
> **风险提示**: 本系统为实验性质。AI 自动交易存在重大风险。强烈建议仅用于学习/研究目的或小额测试!
|
||||||
|
|
||||||
## 开发者社区
|
## 开发者社区
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import { FAQPage } from './pages/FAQPage'
|
|||||||
import { StrategyStudioPage } from './pages/StrategyStudioPage'
|
import { StrategyStudioPage } from './pages/StrategyStudioPage'
|
||||||
import { DebateArenaPage } from './pages/DebateArenaPage'
|
import { DebateArenaPage } from './pages/DebateArenaPage'
|
||||||
import { StrategyMarketPage } from './pages/StrategyMarketPage'
|
import { StrategyMarketPage } from './pages/StrategyMarketPage'
|
||||||
|
import { DataPage } from './pages/DataPage'
|
||||||
import { LoginRequiredOverlay } from './components/LoginRequiredOverlay'
|
import { LoginRequiredOverlay } from './components/LoginRequiredOverlay'
|
||||||
import HeaderBar from './components/HeaderBar'
|
import HeaderBar from './components/HeaderBar'
|
||||||
import { LanguageProvider, useLanguage } from './contexts/LanguageContext'
|
import { LanguageProvider, useLanguage } from './contexts/LanguageContext'
|
||||||
@@ -41,6 +42,7 @@ type Page =
|
|||||||
| 'backtest'
|
| 'backtest'
|
||||||
| 'strategy'
|
| 'strategy'
|
||||||
| 'strategy-market'
|
| 'strategy-market'
|
||||||
|
| 'data'
|
||||||
| 'debate'
|
| 'debate'
|
||||||
| 'faq'
|
| 'faq'
|
||||||
| 'login'
|
| 'login'
|
||||||
@@ -68,6 +70,7 @@ function App() {
|
|||||||
if (path === '/backtest' || hash === 'backtest') return 'backtest'
|
if (path === '/backtest' || hash === 'backtest') return 'backtest'
|
||||||
if (path === '/strategy' || hash === 'strategy') return 'strategy'
|
if (path === '/strategy' || hash === 'strategy') return 'strategy'
|
||||||
if (path === '/strategy-market' || hash === 'strategy-market') return 'strategy-market'
|
if (path === '/strategy-market' || hash === 'strategy-market') return 'strategy-market'
|
||||||
|
if (path === '/data' || hash === 'data') return 'data'
|
||||||
if (path === '/debate' || hash === 'debate') return 'debate'
|
if (path === '/debate' || hash === 'debate') return 'debate'
|
||||||
if (path === '/dashboard' || hash === 'trader' || hash === 'details')
|
if (path === '/dashboard' || hash === 'trader' || hash === 'details')
|
||||||
return 'trader'
|
return 'trader'
|
||||||
@@ -88,6 +91,7 @@ function App() {
|
|||||||
const pathMap: Record<Page, string> = {
|
const pathMap: Record<Page, string> = {
|
||||||
'competition': '/competition',
|
'competition': '/competition',
|
||||||
'strategy-market': '/strategy-market',
|
'strategy-market': '/strategy-market',
|
||||||
|
'data': '/data',
|
||||||
'traders': '/traders',
|
'traders': '/traders',
|
||||||
'trader': '/dashboard',
|
'trader': '/dashboard',
|
||||||
'backtest': '/backtest',
|
'backtest': '/backtest',
|
||||||
@@ -152,6 +156,8 @@ function App() {
|
|||||||
setCurrentPage('strategy')
|
setCurrentPage('strategy')
|
||||||
} else if (path === '/strategy-market' || hash === 'strategy-market') {
|
} else if (path === '/strategy-market' || hash === 'strategy-market') {
|
||||||
setCurrentPage('strategy-market')
|
setCurrentPage('strategy-market')
|
||||||
|
} else if (path === '/data' || hash === 'data') {
|
||||||
|
setCurrentPage('data')
|
||||||
} else if (path === '/debate' || hash === 'debate') {
|
} else if (path === '/debate' || hash === 'debate') {
|
||||||
setCurrentPage('debate')
|
setCurrentPage('debate')
|
||||||
} else if (
|
} else if (
|
||||||
@@ -370,6 +376,51 @@ function App() {
|
|||||||
if (route === '/reset-password') {
|
if (route === '/reset-password') {
|
||||||
return <ResetPasswordPage />
|
return <ResetPasswordPage />
|
||||||
}
|
}
|
||||||
|
// Data page - publicly accessible with embedded dashboard
|
||||||
|
if (route === '/data') {
|
||||||
|
const dataPageNavigate = (page: Page) => {
|
||||||
|
const pathMap: Record<string, string> = {
|
||||||
|
'data': '/data',
|
||||||
|
'competition': '/competition',
|
||||||
|
'strategy-market': '/strategy-market',
|
||||||
|
'traders': '/traders',
|
||||||
|
'trader': '/dashboard',
|
||||||
|
'backtest': '/backtest',
|
||||||
|
'strategy': '/strategy',
|
||||||
|
'debate': '/debate',
|
||||||
|
'faq': '/faq',
|
||||||
|
}
|
||||||
|
const path = pathMap[page]
|
||||||
|
if (path) {
|
||||||
|
window.location.href = path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="min-h-screen"
|
||||||
|
style={{ background: '#0B0E11', color: '#EAECEF' }}
|
||||||
|
>
|
||||||
|
<HeaderBar
|
||||||
|
isLoggedIn={!!user}
|
||||||
|
currentPage="data"
|
||||||
|
language={language}
|
||||||
|
onLanguageChange={setLanguage}
|
||||||
|
user={user}
|
||||||
|
onLogout={logout}
|
||||||
|
onLoginRequired={handleLoginRequired}
|
||||||
|
onPageChange={dataPageNavigate}
|
||||||
|
/>
|
||||||
|
<main className="pt-16">
|
||||||
|
<DataPage />
|
||||||
|
</main>
|
||||||
|
<LoginRequiredOverlay
|
||||||
|
isOpen={loginOverlayOpen}
|
||||||
|
onClose={() => setLoginOverlayOpen(false)}
|
||||||
|
featureName={loginOverlayFeature}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
// Show landing page for root route
|
// Show landing page for root route
|
||||||
if (route === '/' || route === '') {
|
if (route === '/' || route === '') {
|
||||||
return <LandingPage />
|
return <LandingPage />
|
||||||
@@ -408,6 +459,8 @@ function App() {
|
|||||||
>
|
>
|
||||||
{currentPage === 'competition' ? (
|
{currentPage === 'competition' ? (
|
||||||
<CompetitionPage />
|
<CompetitionPage />
|
||||||
|
) : currentPage === 'data' ? (
|
||||||
|
<DataPage />
|
||||||
) : currentPage === 'strategy-market' ? (
|
) : currentPage === 'strategy-market' ? (
|
||||||
<StrategyMarketPage />
|
<StrategyMarketPage />
|
||||||
) : currentPage === 'traders' ? (
|
) : currentPage === 'traders' ? (
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ type Page =
|
|||||||
| 'backtest'
|
| 'backtest'
|
||||||
| 'strategy'
|
| 'strategy'
|
||||||
| 'strategy-market'
|
| 'strategy-market'
|
||||||
|
| 'data'
|
||||||
| 'debate'
|
| 'debate'
|
||||||
| 'faq'
|
| 'faq'
|
||||||
| 'login'
|
| 'login'
|
||||||
@@ -98,6 +99,7 @@ export default function HeaderBar({
|
|||||||
{(() => {
|
{(() => {
|
||||||
// Define all navigation tabs
|
// Define all navigation tabs
|
||||||
const navTabs: { page: Page; path: string; label: string; requiresAuth: boolean }[] = [
|
const navTabs: { page: Page; path: string; label: string; requiresAuth: boolean }[] = [
|
||||||
|
{ page: 'data', path: '/data', label: language === 'zh' ? '数据' : 'Data', requiresAuth: false },
|
||||||
{ page: 'strategy-market', path: '/strategy-market', label: language === 'zh' ? '策略市场' : 'Market', requiresAuth: true },
|
{ page: 'strategy-market', path: '/strategy-market', label: language === 'zh' ? '策略市场' : 'Market', requiresAuth: true },
|
||||||
{ page: 'traders', path: '/traders', label: t('configNav', language), requiresAuth: true },
|
{ page: 'traders', path: '/traders', label: t('configNav', language), requiresAuth: true },
|
||||||
{ page: 'trader', path: '/dashboard', label: t('dashboardNav', language), requiresAuth: true },
|
{ page: 'trader', path: '/dashboard', label: t('dashboardNav', language), requiresAuth: true },
|
||||||
@@ -327,6 +329,7 @@ export default function HeaderBar({
|
|||||||
<div className="flex flex-col gap-6 mb-12">
|
<div className="flex flex-col gap-6 mb-12">
|
||||||
{(() => {
|
{(() => {
|
||||||
const navTabs: { page: Page; path: string; label: string; requiresAuth: boolean }[] = [
|
const navTabs: { page: Page; path: string; label: string; requiresAuth: boolean }[] = [
|
||||||
|
{ page: 'data', path: '/data', label: language === 'zh' ? '数据' : 'Data', requiresAuth: false },
|
||||||
{ page: 'strategy-market', path: '/strategy-market', label: language === 'zh' ? '策略市场' : 'Market', requiresAuth: true },
|
{ page: 'strategy-market', path: '/strategy-market', label: language === 'zh' ? '策略市场' : 'Market', requiresAuth: true },
|
||||||
{ page: 'traders', path: '/traders', label: t('configNav', language), requiresAuth: true },
|
{ page: 'traders', path: '/traders', label: t('configNav', language), requiresAuth: true },
|
||||||
{ page: 'trader', path: '/dashboard', label: t('dashboardNav', language), requiresAuth: true },
|
{ page: 'trader', path: '/dashboard', label: t('dashboardNav', language), requiresAuth: true },
|
||||||
|
|||||||
16
web/src/pages/DataPage.tsx
Normal file
16
web/src/pages/DataPage.tsx
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { useLanguage } from '../contexts/LanguageContext'
|
||||||
|
|
||||||
|
export function DataPage() {
|
||||||
|
const { language } = useLanguage()
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="w-full h-[calc(100vh-64px)]">
|
||||||
|
<iframe
|
||||||
|
src="https://nofxos.ai/dashboard"
|
||||||
|
title={language === 'zh' ? '数据中心' : 'Data Center'}
|
||||||
|
className="w-full h-full border-0"
|
||||||
|
allow="fullscreen"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -36,6 +36,7 @@ export function LandingPage() {
|
|||||||
onLoginRequired={handleLoginRequired}
|
onLoginRequired={handleLoginRequired}
|
||||||
onPageChange={(page) => {
|
onPageChange={(page) => {
|
||||||
const pathMap: Record<string, string> = {
|
const pathMap: Record<string, string> = {
|
||||||
|
'data': '/data',
|
||||||
'competition': '/competition',
|
'competition': '/competition',
|
||||||
'strategy-market': '/strategy-market',
|
'strategy-market': '/strategy-market',
|
||||||
'traders': '/traders',
|
'traders': '/traders',
|
||||||
|
|||||||
Reference in New Issue
Block a user