ZH_Functions_Tools_1

Author: Copyright � 2007 Zhunko
ZH_Functions_Tools_1

This script serves as a collection of shared utility functions designed to support a larger suite of trading tools. Rather than performing a single standalone action, it provides various "building blocks" that handle visual data processing, mathematical calculations, and information formatting.

Here is a breakdown of the logic included in the script:

1. Dynamic Color Spectrum Distribution

The script includes a sophisticated system for automatically calculating and assigning colors based on a numerical spectrum.

  • Logic: It takes a numerical value and maps it to a specific color code (Red, Green, Blue).
  • Flexibility: It can either return a single calculated color or populate an entire list (array) of colors based on a set number of "spectral lines."
  • Customization: Users can choose to "invert" the color logic (flipping the start and end points of the spectrum) and define how many segments the spectrum should be divided into. This is particularly useful for creating smooth visual gradients or heatmaps in trading charts.

2. Timeframe Name Conversion

This utility handles the translation between internal system numbers and human-readable chart timeframes.

  • Logic: Instead of manually typing out names like "M1" or "H4," the script uses a lookup table. It takes a specific ID number and instantly converts it into its corresponding string representation, ensuring consistency across different parts of the software suite.

3. Numerical Precision Calculation (Exponent Logic)

This mathematical tool determines the magnitude of a number relative to its decimal point.

  • Logic: Given a value and a limit, the script calculates the "power of ten" (the exponent) for that number.
  • Use Case: It identifies where the significant digits of a price or indicator sit. For example, it helps the system understand whether a number is very small (requiring many decimal places) or very large, helping to normalize data for consistent display.

4. Data Visualization in Comments

The script contains two dedicated functions for "printing" complex sets of data directly onto the chart's comment area.

  • Double Precision Visualization: This takes lists of high-accuracy numbers (decimals) and formats them into a readable text block. It allows the user to see organized rows and columns of precise data on the screen.
  • Integer Visualization: This performs a similar task but is optimized for whole numbers, stripping away decimal points to provide a cleaner look for counts or rounded figures.
  • Shared Logic: Both functions automatically calculate how much space is needed, format the brackets and labels (e.g., Array[0] = {1, 2, 3}), and then display the final combined result as an on-screen comment.
