Order Types
Senticore is designed for professional order handling across spot, binary options, and prediction markets.
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
| Type | Behavior |
|---|---|
| GTC | Rests on the book until filled, cancelled, or expired |
| IOC | Fills immediately against available liquidity and cancels the remainder |
| FOK | Fills the entire quantity immediately or rejects |
| Post-only | Rests as maker liquidity; rejects if it would cross the spread |
Modifiers
| Modifier | Behavior |
|---|---|
is_market | Market order; takes available liquidity |
reduce_only | Can only reduce an existing position |
stp_mode | Self-trade prevention behavior |
expires_at | Auto-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',
},
});
| Direction | Use case |
|---|---|
at_or_below | Sell-side stop for downside protection |
at_or_above | Buy-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.
participationBpscontrols the target share of market volume.- Execution pauses when observed volume is zero.
Validation rules
| Rule | Behavior |
|---|---|
| Price tick | Price must align to the market tick size |
| Lot size | Quantity must align to lot size |
| Max quantity | Per-market cap is enforced |
| Open order cap | Per-account cap is enforced |
| Book depth cap | Prevents unbounded price-level growth |
| Minimum notional | Rejects dust orders |
Representative pre-launch market parameters are documented on the Markets page. Final production values can change before closed beta and public mainnet.
| Market | Tick size | Lot size | Minimum notional |
|---|---|---|---|
| BTC-USDC | 0.01 USDC | 0.0001 BTC | 10 USDC |
| ETH-USDC | 0.01 USDC | 0.001 ETH | 10 USDC |
| SOL-USDC | 0.001 USDC | 0.01 SOL | 5 USDC |
| YES/NO markets | 0.001 USDC | 1 contract | 5 USDC |
Common rejection reasons
| Error | Meaning |
|---|---|
PostOnlyRequiresPassiveLimitOrder | Post-only order would take liquidity or is not a passive limit |
InsufficientCollateral | Account lacks free collateral |
OrderbookFull | Price-level cap reached |
WouldCrossSpread | Post-only order would cross the spread |
ReduceOnlyExceedsPosition | Reduce-only order would increase exposure |