首页 / 交易学院 / 小布知识库 / 用 Tick 数据做订单流指标(含文件持久化)
用 Tick 数据做订单流指标(含文件持久化)
📈

用 Tick 数据做订单流指标(含文件持久化)

把逐笔报价画成线或等量烛形,并写文件重启可恢复

MQL5 编程 难度 · 进阶 2026-07-15 10 分钟阅读
#MQL5#Tick#订单流#等量K线#文件持久化

Tick 是经纪商实时推送的买卖报价(Bid/Ask),是价格变动的最小信息单元。把 Tick 画成线或等量烛形,能看到时间周期 K 线看不到的微结构。

一、Tick 是什么,为什么要画它

常规 K 线按时间聚合,Tick 指标按逐笔报价呈现,能反映成交节奏与买卖价微动,是订单流分析的入口。

二、两种 Tick 指标

三、指标缓冲区与属性

四、文件持久化与重启恢复

每次报价把 时间 Bid Ask 写进 MQL5/Files 的 txt;OnCalculate 首次从文件读历史,之后追加新 tick;只保留最近 rates_total/2 行,旧数据半量淘汰防溢出。

✦ 共享读 + 高效拼串
用 FileOpen(FILE_READ|FILE_WRITE|FILE_ANSI|FILE_SHARE_READ) 共享读,配 StringConcatenate 拼串比字符串加法高效;重启用历史恢复图表。

五、等量烛形的 OHLC 逻辑

按 floor(i / ticks_in_candle) 分组,同组更新收盘/高/低,新组定开盘;颜色由收闭对比决定;可切 Bid 或 Ask 作应用价。

六、性能与持久化的坑

Tick 频率远高于 K 线,逐笔写文件会拖慢终端。实战做法:只在「新的一秒」或累计满 N 个 tick 时才落盘一次,并在写前用 FileSeek 定位尾部追加;等量烛形的颜色索引缓冲区要和 4 个价格缓冲同长,哪根短了 DRAW_COLOR_CANDLES 就会错位不画。

七、用 OnTick 累加 Tick 统计

Tick 是终端收到的最小报价变动。在 OnTick 里用 MqlTick 取出买价卖价与成交量,可累加「每秒 tick 数」「买卖压力(主动买/卖 tick 占比)」等指标,反映当下市场的活跃度与方向。

这些统计要维护在全局变量或指标缓冲里,每 tick 增量更新而非全量重算,否则高频下非常吃 CPU。缓冲按时间轴对齐,画成副图就能直观看到成交密度变化。

八、文件持久化历史 Tick

要把 tick 留作离线研究,用 FileOpen 以 FILE_BIN 或 CSV 写盘,每 tick 追加一行(时间、买、卖、成交量)。注意文件句柄要在 OnInit 打开、OnDeinit 关闭,且控制写入频率,否则磁盘 IO 拖慢终端。

int fh = FileOpen("ticks.csv", FILE_WRITE|FILE_CSV|FILE_ANSI);
void OnTick()
{
   MqlTick t; SymbolInfoTick(_Symbol, t);
   FileWrite(fh, t.time, t.bid, t.ask, t.volume);
}
✦ 句柄要对称
FileOpen 的句柄在 OnInit 开、OnDeinit 关。漏关会让文件被占用、重加载后写不进,甚至累积句柄拖垮终端。

九、从 Tick 做订单流指标

订单流(order flow)的核心是「谁在主动成交」。用买卖 tick 的累计差构造失衡曲线,能在价格没动时就看出资金方向;配合成交量突变,可预警即将到来的突破或反转。

但要注意 tick 数据噪声极大,直接画原始差会非常抖。通常要做平滑(EMA)或累加窗口,并和价格结构结合看,单独信 tick 失衡很容易被骗。 实务上再叠加一个「单位时间 tick 数」阈值:只有活跃度足够时才相信失衡方向,冷清时段的不平衡往往是巧合而非资金意图。

十、小结

✦ 小结
Tick 指标把「最小报价变动」变成可量化信号:OnTick 累加买卖压力、FileOpen 落盘做离线研究、再构造订单流失衡曲线。记住增量更新省 CPU、文件句柄要对称、原始 tick 噪声大需平滑。

常见问题

数据来源是逐笔报价而非周期收盘;等量烛形按 tick 数聚合,能呈现成交节奏,不受固定时间框架限制。
终端重启后内存缓冲清空,写文件能在重开时读回历史,图表不断片;也方便别的程序读取 tick 流。
文用 16,但取决于品种流动性;流动性高的品种可加大,让每根烛代表更有意义的成交量级。
避免频繁创建临时字符串,减少 GC 压力,在每 tick 都执行的写文件逻辑里更稳。
防止长期运行内存/文件无限增长导致性能下降,rates_total/2 是兼顾能恢复与不爆内存的折中。