是的,这是一个无休止的循环,但这是一个想法。
要不断循环所有的符号。
下面的代码每3秒发射一次。
下面是代码片段(为了演示的目的,它全部在一个方法中)。
void OnTimer() { // Find next symbol long symbolsTotal = SymbolsTotal(false); long count = GlobalVariableGet("testmem"); if(count >= symbolsTotal) { count = 0; } string newSymbol = SymbolName(count, false); SymbolSelect(newSymbol, true); count++; GlobalVariableSet("testmem", count); // Change chart symbol ChartSetSymbolPeriod(0, newSymbol, Period()); // Remove other symbols from Market Watch CArrayString *symbols = new CArrayString(); for(int i = 0; i < SymbolsTotal(true); i++) { string symbol = SymbolName(i, true); // Get name from local market watch symbols.Add(symbol); } int total = symbols.Total(); for(int i = 0; i < total; i++) { string symbolToRemove = symbols.At(i); // Is the symbol not the current chart or about to // be added? if(newSymbol != symbolToRemove) { // Remove from Market Watch SymbolSelect(symbolToRemove, false); } } delete symbols; }
不知道你说的 "符号 "是什么意思,但上面的代码是在一个新的专家顾问中,ExecuteTimer()设置为3秒。
下面是代码(这是在EA中)。
int OnInit()
{
//---创建定时器
EventSetTimer(3);
//---
return(INIT_SUCCEEDED);
}
我已经添加了完整的脚本,见附件文件 "ForumQuestion1.mq5"。
重现该错误的步骤。
- 在Metaeditor中打开所附的Metatrader 5的脚本(这很安全)。
- 在Windows中打开任务管理器
- 寻找 "Metatrader 5客户终端 "并注意内存量
- 运行脚本并观察任务管理器中的内存栏
当脚本在符号中循环时,内存会慢慢增加。
你好。
我已经添加了完整的脚本,见附件文件 "ForumQuestion1.mq5"。
重现该错误的步骤。
- 在Metaeditor中打开所附的Metatrader 5的脚本(这很安全)。
- 在Windows中打开任务管理器
- 寻找 "Metatrader 5客户终端 "并注意内存量
- 运行脚本并观察任务管理器中的内存栏
当脚本在符号中循环时,内存会慢慢增加。
我试过你的代码,没有内存问题。
MT5 Build 1325。
嗨,阿兰。
谢谢你的答复。
我也在使用同样的版本。内存增加很慢。它需要几分钟时间。基本上它是逐渐增加的。
请看附件 "Memory increase.docx.png",我在里面放了一些截图,显示它随着时间的推移而增加。
我使用的是同一个版本 "MT5 Build 1325"
机器信息。
- Windows 8.1企业版
- 64位操作系统
- 16Gb内存
- i7处理器
谢谢
你好,阿兰。
谢谢你的答复。
我也在使用同样的版本。内存增加很慢。它需要几分钟时间。基本上它是逐渐增加的。
请看所附文件 "Memory increase.docx.png",我在里面放了一些截图,显示它随着时间的推移而增加。
我使用的是同一个版本 "MT5 Build 1325"
机器信息。
- Windows 8.1 企业版
- 64位操作系统
- 16Gb内存
- i7处理器
谢谢
我使用的是Windows 10,如果这有什么不同的话。
你的脚本在我发帖前几分钟就开始运行了。目前,内存使用量比我开始时要低(280Mb对300Mb)。
编辑:我刚刚又检查了一下,现在是189Mb!!仍在减少 :D
EDIT2:在Metaquotes演示服务器上运行。
谢谢你的反馈。
我想我将升级到Windows 10,看看是否会有变化。
我把它放在Windows Server 12 R2上,这也把内存推高了。
让我监测一段时间,并在这个主题上给出反馈。
我有一个专家顾问,它被设置为循环使用符号,它占用了大量的内存。
我注意到这是在符号被装入和移出市场观察的时候慢慢爬升的。 所以这不是图表在市场观察中现有项目的循环,而是在新符号被装入和移出的时候。
它被设置为做以下事情。
当我尽可能多地删除自定义代码,只是使用上述步骤在可用的符号中循环图表时,我注意到我的机器上的内存使用量不断增加。
CPU保持稳定的速度,但内存却直线上升。
有问题吗?
(例如,宁愿用ChartOpen()打开一个新的图表,而不是用ChartSetSymbolPeriod()使用现有的图表)
(也就是说,这只是它的工作方式)
非常感谢