DoEasy.服务功能(第 1 部分):价格形态·进阶篇
📐

DoEasy.服务功能(第 1 部分):价格形态·进阶篇

(2/3)· 从 Pin Bar 到通用形态控制,给时间序列挂上可复用识别层,少写重复代码

进阶 第 2/3 篇
很多人把形态识别写成一堆硬编码的 if,换个品种或周期就重抄一遍。更糟的是把柱形比例写死,市场一变参数就全废。先抽一层抽象,比急着画信号线重要得多。

形态属性枚举怎么拆

在 MT5 里做价格行为扫描,第一步是把「形态」抽象成一组可排序的属性。源码用两个枚举把形态切成整型和双精度两摞:整型管身份与状态,双精度管定义柱的价量与比例。 整型属性从 PATTERN_PROP_CODE 排到 PATTERN_PROP_CANDLES,共 9 个,宏 PATTERN_PROP_INTEGER_TOTAL 写死为 9,排序时跳过 0 个(SKIP=0),意味着这 9 项全参与比对。 双精度属性接在整型总数之后,下标从 9 起跳。除开高低开收四价,还给了三个比例:实体占全程比、上影占全程比、下影占全程比。这三个比值让你能直接按「影线极短」「实体碾压」之类的量化条件筛 K 线,而不是肉眼翻图。 开 MT5 建个 EA 把下面枚举贴进去,改 PATTERN_PROP_RATIO_* 的阈值,就能验证哪些形态在你的品种上出现频率高。外汇与贵金属波动属性差异大,同一组比例阈值跨品种可能失效,属于高风险调试。

MQL5 / C++
  PATTERN_PROP_CODE = class="num">0,                                              class=class="str">"cmt">// Unique pattern code(time + type + status + direction + timeframe + symbol)
  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_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">9)                                 class=class="str">"cmt">// Total number of integer pattern properties
class="macro">#define PATTERN_PROP_INTEGER_SKIP(class="num">0)                                 class=class="str">"cmt">// Number of pattern properties not used in sorting
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Pattern real properties                                            |
class=class="str">"cmt">//+------------------------------------------------------------------+
enum ENUM_PATTERN_PROP_DOUBLE
  {
class=class="str">"cmt">//--- bar data
  PATTERN_PROP_BAR_PRICE_OPEN = PATTERN_PROP_INTEGER_TOTAL,class=class="str">"cmt">// Pattern defining bar Open price
  PATTERN_PROP_BAR_PRICE_HIGH,                              class=class="str">"cmt">// Pattern defining bar High price
  PATTERN_PROP_BAR_PRICE_LOW,                               class=class="str">"cmt">// Pattern defining bar Low price
  PATTERN_PROP_BAR_PRICE_CLOSE,                             class=class="str">"cmt">// Pattern defining bar Close price
  PATTERN_PROP_RATIO_BODY_TO_CANDLE_SIZE,                   class=class="str">"cmt">// Percentage ratio of the candle body to the full size of the candle
  PATTERN_PROP_RATIO_UPPER_SHADOW_TO_CANDLE_SIZE,           class=class="str">"cmt">// Percentage ratio of the upper shadow size to the candle size
  PATTERN_PROP_RATIO_LOWER_SHADOW_TO_CANDLE_SIZE,           class=class="str">"cmt">// Percentage ratio of the lower shadow size to the candle size

◍ 形态属性的枚举与排序字段定义

在 MT5 里做形态识别,第一步是把每根 K 线的几何特征量化成属性。代码里用三个枚举切分了整数、双精度、字符串三类属性:整数类装形态状态、类型、方向;双精度类专门放实体占整根蜡烛的百分比、最长影线占比、最短影线占比这三个比率阈值。 双精度属性总数由宏 PATTERN_PROP_DOUBLE_TOTAL 写死为 10,其中 PATTERN_PROP_DOUBLE_SKIP 为 0,意味着这 10 个比率属性全部参与后续排序,没有跳过项。字符串类只有 symbol 和 name 两项,由 PATTERN_PROP_STRING_TOTAL 定义为 2。 排序枚举 ENUM_SORT_PATTERN_MODE 给了七种以上基准,从 SORT_BY_PATTERN_CODE(时间+类型+状态+方向+周期合成的唯一定位码)到 SORT_BY_PATTERN_DIRECTION(按多空方向归类)。FIRST_PATTERN_DBL_PROP 和 FIRST_PATTERN_STR_PROP 两个宏负责把整数属性偏移量刨掉,让双精度和字符串属性的下标从正确位置起算。 把这套枚举直接贴进你的 EA 头文件,改 PATTERN_PROP_DOUBLE_TOTAL 的值就能增删比率维度;外汇和贵金属波动跳空频繁,实体/影线比率阈值设太死可能在数据缺口处误判,建议先在策略测试器用历史 Tick 跑一遍分布再定参。

MQL5 / C++
  PATTERN_PROP_RATIO_BODY_TO_CANDLE_SIZE_CRITERION,                 class=class="str">"cmt">// Defined criterion of the ratio of the candle body to the full candle size in %
  PATTERN_PROP_RATIO_LARGER_SHADOW_TO_CANDLE_SIZE_CRITERION,  class=class="str">"cmt">// Defined criterion of the ratio of the maximum shadow to the candle size in %
  PATTERN_PROP_RATIO_SMALLER_SHADOW_TO_CANDLE_SIZE_CRITERION, class=class="str">"cmt">// Defined criterion of the ratio of the minimum shadow to the candle size in %
  };
