
import pandas as pd
import argparse

def parse_tv_trades(filepath):
    try:
        df = pd.read_csv(filepath)
        df.columns = df.columns.str.strip()
        trades = {}
        for index, row in df.iterrows():
            trade_num = row['Trade #']
            if trade_num not in trades:
                trades[trade_num] = {}
            
            if 'entry' in row['Type'].lower():
                trades[trade_num]['entry_time'] = pd.to_datetime(row['Date and time'])
                trades[trade_num]['type'] = row['Type']
            elif 'exit' in row['Type'].lower():
                trades[trade_num]['exit_time'] = pd.to_datetime(row['Date and time'])
                trades[trade_num]['pnl_pct'] = row['Net P&L %']

        trade_list = []
        for trade_num, trade_data in trades.items():
            if 'entry_time' in trade_data and 'exit_time' in trade_data:
                trade_list.append(trade_data)

        return pd.DataFrame(trade_list)
    except Exception as e:
        print(f"Error loading TradingView trades: {e}")
        return None

def parse_py_trades(filepath):
    try:
        py_df_raw = pd.read_csv(filepath)
        py_df_raw['time'] = pd.to_datetime(py_df_raw['time'])
        
        trades = []
        in_position = False
        entry_time = None
        
        for index, row in py_df_raw.iterrows():
            if row['execute_entry'] and not in_position:
                in_position = True
                entry_time = row['time']
            elif row['execute_exit'] and in_position:
                in_position = False
                trades.append({'entry_time': entry_time, 'exit_time': row['time']})
        
        return pd.DataFrame(trades)
    except Exception as e:
        print(f"Error loading Python trades: {e}")
        return None

def main():
    parser = argparse.ArgumentParser(description="Compare two trade logs.")
    parser.add_argument("--tv_trades", type=str, default="results/2025.10.25_ActivationScores_COINBASE_BTCUSD_2026-03-09.xlsx - List of trades.csv", help="Path to TradingView trades CSV")
    parser.add_argument("--py_trades", type=str, default="results/python_trades.csv", help="Path to Python trades CSV")
    args = parser.parse_args()

    # Load TradingView trades
    tv_df = parse_tv_trades(args.tv_trades)
    if tv_df is None:
        return

    # Load Python trades
    py_df = parse_py_trades(args.py_trades)
    if py_df is None:
        return

    # Find trades in TV that are not in Python
    tv_only = tv_df[~tv_df['entry_time'].isin(py_df['entry_time'])]

    # Find trades in Python that are not in TV
    py_only = py_df[~py_df['entry_time'].isin(tv_df['entry_time'])]

    print("--- TradingView Only Trades ---")
    print(tv_only.to_string())

    print("\n--- Python Only Trades ---")
    print(py_only.to_string())

if __name__ == "__main__":
    main()


