Rejects
OpenPitPretradeRejectScope
Raw reject-scope code accepted from C callers.
Zero is not valid; callers must set this field explicitly.
typedef uint8_t OpenPitPretradeRejectScope;
OPENPIT_PRETRADE_REJECT_SCOPE_ORDER
The reject applies to one order or order-like request.
#define OPENPIT_PRETRADE_REJECT_SCOPE_ORDER ((OpenPitPretradeRejectScope) 1)
OPENPIT_PRETRADE_REJECT_SCOPE_ACCOUNT
The reject applies to account state rather than to one order only.
#define OPENPIT_PRETRADE_REJECT_SCOPE_ACCOUNT ((OpenPitPretradeRejectScope) 2)
OpenPitPretradeRejectCode
Raw stable classification code for a reject.
Read this first when you need machine-readable handling. The textual fields in OpenPitPretradeReject provide operator-facing explanation and extra context.
Valid codes are 1..=42, 254 (Custom), and 255 (Other). Unknown incoming codes are mapped to Other (255).
typedef uint16_t OpenPitPretradeRejectCode;
OPENPIT_PRETRADE_REJECT_CODE_MISSING_REQUIRED_FIELD
A required field is absent.
#define OPENPIT_PRETRADE_REJECT_CODE_MISSING_REQUIRED_FIELD \
((OpenPitPretradeRejectCode) 1)
OPENPIT_PRETRADE_REJECT_CODE_INVALID_FIELD_FORMAT
A field cannot be parsed from the supplied wire value.
#define OPENPIT_PRETRADE_REJECT_CODE_INVALID_FIELD_FORMAT \
((OpenPitPretradeRejectCode) 2)
OPENPIT_PRETRADE_REJECT_CODE_INVALID_FIELD_VALUE
A field is syntactically valid but semantically unacceptable.
#define OPENPIT_PRETRADE_REJECT_CODE_INVALID_FIELD_VALUE \
((OpenPitPretradeRejectCode) 3)
OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_ORDER_TYPE
The requested order type is not supported.
#define OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_ORDER_TYPE \
((OpenPitPretradeRejectCode) 4)
OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_TIME_IN_FORCE
The requested time-in-force is not supported.
#define OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_TIME_IN_FORCE \
((OpenPitPretradeRejectCode) 5)
OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_ORDER_ATTRIBUTE
Another order attribute is unsupported.
#define OPENPIT_PRETRADE_REJECT_CODE_UNSUPPORTED_ORDER_ATTRIBUTE \
((OpenPitPretradeRejectCode) 6)
OPENPIT_PRETRADE_REJECT_CODE_DUPLICATE_CLIENT_ORDER_ID
The client order identifier duplicates an active order.
#define OPENPIT_PRETRADE_REJECT_CODE_DUPLICATE_CLIENT_ORDER_ID \
((OpenPitPretradeRejectCode) 7)
OPENPIT_PRETRADE_REJECT_CODE_TOO_LATE_TO_ENTER
The order arrived after the allowed entry deadline.
#define OPENPIT_PRETRADE_REJECT_CODE_TOO_LATE_TO_ENTER \
((OpenPitPretradeRejectCode) 8)
OPENPIT_PRETRADE_REJECT_CODE_EXCHANGE_CLOSED
Trading is closed for the relevant venue or session.
#define OPENPIT_PRETRADE_REJECT_CODE_EXCHANGE_CLOSED \
((OpenPitPretradeRejectCode) 9)
OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_INSTRUMENT
The instrument cannot be resolved.
#define OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_INSTRUMENT \
((OpenPitPretradeRejectCode) 10)
OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_ACCOUNT
The account cannot be resolved.
#define OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_ACCOUNT \
((OpenPitPretradeRejectCode) 11)
OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_VENUE
The venue cannot be resolved.
#define OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_VENUE \
((OpenPitPretradeRejectCode) 12)
OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_CLEARING_ACCOUNT
The clearing account cannot be resolved.
#define OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_CLEARING_ACCOUNT \
((OpenPitPretradeRejectCode) 13)
OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_COLLATERAL_ASSET
The collateral asset cannot be resolved.
#define OPENPIT_PRETRADE_REJECT_CODE_UNKNOWN_COLLATERAL_ASSET \
((OpenPitPretradeRejectCode) 14)
OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_FUNDS
Available balance is insufficient.
#define OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_FUNDS \
((OpenPitPretradeRejectCode) 15)
OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_MARGIN
Available margin is insufficient.
#define OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_MARGIN \
((OpenPitPretradeRejectCode) 16)
OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_POSITION
Available position is insufficient.
#define OPENPIT_PRETRADE_REJECT_CODE_INSUFFICIENT_POSITION \
((OpenPitPretradeRejectCode) 17)
OPENPIT_PRETRADE_REJECT_CODE_CREDIT_LIMIT_EXCEEDED
A credit limit was exceeded.
#define OPENPIT_PRETRADE_REJECT_CODE_CREDIT_LIMIT_EXCEEDED \
((OpenPitPretradeRejectCode) 18)
OPENPIT_PRETRADE_REJECT_CODE_RISK_LIMIT_EXCEEDED
A risk limit was exceeded.
#define OPENPIT_PRETRADE_REJECT_CODE_RISK_LIMIT_EXCEEDED \
((OpenPitPretradeRejectCode) 19)
OPENPIT_PRETRADE_REJECT_CODE_ORDER_EXCEEDS_LIMIT
The order exceeds a generic configured limit.
#define OPENPIT_PRETRADE_REJECT_CODE_ORDER_EXCEEDS_LIMIT \
((OpenPitPretradeRejectCode) 20)
OPENPIT_PRETRADE_REJECT_CODE_ORDER_QTY_EXCEEDS_LIMIT
The order quantity exceeds a configured limit.
#define OPENPIT_PRETRADE_REJECT_CODE_ORDER_QTY_EXCEEDS_LIMIT \
((OpenPitPretradeRejectCode) 21)
OPENPIT_PRETRADE_REJECT_CODE_ORDER_NOTIONAL_EXCEEDS_LIMIT
The order notional exceeds a configured limit.
#define OPENPIT_PRETRADE_REJECT_CODE_ORDER_NOTIONAL_EXCEEDS_LIMIT \
((OpenPitPretradeRejectCode) 22)
OPENPIT_PRETRADE_REJECT_CODE_POSITION_LIMIT_EXCEEDED
The resulting position exceeds a configured limit.
#define OPENPIT_PRETRADE_REJECT_CODE_POSITION_LIMIT_EXCEEDED \
((OpenPitPretradeRejectCode) 23)
OPENPIT_PRETRADE_REJECT_CODE_CONCENTRATION_LIMIT_EXCEEDED
Concentration constraints were violated.
#define OPENPIT_PRETRADE_REJECT_CODE_CONCENTRATION_LIMIT_EXCEEDED \
((OpenPitPretradeRejectCode) 24)
OPENPIT_PRETRADE_REJECT_CODE_LEVERAGE_LIMIT_EXCEEDED
Leverage constraints were violated.
#define OPENPIT_PRETRADE_REJECT_CODE_LEVERAGE_LIMIT_EXCEEDED \
((OpenPitPretradeRejectCode) 25)
OPENPIT_PRETRADE_REJECT_CODE_RATE_LIMIT_EXCEEDED
The request rate exceeded a configured limit.
#define OPENPIT_PRETRADE_REJECT_CODE_RATE_LIMIT_EXCEEDED \
((OpenPitPretradeRejectCode) 26)
OPENPIT_PRETRADE_REJECT_CODE_PNL_KILL_SWITCH_TRIGGERED
A loss barrier has blocked further risk-taking.
#define OPENPIT_PRETRADE_REJECT_CODE_PNL_KILL_SWITCH_TRIGGERED \
((OpenPitPretradeRejectCode) 27)
OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_BLOCKED
The account is blocked.
#define OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_BLOCKED \
((OpenPitPretradeRejectCode) 28)
OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_NOT_AUTHORIZED
The account is not authorized for this action.
#define OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_NOT_AUTHORIZED \
((OpenPitPretradeRejectCode) 29)
OPENPIT_PRETRADE_REJECT_CODE_COMPLIANCE_RESTRICTION
A compliance restriction blocked the action.
#define OPENPIT_PRETRADE_REJECT_CODE_COMPLIANCE_RESTRICTION \
((OpenPitPretradeRejectCode) 30)
OPENPIT_PRETRADE_REJECT_CODE_INSTRUMENT_RESTRICTED
The instrument is restricted.
#define OPENPIT_PRETRADE_REJECT_CODE_INSTRUMENT_RESTRICTED \
((OpenPitPretradeRejectCode) 31)
OPENPIT_PRETRADE_REJECT_CODE_JURISDICTION_RESTRICTION
A jurisdiction restriction blocked the action.
#define OPENPIT_PRETRADE_REJECT_CODE_JURISDICTION_RESTRICTION \
((OpenPitPretradeRejectCode) 32)
OPENPIT_PRETRADE_REJECT_CODE_WASH_TRADE_PREVENTION
The action would violate wash-trade prevention.
#define OPENPIT_PRETRADE_REJECT_CODE_WASH_TRADE_PREVENTION \
((OpenPitPretradeRejectCode) 33)
OPENPIT_PRETRADE_REJECT_CODE_SELF_MATCH_PREVENTION
The action would violate self-match prevention.
#define OPENPIT_PRETRADE_REJECT_CODE_SELF_MATCH_PREVENTION \
((OpenPitPretradeRejectCode) 34)
OPENPIT_PRETRADE_REJECT_CODE_SHORT_SALE_RESTRICTION
Short-sale restriction blocked the action.
#define OPENPIT_PRETRADE_REJECT_CODE_SHORT_SALE_RESTRICTION \
((OpenPitPretradeRejectCode) 35)
OPENPIT_PRETRADE_REJECT_CODE_RISK_CONFIGURATION_MISSING
Required risk configuration is missing.
#define OPENPIT_PRETRADE_REJECT_CODE_RISK_CONFIGURATION_MISSING \
((OpenPitPretradeRejectCode) 36)
OPENPIT_PRETRADE_REJECT_CODE_REFERENCE_DATA_UNAVAILABLE
Required reference data is unavailable.
#define OPENPIT_PRETRADE_REJECT_CODE_REFERENCE_DATA_UNAVAILABLE \
((OpenPitPretradeRejectCode) 37)
OPENPIT_PRETRADE_REJECT_CODE_ORDER_VALUE_CALCULATION_FAILED
The system could not compute an order value needed for validation.
#define OPENPIT_PRETRADE_REJECT_CODE_ORDER_VALUE_CALCULATION_FAILED \
((OpenPitPretradeRejectCode) 38)
OPENPIT_PRETRADE_REJECT_CODE_SYSTEM_UNAVAILABLE
A required service or subsystem is unavailable.
#define OPENPIT_PRETRADE_REJECT_CODE_SYSTEM_UNAVAILABLE \
((OpenPitPretradeRejectCode) 39)
OPENPIT_PRETRADE_REJECT_CODE_MARK_PRICE_UNAVAILABLE
Required mark price is unavailable.
#define OPENPIT_PRETRADE_REJECT_CODE_MARK_PRICE_UNAVAILABLE \
((OpenPitPretradeRejectCode) 40)
OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_ADJUSTMENT_BOUNDS_EXCEEDED
Account adjustment would violate configured bounds.
#define OPENPIT_PRETRADE_REJECT_CODE_ACCOUNT_ADJUSTMENT_BOUNDS_EXCEEDED \
((OpenPitPretradeRejectCode) 41)
OPENPIT_PRETRADE_REJECT_CODE_ARITHMETIC_OVERFLOW
Underlying decimal arithmetic overflowed during evaluation.
#define OPENPIT_PRETRADE_REJECT_CODE_ARITHMETIC_OVERFLOW \
((OpenPitPretradeRejectCode) 42)
OPENPIT_PRETRADE_REJECT_CODE_CUSTOM
Reserved code for caller-defined reject classes.
#define OPENPIT_PRETRADE_REJECT_CODE_CUSTOM ((OpenPitPretradeRejectCode) 254)
OPENPIT_PRETRADE_REJECT_CODE_OTHER
A catch-all code for rejects that do not fit a more specific class.
#define OPENPIT_PRETRADE_REJECT_CODE_OTHER ((OpenPitPretradeRejectCode) 255)
openpit_pretrade_reject_code_is_evaluation_failure
Reports whether a reject code means the policy could not evaluate the historical order.
An evaluation failure aborts drop copy before it produces an operation and rolls back the prepared mutations. Unknown incoming codes map to Other and return false.
bool openpit_pretrade_reject_code_is_evaluation_failure(
OpenPitPretradeRejectCode code
);
OpenPitPretradeReject
Single rejection record returned by checks.
typedef struct OpenPitPretradeReject {
OpenPitStringView policy;
OpenPitStringView reason;
OpenPitStringView details;
void * user_data;
OpenPitPretradeRejectCode code;
OpenPitPretradeRejectScope scope;
} OpenPitPretradeReject;
OpenPitPretradeRejectList
List of rejects.
Every list is caller-owned except the one returned by openpit_pretrade_reject_list_get_accept_sentinel: that single borrowed instance is immutable and shared, so appending to it is refused and destroying it is a no-op. Use openpit_pretrade_reject_list_is_accept_sentinel to tell the two apart.
typedef struct OpenPitPretradeRejectList OpenPitPretradeRejectList;
openpit_create_pretrade_reject_list
Creates a caller-owned reject list with preallocated capacity.
reserve is the requested number of elements to preallocate.
Contract:
- returns a new caller-owned list;
- release it with
openpit_destroy_pretrade_reject_list; - this function always succeeds.
OpenPitPretradeRejectList * openpit_create_pretrade_reject_list(
size_t reserve
);
openpit_pretrade_reject_list_get_accept_sentinel
Returns a borrowed immutable empty reject list that accepts a policy call.
Contract:
- the returned pointer is non-null and may be returned only as a custom policy callback result;
- the caller must not append to, retain, or free it: appending is refused by
openpit_pretrade_reject_list_pushandopenpit_destroy_pretrade_reject_listis a no-op for it; - the engine recognizes it as an accepted callback result without an allocation;
- this function always succeeds.
OpenPitPretradeRejectList *
openpit_pretrade_reject_list_get_accept_sentinel(
void
);
openpit_pretrade_reject_list_is_accept_sentinel
Reports whether list is the borrowed immutable accept list returned by openpit_pretrade_reject_list_get_accept_sentinel.
Use it to tell the two false outcomes of openpit_pretrade_reject_list_push apart: an unknown reject scope is a bad reject payload, while the accept list is a bad target pointer.
Contract:
- passing null is allowed and returns
false; truemeans the list can be neither appended to nor released;- this function always succeeds.
bool openpit_pretrade_reject_list_is_accept_sentinel(
const OpenPitPretradeRejectList * list
);
openpit_destroy_pretrade_reject_list
Releases a caller-owned reject list.
Contract:
- passing null is allowed;
- passing the borrowed accept list returned by
openpit_pretrade_reject_list_get_accept_sentinelis allowed and does nothing, since that instance is shared and not caller-owned; - this function always succeeds.
void openpit_destroy_pretrade_reject_list(
OpenPitPretradeRejectList * rejects
);
openpit_pretrade_reject_list_push
Appends one reject to the list by copying its payload.
Contract:
listmust be a valid non-null pointer;- string views in
rejectare copied before this function returns; - returns
trueafter appending a reject with a valid scope; - returns
falseand leaves the list unchanged whenrejectcarries an unknown scope, or whenlistis the immutable accept list returned byopenpit_pretrade_reject_list_get_accept_sentinel; - call
openpit_pretrade_reject_list_is_accept_sentinelto separate those two outcomes: the first is a bad reject payload, the second is a bad target pointer, and reporting one as the other hides the real defect; - violating the pointer contract aborts the call.
bool openpit_pretrade_reject_list_push(
OpenPitPretradeRejectList * list,
OpenPitPretradeReject reject
);
openpit_pretrade_reject_list_len
Returns the number of rejects in the list.
Contract:
listmust be a valid non-null pointer;- this function never fails;
- violating the pointer contract aborts the call.
size_t openpit_pretrade_reject_list_len(
const OpenPitPretradeRejectList * list
);
openpit_pretrade_reject_list_get
Copies a non-owning reject view at index into out_reject.
The copied view borrows string memory from list.
Contract:
listmust be a valid non-null pointer;out_rejectmust be a valid non-null pointer;- returns
truewhen a value exists and was copied; - returns
falsewhenindexis out of bounds and does not writeout_reject; - the copied view remains valid while
listis alive and unchanged; - this function never fails;
- violating the pointer contract aborts the call.
bool openpit_pretrade_reject_list_get(
const OpenPitPretradeRejectList * list,
size_t index,
OpenPitPretradeReject * out_reject
);
OpenPitPretradeAccountBlock
Single account-block record returned by kill-switch checks.
typedef struct OpenPitPretradeAccountBlock {
OpenPitStringView policy;
OpenPitStringView reason;
OpenPitStringView details;
void * user_data;
OpenPitPretradeRejectCode code;
} OpenPitPretradeAccountBlock;
OpenPitPretradeAccountBlockList
Caller-owned list of account blocks.
typedef struct OpenPitPretradeAccountBlockList OpenPitPretradeAccountBlockList;
openpit_create_pretrade_account_block_list
Creates a caller-owned account-block list with preallocated capacity.
reserve is the requested number of elements to preallocate.
Contract:
- returns a new caller-owned list;
- release it with
openpit_destroy_pretrade_account_block_list; - this function always succeeds.
OpenPitPretradeAccountBlockList * openpit_create_pretrade_account_block_list(
size_t reserve
);
openpit_destroy_pretrade_account_block_list
Releases a caller-owned account-block list.
Contract:
- passing null is allowed;
- this function always succeeds.
void openpit_destroy_pretrade_account_block_list(
OpenPitPretradeAccountBlockList * blocks
);
openpit_pretrade_account_block_list_push
Appends one account block to the list by copying its payload.
Contract:
listmust be a valid non-null pointer;- string views in
blockare copied before this function returns; - this function never fails;
- violating the pointer contract aborts the call.
void openpit_pretrade_account_block_list_push(
OpenPitPretradeAccountBlockList * list,
OpenPitPretradeAccountBlock block
);
openpit_pretrade_account_block_list_len
Returns the number of account blocks in the list.
Contract:
listmust be a valid non-null pointer;- this function never fails;
- violating the pointer contract aborts the call.
size_t openpit_pretrade_account_block_list_len(
const OpenPitPretradeAccountBlockList * list
);
openpit_pretrade_account_block_list_get
Copies a non-owning account-block view at index into out_block.
The copied view borrows string memory from list.
Contract:
listmust be a valid non-null pointer;out_blockmust be a valid non-null pointer;- returns
truewhen a value exists and was copied; - returns
falsewhenindexis out of bounds and does not writeout_block; - the copied view remains valid while
listis alive and unchanged; - this function never fails;
- violating the pointer contract aborts the call.
bool openpit_pretrade_account_block_list_get(
const OpenPitPretradeAccountBlockList * list,
size_t index,
OpenPitPretradeAccountBlock * out_block
);
OpenPitPretradeAccountBlockOutcome
Account block recorded for an account selected by the engine.
typedef struct OpenPitPretradeAccountBlockOutcome {
OpenPitParamAccountId account_id;
OpenPitPretradeAccountBlock block;
} OpenPitPretradeAccountBlockOutcome;
OpenPitPretradeAccountBlockOutcomeList
Caller-owned list of account-block outcomes.
typedef struct OpenPitPretradeAccountBlockOutcomeList
OpenPitPretradeAccountBlockOutcomeList;
openpit_destroy_pretrade_account_block_outcome_list
Releases a caller-owned account-block-outcome list.
Contract:
- passing null is allowed;
- this function always succeeds.
void openpit_destroy_pretrade_account_block_outcome_list(
OpenPitPretradeAccountBlockOutcomeList * outcomes
);
openpit_pretrade_account_block_outcome_list_len
Returns the number of account-block outcomes in the list.
Contract:
listmust be a valid non-null pointer;- this function never fails;
- violating the pointer contract aborts the call.
size_t openpit_pretrade_account_block_outcome_list_len(
const OpenPitPretradeAccountBlockOutcomeList * list
);
openpit_pretrade_account_block_outcome_list_get
Copies a non-owning account-block outcome at index into out_outcome.
The copied block view borrows string memory from list.
Contract:
listmust be a valid non-null pointer;out_outcomemust be a valid non-null pointer;- returns
truewhen a value exists and was copied; - returns
falsewhenindexis out of bounds and does not writeout_outcome; - the copied block view remains valid while
listis alive and unchanged; - this function never fails;
- violating the pointer contract aborts the call.
bool openpit_pretrade_account_block_outcome_list_get(
const OpenPitPretradeAccountBlockOutcomeList * list,
size_t index,
OpenPitPretradeAccountBlockOutcome * out_outcome
);