{"record":{"id":"bbaf595d0702bb71","repo":"nautechsystems/nautilus_trader","slug":"peg-offset-value-requires-peg-price-type-bbaf59","errorCode":null,"errorMessage":"`peg_offset_value` requires `peg_price_type`","messagePattern":"`peg_offset_value` requires `peg_price_type`","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/bitmex/src/http/client.rs","lineNumber":1721,"sourceCode":"            {\n                anyhow::bail!(\n                    \"BitMEX only supports PRICE trailing offset type, was {offset_type:?}\"\n                );\n            }\n\n            params.peg_price_type(BitmexPegPriceType::TrailingStopPeg);\n\n            // BitMEX requires negative offset for stop-sell orders\n            let signed_offset = match order_side {\n                OrderSide::Sell => -offset.abs(),\n                OrderSide::Buy => offset.abs(),\n            };\n            params.peg_offset_value(signed_offset);\n        }\n\n        // Pegged orders (BBO) via params override\n        if peg_price_type.is_none() && peg_offset_value.is_some() {\n            anyhow::bail!(\"`peg_offset_value` requires `peg_price_type`\");\n        }\n\n        if let Some(peg_type) = peg_price_type {\n            if order_type != OrderType::Limit {\n                anyhow::bail!(\n                    \"Pegged orders only supported for LIMIT order type, was {order_type:?}\"\n                );\n            }\n            params.ord_type(BitmexOrderType::Pegged);\n            params.peg_price_type(peg_type);\n\n            if let Some(offset) = peg_offset_value {\n                params.peg_offset_value(offset);\n            }\n        }\n\n        let mut exec_inst = Vec::new();\n","sourceCodeStart":1703,"sourceCodeEnd":1739,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/bitmex/src/http/client.rs#L1703-L1739","documentation":"Parameter validation in BitmexHttpClient.submit_order: a peg offset value was supplied in the order params without an accompanying peg_price_type. BitMEX cannot interpret a peg offset without knowing the peg price type, so the order is rejected before submission.","triggerScenarios":"Calling BitmexHttpClient::submit_order with peg_offset_value=Some(...) and peg_price_type=None.","commonSituations":"Building submit params manually and forgetting the peg price type; passing an offset for a trailing-stop path that already pegs internally but supplying the explicit peg_offset_value without an explicit peg_price_type.","solutions":["Supply peg_price_type (e.g. PrimaryPeg, LastPeg) together with peg_offset_value","Drop peg_offset_value if no peg is intended","Centralize order parameter construction so peg fields are set as a pair"],"exampleFix":"// before\nparams.peg_offset_value(offset); // no peg type\n// after\nparams.peg_price_type(BitmexPegPriceType::PrimaryPeg).peg_offset_value(offset);","handlingStrategy":"validation","validationCode":"if peg_offset_value.is_some() && peg_price_type.is_none() {\n    return Err(anyhow::anyhow!(\"peg_offset_value requires peg_price_type\"));\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set peg fields as a pair in param builders","Reconcile trailing-stop internal pegging with explicit peg params","Unit test submit params for every peg combination"],"tags":["rust","bitmex","validation","pegged-orders"],"backgroundTag":"missing-required-argument","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}