ZI_File_Functions_Full_Intenger_Data_Lib 0-81024





//+------------------------------------------------------------------------------------------------------------------+
//|                                                              ZI_File_Functions_Full_Intenger_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, int& lpBuffer[], int nNumberOfBytesToRead, int& lpNumberOfBytesRead[], int lpOverlapped);
 bool WriteFile (int hFile, int lpBuffer[], int nNumberOfBytesToWrite, int& lpNumberOfBytesWritten[], int lpOverlapped);
 void RtlMoveMemory (int& Destination[], int 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".
//  ðåæèìå ÷òåíèÿ âîçâðàùàåò ïðî÷èòàííîå çíà÷åíèå.
int FileOperationsIntValue (string PathName,        // Íàçâàíèå ôàéëà.
                            int&   Value,           // Ïåðåìåííàÿ äëÿ çàïèñè èëè ÷òåíèÿ.
                            int    Size,            // Ôëàã ôîðìàòà: CHAR_VALUE  (1 áàéò);
                                                    //               SHORT_VALUE (2 áàéòà);
                                                    //               LONG_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;
  //----
  int 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 ("Îøèáêà â ôóíêöèè \"FileOperationsIntValue()\". Òèï ïðîèçâîäèìûõ äåéñòâèé ñ ôàéëîì ñ ïóò¸ì \"", PathName, "\" âûáðàí íå âåðíî. ModeCWR = ", ModeCWR); return (-1);
   }
  if (Handle == -1) // Åñëè ôàéë íå îòêðûò.
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileOperationsIntValue()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå îòêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (-1);
   }
  if (SetFilePointer (Handle, Offset, NULL, Origin) == -1) // Åñëè ôàéë îòêðûò, ñäâèãàåì ôàéëîâûé óêàçàòåëü, êóäà òðåáóåòñÿ.
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileOperationsIntValue()\". Ôàéëîâûé óêàçàòåëü ôàéëà ñ ïóò¸ì \"", PathName, "\" íå ñìåù¸í. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè.
    if (CloseHandle (Handle) == false)
     {
      Error = RtlGetLastWin32Error();
      Print ("Îøèáêà â ôóíêöèè \"FileOperationsIntValue()\". Ôàéë ñ ïóò¸ì \"", 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 ("Îøèáêà â ôóíêöèè \"FileOperationsIntValue()\". Çíà÷åíèå â ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
       }
      break;
     }
    case 2: // ×èòàåì èç ôàéëà çíà÷åíèå.
     {
      if (ReadFile (Handle, ArBuffer, Size, ArOutputByte, NULL) == false)
       {
        Error = RtlGetLastWin32Error();
        Print ("Îøèáêà â ôóíêöèè \"FileOperationsIntValue()\". Çíà÷åíèå â ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
       }
      else Value = ArBuffer[0];
      break;
     }
   }
  if (CloseHandle (Handle) == false) // Çàêðûâàåì ôàéë.
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileOperationsIntValue()\". Ôàéë ñ ïóò¸ì \"", 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 FileOperationsIntArray (string PathName, // Íàçâàíèå ôàéëà.
                            int&   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;               // Ðàçìåð ìàññèâà.
  //----
  int ArOutputByte[1];    // Áóôåð äëÿ âîçâðàòà ÷èñëà çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò.
  int ArTemp1[];          // Òåõíè÷åñêèé ìàññèâ.
  int ArTemp2[];          // Òåõíè÷åñêèé ìàññèâ.
  //----
  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 ("Îøèáêà â ôóíêöèè \"FileOperationsIntArray()\". Òèï ïðîèçâîäèìûõ äåéñòâèé ñ ôàéëîì ñ ïóò¸ì \"", PathName, "\" âûáðàí íå âåðíî. ModeCWR = ", ModeCWR); return (-1);
   }
  if (Handle == -1) // Åñëè ôàéë íå îòêðûò.
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileOperationsIntArray()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå îòêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (-1);
   }
  if (SetFilePointer (Handle, Offset, NULL, Origin) == -1) // Åñëè ôàéë îòêðûò, ñäâèãàåì ôàéëîâûé óêàçàòåëü, êóäà òðåáóåòñÿ.
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileOperationsIntArray()\". Ôàéëîâûé óêàçàòåëü ôàéëà ñ ïóò¸ì \"", PathName, "\" íå ñìåù¸í. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè.
    if (CloseHandle (Handle) == false)
     {
      Error = RtlGetLastWin32Error();
      Print ("Îøèáêà â ôóíêöèè \"FileOperationsIntArray()\". Ôàéë ñ ïóò¸ì \"", 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, ArTemp1, Bytes, ArOutputByte, NULL) == false) // Çàïèñûâàåì â ôàéë óêàçàííîå êîëè÷åñòâî ýëåìåíòîâ.
       {
        Error = RtlGetLastWin32Error();
        Print ("Îøèáêà â ôóíêöèè \"FileOperationsIntArray()\". Çíà÷åíèå â ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
       }
      break;
     }
    case 2: // ×èòàåì èç ôàéëà çíà÷åíèå.
     {
      ArrayResize (ArTemp1, Count); // Èçìåíÿåì ðàçìåð òåõíè÷åñêîãî ìàññèâà ïîä êîëè÷åñòâî ÷èòàåìûõ ýëåìåíòîâ.
      if (ReadFile (Handle, ArTemp1, Bytes, ArOutputByte, NULL) == false) // ×èòàåì â ìàññèâ óêàçàííîå êîëè÷åñòâî ýëåìåíòîâ èç ôàéëà.
       {
        Error = RtlGetLastWin32Error();
        Print ("Îøèáêà â ôóíêöèè \"FileOperationsIntArray()\". Çíà÷åíèå â ôàéë ñ ïóò¸ì \"", 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 ("Îøèáêà â ôóíêöèè \"FileOperationsIntArray()\". Ôàéë ñ ïóò¸ì \"", PathName, "\" íå çàêðûò. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (-1);
   }
  ArrayResize (ArTemp1, 0); // Óíè÷òîæàåì ìàññèâ.
  return (ArOutputByte[0] / 4);
 }
//=================================================================================================================================================================================
// 3. Ôóíêöèÿ çàïèñûâàåò öåëîå ÷èñëî â äâîè÷íûé ôàéë.==============================================================================================================================
// Âîçâðàùàåò ôàêòè÷åñêè çàïèñàííîå ÷èñëî áàéò èëè îòðèöàòåëüíîå çíà÷åíèå â ñëó÷àå îøèáêè.
int FileWriteIntegerFull (int Handle, // Ôàéëîâûé îïèñàòåëü, âîçâðàùàåìûé ôóíêöèåé "FileOpenFull()".
                          int Value,  // Çíà÷åíèå äâîéíîé òî÷íîñòè.
                          int Size)   // Ôëàã ôîðìàòà: CHAR_VALUE  (1 áàéò);
                                      //               SHORT_VALUE (2 áàéòà);
                                      //               LONG_VALUE  (4 áàéòà).
 {
  int Error;             // Íîìåð ïîñëåäíåé îøèáêè.
  //----
  int ArBuffer[1] = {0}; // Áóôåð äëÿ çàïèñè èëè ÷òåíèÿ.
  int ArOutputByte[1];   // ×èñëî çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò.
  //----
  RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè.
  ArBuffer[0] = Value;
  if (WriteFile (Handle, ArBuffer, Size, ArOutputByte, NULL) == false)
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileWriteIntegerFull()\". Çíà÷åíèå â ôàéë íå çàïèñàíî. Ïîñëåäíÿÿ îøèáêà: \"", Error, "\". ", StringError (Error));
    return (-1);
   }
  else return (ArOutputByte[0]);
 }
