From 456b19ea06c27a9565d93f933fe3baf90c42ac1a Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 9 Nov 2021 14:50:08 +0100 Subject: [PATCH] Add example SQL script for computing mango PnL --- connector-mango/scripts/pnl.sql | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 connector-mango/scripts/pnl.sql diff --git a/connector-mango/scripts/pnl.sql b/connector-mango/scripts/pnl.sql new file mode 100644 index 0000000..f4681e5 --- /dev/null +++ b/connector-mango/scripts/pnl.sql @@ -0,0 +1,48 @@ +with + data0 as (select + 1 as market_index, + (select pubkey_id from pubkey where pubkey = '98pjRuQjK3qA6gXts96PqZT4Ze5QmnCmt3QYjhbUSPue') as group_pubkey_id + ), + data1 as (select + *, + (select + g from mango_group_write g + where g.pubkey_id = group_pubkey_id + order by g.slot desc limit 1) as mg + from data0 + ), + data2 as (select + *, + (select + c from mango_cache_write c + where (data1.mg).mango_cache_id = c.pubkey_id + order by c.slot desc limit 1) as mc + from data1 + ), + data3 as (select + *, + (data2.mg).perp_markets[market_index].base_lot_size as contract_size, + (data2.mc).price_cache[market_index].price as price, + (data2.mc).perp_market_cache[market_index] as pmc + from data2 + ), + perp_accounts as (select distinct on(pubkey_id) + pubkey, (perp_accounts[market_index]).* + from mango_account_processed, data0 + where mango_group_id = group_pubkey_id + ) +select + pubkey, + base_position * contract_size * price + + quote_position - CASE + WHEN base_position > 0 THEN + ((data3.pmc).long_funding - long_settled_funding) * base_position + WHEN base_position < 0 THEN + ((data3.pmc).short_funding - short_settled_funding) * base_position + ELSE 0 + END + as pnl +from + perp_accounts +cross join data3 +order by pnl desc;