HEX
Server: Apache/2.4.18 (Ubuntu)
System: Linux ubuntu 7.0.5-x86_64-linode173 #1 SMP PREEMPT_DYNAMIC Fri May 8 10:12:05 EDT 2026 x86_64
User: root (0)
PHP: 7.2.28-1+ubuntu16.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //opt/trading-bot/check_remote_pnl.py
import os
import pymysql
from dotenv import load_dotenv

load_dotenv("/opt/trading-bot/.env")

def audit_pnl():
    try:
        conn = pymysql.connect(
            host=os.getenv('MYSQL_HOST'),
            user=os.getenv('MYSQL_USER'),
            password=os.getenv('MYSQL_PASSWORD'),
            database=os.getenv('MYSQL_DATABASE'),
            port=int(os.getenv('MYSQL_PORT', 3306))
        )
        with conn.cursor() as cur:
            print("=== LATEST 15 PORTFOLIO SNAPSHOTS (GLOBAL) ===")
            cur.execute("SELECT strategy_name, equity, cash, exposure, ts FROM portfolio_state ORDER BY ts DESC LIMIT 15")
            for row in cur.fetchall():
                print(row)
            
            print("\n=== LATEST SNAPSHOT PER STRATEGY ===")
            strategies = [
                "LegacyBasis", "MultiAssetAlpha", "TrendFollower", "VolatilityHunter", 
                "GridBot", "MeanRevScalper", "MomentumBreakout",
                "EquityMomentum", "EquityMeanReversion", "EquityBollingerBreakout",
                "EquityTrendPullback", "EquityATRBreakout", "EquityPairsTrading", "EquityTripleThreat"
            ]
            for s in strategies:
                cur.execute("SELECT strategy_name, equity, cash, ts FROM portfolio_state WHERE strategy_name=%s ORDER BY ts DESC LIMIT 1", (s,))
                r = cur.fetchone()
                if r:
                    print(f"{s}: ${r[1]:.2f} (at {r[3]})")
                else:
                    print(f"{s}: [NO DATA]")

    except Exception as e:
        print(f"Error: {e}")
    finally:
        conn.close()

if __name__ == "__main__":
    audit_pnl()