class="macro">#define PATTERN_PROP_DOUBLE_TOTAL(class="num">10)                                class=class="str">"cmt">// Total number of real pattern properties
class="macro">#define PATTERN_PROP_DOUBLE_SKIP(class="num">0)                                 class=class="str">"cmt">// Number of pattern properties not used in sorting
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Pattern class="type">class="kw">string properties                                        |
class=class="str">"cmt">//+------------------------------------------------------------------+
enum ENUM_PATTERN_PROP_STRING
  {
  PATTERN_PROP_SYMBOL = (PATTERN_PROP_INTEGER_TOTAL+PATTERN_PROP_DOUBLE_TOTAL),  class=class="str">"cmt">// Pattern symbol
  PATTERN_PROP_NAME,                                                          class=class="str">"cmt">// Pattern name
  };
class="macro">#define PATTERN_PROP_STRING_TOTAL(class="num">2)                                      class=class="str">"cmt">// Total number of pattern class="type">class="kw">string properties
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Possible pattern sorting criteria                                |
class=class="str">"cmt">//+------------------------------------------------------------------+
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_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)

「图形排序枚举与序列事件的定义细节」

在 MT5 的图表对象库里,图形(pattern)的排序方式被拆成了三组枚举值:按结构属性、按真实价格属性、按字符串属性。结构组含 SORT_BY_PATTERN_PERIOD(按周期)与 SORT_BY_PATTERN_CANDLES(按组成蜡烛数),用于横向比对不同品种或周期的同源形态。 真实属性从 FIRST_PATTERN_DBL_PROP 起跳,覆盖定义棒的开高低收、实体占蜡烛全长百分比、上下影线占比,以及按阈值判定的实体/影线比率。这类枚举让你在扫描器里直接按‘锤子线实体占比小于 30%’这种量化条件做二级排序。 字符串组从 FIRST_BAR_STR_PROP 开始,只含 SORT_BY_PATTERN_SYMBOL 与 SORT_BY_PATTERN_NAME,适合把多符号结果归并后按品种或形态名聚合。下方 ENUM_SERIES_EVENT 则列出序列事件:NO_EVENT、NEW_BAR、MISSING_BARS,以及被高亮标记的 SERIES_EVENTS_PATTERN——图形识别触发事件,其下一代码由宏 SERIES_EVENTS_NEXT_CODE 定义为 (SERIES_EVENTS_PATTERN+1)。 开 MT5 把这段枚举贴进自定义指标头文件,编译后可在 OnInit 里用 Comment(SORT_BY_PATTERN_RATIO_BODY_TO_CANDLE_SIZE) 验证常量值;外汇与贵金属波动剧烈,图形事件触发频率受点差与滑点影响,回测结论仅具概率意义。

MQL5 / C++
  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">//| List of possible timeseries events                                                              |
class=class="str">"cmt">//+------------------------------------------------------------------+
enum ENUM_SERIES_EVENT
  {
  SERIES_EVENTS_NO_EVENT = SYMBOL_EVENTS_NEXT_CODE,                                        class=class="str">"cmt">// no event
  SERIES_EVENTS_NEW_BAR,                                                                   class=class="str">"cmt">// "New bar" event
  SERIES_EVENTS_MISSING_BARS,                                                              class=class="str">"cmt">// "Bars skipped" event
  SERIES_EVENTS_PATTERN,                                                                   class=class="str">"cmt">// "Pattern" event
  };
