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 and 3.11.

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

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.5.9.tar.gz (113.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flumine-2.5.9-py3-none-any.whl (142.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: flumine-2.5.9.tar.gz
  • Upload date:
  • Size: 113.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.8.18

File hashes

Hashes for flumine-2.5.9.tar.gz
Algorithm Hash digest
SHA256 2ba7f2f6020863fa0222f28324db63e049ac03aefc6bb38a95d4236a66c3ff33
MD5 c54ce997d3919146ac93c3bf23a48021
BLAKE2b-256 141763b3d920a6000c7567cdfc875abc2cbbd37d47a8a9bf55e1fd5479680d22

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for flumine-2.5.9-py3-none-any.whl
Algorithm Hash digest
SHA256 15434ac2f47fdc4af905cb7a472219d707544f01a8f2f1339c594ece0c7ad057
MD5 22be4fbbe2859f033014cd6e4eb497b0
BLAKE2b-256 a6fdccd0230d15b252318406a0f1811a62465824e5f3a8d6da12e160525c9beb

See more details on using hashes here.

Supported by

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