# 机构级缠论 EA 开发文档(MT4 模拟交易版)-1
机构级缠论 EA 开发文档(MT4 模拟交易版)
1. 项目概述
- 目标:在 MT4 平台上构建一套基于缠论结构、具备风险控制与可视化能力的模拟交易系统。EA 仅在图表上模拟真实交易逻辑,不发送真实订单。
- 特点:
- 去指标化,完全基于价格结构。
- 支持多周期结构识别(如 H4 + H1),并防止中枢飘逸。
- 引入胜率、盈亏比、交易频率、中枢健康度评分等治理机制。
- 通过图形对象展示结构信息,包括溢价区/折价区、流动性清扫区域以及止盈止损标识。
- 所有交易动作仅作为模拟记录(绘图、日志),不调用
OrderSend。
2. 核心理念与要点
2.1 缠论结构原则
- 分型 → 笔 → 中枢的结构识别流程,基于已确认的 K 线(避免飘逸)。
- 多级锚定:下级中枢需依附于上级中枢,防止跨级漂移。
- 趋势判断:通过 HH/HL 或 LL/LH 组合确认主方向。
2.2 防飘逸机制
- 只使用已闭合 K 线计算分型。
- 笔与中枢一旦确认立即锁定,不回溯修改。
- 区分历史段与实时段;实时段仅用于预警,不纳入结构确认。
2.3 三个核心参数
- 胜率(Win Rate):统计中枢突破达到目标的成功率。
- 盈亏比(R/R):目标距离与止损距离(基于订单流清扫区)的比值。
- 交易频率(Trade Frequency):单位时间内有效信号次数,随中枢节奏动态调节。
2.4 中枢健康度评分
[
\text{Score} = \frac{\text{胜率} \times \text{盈亏比}}{\text{频率}} \times \text{稳定系数}
]
- 稳定系数综合中枢持续时间、成交密度、上下级结构协同等因素。
- Score 低于阈值时收缩策略、降低仓位或暂停交易。
2.5 订单流清扫区止损
- 止损放在流动性清扫区外侧,而非裸高/低点。
- 清扫区识别:上一结构极值附近的流动性堆积 + 向外延伸 3~5 个点。
- 避免假突破扫损,仅当真实订单流失败时触发。
3. 可视化要求
3.1 溢价区 / 折价区
- 定义:
- 溢价区:中枢上方区域(提示价格偏高)。
- 折价区:中枢下方区域(提示价格偏低)。
- 显示:
- 使用
OBJ_RECTANGLE绘制半透明色块。 - 建议颜色:溢价区为淡红系,折价区为淡绿系。
- 中枢锁定后区域固定,不随价格抖动。
- 使用
3.2 流动性清扫区 + 止盈止损
- 在清扫区绘制窄矩形或横条(可用蓝紫/橙色)。
- 当前模拟交易的止损、止盈位在该区域内加深颜色或加边框。
- 可配合
OBJ_ARROW、OBJ_TEXT标注 “SL”/“TP”。
4. 系统模块划分
-
数据管理模块
- 使用
iOpen/iHigh/iLow/iClose/iTime和iVolume缓存多周期数据。 - 管理历史段与实时段数据结构。
- 使用
-
结构识别模块
- 分型识别 → 笔生成 → 中枢检测与锁定。
- 多周期锚定,确保下级结构受上级约束。
-
信号过滤模块
- 趋势判断(HH/HL、LL/LH)。
- 中枢突破 + 回抽确认,结合 tick 量过滤假信号。
-
风险控制模块
- 基于清扫区计算止损位置。
- 估算仓位(仅用于模拟统计,不真实下单)。
- 连续亏损/回撤阈值触发降频或暂停。
-
执行模拟模块
- 生成虚拟订单记录结构,保存入场价/SL/TP。
- 绘制溢价区、折价区、清扫区以及 SL/TP 标记。
- 不调用
OrderSend,仅在图表和日志中反映交易。 - 使用
Print与FileOpen输出模拟交易结果。
-
绩效与自适应模块
- 实时统计胜率、盈亏比、频率并计算 Score。
- Score 降低时自动调整策略启用状态或建议仓位。
- 记录每笔模拟交易的结构文本、Score、风险参数。
5. 数据与工具准备
- 行情数据:MT4 自带多周期 OHLC 与 tick 量。
- 图形绘制:利用 MT4 图形对象 API(
ObjectCreate等)。 - 日志输出:
Print、FileOpen(CSV/文本)用于复盘。 - 参数配置:颜色、透明度、Score 阈值、风险阈值等需外部输入。
6. 重点验证事项
- 清扫区算法在历史数据中的有效性与可视化准确度。
- 多周期同步与中枢锚定逻辑的稳定性。
- Score 阈值、降频规则在不同市场环境下的适配性。
- 图形对象的清理策略,防止图表堆积。
- 模拟滑点与手续费假设的合理性(影响胜率、盈亏比统计)。
7. 开发里程碑建议
- 结构逻辑验证:在历史数据上验证分型、笔、中枢识别与可视化。
- 信号与风险模块:实现清扫区止损、溢价/折价区绘制及 Score 计算,并在折价区/溢价区内检测回踩结构,触发颜色强化或提示信息。
- 执行模拟:构建虚拟订单管理、图形标注和日志输出。
- 策略治理:完成胜率、盈亏比、频率、Score 的联动控制。
- 测试与迭代:在多品种、不同周期上模拟运行,调参优化。
8. 当前 EA 实现细节(chan_structure_sim.mq4)
8.1 全局架构
- 时间驱动:在
OnTick()中通过CheckNewBar()识别主周期新 K 线,仅在闭合后更新结构,确保无飘逸。 - 数据结构:全部使用动态数组(
g_fractals/g_pens/g_zhongshus/g_trades)存储历史数据并限制最大容量 (InpMaxRecords)。 - 模块流程:
ProcessPrimary():刷新分型、笔、中枢 → 绘图 → 更新模拟交易。UpdateSimulation():检测溢价/折价触发 → 生成/关闭模拟订单 → 刷新叠加信息面板。UpdateTradePanel():汇总当前仓位、结构状态、多周期趋势,推送至图表右上/左下角叠加文本。
8.2 可视化元素
- 中枢主体:灰色矩形框(前景层)+ 实线上下沿 + 虚线中线,标签
ZS #编号放置在中枢上沿。 - 溢价/折价区块:
- 使用
ColorWithAlpha()生成半透明色块,默认不铺设背景以避免遮挡 K 线。 - 上方矩形标注“溢价”,下方标注“折价”,同时绘制 2 像素虚线警示线。
- 在回踩折价区时,
HighlightDiscountRetest()追加文字提示与亮色矩形。
- 使用
- 进行中中枢:若未锁定,通过
DrawDevelopingZone()绘制点状矩形与标签ZS(dev)/ZS(fb)。 - 同步线:在 M15 图表上读取 H1 中枢关键价位(通过全局变量)并绘制水平线用于跨周期参考。
- 叠加文本:
- 右上角
TRADE_OVERLAY(字号 7):展示在途模拟仓位、订单流基准及盈亏提示。 - 左下角
STRUCT_OVERLAY(字号 9):展示 HH/HL 状态、趋势描述、多周期区间及风控建议。 - 文本颜色根据图表主题自动匹配(前景色或背景亮度)。
- 右上角
8.3 模拟交易逻辑
- 触发条件:
- 折价区内收盘价 → 模拟多单 (
OpenSimTrade(..., true, ...))。 - 溢价区内收盘价 → 模拟空单。
- 每个中枢同方向仅允许一个未平仓仓位(通过
FindOpenTradeIndex()防重)。
- 折价区内收盘价 → 模拟多单 (
- 仓位与风控:
- 默认手数
InpSimLots(目前固定 0.01),止损位 =zone.zd - pad/zone.zg + pad,止盈为 1:2 扩展。 - 平仓信号基于下一根已完成 K 线的高低点触及 SL/TP。
- 结果通过
WriteLog()写入 CSV,便于事后复盘。
- 默认手数
- 叠加展示:
UpdateTradePanel()负责生成面板文字、更新全局变量、调用UpdateTradeOverlayText()与UpdateStructureOverlayText()。
8.4 多周期趋势面板
ComputeTrendInfo()对指定周期采集分型 → 生成笔 → 搜索最近中枢(或 fallback 区间)。- 输出字段:高低点状态(HH/HL/LH/LL)、趋势文字、区间价格、止损建议、RR 提示。
AppendTrendPanelLine()在左下角面板形成形如H1 HH/HL 上行 区[xxx-xxx] SLxxx/xxx RR稳的单行摘要。
8.5 日志与文件
PrepareLog()创建yyyy.mm.dd_hh.mm_chan_sim_log.csv,写入时间、类型、详情。- 每次开仓/平仓/折价提示均调用
WriteLog()记录。 CloseLog()于OnDeinit()中关闭并清理句柄。
8.6 清理策略
CleanupObjects()/ClearDevelopingZoneObjects()在重绘前删除旧对象(基于OBJ_PREFIX)。TrimFractals/Pens/Zhongshus/Trades()控制历史记录长度,防止内存膨胀。OnDeinit()清空数组、文字叠加、文件句柄,确保 EA 再挂载时环境干净。
8.7 可配置参数
InpPrimaryTF/InphigherTF:主、上级时间框。InpFractalDepth:分型左右 K 数(默认 2)。InpLiquidityPad:溢价/折价延伸点数,同时影响止损距离与文字标签位置。InpPremiumColor/InpDiscountColor/InpLiquidityColor:溢价区、折价区、清扫提示颜色,可根据主题调节。InpEnableLogging:控制 CSV 输出。InpShowDevelopingZhongshu:是否绘制进行中的中枢预测框。
9. 后续开发建议
- Score 体系落地:在当前模拟交易模块中引入胜率/盈亏比统计,动态调整触发条件或手数。
- 多仓位管理:支持同一中枢内多笔分批入场/加仓,并提供分层止盈策略。
- 策略回放工具:基于现有日志开发简单复盘脚本,把 CSV 还原成信号时间线。
- 参数仪表板:在图表上增加可配置的小面板(对象按钮)以快速切换周期/阈值。
- 性能优化:对
UpdateFractals()、BuildPens()中的循环增加增量更新,减少全量遍历。
