Files
managing-apps/scripts/fix-backtest-finalpnl.sql

70 lines
1.8 KiB
PL/PgSQL

-- Fix Backtest FinalPnl where it incorrectly equals NetPnl
-- This script updates records where FinalPnl was incorrectly set to the same value as NetPnl
-- Correct formula: FinalPnl = NetPnl + Fees (since NetPnl = FinalPnl - Fees)
--
-- IMPORTANT: Run this script in a transaction and verify results before committing!
-- Usage: psql -h <host> -U <user> -d <database> -f fix-backtest-finalpnl.sql
BEGIN;
-- First, let's see how many records will be affected
SELECT
COUNT(*) as affected_records,
SUM("Fees") as total_fees_to_add,
AVG("Fees") as avg_fees
FROM "Backtests"
WHERE "FinalPnl" = "NetPnl"
AND "Fees" > 0;
-- Show sample of records that will be updated (for verification)
SELECT
"Id",
"Identifier",
"FinalPnl" as current_final_pnl,
"NetPnl",
"Fees",
("NetPnl" + "Fees") as new_final_pnl,
("NetPnl" + "Fees" - "FinalPnl") as change_amount
FROM "Backtests"
WHERE "FinalPnl" = "NetPnl"
AND "Fees" > 0
ORDER BY "Id"
LIMIT 10;
-- Update the records where FinalPnl equals NetPnl
-- Only update if Fees > 0 to avoid incorrect updates
UPDATE "Backtests"
SET
"FinalPnl" = "NetPnl" + "Fees",
"UpdatedAt" = NOW()
WHERE "FinalPnl" = "NetPnl"
AND "Fees" > 0;
-- Verify the update - should return 0
SELECT
COUNT(*) as remaining_incorrect_records
FROM "Backtests"
WHERE "FinalPnl" = "NetPnl"
AND "Fees" > 0;
-- Show a sample of updated records to verify
SELECT
"Id",
"Identifier",
"FinalPnl" as new_final_pnl,
"NetPnl",
"Fees",
("FinalPnl" - "NetPnl") as difference_should_equal_fees
FROM "Backtests"
WHERE "FinalPnl" != "NetPnl"
AND "Fees" > 0
ORDER BY "UpdatedAt" DESC
LIMIT 10;
-- If everything looks correct, uncomment the COMMIT line below
-- COMMIT;
-- If something is wrong, run ROLLBACK instead
-- ROLLBACK;