10 Views
0 Downloads
0 Favorites
ZH_Functions_Tools_1
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//|                                                                                                                                                 ZH_Functions_Tools_1.mq4 |
//|                                                                                                                                                 Copyright © Zhunko       |
//|07.11.2007-28.02.2008                                                                                                                            MF ZHUNKO zhunko@mail.ru |
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| Áèáëèîòåêà ïðåäíàçíà÷åíà äëÿ ðàáîòû â ñîñòàâå êîìïëåêñà ïðîãðàìì ZZ_AIASM X-XXXX, ZM_AIASM Checking Files.                                                               |
//| Îáùèå ôóíêöèè. Çäåñü ñîáðàíû ôóíêöèè îäíîâðåìåííî èñïîëüçóåìûå â ðàçíûõ ïðîãðàììàõ êîìïëåêñà.                                                                            |
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//| 1.Ôóíêöèÿ äëÿ àâòîìàòè÷åñêîãî ðàñïðåäåëåíèÿ ñïåêòðà öâåòà.---------------------------------------------------------------------------------------------------------------+
//|   AutoColor (èíâåðñèÿ ðàñïðåäåëåíèÿ öâåòà true/false = êðàñíûé-ôèîëåòîâûé/ôèîëåòîâûé-êðàñíûé, true/false = çàïîëíåíèå ìàññèâà/âîçâðàò ôèêñèðîâàííîãî çíà÷åíèÿ (0 - 1535),|
//|              åñëè ArraySingle true/false = êîëè÷åñòâî ñïåêòðàëüíûõ ëèíèé/çíà÷åíèå (1 - 1535) äëÿ âû÷èñëåíèÿ îäíîé ñïåêòðàëüíîé ëèíèè,                                    |
//|              îäíîìåðíûé ìàññèâ äëÿ çàïîëíåíèÿ ïðè ArraySingle = true);                                                                                                   |
//|   int AutoColor (bool InversColor, bool ArraySingle, int AmountSpectralLine, int Set_Color[]);                                                                           |
//| 2.Ôóíêöèÿ âîçâðàùàåò ñòðîêîâîå íàçâàíèå ÒÔ ïî íîìåðó ÒÔ.-----------------------------------------------------------------------------------------------------------------+
//|   NumberInString (Íîìåð ÒÔ îò "0" äî "8");                                                                                                                               |
//|   string NumberInString (int NumberTF);                                                                                                                                  |
//| 3.Ôóíêöèÿ äëÿ âû÷èñëåíèÿ êîëè÷åñòâà ðàçðÿäîâ ÷èñëà äî äåñÿòè÷íîé òî÷êè.--------------------------------------------------------------------------------------------------+
//|   Exponent (÷èñëî äëÿ âû÷èñëåíèé, îãðàíè÷åíèå âû÷èñëåíèé ðàçðÿäîâ);                                                                                                      |
//|   Êîëè÷åñòâî ðàçðÿäîâ ÷èñëà ôîðìàòà 1,234õ10^p ýòî ïîêàçàòåëü ñòåïåíè (p) ïðè îñíîâàíèè äåñÿòü.                                                                          |
//|   int Exponent (double Value, int Limiter);                                                                                                                              |
//| 4.Âèçóàëèçàöèÿ äàííûõ ìàññèâà ñ äàííûìè äâîéíîé òî÷íîñòè â êîììåíòàðèÿõ.-------------------------------------------------------------------------------------------------+
//|   DoubleArrayInComment (èìÿ ìàññèâà, âèçóàëèçèðóåìîå êîëè÷åñòâî çíàêîâ ïîñëå çàïÿòîé, 1-î ìåðíûé âèçóàëèçèðóåìûé ìàññèâ, 2-õ ìåðíûé âèçóàëèçèðóåìûé ìàññèâ);             |
//|   string DoubleArrayInComment (string NameArray, int digits, double Array1[], double Array2[][]);                                                                        |
//| 5.Âèçóàëèçàöèÿ äàííûõ ìàññèâà ñ öåëî÷èñëåííûìè äàííûìè â êîììåíòàðèÿõ.---------------------------------------------------------------------------------------------------+
//|   IntArrayInComment (èìÿ ìàññèâà, 1-î ìåðíûé âèçóàëèçèðóåìûé ìàññèâ, 2-õ ìåðíûé âèçóàëèçèðóåìûé ìàññèâ);                                                                 |
//|   string IntArrayInComment (string NameArray, int Array1[], int Array2[][]);                                                                                             |
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
#property copyright "Copyright © 2007 Zhunko"
#property link      "zhunko@mail.ru"
#property library
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ
//1===Ðàñ÷¸ò äëÿ àâòîìàòè÷åñêîãî ðàñïðåäåëåíèÿ ñïåêòðà öâåòà ïî êàíàëàì.==================================================================================================================================
// AutoColor (èíâåðñèÿ ðàñïðåäåëåíèÿ öâåòà true/false = ôèîëåòîâûé-êðàñíûé/êðàñíûé-ôèîëåòîâûé, true/false = çàïîëíåíèå ìàññèâà/âîçâðàò ôèêñèðîâàííîãî çíà÷åíèÿ (0 - 1535),
//            åñëè ArraySingle true/false = êîëè÷åñòâî ñïåêòðàëüíûõ ëèíèé/çíà÷åíèå (0 - 1535) äëÿ âû÷èñëåíèÿ îäíîé ñïåêòðàëüíîé ëèíèè, îäíîìåðíûé ìàññèâ äëÿ çàïîëíåíèÿ ïðè ArraySingle = true);
// Äëÿ ðàáîòû ôóíêöèè â ðåæèìå ArraySingle = true íàäî îáúÿâèòü ìàññèâ "Set_Color[]".
int AutoColor (bool& InversColor, bool& ArraySingle, int& AmountSpectralLine, int& Set_Color[])
 {
  int Begin;
  int End;
  int i, j;
  int n = 0;
  int RC, GC, BC;
  int StepColor;
  // Êîíòðîëü íà çàïðåäåëüíûå çíà÷åíèÿ.
  if (InversColor == true)
   {
    if (AmountSpectralLine < 0) return (16711680);
    if (AmountSpectralLine > 1535) return (16711935);
   }
  if (InversColor == false)
   {
    if (AmountSpectralLine < 0) return (16711935);
    if (AmountSpectralLine > 1535) return (16711680);
   }
  // Ïîäãîòîâêà ãðàíèö ïîèñêà.
  if (ArraySingle == true) // Äëÿ çàïèñè çíà÷åíèé öâåòà â ìàññèâ.
   {
    Begin = 0;
    End = 1535;
    StepColor = 1535 / AmountSpectralLine;
   }
  else // Äëÿ âîçâðàòà ôèêñèðîâàííîãî çíà÷åíèÿ.
   {
    Begin = AmountSpectralLine;
    End = AmountSpectralLine;
    StepColor = 1;
   }
  // Ïîèñê è âû÷èñëåíèÿ.
  for (j = Begin; j <= End; j += StepColor, n++)
   {
    if (InversColor == true) i = MathAbs (j + StepColor - 1535);
    if (InversColor == false) i = j;
    //----
    if (0 <= i && i <= 255) // Ôàçà ¹1.
     {
      RC = 255;
      GC = 0;
      BC = 16711680 - 65536 * i;
     }
    if (256 <= i && i <= 511) // Ôàçà ¹2.
     {
      RC = 255;
      GC = 256 * (i - 256);
      BC = 0;
     }
    if (512 <= i && i <= 767) // Ôàçà ¹3.
     {
      RC = 767 - i;
      GC = 65280;
      BC = 0;
     }
    if (768 <= i && i <= 1023) // Ôàçà ¹4.
     {
      RC = 0;
      GC = 65280;
      BC = 65536 * (i - 768);
     }
    if (1024 <= i && i <= 1279) // Ôàçà ¹5.
     {
      RC = 0;
      GC = 65280 - 256 * (i - 1024);
      BC = 16711680;
     }
    if (1280 <= i && i <= 1535) // Ôàçà ¹6.
     {
      RC = i - 1280;
      GC = 0;
      BC = 16711680;
     }
    if (ArraySingle == true)
     {
      ArrayResize (Set_Color, n + 1);
      Set_Color[n] = RC + GC + BC;
     }
   }
  return (RC + GC + BC);
 }
