从多个图表中获取数据

时间:2017-11-17 07:41:18

标签: mql4 metatrader4

我正在尝试制作一个脚本从MT4上的多个图表中获取数据。

我想从多张图表中获取数据。

例如从欧元/美元和英镑/美元获得今天的MACD,然后比较两个数字。

是否可以在同一个脚本中处理多个图表???

2 个答案:

答案 0 :(得分:1)

是的,可以使用iClose()iOpen()iHigh()iLow()功能。此外,还有以类似方式访问大多数常见指标的功能:iADX()iMACD()iMA()iMFI()iMomentum()仅举几例 - 请参阅MT4 docs获取完整列表。

例如,如果您的提供商有一个名为SP500_SB的工具,那么您可以使用以下代码行访问该图表中的数据,而不会将代码附加到该图表。

iClose( "SP500_SB", Period(), 0 );

第一个参数显然是仪器名称。

第二个参数是您要访问的时间范围,例如5分钟栏,10分钟栏等。在上面的代码片段中,调用将使用脚本附加到的图表所使用的任何时间范围。

最后一个参数是该数据的索引,即在上面的示例中读取列表中的第一个值。

一个很大的限制(IMO)是策略测试程序不支持访问附加图表之外的数据,因此您无法在策略测试程序中运行多仪器代码,这使得调试和测试多仪器指标或专家顾问真的很难。

答案 1 :(得分:1)

是的,有可能:

MetaTrader 4号航站楼使用运行特定代码段的概念"附加" GUI图形原生数据,但最近有几个新功能可以满足您的要求。

根据要求,MACD on"非本地" - EURUSD GBPUSD - 独立于" native"启动脚本的GUI图形,可以使用:

double aTodayMACDonEURUSD = iMACD( "EURUSD", PERIOD_D1, fEMA, sEMA, aSIG, PRICE_CLOSE, MODE_MAIN, 0 ),
       aTodayMACDonGBPUSD = iMACD( "GBPUSD", PERIOD_D1, fEMA, sEMA, aSIG, PRICE_CLOSE, MODE_MAIN, 0 );

使用记录的调用接口签名详细信息:

double  iMACD( string       symbol,           // symbol
               int          timeframe,        // timeframe
               int          fast_ema_period,  // Fast EMA period
               int          slow_ema_period,  // Slow EMA period
               int          signal_period,    // Signal line period
               int          applied_price,    // applied price
               int          mode,             // line index
               int          shift             // shift
               );

如果您的symbol字符串与实际货币对匹配,那么这很有效。名称,由您的外汇经纪商的条款&条件。

不要犹豫再问。