Trade Prediction Markets
client.prediction has the same market data, trading, account and stream routers as
client.spot. Each outcome of a prediction market is its own tradable token, such as
BTC_UP_DOWN_5M_1790237100_YUSDT.
Find Markets
from typed_aster import Aster
async with Aster.new(public=True) as client:
info = await client.prediction.market.exchange_info()
print(info['predictionEvents'][:3])
print([symbol['symbol'] for symbol in info['symbols'][:5]])Buy And Sell Outcomes
A market buy can be sized by the quote amount to spend:
from decimal import Decimal
from typed_aster import Aster
async with Aster.new() as client:
order = await client.prediction.trade.place_order(
{
'symbol': 'BTC_UP_DOWN_5M_1790237100_YUSDT',
'side': 'BUY',
'type': 'MARKET',
'quoteOrderQty': Decimal('10'),
}
)
print(order['status'])Query, cancel and list orders exactly as on spot: client.prediction.trade.order,
cancel_order, open_orders, cancel_all_open_orders.
Mint, Burn, Split And Merge
These convert between the quote asset and outcome tokens directly:
from decimal import Decimal
from typed_aster import Aster
async with Aster.new() as client:
symbol = 'BTC_UP_DOWN_5M_1790237100_YUSDT'
# quote asset -> equal amounts of YES and NO
await client.prediction.outcomes.mint(symbol=symbol, quantity=Decimal('5'))
# equal amounts of YES and NO -> quote asset
await client.prediction.outcomes.burn(symbol=symbol, quantity=Decimal('5'))For multi-outcome events, split(event=..., symbol=..., quantity=...) converts the quote
asset into one market's outcome tokens, and merge(event=..., quantity=...) redeems a full set.
Positions And Settlements
from typed_aster import Aster
async with Aster.new() as client:
positions = await client.prediction.positions.list()
closed = await client.prediction.positions.history()
settled = await client.prediction.positions.settlements()
print(positions, closed, settled)Prediction requests must reach Aster within 10 seconds of being signed, so keep your clock in sync.