Last active
September 27, 2022 12:40
-
-
Save jackc271/5f85902200445df745eccbab7240cc1f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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