NautilusTrader
ConceptsInstruments

Crypto Perpetual

CryptoPerpetual represents a crypto perpetual futures contract, also known as a perpetual swap. It has no expiry, tracks a crypto base asset, and settles in a crypto, stablecoin, or other venue-defined settlement currency.

Examples include ETHUSDT-PERP.BINANCE, XBTUSD.BITMEX, and BTC-USD-SWAP.OKX.

Fields

<Tabs items={["Rust", "Python"]}>

FieldTypeRequired/defaultNotes
instrument_idInstrumentIdRequiredStored as id in Rust.
raw_symbolSymbolRequiredNative venue symbol.
base_currencyCurrencyRequiredBase crypto asset.
quote_currencyCurrencyRequiredPrice quote currency.
settlement_currencyCurrencyRequiredCurrency used to settle PnL and fees.
is_inverseboolRequiredTrue when sizing/costing is inverse.
price_precisionu8RequiredDecimal places allowed for prices.
size_precisionu8RequiredDecimal places allowed for order sizes.
price_incrementPriceRequiredSmallest valid price step.
size_incrementQuantityRequiredSmallest valid size step.
ts_eventUnixNanosRequiredEvent timestamp in nanoseconds.
ts_initUnixNanosRequiredInitialization timestamp in nanoseconds.
multiplierQuantity1Contract multiplier.
lot_sizeQuantity1Rounded lot or board size.
max_quantityOption<Quantity>NoneMaximum order quantity.
min_quantityOption<Quantity>NoneMinimum order quantity.
max_notionalOption<Money>NoneMaximum order notional value.
min_notionalOption<Money>NoneMinimum order notional value.
max_priceOption<Price>NoneMaximum valid quote or order price.
min_priceOption<Price>NoneMinimum valid quote or order price.
margin_initOption<Decimal>0Initial margin rate.
margin_maintOption<Decimal>0Maintenance margin rate.
maker_feeOption<Decimal>0Maker fee rate. Negative values rebate.
taker_feeOption<Decimal>0Taker fee rate. Negative values rebate.
tick_schemeOption<Ustr>NoneRegistered variable tick scheme name.
infoOption<Params>NoneAdapter metadata.
FieldTypeRequired/defaultNotes
instrument_idInstrumentIdRequired
raw_symbolSymbolRequiredNative venue symbol.
base_currencyCurrencyRequiredBase crypto asset.
quote_currencyCurrencyRequiredPrice quote currency.
settlement_currencyCurrencyRequiredCurrency used to settle PnL and fees.
is_inverseboolRequiredTrue when sizing/costing is inverse.
price_precisionintRequiredDecimal places allowed for prices.
size_precisionintRequiredDecimal places allowed for order sizes.
price_incrementPriceRequiredSmallest valid price step.
size_incrementQuantityRequiredSmallest valid size step.
ts_eventintRequiredEvent timestamp in nanoseconds.
ts_initintRequiredInitialization timestamp in nanoseconds.
multiplierQuantity1Contract multiplier.
lot_sizeQuantity1Rounded lot or board size.
max_quantityQuantity | NoneNoneMaximum order quantity.
min_quantityQuantity | NoneNoneMinimum order quantity.
max_notionalMoney | NoneNoneMaximum order notional value.
min_notionalMoney | NoneNoneMinimum order notional value.
max_pricePrice | NoneNoneMaximum valid quote or order price.
min_pricePrice | NoneNoneMinimum valid quote or order price.
margin_initDecimal | None0Initial margin rate.
margin_maintDecimal | None0Maintenance margin rate.
maker_feeDecimal | None0Maker fee rate. Negative values rebate.
taker_feeDecimal | None0Taker fee rate. Negative values rebate.
tick_schemestr | NoneNoneRegistered variable tick scheme name.
infodict | NoneNoneAdapter metadata.

Note: Python constructors use instrument_id; Rust stores the same value as id.

Behavior

  • CryptoPerpetual has asset class Cryptocurrency and instrument class Swap.
  • It has no activation or expiration timestamp.
  • Linear contracts typically set is_inverse=False and settle in the quote currency.
  • Inverse contracts set is_inverse=True and typically settle in the base currency.
  • Quanto contracts settle in a third currency that differs from both base and quote.
  • The cost currency is base for inverse contracts, settlement for quanto contracts, and quote otherwise.

Funding payments are not fields on the instrument. They arrive as data, such as FundingRateUpdate, and reference the instrument ID.

Example

use nautilus_core::UnixNanos;
use nautilus_model::{
    identifiers::{InstrumentId, Symbol},
    instruments::{CryptoPerpetual, InstrumentAny},
    types::{Currency, Money, Price, Quantity},
};
use rust_decimal_macros::dec;

let ethusdt_perp = CryptoPerpetual::builder()
    .instrument_id(InstrumentId::from("ETHUSDT-PERP.BINANCE"))
    .raw_symbol(Symbol::from("ETHUSDT"))
    .base_currency(Currency::from("ETH"))
    .quote_currency(Currency::from("USDT"))
    .settlement_currency(Currency::from("USDT"))
    .is_inverse(false)
    .price_precision(2)
    .size_precision(3)
    .price_increment(Price::from("0.01"))
    .size_increment(Quantity::from("0.001"))
    .max_quantity(Quantity::from("10000.000"))
    .min_quantity(Quantity::from("0.001"))
    .min_notional(Money::from("10.00 USDT"))
    .max_price(Price::from("15000.00"))
    .min_price(Price::from("1.00"))
    .margin_init(dec!(1.0))
    .margin_maint(dec!(0.35))
    .maker_fee(dec!(0.0002))
    .taker_fee(dec!(0.0004))
    .ts_event(UnixNanos::default())
    .ts_init(UnixNanos::default())
    .build()
    .unwrap();

let instrument = InstrumentAny::CryptoPerpetual(ethusdt_perp);

Adapters

Representative adapters that create or consume CryptoPerpetual instruments include:

  • Binance for USD-M and COIN-M perpetual futures.
  • BitMEX for inverse and linear perpetual contracts.
  • Bybit for linear and inverse perpetual products.
  • dYdX for perpetual markets.
  • Hyperliquid for perpetual markets.
  • Kraken for futures venue perpetual markets.
  • OKX for swap markets.
  • Tardis for crypto perpetual metadata.
  • Data covers mark prices, index prices, and funding rate updates.
  • Options covers option-specific instrument types.
  • Execution explains precision and notional checks before orders reach a venue.

On this page