Skip to content

Instantly share code, notes, and snippets.

@jackc271
Last active September 27, 2022 12:40
Show Gist options
  • Save jackc271/5f85902200445df745eccbab7240cc1f to your computer and use it in GitHub Desktop.
Save jackc271/5f85902200445df745eccbab7240cc1f to your computer and use it in GitHub Desktop.
# Compute average market probability over time.
#from pymanifold import ManifoldClient
import argparse
import requests
import json
from datetime import datetime
import time
def print_json(j):
print(json.dumps(j, indent=4))
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-d', '--day', type=int)
args = parser.parse_args()
slug = 'will-biden-be-president-on-915-reso'
#client = ManifoldClient()
#market = client.get_market_by_slug(slug)
#print(market.bets)
mkt = requests.get(url='https://manifold.markets/api/v0/slug/%s' % slug).json()
bets = mkt['bets']
if args.day is None:
window_start_time = mkt['createdTime']
window_end_time = mkt['closeTime']
else:
window_start_time = time.mktime(datetime(2022, 9, args.day).timetuple())* 1000 # manifold timestamps are unix timestamps in ms
window_end_time = time.mktime(datetime(2022, 9, args.day+1).timetuple()) * 1000
for bet in bets:
t = bet['createdTime']
#print(datetime.utcfromtimestamp(int(t / 1000)).strftime('%Y-%m-%d %H:%M:%S'), t < window_start_time, t > window_end_time)
print('Total bets:', len(bets))
bets = [bet for bet in bets if bet['createdTime'] > window_start_time and bet['createdTime'] < window_end_time]
print('Bets in window:', len(bets))
firstBet = bets[-1]
lastBet = bets[0]
dummyBetStart = {
'probAfter': firstBet['probBefore'],
'createdTime': window_start_time,
}
dummyBetEnd = {
'probBefore': lastBet['probAfter'],
'createdTime': window_end_time,
}
bets = [dummyBetEnd] + bets + [dummyBetStart]
duration = 0
avgProb = 0
mismatches = 0
maxError = 0
print('Num bets:', len(bets))
for i in range(len(bets) - 1):
old = bets[i+1]
new = bets[i]
debug_text = json.dumps(old, indent=4) + "\n\n" + json.dumps(new, indent=4)
t0 = old['createdTime']
t1 = new['createdTime']
p = old['probAfter']
p2 = new['probBefore']
assert t0 <= t1, debug_text
avgProb += p * (t1 - t0)
duration += (t1 - t0)
if abs(p - p2) > 1e-6:
#print('Mismatch probs')
#print(debug_text)
mismatches += 1
maxError += abs(p - p2) * (t1 - t0)
avgProb /= duration
print('Avg prob:', avgProb)
if mismatches > 0:
print()
print('Num mismatches between prob of consecutive bets', mismatches)
print('Max error', maxError)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment