Skip to main content

Betting trading framework

Project description

flūmine

Build Status Coverage Status PyPI version Downloads

Betting trading framework with a focus on:

  • simplicity
  • modular
  • pythonic
  • rock-solid
  • safe

Backtesting Analysis

Support for market, order and custom streaming data.

docs

join betcode slack group

Tested on Python 3.8, 3.9, 3.10, 3.11 and 3.12.

installation

$ pip install flumine

flumine requires Python 3.8+

setup

Get started...

import betfairlightweight
from flumine import Flumine, clients

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

framework = Flumine(
    client=client,
)

Example strategy:

from flumine import BaseStrategy
from flumine.order.trade import Trade
from flumine.order.order import LimitOrder, OrderStatus
from flumine.markets.market import Market
from betfairlightweight.filters import streaming_market_filter
from betfairlightweight.resources import MarketBook


class ExampleStrategy(BaseStrategy):
    def start(self) -> 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


strategy = ExampleStrategy(
    market_filter=streaming_market_filter(
        event_type_ids=["7"],
        country_codes=["GB"],
        market_types=["WIN"],
    )
)

framework.add_strategy(strategy)

Run 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
  • 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

Project details


Release history Release notifications | RSS feed

This version

2.6.7

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flumine-2.6.7.tar.gz (3.3 MB view details)

Uploaded Source

Built Distribution

flumine-2.6.7-py3-none-any.whl (79.2 kB view details)

Uploaded Python 3

File details

Details for the file flumine-2.6.7.tar.gz.

File metadata

  • Download URL: flumine-2.6.7.tar.gz
  • Upload date:
  • Size: 3.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.18

File hashes

Hashes for flumine-2.6.7.tar.gz
Algorithm Hash digest
SHA256 44447190f439952435d619edf984aaf72f4c76a24ec1e108c990507cf43e2c2f
MD5 38ba23fa06b5650b5ecaaea38f38332f
BLAKE2b-256 e0d3510d9e824b9052547d12372a6c48dd015242886d69edbe9dde193d258edf

See more details on using hashes here.

File details

Details for the file flumine-2.6.7-py3-none-any.whl.

File metadata

  • Download URL: flumine-2.6.7-py3-none-any.whl
  • Upload date:
  • Size: 79.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.8.18

File hashes

Hashes for flumine-2.6.7-py3-none-any.whl
Algorithm Hash digest
SHA256 bfb76b2fbd8dbc395481de1e819a8cab8cfaf4eb83ae5ee2f2016c5d5b2de458
MD5 d88c0df3f8df6a46a11d320fb81515c0
BLAKE2b-256 6fee0e59bef806ba938ee91c46f6e40826182254fd4fea4ded5aedcfa5b06be1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page