Skip to main content

EventEdge

CI License: MIT Python

EventEdge is a zero-dependency Python toolkit for event-contract and prediction-market research. It focuses on transparent math for binary market quotes, fee/slippage-aware expected value, Kelly sizing, watchlist reporting, resolution-rule checklists, and no-arbitrage checks for related events.

The first release is deliberately small but useful: deterministic calculations, a CLI, CSV scanning, Markdown reports, resolution-rule validation, examples, and tests. The goal is to become a practical research helper for maintainers, analysts, and students who need reproducible tooling around Polymarket-style and event-contract-style markets.

Features

  • Evaluate YES/NO positions with fair probability, fees, slippage, and position size.
  • Compute probability edge, expected value, expected ROI, break-even probability, win/loss payoff, expected profit, and capped Kelly fraction.
  • Scan and rank a CSV watchlist for fee-adjusted opportunities.
  • Generate Markdown reports for research notes or pull requests.
  • Validate resolution-rule metadata and flag ambiguous wording before a market enters a research watchlist.
  • Check YES+NO complement bundles and exhaustive outcome bundles for guaranteed-profit conditions.
  • Check conjunction, union, and implication bounds between related event markets.
  • Accept decimal, percent, and cent-style probabilities such as 0.42, 42%, and 42c.
  • Run fully offline with the Python standard library.

Install

From a local clone:

python -m pip install -e .

No third-party packages are required.

CLI Examples

Evaluate a YES position:

eventedge evaluate --market-id btc-100k --yes-price 0.42 --fair-yes 0.50 --size-usd 100 --fee-bps 25 --slippage-bps 10

Evaluate a NO position:

eventedge evaluate --market-id eth-etf --yes-price 0.64 --fair-yes 0.55 --side NO --size-usd 100

Scan a CSV watchlist:

eventedge scan-csv examples/markets.csv --min-edge 0.03 --fee-bps 25 --slippage-bps 10

Generate a Markdown watchlist report:

eventedge report-csv examples/markets.csv --min-edge 0.03 --output watchlist-report.md

Check a binary YES+NO complement bundle:

eventedge complement --yes-price 47c --no-price 50c

Check an exhaustive outcome bundle:

eventedge bundle "candidate-a=0.31,candidate-b=0.28,candidate-c=0.36"

Check conjunction bounds:

eventedge bounds --p-a 0.60 --p-b 0.55 --p-ab 0.40

Check union bounds:

eventedge union --p-a 60% --p-b 55% --p-a-or-b 70%

Generate a resolution-rule checklist:

eventedge resolution-check --market-id btc-100k --title "BTC above 100k" --rule-text "Resolves YES if Coinbase BTC-USD daily close is greater than 100000." --data-source "Coinbase BTC-USD daily close" --source-url "https://example.com/btc-usd" --metric daily_close --resolution-datetime 2026-12-31T23:59:00+00:00 --timezone UTC --comparator ">" --threshold 100000 --markdown

Python Example

from eventedge import FeeModel, read_quotes_csv, evaluate_quotes, rank_evaluations

quotes = read_quotes_csv("examples/markets.csv")
results = evaluate_quotes(quotes, fee_model=FeeModel(fee_bps=25, slippage_bps=10))
ranked = rank_evaluations(results, min_edge=0.03)

for result in ranked:
    print(result.market_id, result.expected_profit, result.kelly_fraction)

CSV Format

scan-csv expects:

market_id,yes_price,fair_yes,side,size_usd
btc-100k,0.42,0.50,YES,100
eth-etf,0.64,0.55,NO,100

side and size_usd are optional. Defaults are YES and 100. group and notes columns are accepted and reserved for future report enrichment.

Formula Notes

The core payoff model is documented in docs/FORMULAS.md. Short version: a contract bought at cost c pays 1 if the selected side is true and 0 otherwise, so expected value per share is p - c. The capped Kelly fraction used here is

f* = max(0, min(cap, (p - c) / (1 - c)))

where p is the researcher's fair probability and c is the fee-adjusted entry cost.

Resolution Rule Notes

Resolution risk is documented in docs/RESOLUTION_CHECKLIST.md. EventEdge checks that a market has an explicit data source, metric, threshold, timestamp, timezone, and rule text, then flags ambiguous words such as official, significant, around, and reported.

Project Scope

EventEdge is research infrastructure, not an execution bot. It does not place orders, hold API keys, or promise profitability. Its job is to make event-market math auditable and easy to test.

Near-term roadmap:

  • Add optional public-data connectors behind explicit extras.
  • Add notebook examples for prediction-market research.
  • Add richer arbitrage primitives for related event trees.
  • Add richer Markdown reports with grouped watchlists and assumptions.

Development

Run tests:

python -m unittest discover -s tests

Run the CLI from source without installing:

$env:PYTHONPATH = "src"
python -m eventedge.cli evaluate --market-id demo --yes-price 0.42 --fair-yes 0.50

Contributing

Issues and pull requests are welcome once the repository is public. Useful contributions include test cases for market math, new no-arbitrage checks, example datasets, and documentation improvements.

License

MIT.

Release files for eventedge 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eventedge 0.1.1
File Size Uploaded
eventedge-0.1.1.tar.gz 18.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for eventedge 0.1.1
File Interpreter ABI Platform
eventedge-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 33.4 kB

Release files / eventedge-0.1.1.tar.gz

Download URL eventedge-0.1.1.tar.gz
Size 18.3 kB
Tags Source
SHA-256 checksum
How to use checksums
834a05b8c7cfcdd960a6b542bc5b042b7d0f5e2534290cb463bac52ce45348af
BLAKE2b-256 checksum
How to use checksums
6c5d4da2892e312a099edce83fe44b8070fb9075738b859fb91a7d73c25bd03b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / eventedge-0.1.1-py3-none-any.whl

Download URL eventedge-0.1.1-py3-none-any.whl
Size 15.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dc2bce40345540adda4f00489474402f28b79d1eebcaf7c0fd6f9b7045bda59d
BLAKE2b-256 checksum
How to use checksums
be9cb635690693386243bb6a262f9b1cc817620c0ad2e6a36ecba62fc4f8c2d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page