DoEasy.服务功能(第 2 部分):孕线形态·进阶篇
📊

DoEasy.服务功能(第 2 部分):孕线形态·进阶篇

(2/3)· 单柱 Pin Bar 之后,双柱孕线如何比较母柱与子柱并批量框选嵌套结构

案例拆解新手友好 第 2/3 篇
很多人把孕线当成单根 K 线缩在里面就完事,实际嵌套孕线会连续出现多根子柱共享同一根母柱。只比比例不记开启时间差,图表上根本分不清形态边界在哪。

「蜡烛与价格行为模式的位掩码定义」

在 MT5 的图案识别底层,单根 K 线形态和 Price Action 组合形态都用十六进制位掩码枚举,便于用按位或一次性叠加多种过滤条件。从射击之星 0x80 到 Rails 的 0x1000000,中间每个值都是上一个左移一位,覆盖 26 种模式(含一个未列出的空缺位)。 实际写 EA 时,若想同时捕捉锤子线与吞没外的内包线,可用 (PATTERN_TYPE_HAMMER | PATTERN_TYPE_INSIDE_BAR) 做位判断,比字符串比对快得多。外汇与贵金属波动剧烈,这类形态仅代表概率倾向,实盘须配合止损。 宏 PATTERNS_TOTAL 写死为 26,注释明确说“含缺失的那一个”,说明枚举里故意留了空档——你若自己扩展自定义形态,别覆盖 0x1000000 之后的位,免得和官方后续更新撞车。

