Adds investmentValue to group leaderboard calculation (#855)
* Adds investmentValue to group leaderboard calculation * Initial investment is no longer counted, only the profit * Simplify scoring calculation * Remove console.log * Group bets by user first Co-authored-by: James Grugett <jahooma@gmail.com>
This commit is contained in:
parent
cca870ced5
commit
26f83ac4f6
|
@ -1,6 +1,7 @@
|
||||||
import { groupBy, sumBy, mapValues, partition } from 'lodash'
|
import { groupBy, sumBy, mapValues, partition } from 'lodash'
|
||||||
|
|
||||||
import { Bet } from './bet'
|
import { Bet } from './bet'
|
||||||
|
import { getContractBetMetrics } from './calculate'
|
||||||
import { Contract } from './contract'
|
import { Contract } from './contract'
|
||||||
import { getPayouts } from './payouts'
|
import { getPayouts } from './payouts'
|
||||||
|
|
||||||
|
@ -30,46 +31,8 @@ export function scoreTraders(contracts: Contract[], bets: Bet[][]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function scoreUsersByContract(contract: Contract, bets: Bet[]) {
|
export function scoreUsersByContract(contract: Contract, bets: Bet[]) {
|
||||||
const { resolution } = contract
|
const betsByUser = groupBy(bets, bet => bet.userId)
|
||||||
const resolutionProb =
|
return mapValues(betsByUser, bets => getContractBetMetrics(contract, bets).profit)
|
||||||
contract.outcomeType == 'BINARY'
|
|
||||||
? contract.resolutionProbability
|
|
||||||
: undefined
|
|
||||||
|
|
||||||
const [closedBets, openBets] = partition(
|
|
||||||
bets,
|
|
||||||
(bet) => bet.isSold || bet.sale
|
|
||||||
)
|
|
||||||
const { payouts: resolvePayouts } = getPayouts(
|
|
||||||
resolution as string,
|
|
||||||
contract,
|
|
||||||
openBets,
|
|
||||||
[],
|
|
||||||
{},
|
|
||||||
resolutionProb
|
|
||||||
)
|
|
||||||
|
|
||||||
const salePayouts = closedBets.map((bet) => {
|
|
||||||
const { userId, sale } = bet
|
|
||||||
return { userId, payout: sale ? sale.amount : 0 }
|
|
||||||
})
|
|
||||||
|
|
||||||
const investments = bets
|
|
||||||
.filter((bet) => !bet.sale)
|
|
||||||
.map((bet) => {
|
|
||||||
const { userId, amount, loanAmount } = bet
|
|
||||||
const payout = -amount - (loanAmount ?? 0)
|
|
||||||
return { userId, payout }
|
|
||||||
})
|
|
||||||
|
|
||||||
const netPayouts = [...resolvePayouts, ...salePayouts, ...investments]
|
|
||||||
|
|
||||||
const userScore = mapValues(
|
|
||||||
groupBy(netPayouts, (payout) => payout.userId),
|
|
||||||
(payouts) => sumBy(payouts, ({ payout }) => payout)
|
|
||||||
)
|
|
||||||
|
|
||||||
return userScore
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function addUserScores(
|
export function addUserScores(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user