//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ //| 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); } //======================================================================================================================================================================================================== //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж