Files
Reynov Christian bf94b22825 🚀 REVOLUTIONARY FEATURE: Indonesian AI Trading Mentor System
 CORE AI MENTOR SYSTEM:
  - Complete Indonesian language AI trading mentor
  - Real-time trading psychology analysis with cultural context
  - Emotional intelligence for Indonesian trading behavior
  - Personal feedback with Islamic context ('Alhamdulillah profit!')
  - Jakarta timezone optimization and BI rate awareness

 DATABASE INTEGRATION:
  - New trading_sessions, ai_mentor_reports, daily_trading_data tables
  - Real-time capture of trading data for AI analysis
  - Historical performance tracking and emotional state logging
  - Seamless integration with existing bot architecture

 WEB INTERFACE:
  - Beautiful Indonesian AI mentor dashboard
  - Interactive emotion selection with cultural sensitivity
  - Real-time feedback generation and instant AI consultation
  - Daily report generation with comprehensive analysis
  - Quick feedback modal for emotional check-ins

 TRADING BOT INTEGRATION:
  - Automatic trade logging for AI mentor analysis
  - Risk management scoring (1-10 scale)
  - Strategy performance correlation with emotional states
  - Stop loss and take profit usage tracking

 REVOLUTIONARY FEATURES:
  - First-ever Indonesian AI trading mentor in the world
  - Combines trading psychology with Islamic values
  - Market-specific guidance for Indonesian traders
  - Progressive learning path from beginner to expert
  - Cultural trading wisdom (Jakarta hours, Ramadan considerations)

IMPACT: This transforms QuantumBotX into the world's first culturally-aware
AI trading mentor specifically designed for Indonesian retail traders.

Indonesian beginners now have personal AI guidance in their native language
with full understanding of local market conditions and cultural context.
2025-08-26 09:02:03 +08:00

217 lines
7.4 KiB
Python