//========================================================================================================================================================================================================
//2===Ôóíêöèÿ ïðåîáðàçîâàíèÿ ñèìâîëüíîãî ïðåäñòàâëåíèÿ ÒÔ â ñòðîêîâîå ïî íîìåðó ÒÔ.=======================================================================================================================
// Ôóíêöèÿ âîçâðàùàåò ñòðîêîâîå íàçâàíèå ÒÔ ïî íîìåðó ÒÔ.
// NumberInString (Íîìåð ÒÔ îò "0" äî "8");
string NumberTFInStringName (int NumberTF)
 {
  int    i;
  string TimeFram = "";
  int    TimFram_Sym[9][3] = {77, 49, 0, 77, 53, 0, 77, 49, 53, 77, 51, 48, 72, 49, 0, 72, 52, 0, 68, 49, 0, 87, 49, 0, 77, 78, 49}; // Ñèìâîëüíîå ïðåäñòàâëåíèå ñòðîêîâûõ íàçâàíèé ÒÔ.
  //----
  for (i = 0; i < 3; i++) TimeFram = TimeFram + StringSetChar ("", 0, TimFram_Sym[NumberTF][i]);
  return (StringTrimRight (TimeFram));
 }
//========================================================================================================================================================================================================
//3===Ôóíêöèÿ äëÿ âû÷èñëåíèÿ êîëè÷åñòâà ðàçðÿäîâ ÷èñëà äî äåñÿòè÷íîé òî÷êè.===============================================================================================================================
// Exponent (÷èñëî äëÿ âû÷èñëåíèé, îãðàíè÷åíèå âû÷èñëåíèé ðàçðÿäîâ);
// Êîëè÷åñòâî ðàçðÿäîâ ÷èñëà ôîðìàòà 1,234õ10^p ýòî ïîêàçàòåëü ñòåïåíè (p) ïðè îñíîâàíèè äåñÿòü.
int Exponent (double& Value, int& Limiter)
 {
  int n;
  int pow; // Ïîêàçàòåëü ñòåïåíè.
  int value = MathAbs (Value);                        // Áåð¸ì àáñîëþòíîå çíà÷åíèå. 
  //----
  if (value * MathPow (10, Limiter) == 0) return (0); // Åñëè ÷èñëî ðàâíî íóëþ, òî âîçâðàùàåì íîëü.
  if (value < 1)                                      // Åñëè ÷èñëî ìåíüøå åäèíèöè.
   {
    for (pow = 0; pow <= Limiter; pow++)
     {
      n = value * MathPow (10, pow);
      if (1 <= n && n < 10) break;                    // Ïððîâåðÿåì íà ðàâåíñòâî ïåðâîìó ðàçðÿäó. 
     }
   }
  if (value >= 1)                                     // Åñëè ÷èñëî áîëüøå èëè ðàâíî åäèíèöè.
   {
    for (pow = 0; pow >= -Limiter; pow--)
     {
      n = value * MathPow (10, pow);
      if (1 <= n && n < 10) break;                    // Ïððîâåðÿåì íà ðàâåíñòâî ïåðâîìó ðàçðÿäó. 
     }
   } 
  return (-pow);                                      // Âîçâðàùàåì ñ îáðàòíûì çíàêîì. 
 }
