//+------------------------------------------------------------------------------------------------------------------+ //| ZI_File_Functions_Full_Double_Data_Lib 0-81024.mq4| //| Copyright © Zhunko | //| ZHUNKO vadim@zhunko.ru | //|24.10.2008 Ilnur X-79@yandex.ru | //+------------------------------------------------------------------------------------------------------------------+ //| Îïåðàöèè äëÿ áèíàðíîãî ôàéëà äàííûõ äâîéíîé òî÷íîñòè. | //+------------------------------------------------------------------------------------------------------------------+ //| 1. Ôóíêöèÿ "Îïåðàöèè äëÿ áèíàðíîãî ôàéëà äàííûõ äâîéíîé òî÷íîñòè". | //| 2. Ôóíêöèÿ "Îïåðàöèè äëÿ áèíàðíîãî ôàéëà ìàññèâà äàííûõ äâîéíîé òî÷íîñòè". | //| 3. Ôóíêöèÿ çàïèñûâàåò ÷èñëî äâîéíîé òî÷íîñòè â äâîè÷íûé ôàéë. | //| 4. Ôóíêöèÿ ÷èòàåò ÷èñëî äâîéíîé òî÷íîñòè èç òåêóùåé ïîçèöèè áèíàðíîãî ôàéëà. | //| 5. Ôóíêöèÿ âîçâðàùàåò ñòðîêîâîå îïèñàíèå êîäà ñèñòåìíîé îøèáêè. | //+------------------------------------------------------------------------------------------------------------------+ #property copyright "Copyright © 2008 Zhunko, Ilnur" #property link "vadim@zhunko.ru ; X-79@yandex.ru" #property library // Èìïîðòèðóåìûå ôóíêöèè. #import "kernel32.dll" bool ReadFile (int hFile, double& lpBuffer[], int nNumberOfBytesToRead, int& lpNumberOfBytesRead[], int lpOverlapped); bool WriteFile (int hFile, double lpBuffer[], int nNumberOfBytesToWrite, int& lpNumberOfBytesWritten[], int lpOverlapped); void RtlMoveMemory (double& Destination[], double Source[], int Length); #import "ntdll.dll" int RtlGetLastWin32Error(); int RtlSetLastWin32Error (int dwErrCode); #import #include <WinKernel32.mqh> // Çàãîëîâî÷íûé ôàéë áèáëèîòåêè "kernel32.dll" ôóíêöèé API Windows XP. //================================================================================================================================================================================= // 1. Ôóíêöèÿ "Îïåðàöèè äëÿ áèíàðíîãî ôàéëà äàííûõ äâîéíîé òî÷íîñòè".============================================================================================================== //  ðåæèìå ñîçäàíèÿ è çàïèñè âîçâpàùàåò ÷èñëî çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò.  ñëó÷àå íåóñïåøíîãî çàâåpøåíèÿ ôóíêöèÿ âîçâðàùàåò "-1". //  ðåæèìå ÷òåíèÿ âîçâðàùàåò ïðî÷èòàííîå çíà÷åíèå. double FileOperationsDoubleValue (string PathName, // Íàçâàíèå ôàéëà. double& Value, // Ïåðåìåííàÿ äëÿ çàïèñè èëè ÷òåíèÿ. int Size, // Ôëàã ôîðìàòà: DOUBLE_VALUE (8 áàéòîâ); // FLOAT_VALUE (4 áàéòà). int ModeCWR, // Òèï ïðîèçâîäèìûõ äåéñòâèé ñ ôàéëîì: 0 - FILE_CREATE_ ñîçäàòü èëè ïåðåïèñàòü ôàéë; // 1 - FILE_WRITE_ äîïèñàòü ôàéë; // 2 - FILE_READ_ ÷èòàòü ôàéë. int Offset, // Ñìåùåíèå â áàéòàõ ôàéëîâîãî óêàçàòåëÿ. int Origin, // Íà÷àëüíîå ïîëîæåíèå ôàéëîâîãî óêàçàòåëÿ: SEEK_CUR - îò òåêóùåãî ïîëîæåíèÿ, // SEEK_SET - îò íà÷àëà, // SEEK_END - îò êîíöà ôàéëà). int& ArOutputByte[]) // ×èñëî çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò. { int Error; // Íîìåð ïîñëåäíåé îøèáêè. int Handle; // Ñèñòåìíûé äåñêðèïòîð ôàéëà. int i; //---- double ArBuffer[1] = {0}; // Áóôåð äëÿ çàïèñè èëè ÷òåíèÿ. //---- ArrayResize (ArOutputByte, 1); //---- RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè. switch (ModeCWR) { case 0: Handle = CreateFileA (PathName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); break; // Ñîçäà¸ì ôàéë. case 1: Handle = CreateFileA (PathName, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); break; // Äîïèñûâàåì ôàéë. case 2: Handle = CreateFileA (PathName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); break; // ×èòàåì ôàéë. default: Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleValue()\". Òèï ïðîèçâîäèìûõ äåéñòâèé ñ ôàéëîì ñ ïóò¸ì \"", PathName, "\" âûáðàí íå âåðíî. ModeCWR = ", ModeCWR); return (-1); } if (Handle == -1) // Åñëè ôàéë íå îòêðûò. { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleValue()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå îòêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); return (-1); } if (SetFilePointer (Handle, Offset, NULL, Origin) == -1) // Åñëè ôàéë îòêðûò, ñäâèãàåì ôàéëîâûé óêàçàòåëü, êóäà òðåáóåòñÿ. { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleValue()\". Ôàéëîâûé óêàçàòåëü ôàéëà ñ ïóò¸ì \"", PathName, "\" íå ñìåù¸í. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè. if (CloseHandle (Handle) == false) { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleValue()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); } return (-1); } switch (ModeCWR) { case 0: // Çàïèñûâàåì èëè äîïèñûâàåì â ôàéë âõîäíîå çíà÷åíèå. case 1: // Çàïèñûâàåì èëè äîïèñûâàåì â ôàéë âõîäíîå çíà÷åíèå. { ArBuffer[0] = Value; if (WriteFile (Handle, ArBuffer, Size, ArOutputByte, NULL) == false) { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleValue()\". Çíà÷åíèå â ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); } break; } case 2: // ×èòàåì èç ôàéëà çíà÷åíèå. { if (ReadFile (Handle, ArBuffer, Size, ArOutputByte, NULL) == false) { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleValue()\". Çíà÷åíèå â ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); } else Value = ArBuffer[0]; break; } } if (CloseHandle (Handle) == false) // Çàêðûâàåì ôàéë. { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleValue()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); return (-1); } switch (ModeCWR) { case 0: return (ArOutputByte[0]); // Âîçâðàùàåì êîëè÷åñòâî çàïèñàííûõ áàéò. case 1: return (ArOutputByte[0]); // Âîçâðàùàåì êîëè÷åñòâî çàïèñàííûõ áàéò. case 2: return (ArBuffer[0]); // Âîçâðàùàåì ïðî÷èòàííîå çíà÷åíèå. } } //================================================================================================================================================================================= // 2. Ôóíêöèÿ "Îïåðàöèè äëÿ áèíàðíîãî ôàéëà ìàññèâà äàííûõ äâîéíîé òî÷íîñòè".====================================================================================================== // Âîçâpàùàåò ÷èñëî çàïèñàííûõ èëè ïðî÷èòàííûõ ýëåìåíòîâ.  ñëó÷àå íåóñïåøíîãî çàâåpøåíèÿ ôóíêöèÿ âîçâðàùàåò "-1". int FileOperationsDoubleArray (string PathName, // Íàçâàíèå ôàéëà. double& Array[], // Ìàññèâ äëÿ çàïèñè èëè ÷òåíèÿ. int ModeCWR, // Òèï ïðîèçâîäèìûõ äåéñòâèé ñ ôàéëîì: 0 - FILE_CREATE_ ñîçäàòü èëè ïåðåïèñàòü ôàéë; // 1 - FILE_WRITE_ äîïèñàòü ôàéë; // 2 - FILE_READ_ ÷èòàòü ôàéë. int Start, // Ñòàðòîâàÿ ïîçèöèÿ äëÿ çàïèñè â ìàññèâ èëè ÷òåíèÿ èç ìàññèâà. int Count, // Êîëè÷åñòâî ýëåìåíòîâ äëÿ çàïèñè èëè ÷òåíèÿ ñ ó÷¸òîì âñåõ èçìåðåíèé. int Offset, // Ñìåùåíèå â áàéòàõ ôàéëîâîãî óêàçàòåëÿ. int Origin) // Íà÷àëüíîå ïîëîæåíèå ôàéëîâîãî óêàçàòåëÿ: SEEK_CUR - îò òåêóùåãî ïîëîæåíèÿ, // SEEK_SET - îò íà÷àëà, // SEEK_END - îò êîíöà ôàéëà). { int Bytes = 4 * Count; // Êîëè÷åñòâî çàïèñûâàåìûõ áàéò. int Error; // Íîìåð ïîñëåäíåé îøèáêè. int Handle; // Ñèñòåìíûé äåñêðèïòîð ôàéëà. int i; int Size; // Ðàçìåð ìàññèâà. //---- double ArTemp1[]; // Òåõíè÷åñêèé ìàññèâ. double ArTemp2[]; // Òåõíè÷åñêèé ìàññèâ. int ArOutputByte[1]; // Áóôåð äëÿ âîçâðàòà ÷èñëà çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò. //---- RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè. switch (ModeCWR) { case 0: Handle = CreateFileA (PathName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); break; // Ñîçäà¸ì ôàéë. case 1: Handle = CreateFileA (PathName, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); break; // Äîïèñûâàåì ôàéë. case 2: Handle = CreateFileA (PathName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); break; // ×èòàåì ôàéë. default: Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleArray()\". Òèï ïðîèçâîäèìûõ äåéñòâèé ñ ôàéëîì ñ ïóò¸ì \"", PathName, "\" âûáðàí íå âåðíî. ModeCWR = ", ModeCWR); return (-1); } if (Handle == -1) // Åñëè ôàéë íå îòêðûò. { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleArray()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå îòêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); return (-1); } if (SetFilePointer (Handle, Offset, NULL, Origin) == -1) // Åñëè ôàéë îòêðûò, ñäâèãàåì ôàéëîâûé óêàçàòåëü, êóäà òðåáóåòñÿ. { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleArray()\". Ôàéëîâûé óêàçàòåëü ôàéëà ñ ïóò¸ì \"", PathName, "\" íå ñìåù¸í. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè. if (CloseHandle (Handle) == false) { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleArray()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); } return (-1); } switch (ModeCWR) { case 0: // Çàïèñûâàåì èëè äîïèñûâàåì â ôàéë âõîäíîå çíà÷åíèå. case 1: // Çàïèñûâàåì èëè äîïèñûâàåì â ôàéë âõîäíîå çíà÷åíèå. { Size = ArraySize (Array); // Ðàçìåð âõîäíîãî ìàññèâà. ArrayResize (ArTemp1, Size); // Èçìåíÿåì ðàçìåð òåõíè÷åñêîãî ìàññèâà ïîä ðàçìåð âõîäíîãî ìàññèâà. RtlMoveMemory (ArTemp1, Array, Size); // Êîïèðóåì âõîäíîé ìíîãîìåðíûé ìàññèâ â îäíîìåðíûé òåõíè÷åñêèé ìàññèâ. if (Start != 0) ArrayCopy (ArTemp1, ArTemp1, 0, Start, Count); // Ïåðåãîíÿåì çàïèñûâàåìûå ýëåìåíòû â íà÷àëî ìàññèâà. if (WriteFile (Handle, Array, Bytes, ArOutputByte, NULL) == false) // Çàïèñûâàåì â ôàéë óêàçàííîå êîëè÷åñòâî ýëåìåíòîâ. { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleArray()\". Çíà÷åíèå â ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); } break; } case 2: // ×èòàåì èç ôàéëà çíà÷åíèå. { if (ReadFile (Handle, Array, Bytes, ArOutputByte, NULL) == false) { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleArray()\". Çíà÷åíèå â ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); } Size = ArraySize (Array); // Ðàçìåð âõîäíîãî ìàññèâà. if (Size < (Start + Count)) Count = Size - Start; // Îïðåäåëÿåì êîëè÷åñòâî êîïèðóåìûõ ýëåìåíòîâ â ñëó÷àå íåäîñòàòî÷íîñòè ðàçìåðà ìàññèâà ïðè¸ìíèêà. if (Start == 0) RtlMoveMemory (Array, ArTemp1, Size); // Åñëè ñòàðòîâàÿ ïîçèöèÿ ðàâíà íóëþ, òî êîïèðóåì îäíîìåðíûé òåõíè÷åñêèé ìàññèâ â âûõîäíîé ìíîãîìåðíûé ìàññèâ ñðàçó. else // Åñëè ñòàðòîâàÿ ïîçèöèÿ íå ðàâíà íóëþ. { ArrayResize (ArTemp2, Size); // Èçìåíÿåì ðàçìåð âòîðîãî òåõíè÷åñêîãî ìàññèâà ïîä ðàçìåð âõîäíîãî ìàññèâà. RtlMoveMemory (ArTemp2, Array, Size); // Êîïèðóåì âõîäíîé ìíîãîìåðíûé ìàññèâ â îäíîìåðíûé âòîðîé òåõíè÷åñêèé ìàññèâ. Ñîçäà¸ì îáðàç âõîäíîãî ìàññèâà. ArrayCopy (ArTemp2, ArTemp1, Start, 0, Count); // Ïåðåãîíÿåì ÷èòàåìûå ýëåìåíòû â óêàçàííîå ìåñòî âòîðîãî òåõíè÷åñêîãî ìàññèâà (îáðàçà âûõîäíîãî ìàññèâà). RtlMoveMemory (Array, ArTemp2, Size); // Êîïèðóåì îäíîìåðíûé âòîðîé òåõíè÷åñêèé ìàññèâ â âûõîäíîé ìíîãîìåðíûé ìàññèâ. ArrayResize (ArTemp2, 0); // Óíè÷òîæàåì âòîðîé òåõíè÷åñêèé ìàññèâ. } break; } } if (CloseHandle (Handle) == false) // Çàêðûâàåì ôàéë. { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileOperationsDoubleArray()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); return (-1); } ArrayResize (ArTemp1, 0); // Óíè÷òîæàåì ìàññèâ. return (ArOutputByte[0] / 8); } //================================================================================================================================================================================= // 3. Ôóíêöèÿ çàïèñûâàåò ÷èñëî äâîéíîé òî÷íîñòè â äâîè÷íûé ôàéë.=================================================================================================================== // Âîçâðàùàåò ôàêòè÷åñêè çàïèñàííîå ÷èñëî áàéò èëè îòðèöàòåëüíîå çíà÷åíèå â ñëó÷àå îøèáêè. int FileWriteDoubleFull (int Handle, // Ôàéëîâûé îïèñàòåëü, âîçâðàùàåìûé ôóíêöèåé "FileOpenFull()". double Value, // Çíà÷åíèå äâîéíîé òî÷íîñòè. int Size) // Ôëàã ôîðìàòà: DOUBLE_VALUE (8 áàéòîâ); // FLOAT_VALUE (4 áàéòà). { int Error; // Íîìåð ïîñëåäíåé îøèáêè. //---- double ArBuffer[1] = {0}; // Áóôåð äëÿ çàïèñè èëè ÷òåíèÿ. int ArOutputByte[1]; // ×èñëî çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò. //---- RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè. ArBuffer[0] = Value; if (WriteFile (Handle, ArBuffer, Size, ArOutputByte, NULL) == false) { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileWriteDoubleFull()\". Çíà÷åíèå â ôàéë íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); return (-1); } else return (ArOutputByte[0]); } //================================================================================================================================================================================= // 4. Ôóíêöèÿ ÷èòàåò ÷èñëî äâîéíîé òî÷íîñòè èç òåêóùåé ïîçèöèè áèíàðíîãî ôàéëà.==================================================================================================== double FileReadDoubleFull (int Handle, // Ôàéëîâûé îïèñàòåëü, âîçâðàùàåìûé ôóíêöèåé "FileOpenFull()". int Size) // Ôëàã ôîðìàòà: DOUBLE_VALUE (8 áàéòîâ); // FLOAT_VALUE (4 áàéòà). { int Error; // Íîìåð ïîñëåäíåé îøèáêè. //---- double ArBuffer[1] = {0}; // Áóôåð äëÿ çàïèñè èëè ÷òåíèÿ. int ArOutputByte[1]; // ×èñëî çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò. //---- RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè. if (ReadFile (Handle, ArBuffer, Size, ArOutputByte, NULL) == false) { Error = RtlGetLastWin32Error(); Print ("Îøèáêà â ôóíêöèè \"FileReadDoubleFull()\". Çíà÷åíèå èç ôàéëà íå ïðî÷èòàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error)); return (0); } else return (ArBuffer[0]); } //================================================================================================================================================================================= // 5. Ôóíêöèÿ âîçâðàùàåò ñòðîêîâîå îïèñàíèå êîäà ñèñòåìíîé îøèáêè.================================================================================================================= string StringError (int ErrorCode) { int i; string String = ""; //---- int Buffer[128]; //---- ArrayInitialize (Buffer, 0); FormatMessageA (0x1000, 0, ErrorCode, 0, Buffer, ArraySize (Buffer), 0); //---- for (i = 0; i < ArraySize (Buffer); i++) { String = String + CharToStr (Buffer[i] & 0xFF) + CharToStr (Buffer[i] >> 8 & 0xFF) + CharToStr (Buffer[i] >> 16 & 0xFF) + CharToStr (Buffer[i] >> 24 & 0xFF); } return (StringTrimRight (String) + "."); } //================================================================================================================================================================================= //æææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
kernel32
ntdll
Order Management characteristics:
Other Features: