Skip to main content

flūmine

Build Status Coverage Status PyPI version Downloads

flumine is an open-source, event-based trading framework for sports betting, designed to simplify the development and execution of betting strategies on betting venues. flumine provides efficient handling of data streams, risk management, and execution capabilities.

docs

join betcode slack group (2.5k+ members!)

overview

  • Event-based Execution: Real-time execution of trading strategies based on incoming market events
  • Custom Strategy Implementation: Easily define and implement trading strategies
  • Risk Management: Integrated risk management tools to monitor and limit exposure
  • Modular Design: Easily extendable and customizable components
  • Simulation: Simulate strategies/execution using historical data
  • Paper Trading: Test strategies in a simulated environment before going live
  • Data: Support for market, order and custom streaming data
  • Venues: Multi venue / concurrent venue support

venues

  • Betfair
  • Betdaq
  • Betconnect (account/execution functionality)
  • Tote (in development)
  • Smarkets (roadmap)
  • Matchbook (roadmap)
  • Polymarket (roadmap)
  • Kalshi (roadmap)
  • BetDEX (roadmap)

Backtesting Analysis

Tested on Python 3.10, 3.11, 3.12, 3.13 and 3.14.

installation

$ pip install flumine

flumine requires Python 3.10+

setup

Get started...

import betfairlightweight
from flumine import Flumine, BaseStrategy, clients
from flumine.streams.betfairmarketstream import BetfairMarketStream
from betfairlightweight.filters import streaming_market_filter

# Define your strategy here
class ExampleStrategy(BaseStrategy):
    def check_market_book(self, market, market_book) -> bool:
        # process_market_book only executed if this returns True
        return True

    def process_market_book(self, market, market_book):
        # Your strategy logic
        pass

# Initialize your client
trading = betfairlightweight.APIClient("username")
client = clients.BetfairClient(trading)

# Initialize the framework
framework = Flumine(client)

# Add your strategy to the framework with a stream
framework.add_strategy(
    ExampleStrategy(
        stream=BetfairMarketStream(
            market_filter=streaming_market_filter(
                event_type_ids=["7"],
                country_codes=["GB"],
                market_types=["WIN"],
            ),
        )
    )
)

# Start the trading framework
framework.run()

Example strategy with logic and order execution:

import betfairlightweight
from flumine import Flumine, BaseStrategy, clients
from flumine.order.trade import Trade
from flumine.order.order import LimitOrder, OrderStatus
from flumine.markets.market import Market
from flumine.streams.betfairmarketstream import BetfairMarketStream
from betfairlightweight.filters import streaming_market_filter
from betfairlightweight.resources import MarketBook


class ExampleStrategy(BaseStrategy):
    def start(self, flumine) -> None:
        print("starting strategy 'ExampleStrategy'")

    def check_market_book(self, market: Market, market_book: MarketBook) -> bool:
        # process_market_book only executed if this returns True
        if market_book.status != "CLOSED":
            return True

    def process_market_book(self, market: Market, market_book: MarketBook) -> None:
        # process marketBook object
        for runner in market_book.runners:
            if runner.status == "ACTIVE" and runner.last_price_traded < 1.5:
                trade = Trade(
                    market_id=market_book.market_id,
                    selection_id=runner.selection_id,
                    handicap=runner.handicap,
                    strategy=self
                )
                order = trade.create_order(
                    side="LAY",
                    order_type=LimitOrder(price=1.01, size=2.00)
                )
                market.place_order(order)

    def process_orders(self, market: Market, orders: list) -> None:
        for order in orders:
            if order.status == OrderStatus.EXECUTABLE:
                if order.size_remaining == 2.00:
                    market.cancel_order(order, 0.02)  # reduce size to 1.98
                if order.order_type.persistence_type == "LAPSE":
                    market.update_order(order, "PERSIST")
                if order.size_remaining > 0:
                    market.replace_order(order, 1.02)  # move


# Initialize your client
trading = betfairlightweight.APIClient("username")
client = clients.BetfairClient(trading)

# Initialize the framework
framework = Flumine(client)

# Add your strategy to the framework with a stream
framework.add_strategy(
    ExampleStrategy(
        stream=BetfairMarketStream(
            market_filter=streaming_market_filter(
                event_type_ids=["7"],
                country_codes=["GB"],
                market_types=["WIN"],
            ),
        )
    )
)

# Start the trading framework
framework.run()

features

  • Streaming
  • Multiple strategies
  • Multiple clients
  • Order execution
  • Paper trading
  • Simulation
  • Event simulation (multi market)
  • Middleware and background workers to enable Scores / RaceCard / InPlayService

dependencies

flumine relies on these libraries:

  • betfairlightweight - Betfair API support
  • betdaq-retail - BETDAQ API support
  • betconnect - BetConnect API support
  • tenacity - Used for connection retrying (streaming)
  • python-json-logger - JSON logging
  • requests - HTTP support
  • smart-open - Efficient streaming of very large files from/to storages such as S3, including (de)compression

Metadata

Release files for flumine 3.3.2

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

Source distribution (sdist)

Source distribution for flumine 3.3.2
File Size Uploaded Provenance Actions
flumine-3.3.2.tar.gz 3.3 MB Without provenance Details for flumine-3.3.2.tar.gz

Built distribution (wheel)

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

Total release size: 3.4 MB

Release files / flumine-3.3.2.tar.gz

Download URL flumine-3.3.2.tar.gz
Size 3.3 MB
Tags Source
SHA-256 checksum
How to use checksums
9fc64f726c70ab0cd79d22123070ee62e0b4a3d74b01b5c3067d4b3758cfb540
BLAKE2b-256 checksum
How to use checksums
0ad4d00a09048cc14dda53402a7ef2d46153d3c10b8a23890f27d865e99fdc41
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.22

Release files / flumine-3.3.2-py3-none-any.whl

Download URL flumine-3.3.2-py3-none-any.whl
Size 92.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
48a0501520a69ff388dc803fc4674b89bc7f89f2a3775205e649cd3bd7428e99
BLAKE2b-256 checksum
How to use checksums
6520f1fc6b0b809f7c26cb95eb3983e3b79f798628d21d0a92c2d5641048276a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.22

Security for flumine 3.3.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

3.3.2 This release

2 release files No provenance

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