Expand description
§tulip_rs_shared
Shared constants and helper functions for candlestick bitmask encoding.
This crate provides the single source of truth for bit positions and encoding used by build.rs, proc macros, and runtime code.
§CandleBits layout
CandleBits is split into two separate fields:
§mandatory: u32 (always computed at bar creation, 27 bits used)
Tight-packed — no byte-boundary waste:
Bits 0– 5 Basic variants (6 types, 1-hot)
Bits 6–10 Doji variants (5 types, 1-hot)
Bits 11–16 Marubozu variants (6 types, 1-hot)
Bits 17–19 SpinningTop variants(3 types, 1-hot)
Bit 20 OTHER
Bit 21 COLOUR (GREEN=1, RED=0)
Bit 22 FILL (HOLLOW=1, FILLED=0)
Bit 23 TREND (UP=1, DOWN=0)
Bit 24 LINE_HEIGHT (LONG=1, SHORT=0)
Bit 25 LOWER_WICK_LT_BODY (lower wick < body height)
Bit 26 UPPER_WICK_LT_BODY (upper wick < body height)
Bit 27 BODY_HEIGHT (LONG=1, SHORT=0)
Bits 28–31 4 spare§lazy_value / lazy_computed: u16 (computed on demand, all 16 bits used)
Bit 0 OPEN_ABOVE_PREV_BODY_MID (my open > prev body midpoint)
Bit 1 OPEN_IN_PREV_BODY (my open ∈ prev body)
Bit 2 CLOSE_ABOVE_PREV_BODY_MID (my close > prev body midpoint)
Bit 3 CLOSE_IN_PREV_BODY (my close ∈ prev body)
Bit 4 HIGH_ABOVE_PREV_BODY_MID (my high > prev body midpoint)
Bit 5 HIGH_IN_PREV_BODY (my high ∈ prev body)
Bit 6 HIGH_IN_PREV_LINE (my high ∈ [prev LOW, prev HIGH])
Bit 7 LOW_ABOVE_PREV_BODY_MID (my low > prev body midpoint)
Bit 8 LOW_IN_PREV_BODY (my low ∈ prev body)
Bit 9 LOW_IN_PREV_LINE (my low ∈ [prev LOW, prev HIGH])
Bit 10 I_ENGULF_PREV_BODY (prev open AND prev close both ∈ my body)
Bit 11 PREV_HIGH_IN_MY_BODY (prev bar's high ∈ my body)
Bit 12 PREV_LOW_IN_MY_BODY (prev bar's low ∈ my body)
Bit 13 LOWER_WICK_LONG_2X (lower wick ≥ 2× body height)
Bit 14 UPPER_WICK_LONG_2X (upper wick ≥ 2× body height)
Bit 15 BODY_GT_PREV_BODY (body height > previous bar's body height)Constants§
- BASIC_
MASK - BASIC_
OFFSET - BLACK_
CANDLE - BLACK_
MARUBOZU - BLACK_
SPINNING_ TOP - BODY_
GAP_ DOWN - Current body is entirely below prev body; wicks may still overlap.
- BODY_
GAP_ UP - Current body is entirely above prev body; wicks may still overlap.
- BODY_
GT_ PREV_ BODY - BODY_
GT_ PREV_ BODY_ BIT - BODY_
HEIGHT_ BIT - BODY_
HEIGHT_ LONG - BODY_
HEIGHT_ SHORT - CANDLE_
TYPE_ MASK - CLOSE_
ABOVE_ PREV_ BODY_ MID - CLOSE_
ABOVE_ PREV_ BODY_ MID_ BIT - CLOSE_
IN_ PREV_ BODY - CLOSE_
IN_ PREV_ BODY_ BIT - CLOSING_
BLACK_ MARUBOZU - CLOSING_
WHITE_ MARUBOZU - COLOUR_
BIT - COLOUR_
GREEN - COLOUR_
RED - COMPULSORY_
MASK - Mask covering all compulsory mandatory bits
- DOJI
- DOJI_
MASK - DOJI_
OFFSET - DRAGONFLY_
DOJI - ENGULF_
BODY - Body-only engulf — current/previous body spans the target body.
- ENGULF_
LINE - Full-line engulf — current/previous body spans the target body AND wicks.
- FILL_
BIT - FILL_
FILLED - FILL_
HOLLOW - FOUR_
PRICE_ DOJI - GRAVESTONE_
DOJI - HIGH_
ABOVE_ PREV_ BODY_ MID - HIGH_
ABOVE_ PREV_ BODY_ MID_ BIT - HIGH_
IN_ PREV_ BODY - HIGH_
IN_ PREV_ BODY_ BIT - HIGH_
IN_ PREV_ LINE - HIGH_
IN_ PREV_ LINE_ BIT - HIGH_
WAVE - I_
ENGULF_ PREV_ BODY - I_
ENGULF_ PREV_ BODY_ BIT - LAZY_
MASK - Mask covering all currently-defined lazy bits
- LINE_
HEIGHT_ BIT - LINE_
HEIGHT_ LONG - LINE_
HEIGHT_ SHORT - LONG_
BLACK_ CANDLE - LONG_
LEGGED_ DOJI - LONG_
WHITE_ CANDLE - LOWER_
WICK_ LONG_ 2X - LOWER_
WICK_ LONG_ 2X_ BIT - LOWER_
WICK_ LT_ BODY - LOWER_
WICK_ LT_ BODY_ BIT - LOW_
ABOVE_ PREV_ BODY_ MID - LOW_
ABOVE_ PREV_ BODY_ MID_ BIT - LOW_
IN_ PREV_ BODY - LOW_
IN_ PREV_ BODY_ BIT - LOW_
IN_ PREV_ LINE - LOW_
IN_ PREV_ LINE_ BIT - MARUBOZU_
MASK - MARUBOZU_
OFFSET - NO_GAP
- No gap — bodies overlap.
- OPENING_
BLACK_ MARUBOZU - OPENING_
WHITE_ MARUBOZU - OPEN_
ABOVE_ PREV_ BODY_ MID - OPEN_
ABOVE_ PREV_ BODY_ MID_ BIT - OPEN_
IN_ PREV_ BODY - OPEN_
IN_ PREV_ BODY_ BIT - OTHER
- OTHER_
BIT - PREV_
HIGH_ IN_ MY_ BODY - PREV_
HIGH_ IN_ MY_ BODY_ BIT - PREV_
LOW_ IN_ MY_ BODY - PREV_
LOW_ IN_ MY_ BODY_ BIT - SHORT_
BLACK_ CANDLE - SHORT_
WHITE_ CANDLE - SPINNING_
TOP_ MASK - SPINNING_
TOP_ OFFSET - TREND_
BIT - TREND_
DOWN - TREND_
UP - UPPER_
WICK_ LONG_ 2X - UPPER_
WICK_ LONG_ 2X_ BIT - UPPER_
WICK_ LT_ BODY - UPPER_
WICK_ LT_ BODY_ BIT - WHITE_
CANDLE - WHITE_
MARUBOZU - WHITE_
SPINNING_ TOP - WICK_
GAP_ DOWN - Entire current candle (including wicks) is below prev candle.
- WICK_
GAP_ UP - Entire current candle (including wicks) is above prev candle.
Functions§
- encode_
basic_ variant - encode_
doji_ variant - encode_
marubozu_ variant - encode_
spinning_ top_ variant - variant_
to_ bit - Convert a variant discriminant to a 1-hot bit value