class="macro">#define SERIES_EVENTS_NEXT_CODE(SERIES_EVENTS_PATTERN+class="num">1)                                class=class="str">"cmt">// Code of the next event after the "Pattern" event
  MSG_LIB_TEXT_BAR_TYPE_CANDLE_ZERO_BODY,                                                  class=class="str">"cmt">// Candle with a zero body
  MSG_LIB_TEXT_BAR_TEXT_FIRS_SET_AMOUNT_DATA,                                              class=class="str">"cmt">// First, we need to set the required amount of data using SetRequiredUsedData()

形态库里的字段定义与判定维度

在 MT5 的自定义形态识别库里,每根 K 线会被拆成三组百分比数据:实体占全影线全长的比例、上影线占全长的比例、下影线占全长的比例。这三个值直接决定了一个形态是否属于“ Pin Bar ”或“吞没”的候选。 CPattern 类进一步把形态结构化:除开高低开收四价,还记录形态代码、定义 bar 的时间、Pattern ID、控制对象 ID、组成蜡烛数、方向(多 / 空 / 双向)。外汇与贵金属波动剧烈,这些字段只是描述,不预示后续一定反转。 判定阈值以 _CRIT 后缀字段给出,例如实体占比临界值、最大影线占比临界值、最小影线占比临界值,单位都是 %。你可以在 EA 里读取 MSG_LIB_TEXT_PATTERN_RATIO_*_CRIT 来知道库认为“足够小实体”的量化标准,再去 MT5 里调小或调大做回测。 状态字段把形态分成 Candle pattern 与 Price Action formation 两类,并标注 Bullish / Bearish / Both。实盘使用前,建议先打印一组 XAUUSD M15 的 MSG_LIB_TEXT_PATTERN_RATIO_BODY_TO_CANDLE_SIZE 实际值,确认和你的裸 K 直觉一致。

MQL5 / C++
  MSG_LIB_TEXT_BAR_RATIO_BODY_TO_CANDLE_SIZE,           class=class="str">"cmt">// Percentage 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">// Percentage ratio of the upper shadow size to the candle size
  MSG_LIB_TEXT_BAR_RATIO_LOWER_SHADOW_TO_CANDLE_SIZE,class=class="str">"cmt">// Percentage ratio of the lower shadow size to the candle size

class=class="str">"cmt">//--- CTimeSeries
  MSG_LIB_TEXT_TS_TEXT_ATTEMPT,                      class=class="str">"cmt">// Attempt:
  MSG_LIB_TEXT_TS_TEXT_WAIT_FOR_SYNC,                class=class="str">"cmt">// Waiting for data synchronization ...
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_ID,                           class=class="str">"cmt">// Pattern ID
  MSG_LIB_TEXT_PATTERN_CTRL_OBJ_ID,                  class=class="str">"cmt">// Pattern control object ID
  MSG_LIB_TEXT_PATTERN_CANDLES,                      class=class="str">"cmt">// Number of candles that make up the pattern
  MSG_LIB_TEXT_PATTERN_DIRECTION,                    class=class="str">"cmt">// Pattern direction

  MSG_LIB_TEXT_PATTERN_BAR_PRICE_OPEN,               class=class="str">"cmt">// Pattern defining bar Open price
  MSG_LIB_TEXT_PATTERN_BAR_PRICE_HIGH,               class=class="str">"cmt">// Pattern defining bar High price
  MSG_LIB_TEXT_PATTERN_BAR_PRICE_LOW,                class=class="str">"cmt">// Pattern defining bar Low price
  MSG_LIB_TEXT_PATTERN_BAR_PRICE_CLOSE,              class=class="str">"cmt">// Pattern defining bar Close price

  MSG_LIB_TEXT_PATTERN_RATIO_BODY_TO_CANDLE_SIZE,    class=class="str">"cmt">// Percentage ratio of the candle body to the full size of the candle
  MSG_LIB_TEXT_PATTERN_RATIO_UPPER_SHADOW_TO_CANDLE_SIZE,  class=class="str">"cmt">// Percentage ratio of the upper shadow size to the candle size
  MSG_LIB_TEXT_PATTERN_RATIO_LOWER_SHADOW_TO_CANDLE_SIZE,  class=class="str">"cmt">// Percentage ratio of the lower shadow size to the candle size
  MSG_LIB_TEXT_PATTERN_RATIO_BODY_TO_CANDLE_SIZE_CRIT,     class=class="str">"cmt">// Defined criterion of the ratio of the candle body to the full candle size in %
  MSG_LIB_TEXT_PATTERN_RATIO_LARGER_SHADOW_TO_CANDLE_SIZE_CRIT,  class=class="str">"cmt">// Defined criterion of the ratio of the maximum shadow to the candle size in %
  MSG_LIB_TEXT_PATTERN_RATIO_SMALLER_SHADOW_TO_CANDLE_SIZE_CRIT, class=class="str">"cmt">// Defined criterion of the ratio of the minimum shadow to the candle size in %

  MSG_LIB_TEXT_PATTERN_NAME,                         class=class="str">"cmt">// Name
  MSG_LIB_TEXT_PATTERN_STATUS_JC,                    class=class="str">"cmt">// Candle pattern
  MSG_LIB_TEXT_PATTERN_STATUS_PA,                    class=class="str">"cmt">// Price Action formation
  MSG_LIB_TEXT_PATTERN_BULLISH,                      class=class="str">"cmt">// Bullish pattern
  MSG_LIB_TEXT_PATTERN_BEARISH,                      class=class="str">"cmt">// Bearish pattern
  MSG_LIB_TEXT_PATTERN_BOTH,                         class=class="str">"cmt">// Bidirectional pattern

  class=class="str">"cmt">//--- Candles

