我有一些 COT 数据,我想在主价格窗口下绘制作为指标。COT 数据是外部数据,即独立于价格。因此,不能像根据价格计算的传统指标那样编写它。因为我有所有需要的数据,所以我不需要做任何计算。我只需要转换日期和时间,使其与价格图表一致。我稍后会弄清楚如何做。现在,如果我们忽略对齐,我想问的是如何在价格图表下绘制数据?谢谢!
2 回答
声明指标缓冲区:
double ExtBufferCOT[];
分配缓冲区的索引
SetIndexStyle( 0, DRAW_LINE );
SetIndexBuffer( 0, ExtBufferCOT );
在OnCalculate()
函数中 - 确保是时候再次检查级别(我认为您不需要每次更新它们,对吧?可能每天一次或每周一次)然后读取您拥有的文件(我们不需要有一个文件示例,在这里描述如何做到这一点毫无意义),转换文件的元素,使用StrToTime()
和StrToDouble()
最后一步 - 从文件中获取最后 N 行,并将它们映射到指标缓冲区:
double value;
datetime time; // - your values from file are here
int shift = iBarShift( _Symbol, 0, time );
ExtBufferCOT[shift] = value; /* probably need to fill buffer
of next candles too
if your chart timeframe
is smaller then frequency
of observations in the file
*/
备选方案 A:
使用 MT4-GUI 工具并以编程方式将数据绘制到 MT4.Graph 中或使用 GUI 对象的屏幕布局平面,独立于底层实时[TimeDOMAIN,PriceDOMAIN]
图形,两者都使用 EA类型的MQL4
代码。我们最常将这种方法用于所有任务,这通常会作为自定义指标类型的代码着陆MQL4
,因为新MQL4.56789
代码执行引擎降低了所有(是的,全部)自定义指标代码单元的可实现性能' 执行到单个线程中,因此既对实时敏感,又可能阻塞线程。
OnInit(){...}
使用这种替代方法,您可以保留代码设计的全部自由,并且可以在进入交易循环之前从预先计算和预先设置部分内部的 GUI 对象中受益匪浅。OnTick(){...}
这也最大限度地减少了与需要从事件循环内部更新 GUI 场景相关的延迟成本。
备选方案 B:
人们也可以选择使用独立的Script类型的 MQL4
代码单元来完成类似的工作,因为 COT 数据每周公布一次,因此本身是静态的。
启动脚本是一个步骤,只要可行就可以发生,而且这个实现模型还可以享受一些事后修改工具,这些工具可以从另一个 EA 交易或另一个脚本MQL4
代码运行,以提供一些事后实时 GUI - 场景修改/维护。
备选方案 C:
如果确实坚持这样做,则 GUI 组合可能会组装在一个相当特殊的实时计算的自定义指标类型的MQL4
代码中。
这种方法但必须小心地将 GUI 组合部署到自定义指示器OnInit(){...}
部分,并避免在上述关键部分中阻塞执行流程的任何风险OnCalculate(){...}
。
缓冲区映射、基于寄存器的自定义指标数据和绘图工具对于更高级的用途来说是相当严格的,它们不严格遵循代码的硬连线逻辑,仅响应 MarketEvent-s 流,这可能但需要不是一次发生,而是由一种小批量排列,以便以分段(因此减少阻塞)处理方法处理 DataStore 的整个深度。
在自定义指标的 OnInit() 部分中构建 GUI 场景,如果要读取外部数据源和/或任何类似类型的平台间通信(无论是用于消息传递还是信号目的)。
我的选择是[A]
映射{ Date, Time }
到 a是微不足道的,MQL4 从一开始就MQL4-datetime
使用它,因为它已经过去了几秒钟- 如此简单,如此容易。datetime
int
1970-01-01,00:00:00.000