Back to Nautilus Trader

Cfd

docs/concepts/instruments/cfd.md

1.230.08.1 KB
Original Source

Cfd

Cfd represents a contract for difference that tracks an underlying asset without transferring ownership of the underlying. The venue defines the quote currency, precision, increments, limits, margins, and fees.

Examples include CFD contracts on FX, equities, indexes, and commodities.

Fields

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

FieldTypeRequired/defaultNotes
instrument_idInstrumentIdRequiredStored as id in Rust.
raw_symbolSymbolRequiredNative venue symbol.
asset_classAssetClassRequiredAsset class of the underlying.
base_currencyOption<Currency>NoneBase currency when the CFD tracks one.
quote_currencyCurrencyRequiredCurrency used to quote and value prices.
price_precisionu8RequiredDecimal places allowed for prices.
size_precisionu8RequiredDecimal places allowed for order sizes.
price_incrementPriceRequiredSmallest valid price step.
size_incrementQuantityRequiredSmallest valid size step.
lot_sizeOption<Quantity>NoneRounded 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.
ts_eventUnixNanosRequiredEvent timestamp in nanoseconds.
ts_initUnixNanosRequiredInitialization timestamp in nanoseconds.
</Tab> <Tab value="Python">
FieldTypeRequired/defaultNotes
instrument_idInstrumentIdRequired
raw_symbolSymbolRequiredNative venue symbol.
asset_classAssetClassRequiredAsset class of the underlying.
base_currencyCurrency | NoneNoneBase currency when the CFD tracks one.
quote_currencyCurrencyRequiredCurrency used to quote and value prices.
price_precisionintRequiredDecimal places allowed for prices.
size_precisionintRequiredDecimal places allowed for order sizes.
price_incrementPriceRequiredSmallest valid price step.
size_incrementQuantityRequiredSmallest valid size step.
lot_sizeQuantity | NoneNoneRounded 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.
ts_eventintRequiredEvent timestamp in nanoseconds.
ts_initintRequiredInitialization timestamp in nanoseconds.
</Tab> </Tabs>

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

Behavior

  • Cfd has instrument class Cfd.
  • It is never inverse and uses a multiplier of one.
  • It has no activation timestamp, expiration timestamp, strike, or option kind.
  • Use the source market type when a venue offers both cash instruments and CFDs.

Example

rust
use nautilus_core::UnixNanos;
use nautilus_model::{
    enums::AssetClass,
    identifiers::{InstrumentId, Symbol},
    instruments::Cfd,
    types::{Currency, Price, Quantity},
};
use rust_decimal_macros::dec;

let audusd = Cfd::builder()
    .instrument_id(InstrumentId::from("AUDUSD.OANDA"))
    .raw_symbol(Symbol::from("AUD/USD"))
    .asset_class(AssetClass::FX)
    .base_currency(Currency::from("AUD"))
    .quote_currency(Currency::from("USD"))
    .price_precision(5)
    .size_precision(0)
    .price_increment(Price::from("0.00001"))
    .size_increment(Quantity::from("1"))
    .lot_size(Quantity::from("1000"))
    .margin_init(dec!(0.03))
    .margin_maint(dec!(0.03))
    .maker_fee(dec!(0.00002))
    .taker_fee(dec!(0.00002))
    .ts_event(UnixNanos::default())
    .ts_init(UnixNanos::default())
    .build()
    .unwrap();
python
from decimal import Decimal

from nautilus_trader.model import AssetClass
from nautilus_trader.model import Cfd
from nautilus_trader.model import Currency
from nautilus_trader.model import InstrumentId
from nautilus_trader.model import Price
from nautilus_trader.model import Quantity
from nautilus_trader.model import Symbol

audusd = Cfd(
    instrument_id=InstrumentId.from_str("AUDUSD.OANDA"),
    raw_symbol=Symbol("AUD/USD"),
    asset_class=AssetClass.FX,
    quote_currency=Currency.from_str("USD"),
    price_precision=5,
    price_increment=Price.from_str("0.00001"),
    size_precision=0,
    size_increment=Quantity.from_int(1),
    ts_event=0,
    ts_init=0,
    base_currency=Currency.from_str("AUD"),
    lot_size=Quantity.from_int(1000),
    margin_init=Decimal("0.03"),
    margin_maint=Decimal("0.03"),
    maker_fee=Decimal("0.00002"),
    taker_fee=Decimal("0.00002"),
)

Adapters

Representative adapters that create or consume Cfd instruments include: