Skip to content

Tick Size Alignment

Order prices must be an integer multiple of the instrument's tick size. AKQuant validates and rejects misaligned prices; it never rounds them for you. The full rationale (including the QuantConnect Lean and CCXT incidents behind this choice) is in the Chinese version.

Rounding explicitly

Use Strategy.round_to_tick(symbol, price, direction):

direction Rounding Use for
"down" floor buy orders (never pay more than intended)
"up" ceiling sell orders (never receive less than intended)
"nearest" (default) half-up display / logging only

It raises KeyError for an unregistered symbol instead of guessing a tick. Misaligned prices are rejected locally before submission in live trading and by the matcher in backtests.

Default tick sizes

Instrument Tick
A-share stocks 0.01
ETFs / funds 0.001
Bonds incl. convertible bonds (SSE and SZSE) 0.001
SSE/SZSE ETF options 0.0001

Without an explicit tick_size, InstrumentConfig defaults to 0.001 for FUND and 0.01 for everything else. Two product presets carry the right tick (explicitly passed fields still win):

asset_type Expands to Tick Other defaults
"CONVERTIBLE_BOND" FUND 0.001 lot of 10, T+0
"ETF_OPTION" OPTION 0.0001 multiplier 10000, T+0, China single-leg margin

Pitfalls: the generic option default of 0.01 is wrong for ETF options — use "ETF_OPTION" or pass tick_size=0.0001. ETFs or convertible bonds configured as "STOCK" get 0.01; use "FUND" / "CONVERTIBLE_BOND" instead.

Convertible bonds

from akquant import InstrumentConfig

InstrumentConfig(symbol="113050.SH", asset_type="CONVERTIBLE_BOND")

This models trading and fees only (T+0, lot of 10, no stamp duty). Conversion, put, call and first-day suspension are not modeled, and AKQuant has no price-limit (limit up/down) mechanism.

Disabling validation

ChinaStockConfig(enforce_tick_size=False) for stocks/funds and ChinaFuturesValidationConfig(symbol_prefix=..., enforce_tick_size=False) for futures. Not recommended: the broker or exchange will reject the order later, where it is more expensive to diagnose.