Add example SQL script for computing mango PnL
This commit is contained in:
parent
d889b5ff5b
commit
456b19ea06
|
@ -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;
|
Loading…
Reference in New Issue