Add example SQL script for computing mango PnL

This commit is contained in:
Christian Kamm 2021-11-09 14:50:08 +01:00
parent d889b5ff5b
commit 456b19ea06
1 changed files with 48 additions and 0 deletions

View File

@ -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;