你为什么不写一篇这样的文章呢?这是一个现成的话题!:)
事实上,我并不想详细讨论这一点,因为我想讨论更普遍的问题。因此,我们可以详细讨论标准语言函数返回的错误代码。例如,作为文章的另一个主题--"处理在 MQL5 中使用图形对象时出现的错误"。
我的目标并不相同。是的,写完这篇文章一个月后,我发现结果 "一般般"。好吧,我以后会努力写得更好。
谢尔盖
没关系,但我想把这篇文章叫做
"在 MT5 中使用日志调试智能交易系统 的高级方法"。
因为在调试智能交易系统时,不会再出现错误、
但交易服务器的返回代码可能会有很多错误、
这些错误需要在 Expert Advisor 的正常模式下进行处理。
但错误处理不是调试:)
或者你想说,例如,处理 "资金不足 "错误(这是文章中提到的例子)就是调试?
"资金不足 "不是错误,而是向您发送的信息(向专家发送有关您账户状态的信息),并且
这是一种标准处理情况。正常的开发人员在进行交易或下订单之前必须
//+------------------------------------------------------------------+ //| 专家验钞功能| //+------------------------------------------------------------------+ bool CheckMoney( const long volume ) { double a_go = SymbolInfoDouble( _Symbol, SYMBOL_MARGIN_INITIAL ) * double(volume); double free_margin = ( AccountInfoDouble( ACCOUNT_FREEMARGIN ) / 100 ) * 90; //--- if ( a_go <= free_margin ) { return( true ); } Print( "支票款项:资金不足!" ); return( false ); }
"资金不足 "不是错误,而是向您发送的信息(向智能交易系统发送有关您账户状况的信息),并且
这是标准处理情况。
但这也不是调试时刻。随你怎么说,但它必须得到处理(在我看来,我们在这一点上达成了一致)。在我看来,相对于正常情况,这是一种错误的情况。毕竟,专家可能会认为手段已经足够。而如果不对其进行任何检查和处理,结果就会是一无所获。
举例来说,由于文件不存在而打开文件的错误--一方面,这是需要处理的标准情况,但另一方面,这是假设文件存在并且我们可以使用它的错误。
再说一遍:在本文中,我试图考虑的是程序运行过程中的错误处理问题,而不是软件调试问题。这完全是另一个话题,而且只在日志记录的框架内与本文相关(而且只是部分相关)。
而且我的目标也不是考虑具体的错误(无论是交易服务器返回代码,还是如上所述,例如在处理图形对象时可能出现的错误)。
如果我的信息仍然不清楚,请原谅。希望现在一切都已就绪。
唉,我得问一句:你是读了这篇文章,还是只看了一遍就下结论?我在文章中谈到了初步检查(我忏悔,我没有具体谈到资金检查,但我认为这很清楚)。即使我们之前做了检查,在尝试开仓交易后处理可能出现的 "资金不足 "错误也不是最糟糕的主意。从 "之前 "检查到立即尝试开仓之间的这段时间里,任何事情都有可能发生。
谢尔盖
交易服务器返回代码 就是针对这种情况的。
例如您检查了空闲资金的可用性,并得到了肯定的结果。
您发送了订单,但未被接受(如您所说:"可能发生什么")、
因此,交易服务器将在返回代码中给出错误 "Insufficient funds(资金不足)"。
事实证明,检查多少次错误都是一样的。
在您的支票(CheckMoney)和交易服务器的返回代码之间!
新文章 MQL5中的错误处理和日志记录已发布:
本文着力介绍和软件错误处理相关的常见问题。另外,介绍了日志项及用MQL5工具包实现日志记录。
在大多数程序的执行过程中,错误总可能偶尔出现。对它们的恰当处理是高质量和稳定的软件重要的特征。本文将包含错误处理的主要方法,使用它们的一些建议以及通过MQL5工具包做日志记录。
错误处理是一个相对来说困难且有争议的话题。有许多错误处理的方法,每一种都有其特有的优点和缺点。很多方法可以合一起使用,但没有统一的标准 — 每一项特定的任务都需要一个合适的方法。
用MQL5工具包做日志记录
日志文件通常由程序创建以便于开发者查找失败/报错的原因,以及在某个特定的时刻评估系统条件等。除此之外,日志记录可用于软件分析。
日志等级
通常日志文件中接收到的信息类型各不相同,且需要不同的关注等级。日志等级用于将含有各种类型的信息区分开来,并且能够对显示信息的类别自定义。通常实现有几种日志等级:
作者:Sergey Eremin