Skip to main content

Order Types

Senticore is designed for professional order handling across spot, binary options, and prediction markets.

Test coverage

Every order type below has dedicated behavior test coverage and is included in continuous integration coverage gating. Randomized sequence fuzzing across supported order types runs regularly, asserting deterministic state across independent engine instances.

Time-in-force

TypeBehavior
GTCRests on the book until filled, cancelled, or expired
IOCFills immediately against available liquidity and cancels the remainder
FOKFills the entire quantity immediately or rejects
Post-onlyRests as maker liquidity; rejects if it would cross the spread

Modifiers

ModifierBehavior
is_marketMarket order; takes available liquidity
reduce_onlyCan only reduce an existing position
stp_modeSelf-trade prevention behavior
expires_atAuto-cancel timestamp for eligible orders

Conditional orders

Conditional orders trigger child orders based on market conditions.

Stop loss

await sdk.placeConditionalOrder({
market: 'BTC-USDC',
conditionalKind: 'stop_loss',
triggerDirection: 'at_or_below',
triggerPrice: 60000,
child: {
side: 'sell',
quantity: 1,
timeInForce: 'ioc',
},
});
DirectionUse case
at_or_belowSell-side stop for downside protection
at_or_aboveBuy-side stop or short-position protection

Take profit

await sdk.placeConditionalOrder({
market: 'BTC-USDC',
conditionalKind: 'take_profit',
triggerDirection: 'at_or_above',
triggerPrice: 80000,
child: {
side: 'sell',
quantity: 1,
timeInForce: 'gtc',
price: 79500,
},
});

OCO

One-cancels-other links a take-profit and stop-loss path. When one triggers, the linked order is cancelled.

const takeProfit = await sdk.placeConditionalOrder({
market: 'BTC-USDC',
conditionalKind: 'take_profit',
triggerDirection: 'at_or_above',
triggerPrice: 80000,
child: {side: 'sell', quantity: 1, timeInForce: 'gtc', price: 79500},
});

await sdk.placeConditionalOrder({
market: 'BTC-USDC',
conditionalKind: 'stop_loss',
triggerDirection: 'at_or_below',
triggerPrice: 60000,
linkedConditionalId: takeProfit.id,
child: {side: 'sell', quantity: 1, timeInForce: 'ioc'},
});

Algorithmic orders

Algorithmic orders execute over time according to a strategy.

Iceberg

await sdk.placeAlgoOrder({
market: 'BTC-USDC',
side: 'buy',
totalQty: 100,
algo: {
kind: 'iceberg',
displayQty: 5,
},
});

Behavior:

  • Only the display quantity is visible at a time.
  • A new slice posts as the visible slice fills.
  • Cancelling the parent releases remaining reserved collateral.

TWAP

await sdk.placeAlgoOrder({
market: 'BTC-USDC',
side: 'buy',
totalQty: 100,
algo: {
kind: 'twap',
sliceQty: 5,
intervalMs: 60000,
startAt: Date.now() + 30000,
},
});

Behavior:

  • Slices are submitted on a fixed interval.
  • The last slice is capped to remaining quantity.
  • A stale or blocked child order prevents uncontrolled order spam.

VWAP

await sdk.placeAlgoOrder({
market: 'BTC-USDC',
side: 'buy',
totalQty: 100,
algo: {
kind: 'vwap',
participationBps: 1000,
minSliceQty: 1,
},
});

Behavior:

  • Child size follows recent market volume.
  • participationBps controls the target share of market volume.
  • Execution pauses when observed volume is zero.

Validation rules

RuleBehavior
Price tickPrice must align to the market tick size
Lot sizeQuantity must align to lot size
Max quantityPer-market cap is enforced
Open order capPer-account cap is enforced
Book depth capPrevents unbounded price-level growth
Minimum notionalRejects dust orders

Representative pre-launch market parameters are documented on the Markets page. Final production values can change before closed beta and public mainnet.

MarketTick sizeLot sizeMinimum notional
BTC-USDC0.01 USDC0.0001 BTC10 USDC
ETH-USDC0.01 USDC0.001 ETH10 USDC
SOL-USDC0.001 USDC0.01 SOL5 USDC
YES/NO markets0.001 USDC1 contract5 USDC

Common rejection reasons

ErrorMeaning
PostOnlyRequiresPassiveLimitOrderPost-only order would take liquidity or is not a passive limit
InsufficientCollateralAccount lacks free collateral
OrderbookFullPrice-level cap reached
WouldCrossSpreadPost-only order would cross the spread
ReduceOnlyExceedsPositionReduce-only order would increase exposure