feat: Smart AI Trading Bot for XAUUSD with ML and SMC

- XGBoost ML model with 37 features for market direction prediction
- Smart Money Concepts (SMC): Order Blocks, FVG, BOS, CHoCH
- HMM market regime detection (trending/ranging/volatile)
- ATR-based stop loss with 1.5 ATR minimum distance
- Broker-level SL protection with fallback
- Time-based exit (max 6 hours per trade)
- Session-aware trading optimized for London/NY overlap
- Auto-retraining based on market conditions
- Telegram notifications and web dashboard
- Backtest results: 63.9% win rate, 2.64 profit factor, 4.83 Sharpe

Backtest period: Jan 2025 - Feb 2026, 654 trades, $4,189 net P/L

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
GifariKemal
2026-02-06 09:01:35 +07:00
co-authored by Claude Opus 4.5
commit 7af9183af3
121 changed files with 43387 additions and 0 deletions
+159
View File
@@ -0,0 +1,159 @@
"use client";
import { useTradingData } from "@/hooks/use-trading-data";
import {
Header,
PriceCard,
AccountCard,
SessionCard,
RiskCard,
SignalCard,
RegimeCard,
PositionsCard,
LogCard,
PriceChart,
EquityChart,
} from "@/components/dashboard";
import { Skeleton } from "@/components/ui/skeleton";
function LoadingSkeleton() {
return (
<div className="grid grid-cols-2 gap-4 p-4">
{[...Array(8)].map((_, i) => (
<Skeleton key={i} className="h-[150px] rounded-xl" />
))}
</div>
);
}
function ErrorDisplay({ message }: { message: string }) {
return (
<div className="flex items-center justify-center h-[80vh]">
<div className="text-center">
<p className="text-destructive text-lg font-semibold">Connection Error</p>
<p className="text-muted-foreground">{message}</p>
<p className="text-sm text-muted-foreground mt-2">
Make sure the API server is running on port 8000
</p>
</div>
</div>
);
}
export default function Dashboard() {
const { data, loading, error, dataAge } = useTradingData();
// Format current time for header
const now = new Date();
const wibTime = now.toLocaleTimeString('en-US', {
timeZone: 'Asia/Jakarta',
hour12: false,
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
});
if (loading && !data) {
return (
<div className="min-h-screen bg-background">
<Header connected={false} lastUpdate={wibTime} dataAge={999} />
<LoadingSkeleton />
</div>
);
}
if (error && !data) {
return (
<div className="min-h-screen bg-background">
<Header connected={false} lastUpdate={wibTime} dataAge={999} />
<ErrorDisplay message={error} />
</div>
);
}
if (!data) return null;
return (
<div className="min-h-screen bg-background">
<Header
connected={data.connected}
lastUpdate={wibTime}
dataAge={dataAge}
/>
<main className="container py-4">
<div className="grid grid-cols-2 gap-4">
{/* Row 1: Price Chart (full width) */}
<PriceChart data={data.priceHistory} />
{/* Row 2: Price & Account */}
<PriceCard
price={data.price}
spread={data.spread}
priceChange={data.priceChange}
/>
<AccountCard
balance={data.balance}
equity={data.equity}
profit={data.profit}
/>
{/* Row 3: Session & Risk */}
<SessionCard
session={data.session}
isGoldenTime={data.isGoldenTime}
canTrade={data.canTrade}
/>
<RiskCard
dailyLoss={data.dailyLoss}
dailyProfit={data.dailyProfit}
consecutiveLosses={data.consecutiveLosses}
riskPercent={data.riskPercent}
/>
{/* Row 4: SMC & ML */}
<SignalCard
title="SMC SIGNAL"
icon="smc"
signal={data.smc.signal}
confidence={data.smc.confidence}
detail={data.smc.reason}
/>
<SignalCard
title="ML PREDICTION"
icon="ml"
signal={data.ml.signal}
confidence={data.ml.confidence}
buyProb={data.ml.buyProb}
sellProb={data.ml.sellProb}
/>
{/* Row 5: Regime & Positions */}
<RegimeCard
name={data.regime.name}
volatility={data.regime.volatility}
confidence={data.regime.confidence}
/>
<PositionsCard positions={data.positions} />
{/* Row 6: Equity Chart (full width) */}
<EquityChart
equityData={data.equityHistory}
balanceData={data.balanceHistory}
/>
{/* Row 7: Log (full width) */}
<LogCard logs={data.logs} />
</div>
</main>
{/* Footer Status */}
<footer className="fixed bottom-0 w-full border-t bg-background/95 backdrop-blur py-2">
<div className="container flex justify-between text-xs text-muted-foreground">
<span>Last update: {data.timestamp}</span>
<span>AI Trading Bot Monitor v1.0</span>
</div>
</footer>
</div>
);
}