我正在尝试制作一个脚本从MT4上的多个图表中获取数据。
我想从多张图表中获取数据。
例如从欧元/美元和英镑/美元获得今天的MACD,然后比较两个数字。
是否可以在同一个脚本中处理多个图表???
答案 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
字符串与实际货币对匹配,那么这很有效。名称,由您的外汇经纪商的条款&条件。
不要犹豫再问。