MQL5 / C++
PATTERN_TYPE_SHOOTING_STAR       = 0x80,        class=class="str">"cmt">// Shooting Star
PATTERN_TYPE_HAMMER               = 0x100,        class=class="str">"cmt">// Hammer
PATTERN_TYPE_INVERTED_HAMMER      = 0x200,        class=class="str">"cmt">// Inverted Hammer
PATTERN_TYPE_HANGING_MAN          = 0x400,        class=class="str">"cmt">// Hanging Man
PATTERN_TYPE_DOJI                 = 0x800,        class=class="str">"cmt">// Doji
PATTERN_TYPE_DRAGONFLY_DOJI       = 0x1000,       class=class="str">"cmt">// Dragonfly Doji
PATTERN_TYPE_GRAVESTONE_DOJI      = 0x2000,       class=class="str">"cmt">// Gravestone Doji
PATTERN_TYPE_MORNING_STAR         = 0x4000,       class=class="str">"cmt">// Morning Star
PATTERN_TYPE_MORNING_DOJI_STAR    = 0x8000,       class=class="str">"cmt">// Morning Doji Star
PATTERN_TYPE_EVENING_STAR         = 0x10000,      class=class="str">"cmt">// Evening Star
PATTERN_TYPE_EVENING_DOJI_STAR    = 0x20000,      class=class="str">"cmt">// Evening Doji Star
PATTERN_TYPE_THREE_STARS          = 0x40000,      class=class="str">"cmt">// Three Stars
PATTERN_TYPE_ABANDONED_BABY       = 0x80000,      class=class="str">"cmt">// Abandoned Baby
class=class="str">"cmt">//--- Price Action
PATTERN_TYPE_PIVOT_POINT_REVERSAL = 0x100000,     class=class="str">"cmt">// Price Action Reversal Pattern
PATTERN_TYPE_OUTSIDE_BAR          = 0x200000,     class=class="str">"cmt">// Price Action Outside Bar
PATTERN_TYPE_INSIDE_BAR           = 0x400000,     class=class="str">"cmt">// Price Action Inside Bar
PATTERN_TYPE_PIN_BAR              = 0x800000,     class=class="str">"cmt">// Price Action Pin Bar
PATTERN_TYPE_RAILS                = 0x1000000,    class=class="str">"cmt">// Price Action Rails
};
class="macro">#define PATTERNS_TOTAL(class="num">26)           class=class="str">"cmt">// Total number of patterns(including the missing one)
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Pattern integer properties                                       |
class=class="str">"cmt">//+------------------------------------------------------------------+
enum ENUM_PATTERN_PROP_INTEGER
  {
   PATTERN_PROP_CODE = class="num">0,                         class=class="str">"cmt">// Unique pattern code(time + type + status + direction + timeframe + symbol)

◍ 母柱时间在形态属性里的落点

在 MT5 自定义形态识别结构里,整数属性枚举把母柱时间单独拎了出来,对应字段 PATTERN_PROP_MOTHERBAR_TIME。它和定义棒时间 PATTERN_PROP_TIME 分开存,意味着内包线、吞没这类多棒形态可以回溯到上一根驱动棒,而不是只盯信号棒。 整数属性总数由宏写死为 10:#define PATTERN_PROP_INTEGER_TOTAL (10)。后面双精度、字符串属性的起始偏移都靠 PATTERN_PROP_INTEGER_TOTAL 减去跳过项来推算,改了整数字段数量必须同步改这两个宏,否则属性索引会错位。 排序枚举 ENUM_SORT_PATTERN_MODE 里也给了 SORT_BY_PATTERN_MOTHERBAR_TIME,可以直接按母柱时间给形态数组排序。实盘里若想先处理老母柱衍生出的形态,用这个排序比按信号时间排更贴近价格行为因果。 外汇与贵金属波动高,母柱时间只是结构字段,不代表任何方向判定,用它排序后仍需人工复核形态状态。

MQL5 / C++
  PATTERN_PROP_CTRL_OBJ_ID,                                                                     class=class="str">"cmt">// Pattern control object ID
  PATTERN_PROP_ID,                                                                                class=class="str">"cmt">// Pattern ID
  PATTERN_PROP_TIME,                                                                              class=class="str">"cmt">// Pattern defining bar time
  PATTERN_PROP_MOTHERBAR_TIME,                                                                    class=class="str">"cmt">// Pattern mother bar time
  PATTERN_PROP_STATUS,                                                                            class=class="str">"cmt">// Pattern status(from the ENUM_PATTERN_STATUS enumeration)
  PATTERN_PROP_TYPE,                                                                              class=class="str">"cmt">// Pattern type(from the ENUM_PATTERN_TYPE enumeration)
  PATTERN_PROP_DIRECTION,                                                                         class=class="str">"cmt">// Pattern type by direction(from the ENUM_PATTERN_TYPE_DIRECTION enumeration)
  PATTERN_PROP_PERIOD,                                                                            class=class="str">"cmt">// Pattern period(timeframe)
  PATTERN_PROP_CANDLES,                                                                           class=class="str">"cmt">// Number of candles that make up the pattern
  };
