//+------------------------------------------------------------------+//| Функция обработки ошибок |//+------------------------------------------------------------------+if(GetLastError()>=0)
{
switch(_LastError)
{ // Преодолимые ошибки case4:Sleep(3000); // Простое решениеbreak; // Выход из функцииcase6:Sleep(10000); // Простое решениеbreak; // Выход из функцииcase130:Sleep(3000);RefreshRates(); // Обновим данныеbreak; // Выход из функцииcase135:Sleep(3000);RefreshRates(); // Обновим данныеbreak; // Выход из функцииcase136:Sleep(3000);RefreshRates(); // Обновим данныеbreak; // Выход из функцииcase137:Sleep(3000); // Простое решениеbreak; // Выход из функцииcase146:Sleep(3000); // Простое решениеbreak; // Выход из функцииdefault:break; // Другие варианты // Выход из функции
}
}
}
Pokrov, ,我告诉你你在看什么...
以下是答案https://www.mql5.com/ru/forum/131277/page295#455199
感谢作者。
你能告诉我下面的错误处理块是否拼写正确或有什么问题吗?不要马上说脏话 ))))
指标如何将数值历史保存到文件中(并在以后加载)? 有现成的解决方案吗?
你能告诉我下面的错误处理块是否拼写正确或有什么问题 吗?不要马上说脏话 ))))
在我看来,错误处理应该以用户定义的函数的形式出现,它应该在与访问服务器有关的任何动作之后被调用。
例如,OrderSend()在失败的情况下,即在出错的情况下,返回订单票或-1。因此,在命令执行不成功的情况下,有必要调用错误处理程序,并将错误代码传给它。在错误处理程序中,我们应该提供一个返回值,在这个返回值上,失败的动作会被重复,或者在另一个返回值上被停止。
例如,价格发生了变化,RefreshRates();并再次尝试,如果没有足够的钱,可能最好停止尝试。
在我看来,错误处理应该采用用户定义函数的形式,在任何与服务器访问有关的操作之后都应该调用该函数。
例如,OrderSend()在失败的情况下返回订单票据或-1,也就是说,在出错的情况下。因此,你应该在命令执行不成功的情况下调用错误处理程序,并将错误代码传给它。在错误处理程序中,我们应该提供一个返回值,在这个返回值上,失败的动作会被重复,或者在另一个返回值上被停止。
例如,价格发生了变化,RefreshRates();和重试,在资金不足的情况下,可能最好停止尝试。
我在函数后面有GetLastError,如果发生错误,不是会转到这个块吗(因为它是写的),命令不会被执行?我明白这个链条,例如OrderSend() -> GetLastError -> 错误块Sleep(3000) RefreshRates() -> 退出该块,如果条件不变,则再次请求OrderSend()。或者我的推理和概念是错误的。我明白你想在块中写出返回值1或0,但我的函数很简单,与布尔值无关,如SignalBuy,如果我理解正确,返回值应该在那里返回。