{"record":{"id":"40177774c09f1b05","repo":"nautechsystems/nautilus_trader","slug":"binance-product-type-futures-does-not-support","errorCode":null,"errorMessage":"Binance {product_type:?} Futures does not support native GTD","messagePattern":"Binance (.+?) Futures does not support native GTD","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/binance/src/futures/execution.rs","lineNumber":1503,"sourceCode":"        log::warn!(\n            \"Binance Futures GTD submitted as GTC because use_gtd=false. Enable manage_gtd_expiry on the submitting strategy\"\n        );\n        return Ok(FuturesOrderLifetime {\n            time_in_force: TimeInForce::Gtc,\n            good_till_date: None,\n        });\n    }\n\n    anyhow::ensure!(\n        matches!(\n            order_type,\n            OrderType::Limit | OrderType::StopLimit | OrderType::LimitIfTouched\n        ),\n        \"Binance Futures does not support GTD for order type {order_type:?}\"\n    );\n    anyhow::ensure!(!post_only, \"Binance Futures GTD cannot be post-only\");\n\n    anyhow::ensure!(\n        product_type == BinanceProductType::UsdM,\n        \"Binance {product_type:?} Futures does not support native GTD\"\n    );\n\n    let expire_time = expire_time.context(\"Binance Futures GTD requires an expire_time\")?;\n    let expire_ns = expire_time.as_u64();\n    anyhow::ensure!(\n        expire_ns.is_multiple_of(NANOSECONDS_IN_SECOND),\n        \"Binance Futures goodTillDate requires whole-second precision\"\n    );\n\n    let minimum_ns = ts_now\n        .as_u64()\n        .checked_add(BINANCE_GTD_MIN_LEAD_SECS * NANOSECONDS_IN_SECOND)\n        .context(\"Binance Futures GTD minimum timestamp overflow\")?;\n    anyhow::ensure!(\n        expire_ns > minimum_ns,\n        \"Binance Futures goodTillDate must be strictly greater than current time plus {BINANCE_GTD_MIN_LEAD_SECS} seconds\"","sourceCodeStart":1485,"sourceCodeEnd":1521,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/binance/src/futures/execution.rs#L1485-L1521","documentation":"Native Binance GTD (goodTillDate) is only supported on USD-Margined futures. determine_futures_order_lifetime rejects GTD for other Binance product types (e.g. CoinM Spot-style setups) since the venue endpoint does not honor the parameter there; the adapter fails fast rather than silently degrading the expiry.","triggerScenarios":"Order with TimeInForce=Gtd, use_gtd=true, on an exec client configured with product_type != UsdM (e.g. CoinM futures), submitted via validate_order or build_futures_order_list_batch.","commonSituations":"Reusing a strategy tuned for USDT-margined futures on COIN-margined instruments; config templates that set use_gtd=true but product_type CoinM.","solutions":["Move the GTD order to a USD-M (UsdM) instrument/config.","Set use_gtd=false so GTD orders are submitted as GTC (with local expiry management via manage_gtd_expiry).","Use TimeInForce Gtc/Ioc/Fok directly for CoinM orders.","If CoinM GTD is essential, implement client-side expiry by scheduling a cancel at expire_time."],"exampleFix":"// before\nBinanceFuturesExecClientConfig { product_type: CoinM, .. } // + strategy emits GTD\n// after\nBinanceFuturesExecClientConfig { product_type: UsdM, .. } // or use_gtd=false","handlingStrategy":"validation","validationCode":"if tif == TimeInForce::Gtd && use_gtd && product_type != BinanceProductType::UsdM {\n    // fall back to Gtc or local expiry management\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Restrict native GTD usage to USD-M instruments","Set use_gtd=false in CoinM configuration templates"],"tags":["gtd","product-type","coinm","binance-futures","unsupported"],"backgroundTag":"unsupported-operation","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}