class="macro">#define PATTERN_PROP_INTEGER_TOTAL(class="num">10)                                                            class=class="str">"cmt">// Total number of integer pattern properties
class="macro">#define FIRST_PATTERN_DBL_PROP(PATTERN_PROP_INTEGER_TOTAL-PATTERN_PROP_INTEGER_SKIP)
class="macro">#define FIRST_PATTERN_STR_PROP(PATTERN_PROP_INTEGER_TOTAL-PATTERN_PROP_INTEGER_SKIP+PATTERN_PROP_DOUBLE_TOTAL-PATTERN_PROP_DOUBLE_SKIP)
enum ENUM_SORT_PATTERN_MODE
  {
class=class="str">"cmt">//--- Sort by integer properties
  SORT_BY_PATTERN_CODE = class="num">0,                                                                       class=class="str">"cmt">// Sort by unique pattern code(time + type + status + direction + timeframe)
  SORT_BY_PATTERN_CTRL_OBJ_ID,                                                                    class=class="str">"cmt">// Sort by pattern control object ID
  SORT_BY_PATTERN_ID,                                                                             class=class="str">"cmt">// Sort by pattern ID
  SORT_BY_PATTERN_TIME,                                                                           class=class="str">"cmt">// Sort by pattern defining bar time
  SORT_BY_PATTERN_MOTHERBAR_TIME,                                                                 class=class="str">"cmt">// Sort by pattern mother bar time

形态排序枚举与图形元素类型拆解

在 MT5 的图表形态分析接口里,排序控制依赖一组枚举值。前半段按形态的逻辑属性排:状态、类型、方向、周期、组成 K 线数,这些都不碰真实报价,只是元数据层面的归类。 后半段 SORT_BY_PATTERN_BAR_PRICE_OPEN 起用 FIRST_PATTERN_DBL_PROP 做基准偏移,开始按定义柱的 OHLC 与各类阴影占比排序。例如 SORT_BY_PATTERN_RATIO_UPPER_SHADOW_TO_CANDLE_SIZE 就是按上影线占整根蜡烛的百分比降序或升序排列,帮你快速筛出长上影形态。 图形元素另有 ENUM_GRAPH_ELEMENT_TYPE,区分标准对象、扩展标准对象、阴影对象与基础元素四类。写 EA 时若要把形态画到副图,得先判断类型再调对应绘图函数,否则扩展对象在低版本终端可能不渲染。 外汇与贵金属波动大,这类枚举只是筛选手段,筛完仍要结合实时流动性判断,信号失效概率不低。

MQL5 / C++
  SORT_BY_PATTERN_STATUS,                                                                     class=class="str">"cmt">// Sort by pattern status(from the ENUM_PATTERN_STATUS enumeration)
  SORT_BY_PATTERN_TYPE,                                                                         class=class="str">"cmt">// Sort by pattern type(from the ENUM_PATTERN_TYPE enumeration)
  SORT_BY_PATTERN_DIRECTION,                                                                    class=class="str">"cmt">// Sort by pattern type based on direction(from the ENUM_PATTERN_TYPE_DIRECTION enumeration)
  SORT_BY_PATTERN_PERIOD,                                                                       class=class="str">"cmt">// Sort by pattern period(timeframe)
  SORT_BY_PATTERN_CANDLES,                                                                      class=class="str">"cmt">// Sort by the number of candles that make up the pattern

class=class="str">"cmt">//--- Sort by real properties
  SORT_BY_PATTERN_BAR_PRICE_OPEN = FIRST_PATTERN_DBL_PROP, class=class="str">"cmt">// Sort by pattern defining bar Open price
  SORT_BY_PATTERN_BAR_PRICE_HIGH,                                                            class=class="str">"cmt">// Sort by pattern defining bar High price
  SORT_BY_PATTERN_BAR_PRICE_LOW,                                                             class=class="str">"cmt">// Sort by pattern defining bar Low price
  SORT_BY_PATTERN_BAR_PRICE_CLOSE,                                                           class=class="str">"cmt">// Sort by pattern defining bar Close price
  SORT_BY_PATTERN_RATIO_BODY_TO_CANDLE_SIZE,                                                class=class="str">"cmt">// Sort by percentage ratio of the candle body to the full size of the candle
  SORT_BY_PATTERN_RATIO_UPPER_SHADOW_TO_CANDLE_SIZE,                                        class=class="str">"cmt">// Sort by percentage ratio of the upper shadow size to the candle size
  SORT_BY_PATTERN_RATIO_LOWER_SHADOW_TO_CANDLE_SIZE,                                        class=class="str">"cmt">// Sort by percentage ratio of the lower shadow size to the candle size
  SORT_BY_PATTERN_RATIO_BODY_TO_CANDLE_SIZE_CRITERION,                                     class=class="str">"cmt">// Sort by defined criterion of the ratio of the candle body to the full candle size in %
  SORT_BY_PATTERN_RATIO_LARGER_SHADOW_TO_CANDLE_SIZE_CRITERION,                            class=class="str">"cmt">// Sort by  defined criterion of the ratio of the maximum shadow to the candle size in %
  SORT_BY_PATTERN_RATIO_SMALLER_SHADOW_TO_CANDLE_SIZE_CRITERION,                           class=class="str">"cmt">// Sort by  defined criterion of the ratio of the minimum shadow to the candle size in %

class=class="str">"cmt">//--- Sort by class="type">class="kw">string properties
  SORT_BY_PATTERN_SYMBOL = FIRST_BAR_STR_PROP,                                              class=class="str">"cmt">// Sort by a pattern symbol
  SORT_BY_PATTERN_NAME,                                                                     class=class="str">"cmt">// Sort by pattern name
  };
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| The list of graphical element types                                                            |
class=class="str">"cmt">//+------------------------------------------------------------------+
enum ENUM_GRAPH_ELEMENT_TYPE
  {
  GRAPH_ELEMENT_TYPE_STANDARD,                                                              class=class="str">"cmt">// Standard graphical object
  GRAPH_ELEMENT_TYPE_STANDARD_EXTENDED,                                                     class=class="str">"cmt">// Extended standard graphical object
  GRAPH_ELEMENT_TYPE_SHADOW_OBJ,                                                            class=class="str">"cmt">// Shadow object
  GRAPH_ELEMENT_TYPE_ELEMENT,                                                               class=class="str">"cmt">// Element

「图形元素枚举里的 WinForms 控件谱系」

在 MT5 的图表图形系统里,元素类型用一组枚举常量区分。除了最底层的 Bitmap、Form、Window 之外,大部分 UI 对象都归在 WinForms 仿生体系下,理解这个分层对写自定义面板有直接帮助。 枚举先划出 underlay 与 base 两层:GRAPH_ELEMENT_TYPE_WF_UNDERLAY 是面板衬底,GRAPH_ELEMENT_TYPE_WF_BASE 是所有 WinForms 对象的公共基类。往下容器类单独成组,包含 Panel、GroupBox、TabControl、SplitContainer 四种,它们负责承载子控件。 标准控件从 GRAPH_ELEMENT_TYPE_WF_COMMON_BASE 派生,涵盖 Label、Button、CheckBox、RadioButton 等 20 余种可见元素。列表类尤其细:ListBox、CheckedListBox、ButtonListBox 都挂在 GRAPH_ELEMENT_TYPE_WF_ELEMENTS_LIST_BOX 这个基列表之下。 辅助元素容易被忽略——ListBoxItem、TabHeader、TabField、SplitContainerPanel 以及 ArrowButton / UpArrowButton 都是容器或列表的内部零件,枚举里给了独立类型标识。开 MT5 在 MetaEditor 搜 GRAPH_ELEMENT_TYPE_WF_ 前缀,能直接看到这份完整清单并用于控件命中测试。

MQL5 / C++
GRAPH_ELEMENT_TYPE_BITMAP,                                     class=class="str">"cmt">// Bitmap
GRAPH_ELEMENT_TYPE_FORM,                                     class=class="str">"cmt">// Form
GRAPH_ELEMENT_TYPE_WINDOW,                                   class=class="str">"cmt">// Window
class=class="str">"cmt">//--- WinForms
GRAPH_ELEMENT_TYPE_WF_UNDERLAY,                              class=class="str">"cmt">// Panel object underlay
GRAPH_ELEMENT_TYPE_WF_BASE,                                  class=class="str">"cmt">// Windows Forms Base
class=class="str">"cmt">//--- &class="macro">#x27;Container&class="macro">#x27; object types are to be set below
GRAPH_ELEMENT_TYPE_WF_CONTAINER,                             class=class="str">"cmt">// Windows Forms container base object
GRAPH_ELEMENT_TYPE_WF_PANEL,                                 class=class="str">"cmt">// Windows Forms Panel
GRAPH_ELEMENT_TYPE_WF_GROUPBOX,                              class=class="str">"cmt">// Windows Forms GroupBox
GRAPH_ELEMENT_TYPE_WF_TAB_CONTROL,                           class=class="str">"cmt">// Windows Forms TabControl
GRAPH_ELEMENT_TYPE_WF_SPLIT_CONTAINER,                       class=class="str">"cmt">// Windows Forms SplitContainer
class=class="str">"cmt">//--- &class="macro">#x27;Standard control&class="macro">#x27; object types are to be set below
GRAPH_ELEMENT_TYPE_WF_COMMON_BASE,                           class=class="str">"cmt">// Windows Forms base standard control
GRAPH_ELEMENT_TYPE_WF_LABEL,                                 class=class="str">"cmt">// Windows Forms Label
GRAPH_ELEMENT_TYPE_WF_BUTTON,                                class=class="str">"cmt">// Windows Forms Button
GRAPH_ELEMENT_TYPE_WF_CHECKBOX,                              class=class="str">"cmt">// Windows Forms CheckBox
GRAPH_ELEMENT_TYPE_WF_RADIOBUTTON,                           class=class="str">"cmt">// Windows Forms RadioButton
GRAPH_ELEMENT_TYPE_WF_ELEMENTS_LIST_BOX,                     class=class="str">"cmt">// Base list object of Windows Forms elements
GRAPH_ELEMENT_TYPE_WF_LIST_BOX,                              class=class="str">"cmt">// Windows Forms ListBox
GRAPH_ELEMENT_TYPE_WF_CHECKED_LIST_BOX,                      class=class="str">"cmt">// Windows Forms CheckedListBox
GRAPH_ELEMENT_TYPE_WF_BUTTON_LIST_BOX,                       class=class="str">"cmt">// Windows Forms ButtonListBox
GRAPH_ELEMENT_TYPE_WF_TOOLTIP,                               class=class="str">"cmt">// Windows Forms ToolTip
GRAPH_ELEMENT_TYPE_WF_PROGRESS_BAR,                          class=class="str">"cmt">// Windows Forms ProgressBar
class=class="str">"cmt">//--- Auxiliary elements of WinForms objects
GRAPH_ELEMENT_TYPE_WF_LIST_BOX_ITEM,                         class=class="str">"cmt">// Windows Forms ListBoxItem
GRAPH_ELEMENT_TYPE_WF_TAB_HEADER,                            class=class="str">"cmt">// Windows Forms TabHeader
GRAPH_ELEMENT_TYPE_WF_TAB_FIELD,                             class=class="str">"cmt">// Windows Forms TabField
GRAPH_ELEMENT_TYPE_WF_SPLIT_CONTAINER_PANEL,                 class=class="str">"cmt">// Windows Forms SplitContainerPanel
GRAPH_ELEMENT_TYPE_WF_ARROW_BUTTON,                          class=class="str">"cmt">// Windows Forms ArrowButton
GRAPH_ELEMENT_TYPE_WF_ARROW_BUTTON_UP                        class=class="str">"cmt">// Windows Forms UpArrowButton

◍ 图形控件与报错枚举的底层定义

在 MT5 自定义库里,图形元素类型和文本消息索引通常被拆成两个枚举集中管理。上面这段截取的是 Windows Forms 风格控件的部分枚举值,从方向箭头按钮到滚动条、进度条、提示气泡都给了独立类型常量。 GRAPH_ELEMENT_TYPE_WF_ARROW_BUTTON_DOWN 到 GRAPH_ELEMENT_TYPE_WF_ARROW_BUTTONS_LR_BOX 覆盖了上下左右单键及组合框,做面板交互时要按这些常量区分命中区域。GRAPH_ELEMENT_TYPE_WF_SCROLL_BAR_HORISONTAL 与 _VERTICAL 则明确把横竖滚动条分开,避免后期在 OnChartEvent 里用错判定分支。 紧接其后的 ENUM_MESSAGES_LIB 从 ERR_USER_ERROR_FIRST 起算用户错误码,MSG_LIB_PROP_NOT_SUPPORTED_MT5_LESS_2155 / 3245 / 3260 这类条目说明有些属性只在 MT5 build 2155、3245、3260 之后才可用。实盘跑 EA 前,最好用 TerminalInfoInteger(TERMINAL_BUILD) 读一下本地 build,低于 3260 就可能触发 MSG_LIB_PROP_NOT_SUPPORTED_MT5_LESS_3260 而静默失效。 外汇与贵金属杠杆高、滑点大,这类版本兼容问题若没捕获,面板按钮点了没反应却无日志,比显式报错更难排查。

MQL5 / C++
  GRAPH_ELEMENT_TYPE_WF_ARROW_BUTTON_DOWN,                 class=class="str">"cmt">// Windows Forms DownArrowButton
  GRAPH_ELEMENT_TYPE_WF_ARROW_BUTTON_LEFT,                 class=class="str">"cmt">// Windows Forms LeftArrowButton
  GRAPH_ELEMENT_TYPE_WF_ARROW_BUTTON_RIGHT,                class=class="str">"cmt">// Windows Forms RightArrowButton
  GRAPH_ELEMENT_TYPE_WF_ARROW_BUTTONS_UD_BOX,              class=class="str">"cmt">// Windows Forms UpDownArrowButtonsBox
  GRAPH_ELEMENT_TYPE_WF_ARROW_BUTTONS_LR_BOX,              class=class="str">"cmt">// Windows Forms LeftRightArrowButtonsBox
  GRAPH_ELEMENT_TYPE_WF_SPLITTER,                          class=class="str">"cmt">// Windows Forms Splitter
  GRAPH_ELEMENT_TYPE_WF_HINT_BASE,                         class=class="str">"cmt">// Windows Forms HintBase
  GRAPH_ELEMENT_TYPE_WF_HINT_MOVE_LEFT,                    class=class="str">"cmt">// Windows Forms HintMoveLeft
  GRAPH_ELEMENT_TYPE_WF_HINT_MOVE_RIGHT,                   class=class="str">"cmt">// Windows Forms HintMoveRight
  GRAPH_ELEMENT_TYPE_WF_HINT_MOVE_UP,                      class=class="str">"cmt">// Windows Forms HintMoveUp
  GRAPH_ELEMENT_TYPE_WF_HINT_MOVE_DOWN,                    class=class="str">"cmt">// Windows Forms HintMoveDown
  GRAPH_ELEMENT_TYPE_WF_BAR_PROGRESS_BAR,                  class=class="str">"cmt">// Windows Forms BarProgressBar
  GRAPH_ELEMENT_TYPE_WF_GLARE_OBJ,                         class=class="str">"cmt">// Glare object
  GRAPH_ELEMENT_TYPE_WF_SCROLL_BAR_THUMB,                  class=class="str">"cmt">// Windows Forms ScrollBarThumb
  GRAPH_ELEMENT_TYPE_WF_SCROLL_BAR,                        class=class="str">"cmt">// Windows Forms ScrollBar
  GRAPH_ELEMENT_TYPE_WF_SCROLL_BAR_HORISONTAL,             class=class="str">"cmt">// Windows Forms ScrollBarHorisontal
  GRAPH_ELEMENT_TYPE_WF_SCROLL_BAR_VERTICAL,               class=class="str">"cmt">// Windows Forms ScrollBarVertical
  };
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| List of the library&class="macro">#x27;s text message indices                       |
class=class="str">"cmt">//+------------------------------------------------------------------+
enum ENUM_MESSAGES_LIB
  {
  MSG_LIB_PARAMS_LIST_BEG=ERR_USER_ERROR_FIRST,            class=class="str">"cmt">// Beginning of the parameter list
  MSG_LIB_PARAMS_LIST_END,                                 class=class="str">"cmt">// End of the parameter list
  MSG_LIB_PROP_NOT_SUPPORTED,                              class=class="str">"cmt">// Property not supported
  MSG_LIB_PROP_NOT_SUPPORTED_MQL4,                         class=class="str">"cmt">// Property not supported in MQL4
  MSG_LIB_PROP_NOT_SUPPORTED_MT5_LESS_2155,                class=class="str">"cmt">// Property not supported in MetaTrader class="num">5 versions lower than class="num">2155
  MSG_LIB_PROP_NOT_SUPPORTED_MT5_LESS_3245,                class=class="str">"cmt">// Property not supported in MetaTrader class="num">5 versions lower than class="num">3245
  MSG_LIB_PROP_NOT_SUPPORTED_MT5_LESS_3260,                class=class="str">"cmt">// Property not supported in MetaTrader class="num">5 versions lower than class="num">3260
  MSG_LIB_PROP_NOT_SUPPORTED_POSITION,                     class=class="str">"cmt">// Property not supported for position
  MSG_LIB_PROP_NOT_SUPPORTED_PENDING,                      class=class="str">"cmt">// Property not supported for pending order
  MSG_LIB_PROP_NOT_SUPPORTED_MARKET,                       class=class="str">"cmt">// Property not supported for market order
  MSG_LIB_PROP_NOT_SUPPORTED_MARKET_HIST,                  class=class="str">"cmt">// Property not supported for historical market order

库消息枚举里的图形与形态标识

这段枚举清单来自标准库的消息宏定义尾部,集中暴露了属性状态、K线比例、形态结构与画布元素四类标识。其中 MSG_LIB_PROP_NOT_FOUND 与 MSG_LIB_TEXT_BAR_PATTERNS_TYPE 这类高亮项,是后续做自定义指标提示框时最常引用的字符串资源。 烛体占比类宏给出了三种量化视角:MSG_LIB_TEXT_BAR_RATIO_BODY_TO_CANDLE_SIZE 对应实体占整根蜡烛长度的比,MSG_LIB_TEXT_BAR_RATIO_UPPER_SHADOW_TO_CANDLE_SIZE 与 LOWER_SHADOW 版分别锁定上下影线占比。实盘里若想过滤掉影线过长的小线,直接用这三个比值做阈值判断即可。 形态侧出现了母柱(Mother bar)概念,MSG_LIB_TEXT_PATTERN_MOTHERBAR_TIME 专门记录包含子结构的那根基准 K 线时间,配合 MSG_LIB_TEXT_PATTERN_CODE 与 ID 字段,可以在 EA 里还原内包、外包的嵌套关系。外汇与贵金属波动跳变频繁,这类结构识别在高杠杆下误触概率可能偏高,验证时建议先跑历史 ticks。 画布元素部分区分了扩展标准对象、位图、阴影对象与表单,MSG_GRAPH_ELEMENT_TYPE_BITMAP 在自绘面板时决定资源加载路径。字符串属性如 MSG_CANV_ELEMENT_PROP_TOOLTIP_TEXT 控制悬浮提示正文,调参时改这一项就能换掉默认说明而不动绘制逻辑。

MQL5 / C++
  MSG_LIB_PROP_NOT_SET,                                                                     class=class="str">"cmt">// Value not set
  MSG_LIB_PROP_EMPTY,                                                                         class=class="str">"cmt">// Not set
  MSG_LIB_PROP_NOT_FOUND,                                                                     class=class="str">"cmt">// Not found
  MSG_LIB_PROP_AUTO,                                                                          class=class="str">"cmt">// Generated by the terminal
  MSG_LIB_PROP_AS_IN_ORDER,                                                                   class=class="str">"cmt">// According to the order expiration mode
  MSG_LIB_TEXT_BAR_RATIO_BODY_TO_CANDLE_SIZE,                                                 class=class="str">"cmt">// Ratio of the candle body to the full size of the candle
  MSG_LIB_TEXT_BAR_RATIO_UPPER_SHADOW_TO_CANDLE_SIZE,class=class="str">"cmt">// Ratio of the upper shadow size to the candle size
  MSG_LIB_TEXT_BAR_RATIO_LOWER_SHADOW_TO_CANDLE_SIZE,class=class="str">"cmt">// Ratio of the lower shadow size to the candle size
  MSG_LIB_TEXT_BAR_PATTERNS_TYPE,                                                             class=class="str">"cmt">// Types of patterns on the bar

class=class="str">"cmt">//--- CTimeSeries
class=class="str">"cmt">//--- CPattern
  MSG_LIB_TEXT_PATTERN_CODE,                                                                  class=class="str">"cmt">// Code
  MSG_LIB_TEXT_PATTERN_TIME,                                                                  class=class="str">"cmt">// Defining bar time
  MSG_LIB_TEXT_PATTERN_MOTHERBAR_TIME,                                                        class=class="str">"cmt">// "Mother" bar time
  MSG_LIB_TEXT_PATTERN_ID,                                                                    class=class="str">"cmt">// Pattern ID
  MSG_LIB_TEXT_PATTERN_CTRL_OBJ_ID,                                                           class=class="str">"cmt">// Pattern control object ID
  MSG_GRAPH_ELEMENT_TYPE_STANDARD_EXTENDED,                                                   class=class="str">"cmt">// Extended standard graphical object
  MSG_GRAPH_ELEMENT_TYPE_ELEMENT,                                                             class=class="str">"cmt">// Element
  MSG_GRAPH_ELEMENT_TYPE_BITMAP,                                                              class=class="str">"cmt">// Bitmap
  MSG_GRAPH_ELEMENT_TYPE_SHADOW_OBJ,                                                          class=class="str">"cmt">// Shadow object
  MSG_GRAPH_ELEMENT_TYPE_FORM,                                                                class=class="str">"cmt">// Form
class=class="str">"cmt">//--- String properties of graphical elements
  MSG_CANV_ELEMENT_PROP_NAME_OBJ,                                                             class=class="str">"cmt">// Graphical element object name
  MSG_CANV_ELEMENT_PROP_NAME_RES,                                                             class=class="str">"cmt">// Graphical resource name
  MSG_CANV_ELEMENT_PROP_TEXT,                                                                 class=class="str">"cmt">// Graphical element text
  MSG_CANV_ELEMENT_PROP_DESCRIPTION,                                                          class=class="str">"cmt">// Graphical element description
  MSG_CANV_ELEMENT_PROP_TOOLTIP_TITLE,                                                        class=class="str">"cmt">// Element tooltip title
  MSG_CANV_ELEMENT_PROP_TOOLTIP_TEXT,                                                         class=class="str">"cmt">// Element tooltip text

class=class="str">"cmt">//--- CGCnvBitmap
让小布替你跑这套
这些诊断小布盯盘的 AIGC 已内置,打开对应品种页即可看到孕线嵌套的自动框选,把重复劳动交给小布,你专注决策。

常见问题

Pin Bar 是单柱形态只看一根比例,孕线是双柱需比较母柱与界定柱的高低范围,且支持多子柱嵌套同一母柱。
形态类型用位标志存储,一个变量可记多种类型,获取柱对象后直接提取标记就能筛出要处理的形态,不必重跑全图扫描。
它挂钩柱的时间价格并加载 bmp 资源,用来在嵌套形态涵盖的柱周围画框架,比单点标记更直观。
可以,小布盯盘对应品种页已内置 AIGC 诊断,自动识别 Inside Bar 嵌套并绘制边界,不需自己写库类。
用母柱与子柱开启时间差算出形态包含柱数,从而确定框架宽度,避免在图表上误标或漏标整组嵌套。