350 lines
11 KiB
Python
350 lines
11 KiB
Python
from enum import Enum, auto
|
|
from typing import Literal
|
|
|
|
|
|
class Chan_DATA_SRC(Enum):
|
|
BAO_STOCK = auto()
|
|
CCXT = auto()
|
|
CSV = auto()
|
|
|
|
class Chan_ZS_DIR(Enum):
|
|
UP = auto()
|
|
DOWN = auto()
|
|
|
|
class Chan_ZS_TYPE(Enum):
|
|
"""中枢类型分类"""
|
|
NORMAL = auto() # 常规中枢:高低点无明显趋势,区间震荡
|
|
RISING = auto() # 上升中枢:高点抬高,低点也抬高,重心上移
|
|
FALLING = auto() # 下行中枢:高点降低,低点也降低,重心下移
|
|
CONVERGING = auto() # 收敛中枢:高点降低,低点抬高,区间收窄(三角收敛)
|
|
DIVERGING = auto() # 扩散中枢:高点抬高,低点降低,区间扩大(喇叭口)
|
|
class Chan_K_DIR(Enum):
|
|
BULL = auto()
|
|
BEAR = auto()
|
|
CROSS = auto()
|
|
|
|
class Chan_EMA_POS(Enum):
|
|
"""K线与任意EMA的位置关系(与趋势方向无关的客观分类,支持threshold容差)"""
|
|
ABOVE = auto() # 完全在EMA上方(远离):low > ema + threshold
|
|
NEAR_ABOVE = auto() # 在EMA上方但接近:ema < low <= ema + threshold
|
|
CROSS_CLOSE_ABOVE = auto() # 跨越EMA,收盘在上方:close > ema, low <= ema(含threshold范围内触碰)
|
|
ON_EMA = auto() # 收盘价在EMA附近:abs(close - ema) <= threshold
|
|
CROSS_CLOSE_BELOW = auto() # 跨越EMA,收盘在下方:close < ema, high >= ema(含threshold范围内触碰)
|
|
NEAR_BELOW = auto() # 在EMA下方但接近:ema - threshold <= high < ema
|
|
BELOW = auto() # 完全在EMA下方(远离):high < ema - threshold
|
|
UNKNOWN = auto() # 未知(EMA值无效)
|
|
|
|
class Chan_EMA_SEMANTIC(Enum):
|
|
"""K线与EMA结合趋势方向的语义状态(用于交易判断)"""
|
|
STRONG_TREND = auto() # 7: 顺势K线完全在EMA趋势侧(强势,远未及EMA)
|
|
TREND_SIDE = auto() # 6: 完全在EMA趋势侧(正常趋势运行)
|
|
RECOVER = auto() # 5: 逆势后穿越EMA回到趋势侧(收复EMA,趋势恢复)
|
|
TOUCH_FAIL = auto() # 4: 逆势触碰EMA但未穿越(反弹/反抽力度不足)
|
|
DEEP_COUNTER = auto() # 3: 完全在EMA逆势侧(深度回调/反抽)
|
|
BREAK = auto() # 2: 穿越EMA,收盘在逆势侧(支撑/压力失败)
|
|
TOUCH_HOLD = auto() # 1: 触碰EMA,收盘守住趋势侧(支撑/压力有效)
|
|
WEAK_COUNTER = auto() # 8: 逆势K线完全在EMA逆势侧(弱势,远未到EMA)
|
|
APPROACHING = auto() # 9: K线接近EMA但未触碰(即将测试支撑/压力)
|
|
NEUTRAL = auto() # 0: 盘整/无法判断
|
|
class Chan_KL_TYPE(Enum):
|
|
K_1S = auto()
|
|
K_1M = auto()
|
|
K_DAY = auto()
|
|
K_WEEK = auto()
|
|
K_MON = auto()
|
|
K_YEAR = auto()
|
|
K_5M = auto()
|
|
K_15M = auto()
|
|
K_30M = auto()
|
|
K_60M = auto()
|
|
K_1H = auto()
|
|
K_2H = auto()
|
|
K_4H = auto()
|
|
K_6H = auto()
|
|
K_8H = auto()
|
|
K_12H = auto()
|
|
K_1D = auto()
|
|
K_3D = auto()
|
|
K_3M = auto()
|
|
K_QUARTER = auto()
|
|
|
|
|
|
class Chan_KLINE_DIR(Enum):
|
|
UP = auto()
|
|
DOWN = auto()
|
|
COMBINE = auto()
|
|
INCLUDED = auto()
|
|
class Chan_KLU_TYPE(Enum):
|
|
BigBull = auto()
|
|
MiddleBull = auto()
|
|
SmallBull = auto()
|
|
BigBear = auto()
|
|
MiddleBear = auto()
|
|
SmallBear = auto()
|
|
Cross = auto()
|
|
|
|
class Chan_KLU_PATTERN(Enum):
|
|
# 单根K线形态
|
|
HAMMER = auto() # 锤子线
|
|
INVERTED_HAMMER = auto() # 倒锤子线
|
|
SHOOTING_STAR = auto() # 射击之星
|
|
HANGING_MAN = auto() # 上吊线
|
|
DOJI = auto() # 十字星
|
|
LONG_LEGGED_DOJI = auto() # 长腿十字星
|
|
GRAVESTONE_DOJI = auto() # 墓碑十字星
|
|
DRAGONFLY_DOJI = auto() # 蜻蜓十字星
|
|
MARUBOZU = auto() # 光头光脚
|
|
SPINNING_TOP = auto() # 纺锤线
|
|
|
|
# 双根K线形态
|
|
BULLISH_ENGULFING = auto() # 看涨吞没
|
|
BEARISH_ENGULFING = auto() # 看跌吞没
|
|
PIERCING_LINE = auto() # 刺透形态
|
|
DARK_CLOUD_COVER = auto() # 乌云盖顶
|
|
TWEEZER_TOP = auto() # 镊子顶
|
|
TWEEZER_BOTTOM = auto() # 镊子底
|
|
HARAMI = auto() # 孕线
|
|
BULLISH_HARAMI = auto() # 看涨孕线
|
|
BEARISH_HARAMI = auto() # 看跌孕线
|
|
|
|
# 三根K线形态
|
|
MORNING_STAR = auto() # 早晨之星
|
|
EVENING_STAR = auto() # 黄昏之星
|
|
THREE_WHITE_SOLDIERS = auto() # 红三兵
|
|
THREE_BLACK_CROWS = auto() # 三只乌鸦
|
|
THREE_INNER_UP = auto() # 上升三法
|
|
THREE_INNER_DOWN = auto() # 下降三法
|
|
ABANDONED_BABY = auto() # 弃婴形态
|
|
|
|
# 多根K线形态
|
|
DOUBLE_TOP = auto() # 双顶
|
|
DOUBLE_BOTTOM = auto() # 双底
|
|
TRIPLE_TOP = auto() # 三顶
|
|
TRIPLE_BOTTOM = auto() # 三底
|
|
HEAD_AND_SHOULDERS = auto() # 头肩顶
|
|
INVERSE_HEAD_SHOULDERS = auto() # 头肩底
|
|
ROUNDING_BOTTOM = auto() # 圆弧底
|
|
ROUNDING_TOP = auto() # 圆弧顶
|
|
|
|
# 缺口形态
|
|
BREAKAWAY_GAP = auto() # 突破缺口
|
|
RUNAWAY_GAP = auto() # 持续缺口
|
|
EXHAUSTION_GAP = auto() # 衰竭缺口
|
|
|
|
# 特殊形态
|
|
ISLAND_REVERSAL = auto() # 岛形反转
|
|
KEY_REVERSAL = auto() # 关键反转
|
|
INSIDE_BAR = auto() # 内包线
|
|
OUTSIDE_BAR = auto() # 外包线
|
|
|
|
# 趋势形态
|
|
HIGHER_HIGH = auto() # 更高高点
|
|
HIGHER_LOW = auto() # 更高低点
|
|
LOWER_HIGH = auto() # 更低高点
|
|
LOWER_LOW = auto() # 更低低点
|
|
|
|
# 支撑阻力形态
|
|
SUPPORT_BOUNCE = auto() # 支撑反弹
|
|
RESISTANCE_REJECTION = auto() # 阻力拒绝
|
|
BREAKOUT = auto() # 突破
|
|
BREAKDOWN = auto() # 跌破
|
|
|
|
# 成交量相关形态
|
|
VOLUME_SPIKE = auto() # 成交量激增
|
|
VOLUME_DECLINE = auto() # 成交量萎缩
|
|
|
|
# 未知/无形态
|
|
UNKNOWN = auto() # 未知形态
|
|
|
|
|
|
class Chan_FX_TYPE(Enum):
|
|
BOTTOM = auto()
|
|
TOP = auto()
|
|
UNKNOWN = auto()
|
|
UP = auto()
|
|
DOWN = auto()
|
|
TT = auto()
|
|
BB = auto()
|
|
PTOP = auto()
|
|
PBOTTOM = auto()
|
|
class Chan_PRICE_TREND(Enum):
|
|
UP = auto()
|
|
DOWN = auto()
|
|
FLAT = auto()
|
|
UNKNOWN = auto()
|
|
class Chan_KLC_FX(Enum):
|
|
TOP1 = auto()
|
|
TOP2 = auto()
|
|
TOP3 = auto()
|
|
TOP4 = auto()
|
|
TOP5 = auto()
|
|
TOP6 = auto()
|
|
TOP7 = auto()
|
|
TOP8 = auto()
|
|
BOTTOM1 = auto()
|
|
BOTTOM2 = auto()
|
|
BOTTOM3 = auto()
|
|
BOTTOM4 = auto()
|
|
BOTTOM5 = auto()
|
|
BOTTOM6 = auto()
|
|
BOTTOM7 = auto()
|
|
BOTTOM8 = auto()
|
|
UNKNOWN = auto()
|
|
# 统一的MACD状态枚举,包含所有可能的状态
|
|
class Chan_MACD_STATE(Enum):
|
|
"""MACD状态枚举 - 包含所有可能的状态"""
|
|
# 穿越状态
|
|
CROSS0_UP = auto() # 穿零轴后快速向上,能量柱呈现一根比一根长的排列方式
|
|
CROSS0_DOWN = auto() # 穿零轴后快速向下,能量柱呈现一根比一根短的排列方式
|
|
|
|
CROSS_OS = auto() # 穿零轴后缠绕/粘合,黄白线沿着能量柱运行,黄白线在运行的过程中没有释放出反向能量柱
|
|
CROSS_REV = auto() # 穿零轴后倒挂,MACD黄白线在穿零轴的时候与零轴的距离比较近,同时黄白线沿着能量柱运行,在运行的过程中,能量柱衰减导致它跟黄白线之间形成夹角空位,同时黄白线产生交叉并释放反向能量柱。
|
|
|
|
# 趋势状态
|
|
NEAR0 = auto()
|
|
NEAR0_52 = auto() # 价格在EMA52附近/价格接触EMA52并马上离开,需要观察离开强度
|
|
NEAR0_DIFF = auto() # MACD白线接近零轴,价格未到EMA52
|
|
NEAR0_PERFECT = auto() # MACD白线接近零轴和价格接触或短暂击穿EMA52,而MACD黄线不穿零轴,完美形态
|
|
NEAR0_24 = auto() # MACD黄白线接近零轴和价格在EMA24附近
|
|
# 位置状态
|
|
HIGH = auto() # 高位:MACD黄白线离开能量柱到高点,能量柱最大开始减弱
|
|
HIGH_EMPTY = auto() # 高位空:MACD黄白线处于高位,能量柱衰减,与黄白线形成空间夹角
|
|
RETURN_ZERO = auto() # 归零轴:能量柱呈现一根比一根短的排列方式
|
|
RZ_UP = auto() # 归零轴后的零轴上涨
|
|
RZ_DOWN = auto() # 归零轴后的零轴下跌
|
|
UP = auto() # 穿零轴后向上
|
|
DOWN = auto() # 穿零轴后向下
|
|
PEAK = auto() # 峰值:MACD白线处于高位
|
|
# 基础状态
|
|
UNKNOWN = auto() # 未知
|
|
START = auto() # 开始
|
|
class Chan_MACDSEG_DIR(Enum):
|
|
ABOVE = auto()
|
|
UNDER = auto()
|
|
class Chan_MACDUNITTF_TYPE(Enum):
|
|
START = auto()
|
|
CROSS0 = auto()
|
|
NEAR0 = auto()
|
|
class Chan_MACDUNITTF_JUMP(Enum):
|
|
CONTUNE = auto()
|
|
DISCRETE = auto()
|
|
class Chan_MACDUNITTF_DIV(Enum):
|
|
CONTUNE = auto()
|
|
DISCRETE = auto()
|
|
UNDIV = auto()
|
|
class Chan_MACDHISTSET_DIR(Enum):
|
|
ABOVE = auto()
|
|
UNDER = auto()
|
|
class Chan_MACDUNITTF_DIR(Enum):
|
|
ABOVE = auto()
|
|
UNDER = auto()
|
|
class Chan_MACDHIST_STATE(Enum):
|
|
UP = auto()
|
|
DOWN = auto()
|
|
PEAK = auto()
|
|
UNKNOWN = auto()
|
|
|
|
class Chan_BI_DIR(Enum):
|
|
UP = auto()
|
|
DOWN = auto()
|
|
|
|
class Chan_SEG_DIR(Enum):
|
|
UP = auto()
|
|
DOWN = auto()
|
|
|
|
class Chan_BI_TYPE(Enum):
|
|
UNKNOWN = auto()
|
|
STRICT = auto()
|
|
SUB_VALUE = auto() # 次高低点成笔
|
|
TIAOKONG_THRED = auto()
|
|
DAHENG = auto()
|
|
TUIBI = auto()
|
|
UNSTRICT = auto()
|
|
TIAOKONG_VALUE = auto()
|
|
|
|
|
|
Chan_BSP_MAIN_TYPE = Literal['1', '2', '3']
|
|
|
|
class Chan_BSP_DIR(Enum):
|
|
BUY = auto()
|
|
SELL = auto()
|
|
|
|
class Chan_BSP_TYPE(Enum):
|
|
T1 = '1'
|
|
T1P = '1p'
|
|
T2 = '2'
|
|
T2S = '2s'
|
|
T3A = '3a' # 中枢在1类后面
|
|
T3B = '3b' # 中枢在1类前面
|
|
T3 = '3'
|
|
T3E ='3e' # T3退出点
|
|
QJT = 'qjt' # 区间套突破
|
|
QJT1 = 'qjt1' # 区间套一类买点
|
|
QJT2 = 'qjt2' # 区间套一类卖点
|
|
QJT3 = 'qjt3' # 区间套三类买点
|
|
def main_type(self) -> Chan_BSP_MAIN_TYPE:
|
|
return self.value[0] # type: ignore
|
|
|
|
|
|
class Chan_AUTYPE(Enum):
|
|
QFQ = auto()
|
|
HFQ = auto()
|
|
NONE = auto()
|
|
|
|
|
|
class Chan_TREND_TYPE(Enum):
|
|
MEAN = "mean"
|
|
MAX = "max"
|
|
MIN = "min"
|
|
|
|
|
|
class Chan_TREND_LINE_SIDE(Enum):
|
|
INSIDE = auto()
|
|
OUTSIDE = auto()
|
|
|
|
|
|
class Chan_LEFT_SEG_METHOD(Enum):
|
|
ALL = auto()
|
|
PEAK = auto()
|
|
|
|
|
|
class Chan_FX_CHECK_METHOD(Enum):
|
|
STRICT = auto()
|
|
LOSS = auto()
|
|
HALF = auto()
|
|
TOTALLY = auto()
|
|
|
|
|
|
class Chan_SEG_TYPE(Enum):
|
|
BI = auto()
|
|
SEG = auto()
|
|
|
|
|
|
class Chan_MACD_ALGO(Enum):
|
|
AREA = auto()
|
|
PEAK = auto()
|
|
FULL_AREA = auto()
|
|
DIFF = auto()
|
|
SLOPE = auto()
|
|
AMP = auto()
|
|
VOLUMN = auto()
|
|
AMOUNT = auto()
|
|
VOLUMN_AVG = auto()
|
|
AMOUNT_AVG = auto()
|
|
TURNRATE_AVG = auto()
|
|
RSI = auto()
|
|
|
|
|
|
class Chan_DATA_FIELD:
|
|
FIELD_TIME = "time_key"
|
|
FIELD_OPEN = "open"
|
|
FIELD_HIGH = "high"
|
|
FIELD_LOW = "low"
|
|
FIELD_CLOSE = "close"
|
|
FIELD_VOLUME = "volume" # 成交量
|
|
FIELD_TURNOVER = "turnover" # 成交额
|
|
FIELD_TURNRATE = "turnover_rate" # 换手率
|
|
|
|
|
|
Chan_TRADE_INFO_LST = [Chan_DATA_FIELD.FIELD_VOLUME, Chan_DATA_FIELD.FIELD_TURNOVER, Chan_DATA_FIELD.FIELD_TURNRATE]
|