Errors
Download scriptThis script functions as a specialized diagnostic toolkit designed to translate complex technical errors into human-readable information. Instead of showing raw, cryptic codes that might confuse a user, it acts as an interpreter that provides clear explanations for various issues encountered during trading operations.
Core Logic Overview
The primary objective of this tool is to identify why a trade command failed and report the specific reason in plain language. It achieves this through three main components:
1. The Translation Engine (Error Description) At its heart, the script contains a comprehensive database of error codes. Each code represents a specific problem that can occur within the trading platform—ranging from "Insufficient Funds" or "Invalid Price" to more technical issues like "Server Busy" or "Memory Allocation Errors." When the system encounters an error, this part of the script looks up the numerical code and provides its corresponding text description.
2. Specialized Reporting Functions The script includes three specific routines to handle different scenarios:
- Order Selection Errors: This tracks issues that occur specifically when trying to pick or select a trade order from a list.
- Modification Errors: This monitors problems that arise when attempting to change an existing order (e.g., updating the price or volume). It automatically includes the "Ticket Number" so you know exactly which trade caused the issue.
- General Errors: This is a catch-all safety net. If an error occurs that doesn't fall into the categories above, this function ensures the problem is still reported and documented clearly.
3. Automated Logging Every time a problem occurs, the script automatically generates a "Print" message in the platform’s log or diary. These logs include:
- The specific error number provided by the server.
- The human-readable description (translated from the database).
- Contextual information (such as the specific order ID) to help the user troubleshoot more quickly.
Summary for the User
In simple terms, this script acts like a "Translator for Trade Failures." If your trading software tries to do something it can't perform, instead of just failing silently or showing a mysterious number, this script intercepts that failure and writes out a clear explanation in the log, telling you exactly what went wrong (e.g., "Not enough money," "Invalid lot size," etc.) so you can take corrective action.
//+------------------------------------------------------------------+
//| Errors.mq4 |
//| drknn |
//| drknn@mail.ru |
//+------------------------------------------------------------------+
#property copyright "drknn"
#property link "drknn@mail.ru"
/*Â áèáëèîòåêå íàäî óêàçàòü, ÷òî ýòî áèáëèîòåêà âîò ýòîé ñòðîêîé:
#property library
Äàëåå, íàäî ñîçäàòü çàãîëîâî÷íûé ôàéë *.mqh
 ýòîì ôàéëå íàäî ïåðå÷èñëèòü âñå çàäåéñòâîâàííûå â ýòîé áèáëèîòåêå ôóíêöèè.
Ïåðåä ïåðå÷èñëåíèåì óêàçàòü, ÷òî èìïîðò ýòèõ ïåðå÷èñëÿåìûõ ôóíêöèé áóäåò
îñóùåñòâëÿòüñÿ èç ôàéëà áèáëèîòåêè.
Íî, òåêñò ôàéëà áèáëèîòåêè èìååò ðàñøèðåíèå *.mq4, à óêàçûâàòü íàäî ðàñøèðåíèå
îòêîìïèëèðîââàííîãî ôàéëà, òî åñòü, íå *.mq4, à *.ex4. Íàïðèìåð,
#import "Errors.ex4"
 ñîâåòíèêå îñòà¸òñÿ óêàçàòü ñòðîêîé èìÿ çàãîëîâî÷íîãî ôàéëà
#include <Errors.mqh>
ÂÍÈÌÀÍÈÅ!!!!!!!!!!
Çàãîëîâî÷íûé ôàéë ïðè ñîçäàíèè íå âñåãäà ñîçäà¸òñÿ ñ ðàñøèðåíèåì *.mqh
Ïîýòîìó åñëè îí ñîçäàëñÿ ñ äðóãèì ðàñøèðåíèåì, åãî ñëåäóåò ëèáî ïåðåìèåíîâàòü,
ëèáî óêàçûâàòü â ñîâåòíèêå èìåííî òî ðàñøèðåíèå, êàêîå åñòü ó çàãîëîâî÷íîãî ôàéëà.
*/
#property library
//+------------------------------------------------------------------+
//| Ìîÿ ôóíêöèÿ |
//+------------------------------------------------------------------+
// int MyCalculator(int value,int value2)
// {
// return(value+value2);
// }
//+------------------------------------------------------------------+
// ======================= Âûçîâ íîìåðà è îïèñàíèÿ îøèáêè âûáîðà ==========================================
// Ôóíêöèÿ WriteError() ïèøåò íîìåð âîçíèêøåé îøèáêè âûáîðà è å¸ ðóññêîå îïèñàíèå
// --------------------------------------------------------------------------------
void WriteError(int i){
int GLE=GetLastError();
string ED=ErrorDescription(GLE);
Print("Îøèáêà ", GLE, " ïðè âûáîðå îðäåðà íîìåð ",i);
Print ("Îïèñàíèå îøèáêè - ",ED);
}
// =========================================================================================================
// ======================= Îøèáêà ìîäèôèêàöèè =====================================================
// Ôóíêöèÿ ModifError() ïèøåò íîìåð âîçíèêøåé îøèáêè ìîäèôèêàöèè è å¸ ðóññêîå îïèñàíèå
// ------------------------------------------------------------------------------------
void ModifError(){
int GLE=GetLastError();
string ED=ErrorDescription(GLE);
Print("Ìîäèôèêàöèÿ îðäåðà ¹ ",OrderTicket(), " âåðíóëà îøèáêó ¹ ",GLE);
Print ("Îïèñàíèå îøèáêè: ",ED);
}
// ================================================================================================
// ======================= Îáùàÿ îøèáêà =====================================================
// Ôóíêöèÿ GeneralError() ïèøåò íîìåð âîçíèêøåé îøèáêè è å¸ ðóññêîå îïèñàíèå
// ------------------------------------------------------------------------------------
void GeneralError(){
int GLE=GetLastError();
string ED=ErrorDescription(GLE);
Print(" ! Îøèáêà ¹ ",GLE);
Print ("Îïèñàíèå îøèáêè: ",ED);
}
// ================================================================================================
//========= Ñëîâåñòíîå îïèñàíèå îøèáîê ===============================
// Ôóíêöèÿ ErrorDescription() âîçâðàùàåò íå êîä îøèáêè à å¸ ñëîâåñòíîå îïèñàíèå
//-----------------------------------------------------------
string ErrorDescription(int error_code){
string error_string;
switch(error_code)
{
//---- codes returned from trade server
case 0: error_string=" Íåò îøèáêè"; break;
case 1: error_string=" Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí"; break;
case 2: error_string=" Îáùàÿ îøèáêà"; break;
case 3: error_string=" Íåïðàâèëüíûå ïàðàìåòðû"; break;
case 4: error_string=" Òîðãîâûé ñåðâåð çàíÿò"; break;
case 5: error_string=" Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà"; break;
case 6: error_string=" Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì"; break;
case 7: error_string=" Íåäîñòàòî÷íî ïðàâ"; break;
case 8: error_string=" Ñëèøêîì ÷àñòûå çàïðîñû"; break;
case 9: error_string=" Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà"; break;
case 64: error_string=" Ñ÷åò çàáëîêèðîâàí"; break;
case 65: error_string=" Íåïðàâèëüíûé íîìåð ñ÷åòà"; break;
case 128: error_string=" Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè"; break;
case 129: error_string=" Íåïðàâèëüíàÿ öåíà"; break;
case 130: error_string=" Íåïðàâèëüíûå ñòîïû"; break;
case 131: error_string=" Íåïðàâèëüíûé îáúåì"; break;
case 132: error_string=" Ðûíîê çàêðûò"; break;
case 133: error_string=" Òîðãîâëÿ çàïðåùåíà"; break;
case 134: error_string=" Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè"; break;
case 135: error_string=" Öåíà èçìåíèëàñü"; break;
case 136: error_string=" Íåò öåí"; break;
case 137: error_string=" Áðîêåð çàíÿò"; break;
case 138: error_string=" Íîâûå öåíû"; break;
case 139: error_string=" Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ"; break;
case 140: error_string=" Ðàçðåøåíà òîëüêî ïîêóïêà"; break;
case 141: error_string=" Ñëèøêîì ìíîãî çàïðîñîâ"; break;
case 145: error_string=" Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó"; break;
case 146: error_string=" Ïîäñèñòåìà òîðãîâëè çàíÿòà"; break;
case 147: error_string=" Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì"; break;
case 148: error_string=" Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà, óñòàíîâëåííîãî áðîêåðîì"; break;
case 4000: error_string=" Íåò îøèáêè"; break;
case 4001: error_string=" Íåïðàâèëüíûé óêàçàòåëü ôóíêöèè"; break;
case 4002: error_string=" Èíäåêñ ìàññèâà - âíå äèàïàçîíà"; break;
case 4003: error_string=" Íåò ïàìÿòè äëÿ ñòåêà ôóíêöèé"; break;
case 4004: error_string=" Ïåðåïîëíåíèå ñòåêà ïîñëå ðåêóðñèâíîãî âûçîâà"; break;
case 4005: error_string=" Íà ñòåêå íåò ïàìÿòè äëÿ ïåðåäà÷è ïàðàìåòðîâ"; break;
case 4006: error_string=" Íåò ïàìÿòè äëÿ ñòðîêîâîãî ïàðàìåòðà"; break;
case 4007: error_string=" Íåò ïàìÿòè äëÿ âðåìåííîé ñòðîêè"; break;
case 4008: error_string=" Íåèíèöèàëèçèðîâàííàÿ ñòðîêà"; break;
case 4009: error_string=" Íåèíèöèàëèçèðîâàííàÿ ñòðîêà â ìàññèâå"; break;
case 4010: error_string=" Íåò ïàìÿòè äëÿ ñòðîêîâîãî ìàññèâà"; break;
case 4011: error_string=" Ñëèøêîì äëèííàÿ ñòðîêà"; break;
case 4012: error_string=" Îñòàòîê îò äåëåíèÿ íà íîëü"; break;
case 4013: error_string=" Äåëåíèå íà íîëü"; break;
case 4014: error_string=" Íåèçâåñòíàÿ êîìàíäà"; break;
case 4015: error_string=" Íåïðàâèëüíûé ïåðåõîä"; break;
case 4016: error_string=" Íåèíèöèàëèçèðîâàííûé ìàññèâ"; break;
case 4017: error_string=" Âûçîâû DLL íå ðàçðåøåíû"; break;
case 4018: error_string=" Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó"; break;
case 4019: error_string=" Íåâîçìîæíî âûçâàòü ôóíêöèþ"; break;
case 4020: error_string=" Âûçîâû âíåøíèõ áèáëèîòå÷íûõ ôóíêöèé íå ðàçðåøåíû"; break;
case 4021: error_string=" Íåäîñòàòî÷íî ïàìÿòè äëÿ ñòðîêè, âîçâðàùàåìîé èç ôóíêöèè"; break;
case 4022: error_string=" Ñèñòåìà çàíÿòà"; break;
case 4050: error_string=" Íåïðàâèëüíîå êîëè÷åñòâî ïàðàìåòðîâ ôóíêöèè"; break;
case 4051: error_string=" Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè"; break;
case 4052: error_string=" Âíóòðåííÿÿ îøèáêà ñòðîêîâîé ôóíêöèè"; break;
case 4053: error_string=" Îøèáêà ìàññèâà"; break;
case 4054: error_string=" Íåïðàâèëüíîå èñïîëüçîâàíèå ìàññèâà-òàéìñåðèè"; break;
case 4055: error_string=" Îøèáêà ïîëüçîâàòåëüñêîãî èíäèêàòîðà"; break;
case 4056: error_string=" Ìàññèâû íåñîâìåñòèìû"; break;
case 4057: error_string=" Îøèáêà îáðàáîòêè ãëîáàëüíûåõ ïåðåìåííûõ"; break;
case 4058: error_string=" Ãëîáàëüíàÿ ïåðåìåííàÿ íå îáíàðóæåíà"; break;
case 4059: error_string=" Ôóíêöèÿ íå ðàçðåøåíà â òåñòîâîì ðåæèìå"; break;
case 4060: error_string=" Ôóíêöèÿ íå ïîäòâåðæäåíà"; break;
case 4061: error_string=" Îøèáêà îòïðàâêè ïî÷òû"; break;
case 4062: error_string=" Îæèäàåòñÿ ïàðàìåòð òèïà string"; break;
case 4063: error_string=" Îæèäàåòñÿ ïàðàìåòð òèïà integer"; break;
case 4064: error_string=" Îæèäàåòñÿ ïàðàìåòð òèïà double"; break;
case 4065: error_string="  êà÷åñòâå ïàðàìåòðà îæèäàåòñÿ ìàññèâ"; break;
case 4066: error_string=" Çàïðîøåííûå èñòîðè÷åñêèå äàííûå â ñîñòîÿíèè îáíîâëåíèÿ"; break;
case 4067: error_string=" Îøèáêà ïðè âûïîëíåíèè òîðãîâîé îïåðàöèè"; break;
case 4099: error_string=" Êîíåö ôàéëà"; break;
case 4100: error_string=" Îøèáêà ïðè ðàáîòå ñ ôàéëîì"; break;
case 4101: error_string=" Íåïðàâèëüíîå èìÿ ôàéëà"; break;
case 4102: error_string=" Ñëèøêîì ìíîãî îòêðûòûõ ôàéëîâ"; break;
case 4103: error_string=" Íåâîçìîæíî îòêðûòü ôàéë"; break;
case 4104: error_string=" Íåñîâìåñòèìûé ðåæèì äîñòóïà ê ôàéëó"; break;
case 4105: error_string=" Íè îäèí îðäåð íå âûáðàí"; break;
case 4106: error_string=" Íåèçâåñòíûé ñèìâîë"; break;
case 4107: error_string=" Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè"; break;
case 4108: error_string=" Íåâåðíûé íîìåð òèêåòà"; break;
case 4109: error_string=" Òîðãîâëÿ íå ðàçðåøåíà"; break;
case 4110: error_string=" Äëèííûå ïîçèöèè íå ðàçðåøåíû"; break;
case 4111: error_string=" Êîðîòêèå ïîçèöèè íå ðàçðåøåíû"; break;
case 4200: error_string=" Îáúåêò óæå ñóùåñòâóåò"; break;
case 4201: error_string=" Çàïðîøåíî íåèçâåñòíîå ñâîéñòâî îáúåêòà"; break;
case 4202: error_string=" Îáúåêò íå ñóùåñòâóåò"; break;
case 4203: error_string=" Íåèçâåñòíûé òèï îáúåêòà"; break;
case 4204: error_string=" Íåò èìåíè îáúåêòà"; break;
case 4205: error_string=" Îøèáêà êîîðäèíàò îáúåêòà"; break;
case 4206: error_string=" Íå íàéäåíî óêàçàííîå ïîäîêíî"; break;
case 4207: error_string=" Îøèáêà ïðè ðàáîòå ñ îáúåêòîì"; break;
}
return(error_string);
}
//===============================================================================================================================
Comments