solana-accountsdb-connector/connector-mango/scripts/pnl.sql

51 lines
1.4 KiB
SQL

with
inputs as (select
1 as market_index,
(select pubkey_id from pubkey
where pubkey = '98pjRuQjK3qA6gXts96PqZT4Ze5QmnCmt3QYjhbUSPue')
as group_pubkey_id
),
group_and_cache as (select
mango_group,
mango_cache
from
inputs,
mango_group_processed mango_group,
mango_cache_processed mango_cache
where
mango_group.pubkey_id = inputs.group_pubkey_id
and mango_cache.pubkey_id = mango_group.mango_cache_id
),
params as (select
(mango_group).perp_markets[market_index].base_lot_size
as contract_size,
(mango_cache).price_cache[market_index].price as price,
(mango_cache).perp_market_cache[market_index] as pmc
from
group_and_cache,
inputs
),
market_perp_accounts as (select
pubkey, (perp_accounts[market_index]).*
from
mango_account_processed,
inputs
where
mango_group_id = group_pubkey_id
)
select
pubkey,
base_position * contract_size * price +
quote_position -
case
when base_position > 0 then
((pmc).long_funding - long_settled_funding) * base_position
when base_position < 0 then
((pmc).short_funding - short_settled_funding) * base_position
else 0
end
as pnl
from
market_perp_accounts,
params
order by pnl desc;