antes
This commit is contained in:
parent
10296679b5
commit
b2f50a438e
|
@ -10,5 +10,8 @@ export const calcStartPool = (initialProbInt: number, ante = 0) => {
|
||||||
const poolYes = p * ante
|
const poolYes = p * ante
|
||||||
const poolNo = (1 - p) * ante
|
const poolNo = (1 - p) * ante
|
||||||
|
|
||||||
return { sharesYes, sharesNo, poolYes, poolNo }
|
const startYes = Math.sqrt(p) * PHANTOM_ANTE
|
||||||
|
const startNo = Math.sqrt(1 - p) * PHANTOM_ANTE
|
||||||
|
|
||||||
|
return { sharesYes, sharesNo, poolYes, poolNo, startYes, startNo }
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,7 @@ export function calculateStandardPayout(
|
||||||
const { amount, outcome: betOutcome, shares } = bet
|
const { amount, outcome: betOutcome, shares } = bet
|
||||||
if (betOutcome !== outcome) return 0
|
if (betOutcome !== outcome) return 0
|
||||||
|
|
||||||
const { totalShares, totalBets } = contract
|
const { totalShares, totalBets, startPool } = contract
|
||||||
if (totalShares[outcome] === 0) return 0
|
if (totalShares[outcome] === 0) return 0
|
||||||
|
|
||||||
const truePool = contract.pool.YES + contract.pool.NO
|
const truePool = contract.pool.YES + contract.pool.NO
|
||||||
|
@ -112,7 +112,8 @@ export function calculateStandardPayout(
|
||||||
if (totalBets[outcome] >= truePool)
|
if (totalBets[outcome] >= truePool)
|
||||||
return (amount / totalBets[outcome]) * truePool
|
return (amount / totalBets[outcome]) * truePool
|
||||||
|
|
||||||
const total = totalShares[outcome] - totalBets[outcome]
|
const startShares = startPool.YES + startPool.NO
|
||||||
|
const total = totalShares[outcome] - startShares - totalBets[outcome]
|
||||||
const winningsPool = truePool - totalBets[outcome]
|
const winningsPool = truePool - totalBets[outcome]
|
||||||
|
|
||||||
return (1 - FEES) * (amount + ((shares - amount) / total) * winningsPool)
|
return (1 - FEES) * (amount + ((shares - amount) / total) * winningsPool)
|
||||||
|
@ -139,8 +140,12 @@ function calculateMktPayout(contract: Contract, bet: Bet) {
|
||||||
const winningsPool = truePool - weightedTotal
|
const winningsPool = truePool - weightedTotal
|
||||||
|
|
||||||
const weightedShareTotal =
|
const weightedShareTotal =
|
||||||
p * (contract.totalShares.YES - contract.totalBets.YES) +
|
p *
|
||||||
(1 - p) * (contract.totalShares.NO - contract.totalBets.NO)
|
(contract.totalShares.YES -
|
||||||
|
contract.startPool.YES -
|
||||||
|
contract.totalBets.YES) +
|
||||||
|
(1 - p) *
|
||||||
|
(contract.totalShares.NO - contract.startPool.NO - contract.totalBets.NO)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
(1 - FEES) *
|
(1 - FEES) *
|
||||||
|
|
|
@ -11,6 +11,7 @@ export type Contract = {
|
||||||
outcomeType: 'BINARY' // | 'MULTI' | 'interval' | 'date'
|
outcomeType: 'BINARY' // | 'MULTI' | 'interval' | 'date'
|
||||||
// outcomes: ['YES', 'NO']
|
// outcomes: ['YES', 'NO']
|
||||||
|
|
||||||
|
mechanism: 'dpm-2'
|
||||||
startPool: { YES: number; NO: number }
|
startPool: { YES: number; NO: number }
|
||||||
pool: { YES: number; NO: number }
|
pool: { YES: number; NO: number }
|
||||||
totalShares: { YES: number; NO: number }
|
totalShares: { YES: number; NO: number }
|
||||||
|
|
|
@ -12,10 +12,8 @@ export function getNewContract(
|
||||||
ante?: number,
|
ante?: number,
|
||||||
closeTime?: number
|
closeTime?: number
|
||||||
) {
|
) {
|
||||||
const { sharesYes, sharesNo, poolYes, poolNo } = calcStartPool(
|
const { sharesYes, sharesNo, poolYes, poolNo, startYes, startNo } =
|
||||||
initialProb,
|
calcStartPool(initialProb, ante)
|
||||||
ante
|
|
||||||
)
|
|
||||||
|
|
||||||
const contract: Contract = {
|
const contract: Contract = {
|
||||||
id,
|
id,
|
||||||
|
@ -29,7 +27,8 @@ export function getNewContract(
|
||||||
question: question.trim(),
|
question: question.trim(),
|
||||||
description: description.trim(),
|
description: description.trim(),
|
||||||
|
|
||||||
startPool: { YES: poolYes, NO: poolNo },
|
mechanism: 'dpm-2',
|
||||||
|
startPool: { YES: startYes, NO: startNo },
|
||||||
pool: { YES: poolYes, NO: poolNo },
|
pool: { YES: poolYes, NO: poolNo },
|
||||||
totalShares: { YES: sharesYes, NO: sharesNo },
|
totalShares: { YES: sharesYes, NO: sharesNo },
|
||||||
totalBets: { YES: poolYes, NO: poolNo },
|
totalBets: { YES: poolYes, NO: poolNo },
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { DatumValue } from '@nivo/core'
|
import { DatumValue } from '@nivo/core'
|
||||||
import { ResponsiveLine } from '@nivo/line'
|
import { ResponsiveLine } from '@nivo/line'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
import { getProbability } from '../../common/calculate'
|
||||||
import { useBets } from '../hooks/use-bets'
|
import { useBets } from '../hooks/use-bets'
|
||||||
import { useWindowSize } from '../hooks/use-window-size'
|
import { useWindowSize } from '../hooks/use-window-size'
|
||||||
import { Contract } from '../lib/firebase/contracts'
|
import { Contract } from '../lib/firebase/contracts'
|
||||||
|
@ -12,8 +13,7 @@ export function ContractProbGraph(props: { contract: Contract }) {
|
||||||
let bets = useBets(id)
|
let bets = useBets(id)
|
||||||
if (bets === 'loading') bets = []
|
if (bets === 'loading') bets = []
|
||||||
|
|
||||||
const startProb =
|
const startProb = getProbability(startPool)
|
||||||
startPool.YES ** 2 / (startPool.YES ** 2 + startPool.NO ** 2)
|
|
||||||
|
|
||||||
const times = [
|
const times = [
|
||||||
contract.createdTime,
|
contract.createdTime,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user