◍ 形态枚举与文本映射的底层清单

在 MT5 的标准库里,蜡烛形态并不是靠硬编码字符串输出的,而是一组 MSG_LIB_TEXT_PATTERN_TYPE_* 枚举常量,再绑定到多语言文本表。下面这段声明覆盖了从 K线经典到 Price Action 的 30 余种类型:Harami、Harami Cross、Tweezer、Piercing Line、Dark Cloud Cover、Three White Soldiers、Three Black Crows,一直到 Morning Star / Evening Star 系列,以及 Pivot Point Reversal、Outside Bar、Inside Bar、Pin Bar、Rails 等裸 K 行为模式。 原文中夹了一行 <100/100/72% > 的标注,对应的是 Evening Star 注释尾部,大概率指向某次回测或样本匹配的统计切片(100 根测试、100% 覆盖、72% 某类判定比率),但库代码本身不保证这个数值在任何品种上复现。外汇与贵金属波动结构差异大,实盘识别率可能明显偏离。 除形态名外,缓冲层还定义了比值类描述: candle body 与 full candle size 之比、upper shadow 与 candle size 之比、lower shadow 与 candle size 之比。这三者是后续 CPattern 做影线/实体过滤的分母基准,改阈值前得先确认 SetRequiredUsedData() 已拉足历史。 CPattern 自身的文本表只留了三行关键字段:Code(形态编码)、Time of the defining bar(定义柱时间)、Pattern ID(形态 ID)。你要写 EA 把识别结果丢进日志或面板,直接读这三个字段就够了,不用去扒私有成员。

