Skip to content

Releases: tastyware/tastytrade

tastyware/tastytrade:v9.0

11 Oct 03:17
a3ac177
Compare
Choose a tag to compare

New major release! Warning: BREAKING CHANGES! See below.
This is a large release with many changes, so please report any issues you run across!

What's Changed

  • Add sync/async functionality for all requests by @Graeme22 in #168
    Simply add the a_ prefix to the sync method name and boom, async!
    Here's how it looks:

    acc = await Account.a_get_account(session, account_number)
  • Move from price effect to +/- for numbers by @Graeme22 in #169
    Previously, most number fields in the API were represented with two separate fields: one for the value, another for the sign (which in the SDK is called PriceEffect). This led to less readability and a lot of lines of code that looked like this:

    value *= -1 if price_effect == PriceEffect.DEBIT else 1

    However, as of this release, we can just use positive numbers for credits and negative ones for debits... Much easier! So this example from the old docs of building an order:

    order = NewOrder(
        time_in_force=OrderTimeInForce.DAY,
        order_type=OrderType.LIMIT,
        legs=[leg],  # you can have multiple legs in an order
        price=Decimal('10'),  # limit price, $10/share for a total value of $50
        price_effect=PriceEffect.DEBIT
    )

    Became this:

    order = NewOrder(
        time_in_force=OrderTimeInForce.DAY,
        order_type=OrderType.LIMIT,
        legs=[leg],  # you can have multiple legs in an order
        price=Decimal('-10')  # limit price, $10/share debit for a total value of $50
    )

    Under the hood interactions with the API remain unchanged, but for SDK users this should make life much more pleasant.

  • better typing for streamer, orders by @Graeme22 in #170
    Certain functions for the streamer ended up not working very cleanly with type checkers. So, with a few typing tricks, the streamer functions have changed their parameters, but in exchange we get type hints and a smoother workflow. Here's how the streamer worked before:

    from tastytrade.dxfeed import EventType
    async with DXLinkStreamer(session) as streamer:
        await streamer.subscribe(EventType.QUOTE, ['SPY'])
        quote = await streamer.get_event(EventType.QUOTE)

    And here's how it looks now:

    from tastytrade.dxfeed import Quote
    async with DXLinkStreamer(session) as streamer:
        await streamer.subscribe(Quote, ['SPY'])
        quote = await streamer.get_event(Quote)

    This makes life a lot easier for anyone doing type checking or even using an IDE, so pretty much everyone! The type you pass in will not only control the type of event you receive, but also the inferred return type.

  • add order chains, add is_market_open_on util by @Graeme22 in #171
    This adds a new function to the Account class allowing for fetching order chains (groups of trades in the same symbol used to track open, rolls, and close). Previously these were only available through the AlertStreamer for existing postions, but now you can query over a time range for a given underlying:

    chains = account.get_order_chains(session, 'SPX', start_time, end_time)

    Also, adds a utility function to check if the market is open on a specific date (defaults to today).

  • test coverage is now better and added for all async tests as well. Using pytest-aio to easily run all tests in the same event loop.

  • update docs with new functionality

  • switch to pyright over mypy for type checking

  • switch to Python 3.8 for building

  • replace several deprecated functions from pydantic v1

  • use typing_extensions.Self for classmethods

  • add Customer and User dataclasses for data returned by Session

  • add tests for dxfeed module

  • unclutter tastytrade package-level exports, which are now restricted to just Account, AlertStreamer, DXLinkStreamer, Session, and Watchlist

  • no longer using Optional types for some common, important fields, such as PlacedOrder.id and Option.streamer_symbol.

  • add unsubscribe_all function to streamer to unsubscribe from all events of a certain type

  • return type of Account.place_order and Account.place_complex_order now return tastytrade.order.PlacedOrderResponse and tastytrade.order.PlacedComplexOrderResponse respectively, which are guaranteed to contain the order or complex_order properties.

Full Changelog: v8.5...v9.0

tastyware/tastytrade:v8.5

01 Oct 22:34
Compare
Choose a tag to compare

Re-release of v8.4 with packaging fixed. Features:

  • Adds backtesting features! Currently in beta, so please report any issues.
  • Switches to httpx over requests
  • Fixes #165, adding new parameters to Account.get_balance_snapshots

Full Changelog: v8.3...v8.5

tastyware/tastytrade:v8.3

10 Sep 20:05
Compare
Choose a tag to compare

Small bug fixes: #163 as well as internal bugs having to do with cryptocurrencies.

Full Changelog: v8.2...v8.3

tastyware/tastytrade:v8.2

30 Jul 17:16
90204f5
Compare
Choose a tag to compare

What's Changed

  • go back to requests to fix problems with httpx by @Graeme22 in #159

Full Changelog: v8.1...v8.2

tastyware/tastytrade:v8.1

29 Jul 20:17
0128eee
Compare
Choose a tag to compare

What's Changed

  • Prepare v8.1: use httpx Session, prepare for async version, combine Production and Certification sessions by @Graeme22 in #158

Full Changelog: v7.9...v8.1

tastyware/tastytrade:v7.9

16 Jul 16:24
Compare
Choose a tag to compare

Fix candle bug, typing changes for order_id fields

Full Changelog: v7.8...v7.9

tastyware/tastytrade:v7.8

08 Jul 17:00
Compare
Choose a tag to compare

What's Changed

  • add get complex orders, get live complex orders by @Graeme22 in #156

Full Changelog: v7.7...v7.8

tastyware/tastytrade:v7.7

14 Jun 18:32
e5906be
Compare
Choose a tag to compare

What's Changed

Full Changelog: v8.0...v7.7

tastyware/tastytrade:v7.6

10 Jun 22:28
Compare
Choose a tag to compare

Fix candle bug when unsubscribing from multiple symbols

Full Changelog: v7.5...v7.6

tastyware/tastytrade:v7.5

10 Jun 18:06
Compare
Choose a tag to compare
  • Add py.typed
  • Change AccountStreamer to make it more like DXLinkStreamer, rename to AlertStreamer

Full Changelog: v7.4...v7.5