该库使用 tick 存储格式实现工作,该格式具有良好的性能(读/写)与大小比。
格式。
只存储原始 MqlTick的以下字段:
struct MqlTick { datetime time; // 上次更新价格的时间 double bid; // 当前出价 double ask; // 当前要价 double last; // 最后一笔交易的当前价格 (Last) ulong volume; // 当前价格的成交量 long time_msc; // 上次价格更新的时间,以毫秒为单位 uint flags; // 标记 double volume_real; // 当前价格的成交量 最后一次,精确度更高 };
示例。
您可以通过热键 ALT+M 在 MetaEditor 中查看库方法。下面是一些使用示例。
通过文件写入/读取。
#property script_show_inputs input datetime inFrom = D'2024.12.01'; #include <fxsaber\TicksShort\TicksShort.mqh> // 短勾选存储格式。 void OnStart() { MqlTick Ticks[]; // 对于源刻度。 if (CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL,(ulong)inFrom * 1000) > 0) { FileSave("Ticks.bin", Ticks); // 我们保存了正常的刻度,以便比较文件大小。 TICKS_SHORT::Save("TicksShort.bin", Ticks); // 以压缩格式保存刻度。 MqlTick Ticks2[]; // 用于压扁扁虱。 TICKS_SHORT::Load("TicksShort.bin", Ticks2); // 从压缩格式下载刻度线。 Print("Ratio = " + DoubleToString((double)FileGetInteger("Ticks.bin", FILE_SIZE) / FileGetInteger("TicksShort.bin", FILE_SIZE), 3)); Print("Correct = " + (string)TICKS_SHORT::IsEqual(Ticks, Ticks2)); // Compared. } }
上面的脚本将刻度保存到一个新的格式文件中,并从文件中加载刻度。
结果。
TicksShort_SaveLoad (EURUSD,M1) Ratio = 10.000 TicksShort_SaveLoad (EURUSD,M1) Correct = true
日志输出显示压缩率为 10 倍。解压缩后,刻度与原始刻度一致。
性能。
#property script_show_inputs input datetime inFrom = D'2024.12.01'; #include <fxsaber\TicksShort\TicksShort.mqh> // 短勾选存储格式。 // 返回数组的大小(以字节为单位)。 template <typename T> ulong GetSize( const T &Array[] ) { return((ulong)sizeof(T) * ArraySize(Array)); } // 压缩格式性能标准。 template <typename T1, typename T2> double Criterion( const T1 &Decompression[], const T2 &Compression[], const ulong Interval ) { const double Performance = (double)ArraySize(Decompression) / Interval; return(Performance * ((double)GetSize(Decompression) / GetSize(Compression))); } void OnStart() { MqlTick Ticks[]; // 对于源刻度。 if (CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL,(ulong)inFrom * 1000) > 0) { TICK_SHORT Ticks2[]; // 用于压缩刻度。 ulong Interval = GetMicrosecondCount(); TICKS_SHORT::Compress(Ticks, Ticks2); // Squeezed. Interval = GetMicrosecondCount() - Interval; const double Performance = (double)ArraySize(Ticks) / Interval; Print("Compress performance: " + DoubleToString(Performance, 1) + " Ticks (millions)/sec."); Print("Compress performance criterion: " + DoubleToString(Criterion(Ticks, Ticks2, Interval), 1)); MqlTick Ticks3[]; // 用于压扁扁虱。 ulong Interval2 = GetMicrosecondCount(); TICKS_SHORT::Decompress(Ticks2, Ticks3); // 松开。 Interval2 = GetMicrosecondCount() - Interval2; const double Performance2 = (double)ArraySize(Ticks3) / Interval2; Print("Decompress performance: " + DoubleToString((double)ArraySize(Ticks3) / Interval2, 1) + " Ticks (millions)/sec."); Print("Decompress performance criterion: " + DoubleToString(Criterion(Ticks3, Ticks2, Interval2), 1)); Print("Correct = " + (string)TICKS_SHORT::IsEqual(Ticks, Ticks3)); // Compared. } }
该脚本将刻度源数组转换为压缩数组,然后再转换回来。输出性能/效率数据。
结果。
TicksShort_Performance (EURUSD,M1) Compress performance: 67.7 Ticks (millions)/sec. TicksShort_Performance (EURUSD,M1) Compress performance criterion: 677.1 TicksShort_Performance (EURUSD,M1) Decompress performance: 42.1 Ticks (millions)/sec. TicksShort_Performance (EURUSD,M1) Decompress performance criterion: 420.9 TicksShort_Performance (EURUSD,M1) Correct = true
以每秒超过 4000 万个刻度的速度进行写入和读取,同时保留原始信息。
替代方案。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/61126

符号交换面板:轻松切换图表上的活动符号,同时将新符号添加到 Market Watch。该工具可确保无缝集成和访问实时市场数据,优化您的交易工作流程。

不幸的是,我发现由于夏令时(DST)的原因,有些经纪商在服务器时间更改方面有些马虎,这是我始料未及的,也让我大吃一惊。 这里有一个脚本,任何人都可以用它来检查他们的经纪商。

设置自动止盈和止损:"设置自动止盈和止损"(Take Profit and Stop Loss)功能是任何交易策略中的重要工具,旨在自动进行风险和回报管理。它允许交易者定义固定价位,在该价位上交易应自动平仓,以确保盈利(TP)或限制亏损(SL),从而无需持续进行手动监控。 启用该功能后,您开立的每个仓位都将根据您的自定义参数(如特定点数、余额百分比或技术水平)自动包含预定义的止盈和止损价位。这不仅能节省时间,还能确保您的交易不受市场突然波动和情绪化决策的影响。

月度 VWAP(成交量加权平均价)是一个重要的 MQL5 指标,用于计算和显示每个交易月的成交量加权平均价。它是了解长期市场情绪、识别关键月度公允价值以及为战略决策提供信息的强大工具。