MQL5 / C++
  MSG_LIB_TEXT_PATTERN_TYPE_HARAMI,                    class=class="str">"cmt">// Harami
  MSG_LIB_TEXT_PATTERN_TYPE_HARAMI_CROSS,                class=class="str">"cmt">// Harami Cross
  MSG_LIB_TEXT_PATTERN_TYPE_TWEEZER,                     class=class="str">"cmt">// Tweezer
  MSG_LIB_TEXT_PATTERN_TYPE_PIERCING_LINE,               class=class="str">"cmt">// Piercing Line
  MSG_LIB_TEXT_PATTERN_TYPE_DARK_CLOUD_COVER,            class=class="str">"cmt">// Dark Cloud Cover
  MSG_LIB_TEXT_PATTERN_TYPE_THREE_WHITE_SOLDIERS,        class=class="str">"cmt">// Three White Soldiers
  MSG_LIB_TEXT_PATTERN_TYPE_THREE_BLACK_CROWS,           class=class="str">"cmt">// Three Black Crows
  MSG_LIB_TEXT_PATTERN_TYPE_SHOOTING_STAR,               class=class="str">"cmt">// Shooting Star
  MSG_LIB_TEXT_PATTERN_TYPE_HAMMER,                      class=class="str">"cmt">// Hammer
  MSG_LIB_TEXT_PATTERN_TYPE_INVERTED_HAMMER,             class=class="str">"cmt">// Inverted Hammer
  MSG_LIB_TEXT_PATTERN_TYPE_HANGING_MAN,                 class=class="str">"cmt">// Hanging Man
  MSG_LIB_TEXT_PATTERN_TYPE_DOJI,                        class=class="str">"cmt">// Doji
  MSG_LIB_TEXT_PATTERN_TYPE_DRAGONFLY_DOJI,              class=class="str">"cmt">// Dragonfly Doji
  MSG_LIB_TEXT_PATTERN_TYPE_GRAVESTONE_DOJI,             class=class="str">"cmt">// Gravestone Doji
  MSG_LIB_TEXT_PATTERN_TYPE_MORNING_STAR,                class=class="str">"cmt">// Morning Star
  MSG_LIB_TEXT_PATTERN_TYPE_MORNING_DOJI_STAR,           class=class="str">"cmt">// Morning Doji Star
  MSG_LIB_TEXT_PATTERN_TYPE_EVENING_STAR,                class=class="str">"cmt">// Evening Star
  MSG_LIB_TEXT_PATTERN_TYPE_EVENING_DOJI_STAR,           class=class="str">"cmt">// Evening Doji Star
  MSG_LIB_TEXT_PATTERN_TYPE_THREE_STARS,                 class=class="str">"cmt">// Three Stars
  MSG_LIB_TEXT_PATTERN_TYPE_ABANDONED_BABY,              class=class="str">"cmt">// Abandoned Baby
  class=class="str">"cmt">//--- Price Action
  MSG_LIB_TEXT_PATTERN_TYPE_PIVOT_POINT_REVERSAL,       class=class="str">"cmt">// Pivot Point Reversal
  MSG_LIB_TEXT_PATTERN_TYPE_OUTSIDE_BAR,                 class=class="str">"cmt">// Outside Bar
  MSG_LIB_TEXT_PATTERN_TYPE_INSIDE_BAR,                  class=class="str">"cmt">// Inside Bar
  MSG_LIB_TEXT_PATTERN_TYPE_PIN_BAR,                     class=class="str">"cmt">// Pin Bar
  MSG_LIB_TEXT_PATTERN_TYPE_RAILS,                       class=class="str">"cmt">// Rails
class=class="str">"cmt">//--- CBuffer
  {"Свеча с нулевым телом","Candle with zero body"},
  {"Сначала нужно установить требуемое количество данных при помощи SetRequiredUsedData()","First you need to set the required amount of data using SetRequiredUsedData()"},
  {"Отношение тела свечи к полному размеру свечи","Ratio of candle body to full candle size"},
  {"Отношение размера верхней тени к размеру свечи","Ratio of the upper shadow size to the candle size"},
  {"Отношение размера нижней тени к размеру свечи","Ratio of the lower shadow size to the candle size"},
class=class="str">"cmt">//--- CTimeSeries
  {"Попытка: ","Attempt: "},
  {"Ожидание синхронизации данных ...","Waiting for data synchronization ..."},
class=class="str">"cmt">//--- CPattern
  {"Код","Code"},
  {"Время определяющего бара","Time of the defining bar"},
  {"Идентификатор паттерна","Pattern ID"}

「把形态字典塞进缓冲区」

上面这段结构体数组,本质是把价格行为形态的中英双语文案一次性写进 CBuffer,供 EA 在运行时读取标签与状态。前几组字段覆盖形态控制对象 ID、组成蜡烛数、方向,以及定义棒的 OHLC 与影线占比——比如实体占全棒百分比、上影占全棒百分比、下影占全棒百分比,都给了独立字段和对应阈值字段。 后面紧跟的是形态分类树:先标 Candlestick pattern / Price Action Formation 两大类的状态,再分多空与双向;蜡烛类从 Harami、Harami Cross 到 Abandoned baby 列了 24 种,PA 类则收在 Pivot Point Reversal、Outside Bar、Inside Bar、Pin Bar、Rails 这 5 种。 你在 MT5 里接这套字典时,直接照这个映射补 AddString 逻辑即可,不用自己翻译俄文键名。外汇与贵金属波动大、杠杆高,形态命中只是概率倾向,实盘前先用历史数据跑一遍命中率分布。

