2317 lines
84 KiB
Python
2317 lines
84 KiB
Python
# Generated from chan.py — type stubs for chanlun Rust bindings
|
||
# Auto-generated, do not edit manually
|
||
|
||
from datetime import datetime
|
||
from functools import lru_cache
|
||
from typing import Any, Callable, ClassVar, Dict, Iterator, List, Optional, Self, Sequence, Tuple, Union
|
||
|
||
__all__ = [
|
||
"K线",
|
||
"K线合成器",
|
||
"中枢",
|
||
"买卖点",
|
||
"买卖点类型",
|
||
"分型",
|
||
"分型结构",
|
||
"基础买卖点",
|
||
"平滑异同移动平均线",
|
||
"指标",
|
||
"特征分型",
|
||
"相对强弱指数",
|
||
"相对方向",
|
||
"立体分析器",
|
||
"笔",
|
||
"线段",
|
||
"线段特征",
|
||
"缠论K线",
|
||
"缠论配置",
|
||
"缺口",
|
||
"背驰分析",
|
||
"虚线",
|
||
"观察者",
|
||
"转化为时间戳",
|
||
"转化为时间戳_数字",
|
||
"随机指标",
|
||
]
|
||
|
||
class 买卖点类型(str, Enum):
|
||
"""
|
||
买卖点类型 — 缠论的三类买卖点及扩展类型。
|
||
|
||
:ivar 是买点: 是否为买入类型
|
||
:ivar 是卖点: 是否为卖出类型
|
||
"""
|
||
def __str__(self) -> str:
|
||
"""返回买卖点类型名称"""
|
||
...
|
||
def __repr__(self) -> str:
|
||
"""返回买卖点类型名称"""
|
||
...
|
||
def 是买点(self) -> bool:
|
||
"""
|
||
判断是否为买入类型(名称中含"买"字)
|
||
|
||
:return: 是否为买入类型
|
||
"""
|
||
...
|
||
def 是卖点(self) -> bool:
|
||
"""
|
||
判断是否为卖出类型(名称中含"卖"字)
|
||
|
||
:return: 是否为卖出类型
|
||
"""
|
||
...
|
||
|
||
class 基础买卖点:
|
||
"""
|
||
基础买卖点 — 描述偏离买入/卖出位置的程度。
|
||
|
||
:ivar 备注: 描述文本
|
||
:ivar 偏移: 当前K线相对于买卖点K线的偏移量
|
||
:ivar 失效偏移: 失效K线相对于买卖点K线的偏移量(-1表示未失效)
|
||
:ivar 有效性: 是否已失效(存在失效K线)
|
||
:ivar 破位值: 中枢破位价格
|
||
:ivar 与MACD柱子匹配: MACD柱子是否匹配买卖点方向
|
||
:ivar 与MACD柱子分型匹配: MACD柱子分型是否匹配
|
||
"""
|
||
@property
|
||
def 类型(self) -> 买卖点类型: ...
|
||
@类型.setter
|
||
def 类型(self, value: 买卖点类型) -> None: ...
|
||
@property
|
||
def 买卖点分型(self) -> "分型": ...
|
||
@买卖点分型.setter
|
||
def 买卖点分型(self, value: "分型") -> None: ...
|
||
@property
|
||
def 备注(self) -> str: ...
|
||
@备注.setter
|
||
def 备注(self, value: str) -> None: ...
|
||
@property
|
||
def 中枢破位值(self) -> float: ...
|
||
@中枢破位值.setter
|
||
def 中枢破位值(self, value: float) -> None: ...
|
||
def __init__(self, 类型: 买卖点类型, 当前K线: "K线", 买卖点分型: "分型", 备注: str, 中枢破位值: float) -> Any:
|
||
"""
|
||
:param 类型: 买卖点类型
|
||
:param 当前K线: 触发买卖点的K线
|
||
:param 买卖点分型: 买卖点对应的分型
|
||
:param 备注: 描述文本(如"笔_1买")
|
||
:param 中枢破位值: 中枢破位价格
|
||
"""
|
||
...
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
def 当前K线(self) -> Any:
|
||
"""当前K线"""
|
||
...
|
||
def 破位值(self) -> float:
|
||
"""
|
||
破位值
|
||
|
||
:return: float
|
||
"""
|
||
...
|
||
def 偏移(self) -> int:
|
||
"""
|
||
偏移
|
||
|
||
:return: int
|
||
"""
|
||
...
|
||
def 失效偏移(self) -> int:
|
||
"""
|
||
失效偏移
|
||
|
||
:return: int
|
||
"""
|
||
...
|
||
def 有效性(self) -> bool:
|
||
"""
|
||
有效性
|
||
|
||
:return: bool
|
||
"""
|
||
...
|
||
def 与MACD柱子匹配(self) -> bool:
|
||
"""
|
||
与MACD柱子匹配
|
||
|
||
:return: bool
|
||
"""
|
||
...
|
||
def 与MACD柱子分型匹配(self) -> bool:
|
||
"""
|
||
与MACD柱子分型匹配
|
||
|
||
:return: bool
|
||
"""
|
||
...
|
||
|
||
class 买卖点(基础买卖点):
|
||
"""
|
||
买卖点 — 一二三类买卖点构造器。
|
||
|
||
类方法:
|
||
一卖点 / 一买点 / 二卖点 / 二买点 / 三卖点 / 三买点 — 创建对应买卖点实例
|
||
生成买卖点(特征, 序号, 级别, 分型, 当前缠K) — 根据特征路由到对应构造函数
|
||
"""
|
||
@classmethod
|
||
def 一卖点(cls, 买卖点分型: "分型", 当前K线: "K线", 标识: str, 备注: str, 中枢破位值: float) -> "买卖点":
|
||
"""
|
||
:param 买卖点分型: 买卖点对应的分型
|
||
:param 当前K线: 当前K线
|
||
:param 标识: 标识(未使用,仅保持接口一致)
|
||
:param 备注: 描述文本
|
||
:param 中枢破位值: 中枢破位价格
|
||
:return: '买卖点'
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 一买点(cls, 买卖点分型: "分型", 当前K线: "K线", 标识: str, 备注: str, 中枢破位值: float) -> "买卖点":
|
||
"""
|
||
:param 买卖点分型: 买卖点对应的分型
|
||
:param 当前K线: 当前K线
|
||
:param 标识: 标识(未使用,仅保持接口一致)
|
||
:param 备注: 描述文本
|
||
:param 中枢破位值: 中枢破位价格
|
||
:return: '买卖点'
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 二卖点(cls, 买卖点分型: "分型", 当前K线: "K线", 标识: str, 备注: str, 中枢破位值: float) -> "买卖点":
|
||
"""
|
||
:param 买卖点分型: 买卖点对应的分型
|
||
:param 当前K线: 当前K线
|
||
:param 标识: 标识(未使用,仅保持接口一致)
|
||
:param 备注: 描述文本
|
||
:param 中枢破位值: 中枢破位价格
|
||
:return: '买卖点'
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 二买点(cls, 买卖点分型: "分型", 当前K线: "K线", 标识: str, 备注: str, 中枢破位值: float) -> "买卖点":
|
||
"""
|
||
:param 买卖点分型: 买卖点对应的分型
|
||
:param 当前K线: 当前K线
|
||
:param 标识: 标识(未使用,仅保持接口一致)
|
||
:param 备注: 描述文本
|
||
:param 中枢破位值: 中枢破位价格
|
||
:return: '买卖点'
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 三卖点(cls, 买卖点分型: "分型", 当前K线: "K线", 标识: str, 备注: str, 中枢破位值: float) -> "买卖点":
|
||
"""
|
||
:param 买卖点分型: 买卖点对应的分型
|
||
:param 当前K线: 当前K线
|
||
:param 标识: 标识(未使用,仅保持接口一致)
|
||
:param 备注: 描述文本
|
||
:param 中枢破位值: 中枢破位价格
|
||
:return: '买卖点'
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 三买点(cls, 买卖点分型: "分型", 当前K线: "K线", 标识: str, 备注: str, 中枢破位值: float) -> "买卖点":
|
||
"""
|
||
:param 买卖点分型: 买卖点对应的分型
|
||
:param 当前K线: 当前K线
|
||
:param 标识: 标识(未使用,仅保持接口一致)
|
||
:param 备注: 描述文本
|
||
:param 中枢破位值: 中枢破位价格
|
||
:return: '买卖点'
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 生成买卖点(cls, 特征: str, 序号: str, 级别: str, 买卖点分型: "分型", 当前缠K: "缠论K线") -> Any:
|
||
"""
|
||
:param 特征: 特征字符串
|
||
:param 序号: 序号(如"一"、"二"、"三")
|
||
:param 级别: 级别字符串
|
||
:param 买卖点分型: 买卖点对应的分型
|
||
:param 当前缠K: 当前缠论K线
|
||
"""
|
||
...
|
||
|
||
class 缠论配置:
|
||
"""
|
||
缠论配置 — 控制所有分析阶段行为的参数集(共 60+ 字段,均有默认值)。
|
||
|
||
字段分组:
|
||
[基础] 标识
|
||
[缠K] 缠K合并替换
|
||
[笔] 笔内元素数量, 笔弱化, 笔次成笔, 笔内相同终点取舍 等
|
||
[线段] 线段_特征序列忽视老阴老阳, 线段_缺口后紧急修正, 线段内部中枢图显 等
|
||
[分析开关] 分析笔, 分析线段, 分析扩展线段, 分析笔中枢, 分析线段中枢
|
||
[指标] 计算指标, 指标计算方式, MACD/RSI/KDJ 参数
|
||
[推送/显示] 图表展示, 推送K线/笔/线段/中枢, 图表展示_笔 等细分开关
|
||
[买卖点] 买卖点偏移, 买卖点激进识别, 买卖点_背离率, 买卖点_计算方式 等
|
||
[背驰] 线段内部背驰_MACD, 线段内部背驰_斜率 等
|
||
[其他] 手动终止, 加载文件路径
|
||
|
||
方法:
|
||
to_dict() / to_json() / 保存配置(path?) / 加载配置(path?) (classmethod)
|
||
from_dict(data) (classmethod) / from_json(json_str) (classmethod)
|
||
不推送() (classmethod) / 对比(other) -> dict
|
||
"""
|
||
@model_validator(mode="before")
|
||
def 兼容旧版本配置(self, values: Dict[str, Any]) -> Dict[str, Any]:
|
||
"""
|
||
自动兼容:
|
||
1. 旧版本少字段 → 使用默认值
|
||
2. 新版本多字段 → 自动忽略多余字段
|
||
3. 字段改名/删除 → 不报错
|
||
|
||
:param values: 原始配置字典
|
||
:return: 兼容后的字典
|
||
"""
|
||
...
|
||
@field_validator("*", mode="wrap")
|
||
def bool_parse_fallback_default(self, value: Any, handler: Any, info: Any) -> Any:
|
||
"""
|
||
:param value: 待验证的值
|
||
:param handler: 默认验证器
|
||
:param info: 字段信息
|
||
:return: 验证后的值
|
||
"""
|
||
...
|
||
def to_dict(self) -> dict:
|
||
"""对象 → 字典"""
|
||
...
|
||
def to_json(self) -> str:
|
||
"""对象 → JSON字符串"""
|
||
...
|
||
def 保存配置(self, path: Any = "缠论配置.json") -> Any:
|
||
"""
|
||
将配置保存为JSON文件
|
||
:param path: 保存路径,默认"缠论配置.json"
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 加载配置(path: Any = "缠论配置.json") -> "缠论配置":
|
||
"""
|
||
从JSON文件加载配置
|
||
:param path: 配置文件路径
|
||
:return: 缠论配置实例
|
||
"""
|
||
...
|
||
@classmethod
|
||
def from_dict(cls, data: dict) -> "缠论配置":
|
||
"""
|
||
:param data: 字典数据
|
||
:return: 缠论配置实例
|
||
"""
|
||
...
|
||
@classmethod
|
||
def from_json(cls, json_str: str) -> "缠论配置":
|
||
"""
|
||
:param json_str: JSON字符串
|
||
:return: 缠论配置实例
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 不推送(cls) -> Any:
|
||
"""
|
||
创建不推送任何图表的静默配置(用于纯计算场景)
|
||
|
||
:return: 新缠论配置实例
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 按序号重组字典(cls, 默认配置: Any, 原始字典: dict) -> dict:
|
||
"""
|
||
将形如 "1_open", "1_close", "2_open", "name" 的字典重组为嵌套结构
|
||
{
|
||
"1_open": 10,
|
||
"1_close": 11,
|
||
"2_open": 20,
|
||
"name": "BTC", # 无法拆分
|
||
"time": 123456 # 无法拆分
|
||
}
|
||
转化为
|
||
{
|
||
1: {"open": 10, "close": 11},
|
||
2: {"open": 20},
|
||
"无法拆分": {
|
||
"name": "BTC",
|
||
"time": 123456
|
||
}
|
||
}
|
||
|
||
:param 默认配置: 默认配置实例
|
||
:param 原始字典: 待重组的原始字典
|
||
:return: 重组后的字典
|
||
"""
|
||
...
|
||
def 对比(self, other: "缠论配置") -> dict:
|
||
"""
|
||
比较当前配置与另一个配置的差异
|
||
|
||
:param other: 另一个配置实例
|
||
:return: {
|
||
"字段名": {
|
||
"旧值": 当前配置的值,
|
||
"新值": 另一个配置的值
|
||
},
|
||
...
|
||
}
|
||
仅当值不同时才包含该字段
|
||
"""
|
||
...
|
||
|
||
class 相对方向(Enum):
|
||
"""
|
||
相对方向 — 描述两个K线/分型之间相对位置关系的枚举。
|
||
|
||
类属性: 向上, 向下, 向上缺口, 向下缺口, 衔接向上, 衔接向下, 顺, 逆, 同
|
||
|
||
:ivar 是否向上: 判断是否为向上方向
|
||
:ivar 是否向下: 判断是否为向下方向
|
||
:ivar 是否包含: 判断是否为包含关系
|
||
:ivar 是否缺口: 判断是否有缺口
|
||
:ivar 是否衔接: 判断是否为首尾衔接
|
||
"""
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
def 翻转(self) -> "相对方向":
|
||
"""返回方向的对立面:向上↔向下, 向上缺口↔向下缺口, 顺↔逆, 衔接向上↔衔接向下, 同不变"""
|
||
...
|
||
def 是否向上(self) -> bool:
|
||
"""判断是否为向上方向(向上/向上缺口/衔接向上)"""
|
||
...
|
||
def 是否向下(self) -> bool:
|
||
"""判断是否为向下方向(向下/向下缺口/衔接向下)"""
|
||
...
|
||
def 是否包含(self) -> bool:
|
||
"""判断是否为包含关系(顺/逆/同)"""
|
||
...
|
||
def 是否缺口(self) -> bool:
|
||
"""判断是否有缺口(向下缺口/向上缺口)"""
|
||
...
|
||
def 是否衔接(self) -> bool:
|
||
"""判断是否为首尾衔接(衔接向下/衔接向上)"""
|
||
...
|
||
@classmethod
|
||
def 分析(cls, 前高: float, 前低: float, 后高: float, 后低: float) -> "相对方向":
|
||
"""
|
||
分析两个价格区间(前、后)的相对位置关系。
|
||
|
||
:param 前高: 前方价格区间的最高价
|
||
:param 前低: 前方价格区间的最低价
|
||
:param 后高: 后方价格区间的最高价
|
||
:param 后低: 后方价格区间的最低价
|
||
:return: 相对方向枚举值(向上/向下/向上缺口/向下缺口/衔接向上/衔接向下/顺/逆/同)
|
||
:raises RuntimeError: 无法识别的方向
|
||
"""
|
||
...
|
||
|
||
class 分型结构(Enum):
|
||
"""
|
||
分型结构 — 描述三根K线构成的顶底分型形态。
|
||
|
||
类属性: 上, 下, 顶, 底, 散
|
||
"""
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
@classmethod
|
||
def 分析(cls, 左: Any, 中: Any, 右: Any, 可以逆序包含: bool = False, 忽视顺序包含: bool = False) -> Optional["分型结构"]:
|
||
"""
|
||
分析左中右三个元素构成的分型形态。
|
||
|
||
:param 左: 左侧元素(必须有 高/低 属性)
|
||
:param 中: 中间元素
|
||
:param 右: 右侧元素
|
||
:param 可以逆序包含: True 时允许逆序包含关系(如 右>左>中)
|
||
:param 忽视顺序包含: True 时跳过顺序包含检查(如 左>中>右)
|
||
:return: 分型结构(顶/底/上/下/散),无法判定返回 None
|
||
"""
|
||
...
|
||
|
||
class 缺口:
|
||
"""
|
||
缺口 — 描述价格区间之间的缺口(未重叠部分)。
|
||
|
||
:ivar 高: 缺口上沿
|
||
:ivar 低: 缺口下沿
|
||
"""
|
||
@property
|
||
def 高(self) -> float: ...
|
||
@高.setter
|
||
def 高(self, value: float) -> None: ...
|
||
@property
|
||
def 低(self) -> float: ...
|
||
@低.setter
|
||
def 低(self, value: float) -> None: ...
|
||
def __init__(self, 高: float, 低: float) -> None:
|
||
"""
|
||
:param 高: 缺口上沿
|
||
:param 低: 缺口下沿
|
||
"""
|
||
...
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
@classmethod
|
||
def 居中截取区间(cls, 起点: float, 终点: float, 比例: float = 0.15) -> Optional["缺口"]:
|
||
"""
|
||
以原区间中心为基准,向两侧各取总长度的 `比例` 作为新区间。
|
||
如果新区间超出原边界则裁剪到边界;若完全越界则返回 None。
|
||
|
||
:param 起点: 区间起始值
|
||
:param 终点: 区间结束值
|
||
:param 比例: 向两侧扩展的长度占总长度的比例(0~1 之间)
|
||
:return: Optional[缺口]
|
||
"""
|
||
...
|
||
|
||
class 指标:
|
||
"""指标 — 静态工具类,提供K线取值的辅助方法。"""
|
||
@classmethod
|
||
def K线取值(cls, k线: "K线", 指标计算方式: Any) -> Any:
|
||
"""
|
||
根据计算方式从K线中取值
|
||
|
||
:param k线: K线对象
|
||
:param 指标计算方式: "开"/"高"/"低"/"收"/"高低均值"/"高低收均值"/"开高低收均值"
|
||
:return: 对应价格
|
||
"""
|
||
...
|
||
|
||
class 平滑异同移动平均线:
|
||
"""
|
||
平滑异同移动平均线(MACD)— 基于EMA快慢线差值的趋势指标。
|
||
|
||
计算字段(输入):
|
||
时间戳: datetime / 收盘价: float
|
||
快线周期: int (默认12) / 慢线周期: int (默认26) / 信号周期: int (默认9)
|
||
|
||
输出字段:
|
||
EMA快线: float — 短期EMA值
|
||
EMA慢线: float — 长期EMA值
|
||
DIF: float — 快线减慢线
|
||
DEA: float — DIF的信号线EMA
|
||
MACD柱子: float — DIF减DEA
|
||
"""
|
||
@classmethod
|
||
def 首次计算(cls, 初始收盘价: float, 初始时间: datetime, 快线周期: int = 12, 慢线周期: int = 26, 信号周期: int = 9) -> "平滑异同移动平均线":
|
||
"""
|
||
首次计算MACD指标(没有历史数据时使用)
|
||
|
||
:param 初始收盘价: 第一个数据点的收盘价
|
||
:param 初始时间: 第一个数据点的时间戳
|
||
:param 快线周期: 快线EMA周期
|
||
:param 慢线周期: 慢线EMA周期
|
||
:param 信号周期: 信号线EMA周期
|
||
:return: MACD指标对象
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 首次计算_K线(cls, k线: "K线", 计算方式: str, 快线周期: int = 12, 慢线周期: int = 26, 信号周期: int = 9) -> "平滑异同移动平均线":
|
||
"""
|
||
:param k线: 原始K线
|
||
:param 计算方式: 指标计算方式(开/高/低/收/均值等)
|
||
:param 快线周期: 快线EMA周期
|
||
:param 慢线周期: 慢线EMA周期
|
||
:param 信号周期: 信号线EMA周期
|
||
:return: MACD指标对象
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 增量计算(cls, 前一个MACD: "平滑异同移动平均线", 当前收盘价: float, 当前时间: datetime) -> "平滑异同移动平均线":
|
||
"""
|
||
基于前一个MACD指标增量计算当前MACD指标
|
||
适用于实时交易系统或流式数据处理
|
||
|
||
:param 前一个MACD: 前一个周期的MACD指标对象
|
||
:param 当前收盘价: 当前K线的收盘价
|
||
:param 当前时间: 当前K线的时间戳
|
||
:return: 当前MACD指标对象
|
||
:raises RuntimeError: 前一个MACD中快线EMA或慢线EMA为None时抛出
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 增量计算_K线(cls, 前一个MACD: "平滑异同移动平均线", 当前K线: "K线", 计算方式: "str") -> "平滑异同移动平均线":
|
||
"""
|
||
:param 前一个MACD: 前一个MACD指标对象
|
||
:param 当前K线: 当前K线
|
||
:param 计算方式: 指标计算方式
|
||
:return: 当前MACD指标对象
|
||
"""
|
||
...
|
||
|
||
class 相对强弱指数:
|
||
"""
|
||
相对强弱指数 (RSI) 指标
|
||
使用 Wilder 平滑(RMA)进行增量计算,提供完整的中间平滑值,
|
||
并支持对RSI值计算SMA(简单移动平均)
|
||
"""
|
||
@classmethod
|
||
def 首次计算(cls, 初始收盘价: float, 初始时间: datetime, 周期: int = 14, 超买阈值: float = 70.0, 超卖阈值: float = 30.0, RSI_SMA周期: Optional[int] = None) -> "相对强弱指数":
|
||
"""
|
||
首次计算RSI(没有足够历史数据时使用)
|
||
此时无法计算真实RSI,设为 None,但记录初始收盘价作为起点
|
||
|
||
:param 初始收盘价: 第一个数据点的收盘价
|
||
:param 初始时间: 第一个数据点的时间戳
|
||
:param 周期: RSI周期
|
||
:param 超买阈值: 超买阈值
|
||
:param 超卖阈值: 超卖阈值
|
||
:param RSI_SMA周期: RSI的SMA周期(可选)
|
||
:return: RSI指标对象
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 首次计算_K线(cls, k线: "K线", 计算方式: str, 周期: int = 14, 超买阈值: float = 70.0, 超卖阈值: float = 30.0, RSI_SMA周期: Optional[int] = None) -> "相对强弱指数":
|
||
"""
|
||
:param k线: 原始K线
|
||
:param 计算方式: 指标计算方式
|
||
:param 周期: RSI周期
|
||
:param 超买阈值: 超买阈值
|
||
:param 超卖阈值: 超卖阈值
|
||
:param RSI_SMA周期: RSI的SMA周期
|
||
:return: RSI指标对象
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 增量计算(cls, 前一个RSI: "相对强弱指数", 当前收盘价: float, 当前时间: datetime) -> "相对强弱指数":
|
||
"""
|
||
基于前一个RSI指标增量计算当前RSI
|
||
支持可选的RSI_SMA(简单移动平均)
|
||
|
||
:param 前一个RSI: 前一个RSI指标对象
|
||
:param 当前收盘价: 当前收盘价
|
||
:param 当前时间: 当前时间戳
|
||
:return: 当前RSI指标对象
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 增量计算_K线(cls, 前一个RSI: "相对强弱指数", 当前K线: "K线", 计算方式: "str") -> "相对强弱指数":
|
||
"""
|
||
:param 前一个RSI: 前一个RSI指标对象
|
||
:param 当前K线: 当前K线
|
||
:param 计算方式: 指标计算方式
|
||
:return: 当前RSI指标对象
|
||
"""
|
||
...
|
||
|
||
class 随机指标:
|
||
"""
|
||
KDJ 随机指标 (Stochastic Oscillator)
|
||
使用标准参数:N=9, M1=3, M2=3
|
||
支持增量计算,需提供当前K线的最高价、最低价、收盘价
|
||
"""
|
||
@classmethod
|
||
def 首次计算(cls, 初始最高价: float, 初始最低价: float, 初始收盘价: float, 初始时间: datetime, N: int = 9, M1: int = 3, M2: int = 3, 超买阈值: float = 80.0, 超卖阈值: float = 20.0) -> "随机指标":
|
||
"""
|
||
首次计算KDJ(无历史数据时)
|
||
此时无法计算RSV和K/D/J,仅记录初始三价,初始化队列
|
||
|
||
:param 初始最高价: 第一个数据点的最高价
|
||
:param 初始最低价: 第一个数据点的最低价
|
||
:param 初始收盘价: 第一个数据点的收盘价
|
||
:param 初始时间: 第一个数据点的时间戳
|
||
:param N: RSV周期
|
||
:param M1: K值平滑周期
|
||
:param M2: D值平滑周期
|
||
:param 超买阈值: 超买阈值
|
||
:param 超卖阈值: 超卖阈值
|
||
:return: KDJ指标对象
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 首次计算_K线(cls, k线: "K线", 计算方式: str, RSV周期: int = 9, K值平滑周期: int = 3, D值平滑周期: int = 3, 超买阈值: float = 80.0, 超卖阈值: float = 20.0) -> "随机指标":
|
||
"""
|
||
:param k线: 原始K线
|
||
:param 计算方式: 指标计算方式(未使用,仅为接口一致)
|
||
:param RSV周期: RSV周期
|
||
:param K值平滑周期: K值平滑周期
|
||
:param D值平滑周期: D值平滑周期
|
||
:param 超买阈值: 超买阈值
|
||
:param 超卖阈值: 超卖阈值
|
||
:return: KDJ指标对象
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 增量计算(cls, 前一个KDJ: "随机指标", 当前最高价: float, 当前最低价: float, 当前收盘价: float, 当前时间: datetime) -> "随机指标":
|
||
"""
|
||
基于前一个KDJ对象和当前三价,增量计算当前KDJ值
|
||
|
||
:param 前一个KDJ: 前一个KDJ指标对象
|
||
:param 当前最高价: 当前最高价
|
||
:param 当前最低价: 当前最低价
|
||
:param 当前收盘价: 当前收盘价
|
||
:param 当前时间: 当前时间戳
|
||
:return: 当前KDJ指标对象
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 增量计算_K线(cls, 前一个KDJ: "随机指标", 当前K线: "K线", 计算方式: "str") -> "随机指标":
|
||
"""
|
||
:param 前一个KDJ: 前一个KDJ指标对象
|
||
:param 当前K线: 当前K线
|
||
:param 计算方式: 指标计算方式(未使用,仅为接口一致)
|
||
:return: 当前KDJ指标对象
|
||
"""
|
||
...
|
||
|
||
class 背驰分析:
|
||
"""
|
||
背驰分析 — 静态方法容器,提供背驰/背离检测算法。
|
||
|
||
方法:
|
||
MACD背驰(进入段, 离开段, K线序列, 方式?) — MACD柱状线面积背驰
|
||
斜率背驰(进入段, 离开段, 序列, 配置?) — 线段斜率背驰
|
||
测度背驰(进入段, 离开段, 序列, 配置?) — 线段测度背驰
|
||
全量背驰(进入段, 离开段, ...) — 综合所有背驰检测方式
|
||
配置背驰(进入段, 离开段, ...) — 根据配置选择检测方式
|
||
"""
|
||
@staticmethod
|
||
def MACD背驰(进入段: "虚线", 离开段: "虚线", K线序列: List["K线"], 方式: str = "总") -> bool:
|
||
"""
|
||
MACD柱状线面积背驰
|
||
|
||
:param 进入段: 进入中枢的虚线
|
||
:param 离开段: 离开中枢的虚线
|
||
:param K线序列: 完整K线序列
|
||
:param 方式: "总" 或 "阳"/"阴"
|
||
:return: 背驰为True
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 斜率背驰(进入段: "虚线", 离开段: "虚线") -> bool:
|
||
"""
|
||
价格斜率背驰
|
||
|
||
:param 进入段: 进入中枢的虚线
|
||
:param 离开段: 离开中枢的虚线
|
||
:return: 背驰为True
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 测度背驰(进入段: "虚线", 离开段: "虚线") -> bool:
|
||
"""
|
||
价格测度背驰(欧氏距离)
|
||
|
||
:param 进入段: 进入中枢的虚线
|
||
:param 离开段: 离开中枢的虚线
|
||
:return: 背驰为True
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 全量背驰(进入段: "虚线", 离开段: "虚线", 普K序列: List["K线"]) -> bool:
|
||
"""
|
||
判断是否满足全部三种背驰条件(MACD + 测度 + 斜率)
|
||
|
||
:param 进入段: 进入中枢的线段
|
||
:param 离开段: 离开中枢的线段
|
||
:param 普K序列: 完整K线序列
|
||
:return: 三者全满足返回True
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 任意背驰(进入段: "虚线", 离开段: "虚线", 普K序列: List["K线"]) -> bool:
|
||
"""
|
||
判断是否满足任一背驰条件
|
||
|
||
:param 进入段: 进入中枢的线段
|
||
:param 离开段: 离开中枢的线段
|
||
:param 普K序列: 完整K线序列
|
||
:return: 任一满足返回True
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 配置背驰(进入段: "虚线", 离开段: "虚线", 普K序列: List["K线"], 配置: 缠论配置) -> bool:
|
||
"""
|
||
根据配置选择对应的背驰检测组合
|
||
|
||
:param 进入段: 进入中枢的线段
|
||
:param 离开段: 离开中枢的线段
|
||
:param 普K序列: 完整K线序列
|
||
:param 配置: 缠论配置(控制MACD/测度/斜率开关)
|
||
:return: 背驰结果
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 任选背驰(进入段: "虚线", 离开段: "虚线", 普K序列: List["K线"]) -> bool:
|
||
"""
|
||
三个背驰条件中至少两个满足即视为背驰
|
||
|
||
:param 进入段: 进入中枢的线段
|
||
:param 离开段: 离开中枢的线段
|
||
:param 普K序列: 完整K线序列
|
||
:return: 至少两个满足返回True
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 背驰模式(进入段: "虚线", 离开段: "虚线", 普K序列: List["K线"], 配置: 缠论配置, 模式: str) -> bool:
|
||
"""
|
||
根据模式字符串选择背驰检测策略
|
||
|
||
:param 进入段: 进入中枢的线段
|
||
:param 离开段: 离开中枢的线段
|
||
:param 普K序列: 完整K线序列
|
||
:param 配置: 缠论配置
|
||
:param 模式: "全量"/"任意"/"配置"/"相对"
|
||
:return: 背驰结果
|
||
"""
|
||
...
|
||
|
||
class K线(object):
|
||
"""
|
||
原始 K 线 — OHLCV 数据,可内嵌 MACD/RSI/KDJ 指标。
|
||
|
||
:ivar 标识: 标识符
|
||
:ivar 序号: 序号
|
||
:ivar 周期: K线周期(秒)
|
||
:ivar 时间戳: 时间戳
|
||
:ivar 高: 最高价
|
||
:ivar 低: 最低价
|
||
:ivar 开盘价: 开盘价
|
||
:ivar 收盘价: 收盘价
|
||
:ivar 成交量: 成交量
|
||
:ivar macd: MACD指标对象
|
||
:ivar rsi: RSI指标对象
|
||
:ivar kdj: KDJ指标对象
|
||
:ivar 方向: 涨跌方向(只读)
|
||
"""
|
||
@property
|
||
def 标识(self) -> str: ...
|
||
@标识.setter
|
||
def 标识(self, value: str) -> None: ...
|
||
@property
|
||
def 序号(self) -> int: ...
|
||
@序号.setter
|
||
def 序号(self, value: int) -> None: ...
|
||
@property
|
||
def 周期(self) -> int: ...
|
||
@周期.setter
|
||
def 周期(self, value: int) -> None: ...
|
||
@property
|
||
def 时间戳(self) -> datetime: ...
|
||
@时间戳.setter
|
||
def 时间戳(self, value: datetime) -> None: ...
|
||
@property
|
||
def 开盘价(self) -> float: ...
|
||
@开盘价.setter
|
||
def 开盘价(self, value: float) -> None: ...
|
||
@property
|
||
def 最高价(self) -> float: ...
|
||
@最高价.setter
|
||
def 最高价(self, value: float) -> None: ...
|
||
@property
|
||
def 最低价(self) -> float: ...
|
||
@最低价.setter
|
||
def 最低价(self, value: float) -> None: ...
|
||
@property
|
||
def 收盘价(self) -> float: ...
|
||
@收盘价.setter
|
||
def 收盘价(self, value: float) -> None: ...
|
||
@property
|
||
def 成交量(self) -> float: ...
|
||
@成交量.setter
|
||
def 成交量(self, value: float) -> None: ...
|
||
@property
|
||
def macd(self) -> 平滑异同移动平均线: ...
|
||
@macd.setter
|
||
def macd(self, value: 平滑异同移动平均线) -> None: ...
|
||
@property
|
||
def rsi(self) -> 相对强弱指数: ...
|
||
@rsi.setter
|
||
def rsi(self, value: 相对强弱指数) -> None: ...
|
||
@property
|
||
def kdj(self) -> 随机指标: ...
|
||
@kdj.setter
|
||
def kdj(self, value: 随机指标) -> None: ...
|
||
def __init__(self, 标识: str, 序号: int, 周期: int, 时间戳: datetime, 开盘价: float, 最高价: float, 最低价: float, 收盘价: float, 成交量: float, macd: 平滑异同移动平均线 = None, rsi: 相对强弱指数 = None, kdj: 随机指标 = None) -> Any:
|
||
"""
|
||
:param 标识: K线标识符
|
||
:param 序号: K线序号
|
||
:param 周期: K线周期(秒)
|
||
:param 时间戳: K线时间
|
||
:param 开盘价: 开盘价
|
||
:param 最高价: 最高价
|
||
:param 最低价: 最低价
|
||
:param 收盘价: 收盘价
|
||
:param 成交量: 成交量
|
||
:param macd: MACD指标对象(可选)
|
||
:param rsi: RSI指标对象(可选)
|
||
:param kdj: KDJ指标对象(可选)
|
||
"""
|
||
...
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
def 方向(self) -> 相对方向:
|
||
""":return: 相对方向.向上(开盘<收盘)或 相对方向.向下(开盘>收盘)"""
|
||
...
|
||
def __bytes__(self) -> bytes: ...
|
||
@classmethod
|
||
def 创建普K(cls, 标识: str, 时间戳: datetime, 开盘价: float, 最高价: float, 最低价: float, 收盘价: float, 成交量: float, 序号: int, 周期: int) -> "K线":
|
||
"""
|
||
快捷构造普通K线
|
||
|
||
:param 标识: K线标识符
|
||
:param 时间戳: K线时间
|
||
:param 开盘价: 开盘价
|
||
:param 最高价: 最高价
|
||
:param 最低价: 最低价
|
||
:param 收盘价: 收盘价
|
||
:param 成交量: 成交量
|
||
:param 序号: K线序号
|
||
:param 周期: K线周期(秒)
|
||
:return: K线实例
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 保存到DAT文件(cls, 路径: str, K线序列: List["K线"]) -> Any:
|
||
"""
|
||
将K线序列保存为二进制DAT文件
|
||
|
||
:param 路径: 保存路径
|
||
:param K线序列: K线列表
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 读取大端字节数组(cls, 字节组: bytes, 周期: int, 标识: str) -> "K线":
|
||
"""
|
||
从大端字节序二进制数据反序列化K线(兼容.dat/.nb文件格式)
|
||
|
||
:param 字节组: 二进制数据(48字节)
|
||
:param 周期: 周期(秒)
|
||
:param 标识: K线标识
|
||
:return: K线实例
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 获取MACD(cls, K线序列: List["K线"], 始: "K线", 终: "K线") -> Dict[str, float]:
|
||
"""
|
||
计算指定K线区间的MACD柱面积
|
||
|
||
:param K线序列: 完整K线序列
|
||
:param 始: 起始K线
|
||
:param 终: 终点K线
|
||
:return: {"阳": 正值面积和, "阴": 负值面积和, "合": 净面积, "总": 绝对面积和}
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 截取(序列: List["K线"], 始: "K线", 终: "K线") -> List["K线"]:
|
||
"""
|
||
按起止K线截取K线子序列
|
||
|
||
:param 序列: 完整K线序列
|
||
:param 始: 起始K线
|
||
:param 终: 终点K线
|
||
:return: K线子列表
|
||
"""
|
||
...
|
||
|
||
class 缠论K线(object):
|
||
"""
|
||
缠论K线 — 经包含处理后的标准化K线,有方向和分型结构标记。
|
||
|
||
:ivar 序号: 序号
|
||
:ivar 时间戳: 时间戳
|
||
:ivar 高: 最高价
|
||
:ivar 低: 最低价
|
||
:ivar 方向: 运行方向
|
||
:ivar 分型: 分型结构(顶/底/上/下等)
|
||
:ivar 周期: 周期(秒)
|
||
:ivar 标识: 标识符
|
||
:ivar 分型特征值: 分型特征值(顶取高,底取低)
|
||
:ivar 原始起始序号: 合并前的原始K线起始序号
|
||
:ivar 原始结束序号: 合并前的原始K线结束序号
|
||
:ivar 标的K线: 对应的原始K线
|
||
:ivar 买卖点信息: 买卖点信息(预留)
|
||
"""
|
||
@property
|
||
def 序号(self) -> int: ...
|
||
@序号.setter
|
||
def 序号(self, value: int) -> None: ...
|
||
@property
|
||
def 时间戳(self) -> datetime: ...
|
||
@时间戳.setter
|
||
def 时间戳(self, value: datetime) -> None: ...
|
||
@property
|
||
def 最高价(self) -> float: ...
|
||
@最高价.setter
|
||
def 最高价(self, value: float) -> None: ...
|
||
@property
|
||
def 最低价(self) -> float: ...
|
||
@最低价.setter
|
||
def 最低价(self, value: float) -> None: ...
|
||
@property
|
||
def 最终方向(self) -> 相对方向: ...
|
||
@最终方向.setter
|
||
def 最终方向(self, value: 相对方向) -> None: ...
|
||
@property
|
||
def 普K(self) -> "K线": ...
|
||
@普K.setter
|
||
def 普K(self, value: "K线") -> None: ...
|
||
@property
|
||
def 原始起始序号(self) -> int: ...
|
||
@原始起始序号.setter
|
||
def 原始起始序号(self, value: int) -> None: ...
|
||
@property
|
||
def 原始结束序号(self) -> int: ...
|
||
@原始结束序号.setter
|
||
def 原始结束序号(self, value: int) -> None: ...
|
||
@property
|
||
def 分型(self) -> Optional[分型结构]: ...
|
||
@分型.setter
|
||
def 分型(self, value: Optional[分型结构]) -> None: ...
|
||
def __init__(self, 序号: int, 时间戳: datetime, 最高价: float, 最低价: float, 最终方向: 相对方向, 普K: "K线", 原始起始序号: int, 原始结束序号: int, 分型: Optional[分型结构] = None) -> Any:
|
||
"""
|
||
:param 序号: 缠论K线序号
|
||
:param 时间戳: 时间戳
|
||
:param 最高价: 最高价
|
||
:param 最低价: 最低价
|
||
:param 最终方向: 方向
|
||
:param 普K: 对应的原始K线
|
||
:param 原始起始序号: 合并起始序号
|
||
:param 原始结束序号: 合并结束序号
|
||
:param 分型: 分型结构(可选)
|
||
"""
|
||
...
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
def 镜像(self) -> Any:
|
||
"""
|
||
创建当前缠K的浅拷贝副本
|
||
|
||
:return: 新的缠论K线实例
|
||
"""
|
||
...
|
||
def 与MACD柱子匹配(self) -> bool:
|
||
""":return: 底分型时MACD柱<0,顶分型时MACD柱>0"""
|
||
...
|
||
def 与RSI匹配(self) -> bool:
|
||
""":return: 底分型时RSI < RSI_SMA,顶分型时RSI > RSI_SMA"""
|
||
...
|
||
def 与KDJ匹配(self) -> bool:
|
||
""":return: 底分型时K<D,顶分型时K>D"""
|
||
...
|
||
@classmethod
|
||
def 时间戳对齐(cls, 基线: List["缠论K线"], k线: "缠论K线") -> Any:
|
||
"""
|
||
在基线序列中找到与k线时间戳对齐的时间戳
|
||
|
||
:param 基线: 参照缠K序列
|
||
:param k线: 需要对齐的缠K
|
||
:return: 对齐后的时间戳
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 创建缠K(cls, 时间戳: datetime, 高: float, 低: float, 方向: 相对方向, 结构: 分型结构, 原始序号: int, 普k: "K线", 之前: Optional["缠论K线"] = None) -> "缠论K线":
|
||
"""
|
||
创建新的缠论K线
|
||
|
||
:param 时间戳: K线时间
|
||
:param 高: 最高价
|
||
:param 低: 最低价
|
||
:param 方向: K线运行方向
|
||
:param 结构: 分型结构
|
||
:param 原始序号: 原始K线序号
|
||
:param 普k: 标的原始K线
|
||
:param 之前: 前一缠K(可选,自动校验包含关系)
|
||
:return: 缠论K线实例
|
||
:raises ValueError: 包含关系错误
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 兼并(cls, 之前缠K: Optional["缠论K线"], 当前缠K: "缠论K线", 当前普K: "K线", 配置: 缠论配置) -> Tuple[Optional["缠论K线"], Optional[str]]:
|
||
"""
|
||
K线包含处理(合并)
|
||
|
||
:param 之前缠K: 前一缠K
|
||
:param 当前缠K: 当前待处理的缠K
|
||
:param 当前普K: 当前原始K线
|
||
:param 配置: 缠论配置
|
||
:return: (新缠K或None, 操作模式:"添加"/"替换"/None)
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 分析(cls, 当前K线: "K线", 缠K序列: List["缠论K线"], 普K序列: List["K线"], 配置: 缠论配置) -> tuple[str, Optional["分型"]]:
|
||
"""
|
||
分析K线,执行指标计算+包含处理+分型判定
|
||
|
||
:param 当前K线: 新到的原始K线
|
||
:param 缠K序列: 现有缠K序列(会被原地修改)
|
||
:param 普K序列: 现有普K序列(会被原地修改)
|
||
:param 配置: 缠论配置
|
||
:return: (操作状态, 新形成的分型或None)
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 截取(序列: List["缠论K线"], 始: "缠论K线", 终: "缠论K线") -> List["缠论K线"]:
|
||
"""
|
||
:param 序列: 缠K序列
|
||
:param 始: 起始缠K
|
||
:param 终: 终点缠K
|
||
:return: 缠K子列表
|
||
"""
|
||
...
|
||
|
||
class 分型(object):
|
||
"""
|
||
分型 — 由左中右三根缠论K线构成的顶/底分型结构。
|
||
|
||
:ivar 左: 左侧缠K(可能为None)
|
||
:ivar 中: 中间缠K(分型顶点/底点)
|
||
:ivar 右: 右侧缠K(可能为None)
|
||
:ivar 结构: 分型结构(顶/底/上/下/包含)
|
||
:ivar 时间戳: 分型时间戳
|
||
:ivar 分型特征值: 顶分型取最高价,底分型取最低价
|
||
:ivar 关系组: 左中、中右、左右三对相对方向
|
||
:ivar 强度: 分型强度(强/中/弱/未知)
|
||
:ivar 与MACD柱子分型匹配: 是否与MACD柱子分型匹配
|
||
"""
|
||
@property
|
||
def 左(self) -> Optional[缠论K线]: ...
|
||
@左.setter
|
||
def 左(self, value: Optional[缠论K线]) -> None: ...
|
||
@property
|
||
def 中(self) -> 缠论K线: ...
|
||
@中.setter
|
||
def 中(self, value: 缠论K线) -> None: ...
|
||
@property
|
||
def 右(self) -> Optional[缠论K线]: ...
|
||
@右.setter
|
||
def 右(self, value: Optional[缠论K线]) -> None: ...
|
||
def __init__(self, 左: Optional[缠论K线], 中: 缠论K线, 右: Optional[缠论K线]) -> Any:
|
||
"""
|
||
:param 左: 左侧缠K
|
||
:param 中: 中间缠K
|
||
:param 右: 右侧缠K
|
||
"""
|
||
...
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
def 关系组(self) -> Optional[Tuple[相对方向, 相对方向, 相对方向]]:
|
||
"""
|
||
左、中、右三对相对方向关系
|
||
|
||
:return: (左中关系, 中右关系, 左右关系) 或 None
|
||
"""
|
||
...
|
||
def 强度(self) -> Any:
|
||
"""
|
||
分型强度(强/中/弱/未知)
|
||
|
||
:return: 强度字符串
|
||
"""
|
||
...
|
||
def 与MACD柱子分型匹配(self) -> bool:
|
||
""":return: 底分型时左右MACD柱 > 中MACD柱,顶分型时左右MACD柱 < 中MACD柱"""
|
||
...
|
||
@classmethod
|
||
def 判断分型(cls, 左: "分型", 右: "分型", 模式: str = "中") -> bool:
|
||
"""
|
||
判断两个分型是否相同(identity比较)
|
||
|
||
:param 左: 左分型
|
||
:param 右: 右分型
|
||
:param 模式: 比较模式(默认"中")
|
||
:return: 是否为同一对象
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 从缠K序列中获取分型(K线序列: List[缠论K线], 中: 缠论K线) -> "分型":
|
||
"""
|
||
从缠K序列中提取以指定缠K为中元素的分型
|
||
|
||
:param K线序列: 缠K列表
|
||
:param 中: 中间K线
|
||
:return: 分型实例(右可能为None)
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 向序列中添加(分型序列: List["分型"], 当前分型: "分型") -> Any:
|
||
"""
|
||
向分型序列尾部添加,自动校验顶底交替
|
||
|
||
:param 分型序列: 现有分型列表
|
||
:param 当前分型: 待添加分型
|
||
:raises ValueError: 首元素非顶底、连续同向分型时抛出
|
||
"""
|
||
...
|
||
|
||
class 虚线(object):
|
||
"""
|
||
虚线 — 笔/线段的通用数据结构,持有一组分型端点(文=起点分型, 武=终点分型)。
|
||
|
||
:ivar 标识: 类型标识("笔"/"线段"/"扩展线段"等)
|
||
:ivar 序号: 序号
|
||
:ivar 级别: 级别
|
||
:ivar 文: 起点分型
|
||
:ivar 武: 终点分型
|
||
:ivar 有效性: 是否有效
|
||
:ivar 基础序列: 内部虚线序列(笔序列/线段序列)
|
||
:ivar 特征序列: 特征序列列表(线段专用)
|
||
:ivar 实_中枢序列: 实中枢列表
|
||
:ivar 虚_中枢序列: 虚中枢列表
|
||
:ivar 合_中枢序列: 合中枢列表
|
||
:ivar 确认K线: 确认K线
|
||
:ivar 模式: 买卖点模式
|
||
:ivar 前一缺口: 前一缺口
|
||
:ivar 前一结束位置: 前一笔/线段的终点
|
||
:ivar 短路修正: 是否短路修正
|
||
:ivar 方向: 运行方向(只读)
|
||
:ivar 高: 最高价(只读)
|
||
:ivar 低: 最低价(只读)
|
||
:ivar 笔序列: 所有笔(只读)
|
||
:ivar 图表标题: 图表显示标题(只读)
|
||
"""
|
||
@property
|
||
def 序号(self) -> int: ...
|
||
@序号.setter
|
||
def 序号(self, value: int) -> None: ...
|
||
@property
|
||
def 标识(self) -> str: ...
|
||
@标识.setter
|
||
def 标识(self, value: str) -> None: ...
|
||
@property
|
||
def 文(self) -> 分型: ...
|
||
@文.setter
|
||
def 文(self, value: 分型) -> None: ...
|
||
@property
|
||
def 武(self) -> 分型: ...
|
||
@武.setter
|
||
def 武(self, value: 分型) -> None: ...
|
||
@property
|
||
def 级别(self) -> int: ...
|
||
@级别.setter
|
||
def 级别(self, value: int) -> None: ...
|
||
@property
|
||
def 有效性(self) -> bool: ...
|
||
@有效性.setter
|
||
def 有效性(self, value: bool) -> None: ...
|
||
def __init__(self, 序号: int, 标识: str, 文: 分型, 武: 分型, 级别: int, 有效性: bool = True) -> Any:
|
||
"""
|
||
:param 序号: 序号
|
||
:param 标识: 类型标识
|
||
:param 文: 起点分型
|
||
:param 武: 终点分型
|
||
:param 级别: 级别
|
||
:param 有效性: 是否有效
|
||
"""
|
||
...
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
def 笔序列(self) -> Any:
|
||
"""笔序列"""
|
||
...
|
||
def 图表标题(self) -> str:
|
||
""":return: 图表显示标题"""
|
||
...
|
||
def 方向(self) -> "相对方向":
|
||
"""
|
||
:return: 运行方向
|
||
:raises RuntimeError: 无法识别的方向
|
||
"""
|
||
...
|
||
def 高(self) -> float:
|
||
"""虚线区间的最高价(向上线段为终点分型最高价,向下线段为起点分型最高价)"""
|
||
...
|
||
def 低(self) -> float:
|
||
"""虚线区间的最低价(向下线段为终点分型最低价,向上线段为起点分型最低价)"""
|
||
...
|
||
def 之前是(self, 之前: "虚线") -> bool:
|
||
"""
|
||
:param 之前: 前一条虚线
|
||
:return: 当前虚线的起点是否为前一条虚线的终点
|
||
"""
|
||
...
|
||
def 之后是(self, 之后: "虚线") -> bool:
|
||
"""
|
||
:param 之后: 后一条虚线
|
||
:return: 当前虚线的终点是否为后一条虚线的起点
|
||
"""
|
||
...
|
||
def 获取普K序列(self, 观察员: "观察者") -> List[K线]:
|
||
"""
|
||
:param 观察员: 观察者实例
|
||
:return: 区间内的原始K线列表
|
||
"""
|
||
...
|
||
def 获取缠K序列(self, 观察员: "观察者") -> List[缠论K线]:
|
||
"""
|
||
:param 观察员: 观察者实例
|
||
:return: 区间内的缠K列表
|
||
"""
|
||
...
|
||
def 获取数据文本(self) -> str:
|
||
"""获取用于保存的数据文本"""
|
||
...
|
||
@classmethod
|
||
def 创建笔(cls, 文: 分型, 武: 分型, 有效性: bool = True) -> "虚线":
|
||
"""
|
||
:param 文: 起点分型
|
||
:param 武: 终点分型
|
||
:param 有效性: 是否有效
|
||
:return: 虚线实例(标识="笔")
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 创建线段(cls, 虚线序列: List["虚线"]) -> "虚线":
|
||
"""
|
||
:param 虚线序列: 构成线段的虚线列表(笔)
|
||
:return: 虚线实例(标识="线段"或"线段<...>")
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 缠K买卖点模式(cls, 模式: str, 缠K: "缠论K线", 配置: 缠论配置) -> Any:
|
||
"""
|
||
:param 模式: "全量"/"任意"/"配置"/"相对"
|
||
:param 缠K: 待检测的缠论K线
|
||
:param 配置: 缠论配置
|
||
:return: 是否满足买卖点条件
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 买卖点配置匹配(cls, 缠K: "缠论K线", 配置: 缠论配置) -> bool:
|
||
"""根据配置中的指标开关检测缠K匹配情况(MACD/KDJ/RSI组合)"""
|
||
...
|
||
@classmethod
|
||
def 买卖点任意匹配(cls, 缠K: "缠论K线") -> bool:
|
||
"""
|
||
:param 缠K: 缠论K线
|
||
:return: MACD/KDJ/RSI 任一匹配
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 买卖点全量匹配(cls, csl: Any, 缠K: "缠论K线") -> bool:
|
||
"""
|
||
:param 缠K: 缠论K线
|
||
:return: MACD/KDJ/RSI 全部匹配
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 买卖点相对匹配(cls, 缠K: "缠论K线") -> bool:
|
||
"""
|
||
:param 缠K: 缠论K线
|
||
:return: 三个指标中至少两个匹配
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 计算MACD柱子均值(cls, 普K序列: List[K线], 实线: "虚线") -> float:
|
||
"""
|
||
:param 普K序列: 完整K线序列
|
||
:param 实线: 虚线(笔/线段)
|
||
:return: 区间内MACD柱绝对值的平均值
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 计算MACD柱子均值_阴(cls, 普K序列: List[K线], 实线: "虚线") -> float:
|
||
"""
|
||
:param 普K序列: 完整K线序列
|
||
:param 实线: 虚线
|
||
:return: 区间内负数MACD柱绝对值的平均值,无负数时返回False
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 计算MACD柱子均值_阳(cls, 普K序列: List[K线], 实线: "虚线") -> float:
|
||
"""
|
||
:param 普K序列: 完整K线序列
|
||
:param 实线: 虚线
|
||
:return: 区间内正数MACD柱绝对值的平均值,无正数时返回False
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 武之全量MACD均值(cls, 普K序列: List[K线], 实线: "虚线") -> bool:
|
||
"""
|
||
:param 普K序列: 完整K线序列
|
||
:param 实线: 虚线
|
||
:return: 终点K线的MACD柱是否小于区间均值(全量背驰信号)
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 武之MACD均值(cls, 普K序列: List[K线], 实线: "虚线") -> bool:
|
||
"""
|
||
:param 普K序列: 完整K线序列
|
||
:param 实线: 虚线
|
||
:return: 根据方向选择阳/阴均值判断
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 武之MACD均值_阴(cls, 普K序列: List[K线], 实线: "虚线") -> bool:
|
||
"""
|
||
:param 普K序列: 完整K线序列
|
||
:param 实线: 虚线
|
||
:return: 终点MACD柱绝对值小于阴均值时True(背驰)
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 武之MACD均值_阳(cls, 普K序列: List[K线], 实线: "虚线") -> bool:
|
||
"""
|
||
:param 普K序列: 完整K线序列
|
||
:param 实线: 虚线
|
||
:return: 终点MACD柱绝对值小于阳均值时True(背驰)
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 武之MACD极值(cls, 普K序列: List[K线], 实线: "虚线") -> bool:
|
||
"""
|
||
:param 普K序列: 完整K线序列
|
||
:param 实线: 虚线
|
||
:return: 终点MACD柱是否为区间内极值
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 计算K线序列MACD趋向背驰(cls, 普K序列: Sequence["K线"], 方向: 相对方向) -> Any:
|
||
"""
|
||
计算K线序列的MACD柱/DIF/DEA趋向背驰(三元素判断)
|
||
|
||
:param 普K序列: K线序列
|
||
:param 方向: 运行方向
|
||
:return: [柱子背驰, DIF背驰, DEA背驰]
|
||
"""
|
||
...
|
||
@classmethod
|
||
@lru_cache(maxsize=128)
|
||
def 买卖意义(cls, 实线: "虚线", 观察员: "观察者") -> Tuple[bool, str]:
|
||
"""
|
||
静止是相对的,而运动是绝对的
|
||
|
||
:param 实线: 虚线(笔/线段)
|
||
:param 观察员: 观察者实例
|
||
:return: (是否具有买卖意义, 原因字符串)
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 计算MACD柱子分段(cls, k线序列: List["K线"]) -> Tuple[List[List["K线"]], ...]:
|
||
"""
|
||
:param k线序列: K线序列
|
||
:return: 按正负分段的MACD柱列表
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 密集区域按间隔(cls, 交叉标记: List[int], 最大间隔: int = 5, 最少交叉数: int = 3) -> List[Tuple[int, int, int]]:
|
||
"""
|
||
交叉标记: 长度为len(macd_list)的列表,0=无交叉, 1=金叉, -1=死叉
|
||
最大间隔: 相邻交叉索引差 ≤ 此值则归入同一密集区
|
||
最少交叉数: 一个密集区内至少包含的交叉次数
|
||
|
||
:return: [(起始交叉索引, 结束交叉索引, 区内交叉次数), ...]
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 统计MACD行为(cls, 普K序列: List[K线], 最大间隔: int = 8, 最少交叉数: int = 3) -> dict:
|
||
"""
|
||
:param 普K序列: K线序列
|
||
:param 最大间隔: 最大间隔 8
|
||
:param 最少交叉数: 最少交叉数 3
|
||
:return: 统计字典
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 获取_武(cls, 实线: 虚线) -> 分型:
|
||
"""
|
||
递归获取虚线的终点分型(笔直接返回武,线段递归到底层笔的武)
|
||
:param 实线: 虚线
|
||
:return: 分型
|
||
"""
|
||
...
|
||
|
||
class 笔(object):
|
||
"""
|
||
笔 — 纯静态方法容器,提供笔划分算法的所有函数。
|
||
|
||
主要方法:
|
||
获取缠K数量 — 获取笔内缠K数量
|
||
停顿 — 检测笔的停顿点
|
||
自检 — 校验笔的有效性
|
||
获取所有停顿位置 — 获取笔内所有停顿位置
|
||
获取起始分型 — 获取笔的起始分型
|
||
生成笔序列 — 从分型序列生成笔序列
|
||
是否背驰过 — 判断笔是否经过背驰
|
||
"""
|
||
@staticmethod
|
||
def 获取缠K数量(缠K序列: List[缠论K线], 笔序列: List[虚线], 配置: 缠论配置) -> int:
|
||
"""
|
||
获取笔内有效缠K数量(考虑笔弱化等配置)
|
||
|
||
:param 缠K序列: 候选笔的基础缠K序列
|
||
:param 笔序列: 已有笔序列
|
||
:param 配置: 缠论配置
|
||
:return: 有效缠K数量
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 次高(缠K序列: List[缠论K线], 笔内相同终点取舍: bool) -> 缠论K线:
|
||
"""
|
||
次高
|
||
|
||
:param 缠K序列: 缠K序列
|
||
:param 笔内相同终点取舍: 终点取舍方式
|
||
:return: 次高缠K
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 次低(缠K序列: List[缠论K线], 笔内相同终点取舍: bool) -> 缠论K线:
|
||
"""
|
||
次低
|
||
|
||
:param 缠K序列: 缠K序列
|
||
:param 笔内相同终点取舍: 终点取舍方式
|
||
:return: 次低缠K
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 实际高点(缠K序列: List[缠论K线], 笔内相同终点取舍: bool) -> 缠论K线:
|
||
"""
|
||
实际高点
|
||
|
||
:param 缠K序列: 缠K序列
|
||
:param 笔内相同终点取舍: 终点取舍方式
|
||
:return: 实际高点缠K
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 实际低点(缠K序列: List[缠论K线], 笔内相同终点取舍: bool) -> 缠论K线:
|
||
"""
|
||
实际低点
|
||
|
||
:param 缠K序列: 缠K序列
|
||
:param 笔内相同终点取舍: 终点取舍方式
|
||
:return: 实际低点缠K
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 相对关系(筆: 虚线, 配置: 缠论配置) -> bool:
|
||
"""
|
||
相对关系
|
||
|
||
:param 筆: 笔虚线
|
||
:param 配置: 缠论配置
|
||
:return: 方向是否匹配
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 分析(cls, 当前分型: Optional[分型], 分型序列: List[分型], 笔序列: List[虚线], 缠K序列: List[缠论K线], 普K序列: List[K线], 递归层次: int, 配置: 缠论配置) -> Any:
|
||
"""
|
||
笔划分核心递归算法
|
||
|
||
:param 当前分型: 新形成的分型(可能为None)
|
||
:param 分型序列: 现有分型列表(原地修改)
|
||
:param 笔序列: 现有笔列表(原地修改)
|
||
:param 缠K序列: 缠K序列
|
||
:param 普K序列: 普K序列
|
||
:param 递归层次: 递归深度计数
|
||
:param 配置: 缠论配置
|
||
:return: 递归层次(int)
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 以文会友(笔序列: List[虚线], 文: 分型) -> Optional[虚线]:
|
||
"""
|
||
以文会友
|
||
|
||
:param 笔序列: 笔列表
|
||
:param 文: 起点分型
|
||
:return: 匹配的笔或None
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 以武会友(笔序列: List[虚线], 武: 分型) -> Optional[虚线]:
|
||
"""
|
||
以武会友
|
||
|
||
:param 笔序列: 笔列表
|
||
:param 武: 终点分型
|
||
:return: 匹配的笔或None
|
||
"""
|
||
...
|
||
@staticmethod
|
||
def 根据缠K找笔(笔序列: List[虚线], 缠K: "缠论K线", 偏移: int = 1) -> Any:
|
||
"""
|
||
根据缠K找笔
|
||
|
||
:param 笔序列: 笔列表
|
||
:param 缠K: 缠论K线
|
||
:param 偏移: 序号偏移量
|
||
:return: 包含该缠K的笔或None
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 自检(cls, 筆: 虚线, 观察员: "观察者") -> bool:
|
||
"""
|
||
校验笔的有效性:高/低点是否为实际极值
|
||
|
||
:param 筆: 待校验的笔
|
||
:param 观察员: 观察者
|
||
:return: 有效为True
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 获取所有停顿位置(cls, 筆: 虚线, 观察员: "观察者") -> List[虚线]:
|
||
"""
|
||
获取笔内所有可能的停顿位置(用于背驰检测)
|
||
|
||
:param 筆: 笔
|
||
:param 观察员: 观察者
|
||
:return: 停顿位置的笔列表
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 是否背驰过(cls, 当前筆: 虚线, 观察员: "观察者") -> List[缠论K线]:
|
||
"""
|
||
判断笔内是否发生过MACD趋向背驰
|
||
|
||
:param 当前筆: 笔
|
||
:param 观察员: 观察者
|
||
:return: 发生背驰的停顿位置列表
|
||
"""
|
||
...
|
||
|
||
class 线段特征(list):
|
||
"""
|
||
线段特征 — list 子类,持有一组同向虚线(笔),是线段划分的中间结构。
|
||
|
||
继承 list,元素为虚线。特征序列用于线段划分算法中的包含处理。
|
||
|
||
:ivar 序号: 序号
|
||
:ivar 标识: 标识
|
||
:ivar 线段方向: 线段运行方向(特征序列方向为其翻转)
|
||
:ivar 文: 第一个元素的起点分型(根据方向选取极值)
|
||
:ivar 武: 最后一个元素的终点分型(根据方向选取极值)
|
||
:ivar 高: 最高价
|
||
:ivar 低: 最低价
|
||
:ivar 方向: 特征序列方向(线段方向的翻转)
|
||
:ivar 图表标题: 图表标题
|
||
"""
|
||
@property
|
||
def 标识(self) -> str: ...
|
||
@标识.setter
|
||
def 标识(self, value: str) -> None: ...
|
||
@property
|
||
def 基础序列(self) -> List[虚线]: ...
|
||
@基础序列.setter
|
||
def 基础序列(self, value: List[虚线]) -> None: ...
|
||
@property
|
||
def 线段方向(self) -> 相对方向: ...
|
||
@线段方向.setter
|
||
def 线段方向(self, value: 相对方向) -> None: ...
|
||
def __init__(self, 标识: str, 基础序列: List[虚线], 线段方向: 相对方向) -> Any:
|
||
"""
|
||
:param 标识: 标识符
|
||
:param 基础序列: 基础虚线列表
|
||
:param 线段方向: 线段运行方向
|
||
"""
|
||
...
|
||
def 图表标题(self) -> str:
|
||
""":return: 图表标题"""
|
||
...
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
def 文(self) -> 分型:
|
||
"""起点分型(向上线段取高高中的最大者,向下线段取低低中的最小者)"""
|
||
...
|
||
def 武(self) -> 分型:
|
||
"""终点分型(向上线段取高高中的最大者,向下线段取低低中的最小者)"""
|
||
...
|
||
def 高(self) -> float:
|
||
""":return: 文和武中分型特征值的较大者"""
|
||
...
|
||
def 低(self) -> float:
|
||
""":return: 文和武中分型特征值的较小者"""
|
||
...
|
||
def 方向(self) -> 相对方向:
|
||
""":return: 特征序列方向(线段方向的翻转)"""
|
||
...
|
||
def 添加(self, 待添加虚线: Union[虚线]) -> Any:
|
||
"""
|
||
:param 待添加虚线: 待添加的虚线
|
||
:raises ValueError: 方向不匹配时抛出
|
||
"""
|
||
...
|
||
def 删除(self, 待删除虚线: Union[虚线]) -> Any:
|
||
"""
|
||
:param 待删除虚线: 待删除的虚线
|
||
:raises ValueError: 方向不匹配时抛出
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 新建(cls, 虚线序列: List[虚线], 线段方向: 相对方向) -> "线段特征":
|
||
"""
|
||
:param 虚线序列: 基础虚线列表
|
||
:param 线段方向: 线段方向
|
||
:return: 线段特征实例
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 静态分析(cls, 虚线序列: List[虚线], 线段方向: 相对方向, 四象: str, 是否忽视: bool = False) -> List["线段特征"]:
|
||
"""
|
||
静态分析虚线序列,生成特征序列
|
||
|
||
:param 虚线序列: 笔/虚线列表
|
||
:param 线段方向: 线段运行方向
|
||
:param 四象: "老阳"/"老阴"/"小阳"/"少阴"
|
||
:param 是否忽视: True时不严格处理缺口包含
|
||
:return: 特征序列列表
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 获取分型序列(cls, 特征序列: List) -> List[Any]:
|
||
"""
|
||
从特征序列提取特征分型序列
|
||
|
||
:param 特征序列: 线段特征列表
|
||
:return: 特征分型列表
|
||
"""
|
||
...
|
||
|
||
class 特征分型:
|
||
"""
|
||
特征分型 — 由左右中三个线段特征构成的顶/底分型,用于线段划分算法。
|
||
|
||
:ivar 左: 左侧特征序列
|
||
:ivar 中: 中间特征序列
|
||
:ivar 右: 右侧特征序列
|
||
:ivar 结构: 分型结构(顶/底)
|
||
"""
|
||
@property
|
||
def 左(self) -> 线段特征: ...
|
||
@左.setter
|
||
def 左(self, value: 线段特征) -> None: ...
|
||
@property
|
||
def 中(self) -> 线段特征: ...
|
||
@中.setter
|
||
def 中(self, value: 线段特征) -> None: ...
|
||
@property
|
||
def 右(self) -> 线段特征: ...
|
||
@右.setter
|
||
def 右(self, value: 线段特征) -> None: ...
|
||
@property
|
||
def 结构(self) -> 分型结构: ...
|
||
@结构.setter
|
||
def 结构(self, value: 分型结构) -> None: ...
|
||
def __init__(self, 左: 线段特征, 中: 线段特征, 右: 线段特征, 结构: 分型结构) -> Any:
|
||
"""
|
||
:param 左: 左侧特征序列
|
||
:param 中: 中间特征序列
|
||
:param 右: 右侧特征序列
|
||
:param 结构: 分型结构
|
||
"""
|
||
...
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
|
||
class 线段(object):
|
||
"""
|
||
线段 — 纯静态方法容器,提供线段划分算法的所有函数。
|
||
|
||
主要方法:
|
||
检查线段破坏(前一线段, 当前线段) — 检查线段是否被破坏
|
||
获取线段特征序列(笔序列, 线段方向, 需要被合并方向序列) — 提取特征序列
|
||
线段有缺口(特征序列, 线段方向, 当前分型序列, 特征分型序列) — 判断线段是否有缺口
|
||
判断新线段(笔序列) — 判断是否形成新线段
|
||
静态分析(观察员) — 静态线段分析
|
||
生成线段序列(笔序列, 观察员) — 从笔序列生成线段序列
|
||
"""
|
||
@classmethod
|
||
def 添加虚线(cls, 段: 虚线, 筆: 虚线) -> Any:
|
||
"""
|
||
向线段中添加一笔
|
||
|
||
:param 段: 线段
|
||
:param 筆: 待添加的笔
|
||
:raises ValueError: 不连续或标识不符时抛出
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 武斗(cls, 段: 虚线, 武: 分型, 行号: int) -> Any:
|
||
"""
|
||
更新线段的终点分型(武)
|
||
|
||
:param 段: 线段
|
||
:param 武: 新的终点分型
|
||
:param 行号: 调用行号(用于调试)
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 特征分型终结(cls, 段: 虚线) -> bool:
|
||
"""
|
||
是否符合特征序列正常分型终结
|
||
|
||
:param 段: 线段
|
||
:return: 是否终结
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 特征序列状态(cls, 段: 虚线) -> Tuple[bool, bool, bool]:
|
||
"""
|
||
:param 段: 线段
|
||
:return: (左是否存在, 中是否存在, 右是否存在)
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 获取缺口(cls, 段: 虚线) -> Optional[缺口]:
|
||
"""
|
||
获取线段特征序列第一二元素间的缺口
|
||
|
||
:param 段: 线段
|
||
:return: 缺口或None
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 四象(cls, 段: 虚线) -> str:
|
||
"""
|
||
判断线段的四象属性
|
||
|
||
:param 段: 线段
|
||
:return: "老阳"(向下线段后继缺口向上线段) / "老阴"(向上线段后继缺口向下线段) / "小阳"(普通向上) / "少阴"(普通向下)
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 设置特征序列(cls, 段: 虚线, 序列: Any, 行号: Any) -> Any:
|
||
"""
|
||
设置特征序列
|
||
|
||
:param 段: 线段
|
||
:param 序列: 特征序列三元组 (左,中,右)
|
||
:param 行号: 调用行号
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 刷新特征序列(cls, 段: 虚线, 配置: 缠论配置) -> Any:
|
||
"""
|
||
刷新特征序列
|
||
|
||
:param 段: 线段
|
||
:param 配置: 缠论配置
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 分割序列(cls, 段: 虚线, 所属中枢: Optional["中枢"] = None) -> Tuple[List[虚线], List[虚线], List[虚线], Optional[虚线]]:
|
||
"""
|
||
将线段基础序列分割为前/后/第三买卖/贯穿伤四部分
|
||
|
||
:param 段: 线段
|
||
:param 所属中枢: 所属中枢(用于第三买卖点检测)
|
||
:return: (前序列, 后序列, 第三买卖线, 贯穿伤)
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 刷新(cls, 段: 虚线, 配置: 缠论配置) -> Any:
|
||
"""
|
||
刷新线段的特征序列和内部中枢序列
|
||
|
||
:param 段: 线段
|
||
:param 配置: 缠论配置
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 序列重置(cls, 段: 虚线, 序列: Sequence) -> Any:
|
||
"""
|
||
序列重置
|
||
|
||
:param 段: 线段
|
||
:param 序列: 参考序列
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 查找贯穿伤(cls, 段: 虚线) -> Optional[虚线]:
|
||
"""
|
||
查找贯穿伤
|
||
|
||
:param 段: 线段
|
||
:return: 贯穿伤虚线或None
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 获取内部中枢序列(cls, 段: 虚线, 配置: 缠论配置) -> Tuple[List["中枢"], List["中枢"], List["中枢"]]:
|
||
"""
|
||
获取内部中枢序列
|
||
|
||
:param 段: 线段
|
||
:param 配置: 缠论配置
|
||
:return: (虚中枢列表, 实中枢列表, 合中枢列表)
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 基础判断(cls, 左: 虚线, 中: 虚线, 右: 虚线, 关系序列: List[相对方向]) -> bool:
|
||
"""
|
||
连续三笔且重叠
|
||
|
||
:param 左: 左侧虚线
|
||
:param 中: 中间虚线
|
||
:param 右: 右侧虚线
|
||
:param 关系序列: 允许的方向关系
|
||
:return: 是否满足基础条件
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 分析(cls, 笔序列: List[虚线], 线段序列: List[虚线], 配置: 缠论配置, 层级: int = 0, 关系序列: Any = [相对方向.向上, 相对方向.向下]) -> None:
|
||
"""
|
||
线段划分核心递归算法
|
||
|
||
:param 笔序列: 笔列表
|
||
:param 线段序列: 线段列表(原地修改)
|
||
:param 配置: 缠论配置
|
||
:param 层级: 递归深度
|
||
:param 关系序列: 允许的方向关系
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 武终(cls, 段: 虚线, 行号: int) -> Any:
|
||
"""
|
||
武终
|
||
|
||
:param 段: 线段
|
||
:param 行号: 调用行号
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 验证序列(cls, 段: 虚线, 序列: Sequence) -> Any:
|
||
"""
|
||
验证序列
|
||
|
||
:param 段: 线段
|
||
:param 序列: 参考序列
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 扩展分析(cls, 虚线序列: List[虚线], 线段序列: List[虚线], 配置: 缠论配置) -> None:
|
||
"""
|
||
即同级别分析
|
||
将笔看成线段
|
||
|
||
:param 虚线序列: 基础虚线列表
|
||
:param 线段序列: 扩展线段列表(原地修改)
|
||
:param 配置: 缠论配置
|
||
"""
|
||
...
|
||
@classmethod
|
||
@lru_cache(maxsize=128)
|
||
def 判断线段内部是否背驰(cls, 当前段: 虚线, 观察员: 观察者) -> bool:
|
||
"""
|
||
判断线段内部是否发生背驰(基于内部中枢和MACD)
|
||
|
||
:param 当前段: 线段
|
||
:param 观察员: 观察者
|
||
:return: bool
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 获取所有停顿位置(cls, 段: 虚线, 观察员: "观察者") -> List[虚线]:
|
||
"""
|
||
获取所有停顿位置
|
||
|
||
:param 段: 线段
|
||
:param 观察员: 观察者
|
||
:return: 停顿位置的线段列表
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 是否背驰过(cls, 当前段: 虚线, 观察员: "观察者") -> List[缠论K线]:
|
||
"""
|
||
判断线段内是否发生过背驰(遍历所有停顿位置)
|
||
|
||
:param 当前段: 线段
|
||
:param 观察员: 观察者
|
||
:return: 背驰点列表
|
||
"""
|
||
...
|
||
|
||
class 中枢(object):
|
||
"""
|
||
中枢 — 三段虚线重叠区间构成的价格中枢,支持延伸和扩展。
|
||
|
||
:ivar 序号: 序号
|
||
:ivar 标识: 标识
|
||
:ivar 级别: 级别
|
||
:ivar 基础序列: 构成中枢的基础虚线(至少3条)
|
||
:ivar 第三买卖线: 第三类买卖点关联虚线
|
||
:ivar 本级_第三买卖线: 本级第三类买卖点虚线
|
||
:ivar 高: 中枢上沿(虚线低点的最大值)
|
||
:ivar 低: 中枢下沿(虚线高点的最小值)
|
||
:ivar 高高: 全区间最高价
|
||
:ivar 低低: 全区间最低价
|
||
:ivar 文: 起点分型
|
||
:ivar 武: 终点分型
|
||
:ivar 方向: 中枢方向(首条虚线的方向翻转)
|
||
:ivar 离开段: 最后一条虚线
|
||
"""
|
||
@property
|
||
def 序号(self) -> int: ...
|
||
@序号.setter
|
||
def 序号(self, value: int) -> None: ...
|
||
@property
|
||
def 标识(self) -> str: ...
|
||
@标识.setter
|
||
def 标识(self, value: str) -> None: ...
|
||
@property
|
||
def 级别(self) -> int: ...
|
||
@级别.setter
|
||
def 级别(self, value: int) -> None: ...
|
||
@property
|
||
def 基础序列(self) -> List[虚线]: ...
|
||
@基础序列.setter
|
||
def 基础序列(self, value: List[虚线]) -> None: ...
|
||
def __init__(self, 序号: int, 标识: str, 级别: int, 基础序列: List[虚线]) -> Any:
|
||
"""
|
||
:param 序号: 序号
|
||
:param 标识: 标识
|
||
:param 级别: 级别
|
||
:param 基础序列: 基础虚线列表
|
||
"""
|
||
...
|
||
def 添加虚线(self, 实线: 虚线) -> Any:
|
||
"""
|
||
向中枢添加新虚线(延伸),重置第三买卖线
|
||
|
||
:param 实线: 新虚线
|
||
"""
|
||
...
|
||
def __str__(self) -> str: ...
|
||
def __repr__(self) -> str: ...
|
||
def 图表标题(self) -> str:
|
||
""":return: 图表标题"""
|
||
...
|
||
def 离开段(self) -> 虚线:
|
||
""":return: 最后一条虚线"""
|
||
...
|
||
def 方向(self) -> 相对方向:
|
||
""":return: 中枢方向(首条虚线的方向翻转)"""
|
||
...
|
||
def 高(self) -> float:
|
||
""":return: 中枢上沿(前三段中虚线高点的最小值)"""
|
||
...
|
||
def 低(self) -> float:
|
||
""":return: 中枢下沿(前三段中虚线低点的最大值)"""
|
||
...
|
||
def 高高(self) -> float:
|
||
""":return: 全区间最高价"""
|
||
...
|
||
def 低低(self) -> float:
|
||
""":return: 全区间最低价"""
|
||
...
|
||
def 文(self) -> 分型:
|
||
""":return: 起点分型"""
|
||
...
|
||
def 武(self) -> 分型:
|
||
""":return: 终点分型"""
|
||
...
|
||
def 获取数据文本(self) -> str:
|
||
"""获取用于保存的数据文本"""
|
||
...
|
||
def 完整性(self, 虚实: str) -> Any:
|
||
"""
|
||
判断中枢是否完整(是否有第三买卖点或内部中枢离开)
|
||
|
||
详情见 教你炒股票 43:有关背驰的补习课(2007-04-06 15:31:28)
|
||
不完整时 下一个中枢大概率会与当前中枢发生扩展!
|
||
|
||
:param 虚实: "实"/"虚"/"合"
|
||
:return: 完整为True
|
||
"""
|
||
...
|
||
def 获取序列(self) -> List[虚线]:
|
||
"""
|
||
获取中枢的完整虚线序列(基础序列+第三买卖线)
|
||
|
||
:return: 虚线列表
|
||
"""
|
||
...
|
||
def 获取扩展中枢(self, 扩展中枢: List, 配置: 缠论配置) -> Any:
|
||
"""
|
||
当基础序列>=9时,从中枢中提取扩展线段中枢
|
||
|
||
:param 扩展中枢: 存放扩展中枢的列表
|
||
:param 配置: 缠论配置
|
||
"""
|
||
...
|
||
def 校验合法性(self, 序列: Sequence[虚线], 中枢序列: List["中枢"]) -> bool:
|
||
"""
|
||
校验当前中枢在给定序列中是否仍然合法
|
||
|
||
:param 序列: 基础虚线序列
|
||
:param 中枢序列: 中枢列表
|
||
:return: 合法为True,不合法会原地裁剪基础序列
|
||
"""
|
||
...
|
||
def 设置第三买卖线(self, 线: Union[虚线, None]) -> Any:
|
||
"""
|
||
设置第三类买卖点关联虚线
|
||
|
||
:param 线: 第三买卖虚线或None
|
||
"""
|
||
...
|
||
def 当前状态(self) -> Any:
|
||
"""
|
||
获取中枢当前状态:中枢之中/中枢之上/中枢之下
|
||
|
||
详情见 教你炒股票 49:利润率最大的操作模式(2007-04-26 08:16:56)
|
||
当前中枢最后一段所处的位置关系
|
||
|
||
一、当下在该中枢之中。
|
||
因为在中枢里,由于这时候怎么演化都是对的,不操作是最好的操作,等待其演化第二、三类,
|
||
当然,如果你技术好点,可以判断出次级别的第二类买点,这些买点很多情况下都是在中枢中出现的,那当然也是可以参与的。
|
||
但如果没有这种技术,那就有了再说了。只把握你自己当下技术水平能把握的机会,这才是最重要的。
|
||
二、当下在该中枢之下。
|
||
1.当下之前未出现该中枢第三类卖点。
|
||
2.当下之前已出现该中枢第三类卖点(正出现也包括在这种情况下,按最严格的定义,这最精确的卖点,是瞬间完成的,而具有操作意义的第三类卖点,其实是一个包含该最精确卖点的足够小区间)
|
||
三、当下在该中枢之上。
|
||
1.当下之前未出现该中枢第三类买点。
|
||
2.当下之前已出现该中枢第三类买点。
|
||
|
||
:return: "中枢之中" / "中枢之上" / "中枢之下"
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 基础检查(cls, 左: 虚线, 中: 虚线, 右: 虚线) -> bool:
|
||
"""
|
||
检查三条虚线是否构成中枢(连续且重叠)
|
||
|
||
:param 左: 左侧虚线
|
||
:param 中: 中间虚线
|
||
:param 右: 右侧虚线
|
||
:return: bool
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 创建(cls, 左: 虚线, 中: 虚线, 右: 虚线, 级别: int, 标识: str = "") -> "中枢":
|
||
"""
|
||
从三条连续且重叠的虚线创建中枢
|
||
|
||
:param 左: 左侧虚线
|
||
:param 中: 中间虚线
|
||
:param 右: 右侧虚线
|
||
:param 级别: 中枢级别
|
||
:param 标识: 中枢标识前缀
|
||
:return: 中枢实例
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 从序列中获取中枢(cls, 虚线序列: Sequence[虚线], 起始方向: 相对方向, 标识: str) -> Optional["中枢"]:
|
||
"""
|
||
从虚线序列中按起始方向查找第一个中枢
|
||
|
||
:param 虚线序列: 虚线列表
|
||
:param 起始方向: 第一条虚线的方向
|
||
:param 标识: 中枢标识前缀
|
||
:return: 中枢或None
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 向中枢序列尾部添加(cls, 中枢序列: List["中枢"], 待添加中枢: "中枢") -> Any:
|
||
"""
|
||
:param 中枢序列: 中枢列表
|
||
:param 待添加中枢: 待添加的中枢
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 从中枢序列尾部弹出(cls, 中枢序列: List["中枢"], 待弹出中枢: "中枢") -> Optional["中枢"]:
|
||
"""
|
||
:param 中枢序列: 中枢列表
|
||
:param 待弹出中枢: 待弹出的中枢
|
||
:return: 弹出的中枢或None
|
||
"""
|
||
...
|
||
@classmethod
|
||
def 分析(cls, 虚线序列: Sequence[虚线], 中枢序列: List["中枢"], 跳过首部: bool = True, 标识: str = "", 层级: int = 0) -> None:
|
||
"""
|
||
中枢识别核心递归算法
|
||
|
||
:param 虚线序列: 基础虚线列表
|
||
:param 中枢序列: 中枢列表(原地修改)
|
||
:param 跳过首部: True: 跳过首元素中枢
|
||
:param 标识: 中枢标识前缀
|
||
:param 层级: 递归深度
|
||
"""
|
||
...
|
||
|
||
class 观察者:
|
||
"""
|
||
观察者 — 单周期缠论分析器,接收K线流式输入并逐层计算所有层级序列。
|
||
|
||
核心入口为 增加原始K线(普K),每收到一根新K线就增量更新:
|
||
原始K线 → 缠论K线(包含处理+合并)→ 分型 → 笔 → 线段 → 中枢 → 买卖点
|
||
|
||
:ivar 标识: "{符号}:{周期}"
|
||
:ivar 当前K线: 最后一根原始K线
|
||
:ivar 当前缠K: 最后一根缠论K线
|
||
:ivar 普通K线序列 / 缠论K线序列 / 分型序列 / 笔序列 / 线段序列 / 中枢序列 等
|
||
"""
|
||
@property
|
||
def 符号(self) -> str: ...
|
||
@符号.setter
|
||
def 符号(self, value: str) -> None: ...
|
||
@property
|
||
def 周期(self) -> int: ...
|
||
@周期.setter
|
||
def 周期(self, value: int) -> None: ...
|
||
@property
|
||
def 配置(self) -> 缠论配置: ...
|
||
@配置.setter
|
||
def 配置(self, value: 缠论配置) -> None: ...
|
||
def __init__(self, 符号: str, 周期: int, 配置: 缠论配置) -> Any:
|
||
"""
|
||
初始化观察者
|
||
|
||
:param 符号: 交易对符号
|
||
:param 周期: K线周期(秒)
|
||
:param 配置: 缠论配置
|
||
"""
|
||
...
|
||
def 观察员(self) -> Any:
|
||
"""观察员(自引用)"""
|
||
...
|
||
def 标识(self) -> str:
|
||
''':return: "{符号}:{周期}"'''
|
||
...
|
||
def 当前K线(self) -> Optional["K线"]:
|
||
""":return: 最后一根原始K线"""
|
||
...
|
||
def 当前缠K(self) -> Optional["缠论K线"]:
|
||
""":return: 最后一根缠论K线"""
|
||
...
|
||
def 重置基础序列(self) -> Any:
|
||
"""清空所有分析序列,重置为初始状态"""
|
||
...
|
||
@final
|
||
def 增加原始K线(self, 普K: K线) -> Any:
|
||
"""
|
||
核心入口 — 投喂一根原始K线,增量更新所有层级
|
||
|
||
:param 普K: 新到的原始K线
|
||
|
||
处理流程: 原始K线→缠论K线(包含处理+合并)→分型→笔→线段→中枢→买卖点
|
||
"""
|
||
...
|
||
def 测试_保存数据(self, root: str = None) -> Any:
|
||
"""
|
||
拆分各序列数据,单独存文件,文件名为对应变量名
|
||
|
||
:param root: 保存根目录(可选)
|
||
"""
|
||
...
|
||
def 识别买卖点(self) -> Any:
|
||
"""识别买卖点(占位方法,具体逻辑在子类或Rust核心中实现)"""
|
||
...
|
||
def 静态重新分析(self) -> Any:
|
||
"""静态重新分析(占位方法)"""
|
||
...
|
||
def 加载本地数据(self, 文件路径: str) -> Any: ...
|
||
@classmethod
|
||
def 读取数据文件(cls, 文件路径: str, 配置: Any = 缠论配置()) -> Self:
|
||
"""
|
||
:param 文件路径: 数据文件路径 格式如: btcusd-300-1631772074-1632222374.nb
|
||
:param 配置: 缠论配置
|
||
:return: 观察者实例
|
||
"""
|
||
...
|
||
|
||
class K线合成器:
|
||
"""
|
||
K线合成器 — 将小周期K线合成为大周期K线,支持多周期级联合成。
|
||
|
||
:ivar 标识: 合成器标识
|
||
:ivar 周期组: 从小到大排列的周期组
|
||
:ivar 当前K线: 各周期当前K线
|
||
:ivar 合成K线列表: 各周期已合成的K线列表
|
||
"""
|
||
@property
|
||
def 标识(self) -> str: ...
|
||
@标识.setter
|
||
def 标识(self, value: str) -> None: ...
|
||
@property
|
||
def 周期组(self) -> List[int]: ...
|
||
@周期组.setter
|
||
def 周期组(self, value: List[int]) -> None: ...
|
||
@property
|
||
def 事件回调(self) -> Optional[Callable]: ...
|
||
@事件回调.setter
|
||
def 事件回调(self, value: Optional[Callable]) -> None: ...
|
||
def __init__(self, 标识: str, 周期组: List[int], 事件回调: Optional[Callable] = None) -> Any:
|
||
"""
|
||
初始化K线合成器
|
||
|
||
:param 标识: 合成器标识
|
||
:param 周期组: 从小到大排列的周期列表
|
||
:param 事件回调: 可选,K线合成完成时的回调函数(信号类型, 标识, 周期, 完成K线)
|
||
"""
|
||
...
|
||
def 设置事件回调(self, 回调函数: Callable) -> Any:
|
||
"""
|
||
设置事件回调函数
|
||
|
||
:param 回调函数: 回调函数
|
||
"""
|
||
...
|
||
def 投喂(self, 时间戳: datetime, 开: float, 高: float, 低: float, 收: float, 量: float) -> Any:
|
||
"""
|
||
投喂原始tick数据
|
||
|
||
:param 时间戳: 时间戳
|
||
:param 开: 开盘价
|
||
:param 高: 最高价
|
||
:param 低: 最低价
|
||
:param 收: 收盘价
|
||
:param 量: 成交量
|
||
"""
|
||
...
|
||
def 投喂K线(self, 普K: K线) -> Any:
|
||
"""
|
||
统一入口 — 投喂最小周期K线,自动合成大周期并分发给各周期观察者
|
||
|
||
:param 普K: 最小周期原始K线
|
||
"""
|
||
...
|
||
def 获取当前K线(self, 周期: int) -> Optional[K线]:
|
||
"""
|
||
获取指定周期当前正在合成的K线
|
||
|
||
:param 周期: 目标周期
|
||
:return: 当前K线或None
|
||
"""
|
||
...
|
||
|
||
class 立体分析器:
|
||
"""
|
||
立体分析器 — 多周期缠论分析器,内部包含K线合成器 + 每周期一个观察者。
|
||
|
||
通过最小周期合成大周期K线,各周期观察者独立分析,实现多周期联立。
|
||
|
||
:ivar 周期组: 所有分析周期
|
||
:ivar 观察员: 各周期对应的观察者
|
||
:ivar K线合成器: 内部K线合成器
|
||
"""
|
||
@property
|
||
def 符号(self) -> str: ...
|
||
@符号.setter
|
||
def 符号(self, value: str) -> None: ...
|
||
@property
|
||
def 周期组(self) -> List[int]: ...
|
||
@周期组.setter
|
||
def 周期组(self, value: List[int]) -> None: ...
|
||
@property
|
||
def 配置(self) -> 缠论配置: ...
|
||
@配置.setter
|
||
def 配置(self, value: 缠论配置) -> None: ...
|
||
@property
|
||
def 配置组(self) -> Dict[int, 缠论配置]: ...
|
||
@配置组.setter
|
||
def 配置组(self, value: Dict[int, 缠论配置]) -> None: ...
|
||
def __init__(self, 符号: str, 周期组: List[int], 配置: 缠论配置 = 缠论配置(), 配置组: Dict[int, 缠论配置] = dict()) -> Any:
|
||
"""
|
||
初始化多周期立体分析器
|
||
|
||
:param 符号: 交易对符号
|
||
:param 周期组: 所有分析周期列表(第一个为最小输入周期)
|
||
:param 配置: 默认配置
|
||
:param 配置组: 各周期独立配置 {周期: 缠论配置}
|
||
"""
|
||
...
|
||
def 投喂K线(self, 普K: K线) -> Any:
|
||
"""
|
||
统一入口 — 投喂最小周期K线,自动合成大周期并分发给各周期观察者
|
||
|
||
:param 普K: 最小周期原始K线
|
||
:raises RuntimeError: 当投喂的K线周期与输入周期不匹配时
|
||
"""
|
||
...
|
||
def 测试_保存数据(self) -> Any:
|
||
"""拆分各序列数据,单独存文件,文件名为对应变量名"""
|
||
...
|
||
|
||
def 转化为时间戳(ts: Any) -> int: ...
|
||
def 转化为时间戳_数字(ts: Any) -> int: ...
|