#!/usr/bin/env python3
"""
Debug script for backtesting history issues
This script will help identify problems with profit calculations and data display
"""
import sqlite3
import json
import sys
import os
# Add the project root to the path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
def check_database():
"""Check the database structure and data"""
try:
conn = sqlite3.connect('bots.db')
cursor = conn.cursor()
# Check if table exists
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='backtest_results'")
table_exists = cursor.fetchone()
if not table_exists:
print("❌ ERROR: backtest_results table does not exist!")
return False
print("✅ backtest_results table exists")
# Check table schema
cursor.execute("PRAGMA table_info(backtest_results)")
columns = cursor.fetchall()
print("\n📋 Database Schema:")
for col in columns:
print(f" - {col[1]} ({col[2]})")
# Check data count
cursor.execute("SELECT COUNT(*) FROM backtest_results")
count = cursor.fetchone()[0]
print(f"\n📊 Total records: {count}")
if count == 0:
print("❌ No backtest data found!")
return False
# Check recent records
cursor.execute("""
SELECT id, strategy_name, total_profit_usd, total_trades,
equity_curve, trade_log, timestamp
FROM backtest_results
ORDER BY timestamp DESC
LIMIT 3
""")
records = cursor.fetchall()
print("\n🔍 Sample Records:")
for i, record in enumerate(records, 1):
id_, strategy, profit, trades, equity, trade_log, timestamp = record
print(f"\n Record {i}:")
print(f" ID: {id_}")
print(f" Strategy: {strategy}")
print(f" Total Profit USD: {profit}")
print(f" Total Trades: {trades}")
print(f" Timestamp: {timestamp}")
# Check JSON fields
try:
equity_data = json.loads(equity) if equity else []
print(f" Equity Curve Length: {len(equity_data)}")
if equity_data:
print(f" Initial Capital: {equity_data[0]}")
print(f" Final Capital: {equity_data[-1]}")
print(f" Calculated Profit: {equity_data[-1] - equity_data[0]}")
except json.JSONDecodeError:
print(f" ❌ ERROR: Invalid equity_curve JSON")
try:
trade_data = json.loads(trade_log) if trade_log else []
print(f" Trade Log Length: {len(trade_data)}")
if trade_data:
total_trade_profit = sum(t.get('profit', 0) for t in trade_data)
print(f" Sum of Trade Profits: {total_trade_profit}")
except json.JSONDecodeError:
print(f" ❌ ERROR: Invalid trade_log JSON")
conn.close()
return True
except Exception as e:
print(f"❌ Database Error: {e}")
return False
def check_api_response():
"""Test the API response format"""
try:
from core.db.queries import get_all_backtest_history
print("\n🌐 Testing API Response:")
history = get_all_backtest_history()
if not history:
print("❌ No data returned from get_all_backtest_history()")
return False
print(f"✅ Returned {len(history)} records")
# Check first record structure
first_record = history[0]
print(f"\n📋 First Record Structure:")
for key, value in first_record.items():
value_type = type(value).__name__
if isinstance(value, str) and len(value) > 100:
value_preview = value[:100] + "..."
else:
value_preview = value
print(f" - {key}: {value_preview} ({value_type})")
return True
except Exception as e:
print(f"❌ API Error: {e}")
return False
def simulate_simple_backtest():
"""Run a simple backtest to verify the engine works"""
try:
import pandas as pd
import numpy as np
from core.backtesting.engine import run_backtest
print("\n🧪 Testing Backtest Engine:")
# Create simple test data
dates = pd.date_range('2023-01-01', periods=100, freq='H')
price = 1950 + np.cumsum(np.random.randn(100) * 0.5)
df = pd.DataFrame({
'time': dates,
'XAUUSD_open': price,
'XAUUSD_high': price + np.random.rand(100) * 2,
'XAUUSD_low': price - np.random.rand(100) * 2,
'XAUUSD_close': price,
'XAUUSD_volume': np.random.randint(1000, 5000, 100)
})
# Set proper column names for the engine
df = df.rename(columns={
'XAUUSD_open': 'open',
'XAUUSD_high': 'high',
'XAUUSD_low': 'low',
'XAUUSD_close': 'close',
'XAUUSD_volume': 'volume'
})
params = {
'lot_size': 2.0, # 2% risk
'sl_pips': 2.0, # 2x ATR for SL
'tp_pips': 4.0 # 4x ATR for TP
}
# Test with MA_CROSSOVER strategy
result = run_backtest('MA_CROSSOVER', params, df)
if 'error' in result:
print(f"❌ Backtest Error: {result['error']}")
return False
print("✅ Backtest completed successfully!")
print(f" Strategy: {result.get('strategy_name', 'Unknown')}")
print(f" Total Trades: {result.get('total_trades', 0)}")
print(f" Total Profit USD: {result.get('total_profit_usd', 0)}")
print(f" Final Capital: {result.get('final_capital', 0)}")
print(f" Win Rate: {result.get('win_rate_percent', 0)}%")
print(f" Equity Curve Length: {len(result.get('equity_curve', []))}")
print(f" Trades Length: {len(result.get('trades', []))}")
return True
except Exception as e:
print(f"❌ Backtest Engine Error: {e}")
import traceback
traceback.print_exc()
return False
def main():
"""Main diagnostic function"""
print("🔍 QuantumBotX Backtest History Diagnostic")
print("=" * 50)
# Check database
db_ok = check_database()
# Check API
api_ok = check_api_response()
# Test engine
engine_ok = simulate_simple_backtest()
print("\n" + "=" * 50)
print("📊 DIAGNOSTIC SUMMARY:")
print(f" Database: {'✅ OK' if db_ok else '❌ FAILED'}")
print(f" API: {'✅ OK' if api_ok else '❌ FAILED'}")
print(f" Engine: {'✅ OK' if engine_ok else '❌ FAILED'}")
if all([db_ok, api_ok, engine_ok]):
print("\n🎉 All systems appear to be working!")
print(" If you're still seeing issues in the web interface:")
print(" 1. Check browser console for JavaScript errors")
print(" 2. Verify Chart.js is loading properly")
print(" 3. Check network requests in browser dev tools")
else:
print("\n❌ Issues detected. Check the output above for details.")
if __name__ == "__main__":
main()