//========================================================================================================================================================================================================
//4===Âèçóàëèçàöèÿ äàííûõ ìàññèâà ñ äàííûìè äâîéíîé òî÷íîñòè â êîììåíòàðèÿõ.==============================================================================================================================
// string DoubleArrayInComment (èìÿ ìàññèâà, âèçóàëèçèðóåìîå êîëè÷åñòâî çíàêîâ ïîñëå çàïÿòîé, 1-î ìåðíûé âèçóàëèçèðóåìûé ìàññèâ, 2-õ ìåðíûé âèçóàëèçèðóåìûé ìàññèâ);
// Ôóíêöèÿ âîçâðàùàåò òåêñò, ñîäåðæèìîå êîíòðîëëèðóåìîãî ìàññèâà.
string DoubleArrayInComment (string& NameArray, int& digits, double& Array1[], double& Array2[][])
 {
  int    i1, i2;
  string Headline = "";
  string Str[];
  int Range11 = ArrayRange (Array1, 0);
  int Range21 = ArrayRange (Array2, 0);
  int Range22 = ArrayRange (Array2, 1);
  int Cycle1 = MathMax (Range11, Range21);
  int Cycle2 = Range22;
  ArrayResize (Str, Cycle1 + 1);
  //----
  for (i1 = 0; i1 < Cycle1; i1++)
   {
    if (Range11 != 0) Str[i1] = NameArray + "[" + Range11 + "] = {";
    if (Range21 != 0 && Range22 != 0) Str[i1] = NameArray + "[" + i1 + "][" + Range22 + "] = {";   
    if (Range11 != 0) Str[i1] = Str[i1] + DoubleToStr (Array1[i1], digits) + ", ";
    for (i2 = 0; i2 < Cycle2; i2++) if (Range21 != 0 && Range22 != 0) Str[i1] = Str[i1] + DoubleToStr (Array2[i1][i2], digits) + ", ";
    Str[i1] = StringSubstr (Str[i1], 0, StringLen (Str[i1]) - 2) + "};\n";
   }
  for (i1 = 0; i1 < Cycle1; i1++) Headline = Headline + Str[i1];
  Comment (Headline);
  return (Headline);
 }
//========================================================================================================================================================================================================
//5===Âèçóàëèçàöèÿ äàííûõ ìàññèâà ñ öåëî÷èñëåííûìè äàííûìè â êîììåíòàðèÿõ.================================================================================================================================
// string DoubleArrayInComment (èìÿ ìàññèâà, âèçóàëèçèðóåìîå êîëè÷åñòâî çíàêîâ ïîñëå çàïÿòîé, 1-î ìåðíûé âèçóàëèçèðóåìûé ìàññèâ, 2-õ ìåðíûé âèçóàëèçèðóåìûé ìàññèâ);
// Ôóíêöèÿ âîçâðàùàåò òåêñò, ñîäåðæèìîå êîíòðîëëèðóåìîãî ìàññèâà.
string IntArrayInComment (string& NameArray, int& Array1[], int& Array2[][])
 {
  int    i1, i2;
  string Headline = "";
  string Str[];
  int Range11 = ArrayRange (Array1, 0);
  int Range21 = ArrayRange (Array2, 0);
  int Range22 = ArrayRange (Array2, 1);
  int Cycle1 = MathMax (Range11, Range21);
  int Cycle2 = Range22;
  ArrayResize (Str, Cycle1 + 1);
  //----
  for (i1 = 0; i1 < Cycle1; i1++)
   {
    if (Range11 != 0) Str[i1] = NameArray + "[" + Range11 + "] = {";
    if (Range21 != 0 && Range22 != 0) Str[i1] = NameArray + "[" + i1 + "][" + Range22 + "] = {";   
    if (Range11 != 0) Str[i1] = Str[i1] + DoubleToStr (Array1[i1], 0) + ", ";
    for (i2 = 0; i2 < Cycle2; i2++) if (Range21 != 0 && Range22 != 0) Str[i1] = Str[i1] + DoubleToStr (Array2[i1][i2], 0) + ", ";
    Str[i1] = StringSubstr (Str[i1], 0, StringLen (Str[i1]) - 2) + "};\n";
   }
  for (i1 = 0; i1 < Cycle1; i1++) Headline = Headline + Str[i1];
  Comment (Headline);
  return (Headline);
 }
//========================================================================================================================================================================================================
//ææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææææ

Comments