用 Tick 数据做订单流指标(含文件持久化)
把逐笔报价画成线或等量烛形,并写文件重启可恢复
Tick 是经纪商实时推送的买卖报价(Bid/Ask),是价格变动的最小信息单元。把 Tick 画成线或等量烛形,能看到时间周期 K 线看不到的微结构。
一、Tick 是什么,为什么要画它
常规 K 线按时间聚合,Tick 指标按逐笔报价呈现,能反映成交节奏与买卖价微动,是订单流分析的入口。
二、两种 Tick 指标
- Tick 图表指标:子窗口画两条线(Bid 红、Ask 蓝);
- Tick 等量烛形:每 N 个 tick(如 16)聚成一根烛,不依赖时间。
三、指标缓冲区与属性
- 线型:indicator_separate_window、2 缓冲、DRAW_LINE;
- 烛形:5 缓冲(4 价格 + 1 颜色索引)、DRAW_COLOR_CANDLES;
- 颜色灰=平、红=跌、绿=涨。
四、文件持久化与重启恢复
每次报价把 时间 Bid Ask 写进 MQL5/Files 的 txt;OnCalculate 首次从文件读历史,之后追加新 tick;只保留最近 rates_total/2 行,旧数据半量淘汰防溢出。
五、等量烛形的 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);
}
九、从 Tick 做订单流指标
订单流(order flow)的核心是「谁在主动成交」。用买卖 tick 的累计差构造失衡曲线,能在价格没动时就看出资金方向;配合成交量突变,可预警即将到来的突破或反转。
但要注意 tick 数据噪声极大,直接画原始差会非常抖。通常要做平滑(EMA)或累加窗口,并和价格结构结合看,单独信 tick 失衡很容易被骗。 实务上再叠加一个「单位时间 tick 数」阈值:只有活跃度足够时才相信失衡方向,冷清时段的不平衡往往是巧合而非资金意图。