MQL5 / C++
  {"Идентификатор объекта управления паттерном","Pattern Control object ID"},
  {"Количество свечей, составляющих паттерн","Number of candles in the pattern"},
  {"Направление паттерна","Pattern direction"},

  {"Цена Open определяющего бара паттерна","Open price of the defining bar"},
  {"Цена High определяющего бара паттерна","High price of the defining bar"},
  {"Цена Low определяющего бара паттерна","Low price of the defining bar"},
  {"Цена Close определяющего бара паттерна","Close price of the defining bar"},

  {"Отношение тела свечи к полному размеру свечи в %","Ratio of candle body to full candle size in %"},
  {"Отношение размера верхней тени к размеру свечи в %","Ratio of the size of the upper shadow to the size of the candle in %"},
  {"Отношение размера нижней тени к размеру свечи в %","Ratio of the size of the lower shadow to the size of the candle in %"},
  {"Установленный критерий отношения тела свечи к полному размеру свечи в %","Criterion for the Ratio of candle body to full candle size in %"},
  {"Установленный критерий отношения размера наибольшей тени к размеру свечи в %","Criterion for the Ratio of the size of the larger shadow to the size of the candle in %"},
  {"Установленный критерий отношения размера наименьшей тени к размеру свечи в %","Criterion for the Ratio of the size of the smaller shadow to the size of the candle in %"},

  {"Наименование","Name"},
  class=class="str">"cmt">//--- Pattern status
  {"Свечной паттерн","Candlestick pattern"},
  {"Формация Price Action","Price Action Formation"},
  {"Бычий паттерн","Bullish pattern"},
  {"Медвежий паттерн","Bearish pattern"},
  {"Двунаправленный паттерн","Bidirectional pattern"},
  class=class="str">"cmt">//--- Свечные паттерны
  {"Харами","Harami"},
  {"Крест харами","Harami Cross"},
  {"Пинцет","Tweezer"},
  {"Просвет в облаках","Piercing pattern"},
  {"Завеса из темных облаков","Dark Cloud Cover"},
  {"Три белых солдата","Three White Soldiers"},
  {"Три черные вороны","Three Black Crows"},
  {"Падающая звезда","Shooting Star"},
  {"Молот","Hammer"},
  {"Перевёрнутый молот","Inverted Hammer"},
  {"Повешенный","Hanging Man"},
  {"Доджи","Doji"},
  {"Доджи стрекоза","Dragonfly doji"},
  {"Доджи надгробие","Gravestone Doji"},
  {"Утренняя звезда","Morning Star"},
  {"Утренняя доджи-звезда","Morning Doji Star"},
  {"Вечерняя звезда","Evening Star"},
  {"Вечерняя доджи-звезда","Evening Doji Star"},
  {"Три звезды","Three stars"},
  {"Брошенное дитя","Abandoned baby"},
  class=class="str">"cmt">//--- Формации Price Action
  {"PPR разворотная точка","Pivot Point Reversal"},
  {"Внешний бар","Outside Bar"},
  {"Внутренний бар","Inside Bar"},
  {"Пин бар","Pin Bar"},
  {"Рельсы","Rails"},
class=class="str">"cmt">//--- CBuffer
把形态扫描交给小布盯盘
这些诊断小布盯盘的 AIGC 已内置,打开对应品种页即可看到不同周期的形态标记,你只管比对参数差异做决策。

常见问题

通用参数如基础柱、关联时间序列、图形显示开关对所有形态一致,抽基类后 Pin Bar 等继承类只补差异,改一处即全局生效。
形态管理对象定义在时间序列类内,持有一组按类型分的控制对象,负责在对应序列里搜形态并暴露访问接口。
目前小布内置的是独立 AIGC 识别,不依赖外部库文件;若你本地编译了 DoEasy,把形态列表导出后可在小布自定义页做叠加对照。
不会冲突,它们是同类型不同实例。库按第一参数聚同类型,再按次级参数细分,调用时指定参数集即可拿对应结果。
按程序指示显隐,不为每个命中都画图;控制类提供显示开关,只在需要复核的品类周期上开启。