//=================================================================================================================================================================================
// 4. Ôóíêöèÿ ÷èòàåò öåëîå ÷èñëî èç òåêóùåé ïîçèöèè áèíàðíîãî ôàéëà.===============================================================================================================
int FileReadIntegerFull (int Handle, // Ôàéëîâûé îïèñàòåëü, âîçâðàùàåìûé ôóíêöèåé "FileOpenFull()".
                         int Size)   // Ôëàã ôîðìàòà: CHAR_VALUE  (1 áàéò);
                                     //               SHORT_VALUE (2 áàéòà);
                                     //               LONG_VALUE  (4 áàéòà).
 {
  int Error;                // Íîìåð ïîñëåäíåé îøèáêè.
  //----
  int ArBuffer[1] = {0}; // Áóôåð äëÿ çàïèñè èëè ÷òåíèÿ.
  int ArOutputByte[1];   // ×èñëî çàïèñàííûõ èëè ïðî÷èòàííûõ áàéò.
  //----
  RtlSetLastWin32Error (0); // Ñáðàñûâàåì îøèáêè.
  if (ReadFile (Handle, ArBuffer, Size, ArOutputByte, NULL) == false)
   {
    Error = RtlGetLastWin32Error();
    Print ("Îøèáêà â ôóíêöèè \"FileReadIntegerFull()\". Çíà÷åíèå èç ôàéëà íå ïðî÷èòàíî. Ïîñëåäíÿÿ îøèáêà: \"", 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: