Прошу подсказать, как преобразовать текстовую переменную в имя переменной double.
Язык MQL4.
Так не получится - имя переменной задается при ее объявлении.
Его не сгенерировать и не получить расчетным путем как например можно это сделать в Python.
![Документация по MQL5: Преобразование данных / DoubleToString Документация по MQL5: Преобразование данных / DoubleToString](https://c.mql5.com/36/64/dokumentaciya-po-mql5-preobrazovanie.png)
- www.mql5.com
Так не получится - имя переменной задается при ее объявлении.
Его не сгенерировать и не получить расчетным путем как например можно это сделать в Python.
double Low4_M1=iLow(Symb,PERIOD_M1,4);
string Low5M1 = "Low"+nomer+"_M1";
print ( Low5M1);
Получаем нужный результат Low4_M1. Должен же быть способ, как использовать в вычислениях?
Например,
if ( Low4_M1>0)
DoubleToString - Преобразование данных - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Не то.
Топикстартера интересует объявление / создание переменной типа double с именем, которое будет получено ПРОГРАММНО.
Получаем нужный результат Low4_M1. Должен же быть способ, как использовать в вычислениях?
Возможно, но мы его пока не знаем. (((
Бывают недокументированные фичи.
Изначальная задача:
получить значение минимума из n-го количества свечей.
Такая задача имеет решение:
int count=10; // количество баров для просчет вглубь int x1=1; // с какого бара начинать просчет int index_lowest = iLowest(NULL, PERIOD_CURRENT, MODE_LOW, count, x1); // индекс бара с минимальным Low double low = iLow(NULL,PERIOD_CURRENT,index_lowest); // значение Low этого бара
получить значение минимума из n-го количества свечей.
Функция iLowest выдает только номер свечи, а нужен ее минимум.
Стоп! А что мешает Вам после того, как Вы нашли номер свечи, сделать вот такой запрос: Low[номер свечи]?
Стоп! А что мешает Вам после того, как Вы нашли номер свечи, сделать вот такой запрос: Low[номер свечи]?
Имя переменной Low4_M1
Low[nomer]_M1 дает ошибку, как еще можно соединить?
Решение получается только так:
iLow(Symb,PERIOD_M1,nomer)
Но задачу получить имя переменной программно так и не получается выполнить.
Имя переменной Low4_M1
Low[nomer]_M1 дает ошибку, как еще можно соединить?
Решение получается только так:
iLow(Symb,PERIOD_M1,nomer)
Но задачу получить имя переменной программно так и не получается выполнить.
Зачем нужно именно имя переменной? В переменной находится некое текстовое содержимое. В этом содержимом есть номер свечи. Вот его и нужно достать из текста. Делается это либо при помощи StringSplit(), либо каким-то своим методом обхода по символам строки. Получив номер свечи, остается подставить его в функцию iLow().
Если же у Вас N-ое количество переменных вида Low4_M1, то налицо неправильный подход, т. к. для каждой свечи не заводят свою переменную, для этого существуют массивы.
Задача автоматической генерации имени переменной и использование впоследствии такой переменной с данными типа double вполне решаемая. Только не с переменной doublе, а с переменной глобального уровня терминала. Это те переменные, список которых вызывается нажатием кнопки F3 в терминале (Сервис -> Глобальные переменные).Они могут принимать значения чисел с плавающей точкой.
Для переменной такого типа можно вполне сгенерировать строку, которая будет содержать нужное имя. Далее, при объявлении (инициализации) этой переменной её имя указывается как строковый параметр. Так что задача Ваша вполне решаема, только для поиска очередного экстремума это не решение - это пляски с бубном. Короче, это не лучший способ прийти к цели (в конкретно Вашем случае).
Зачем нужно именно имя переменной? В переменной находится некое текстовое содержимое. В этом содержимом есть номер свечи. Вот его и нужно достать из текста. Делается это либо при помощи StringSplit(), либо каким-то своим методом обхода по символам строки. Получив номер свечи, остается подставить его в функцию iLow().
Если же у Вас N-ое количество переменных вида Low4_M1, то налицо неправильный подход, т. к. для каждой свечи не заводят свою переменную, для этого существуют массивы.
Сейчас реализуется так:
double lowest5M1=iLowest(Symb,1,MODE_LOW,5,0);
string nomer=DoubleToStr(lowest5M1, 0);
string Low5M1 = "Low"+nomer+"_M1";
Резонно применять массивы, но код программы сложился давно в такой структуре, используя большое количество различных по смыслу переменных. Предварительные вычисления задаются в имени переменной, после чего имена используются для дальнейших вычислений.
Переделывать всю структуру очень трудоемко, поэтому ищется возможность оптимизировать в таком формате.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Прошу подсказать, как преобразовать текстовую переменную в имя переменной double.
Язык MQL4.
Есть текстовая переменная
string Low5M1 = "Low"+nomer+"_M1";
print ( Low5M1);
Результат выводит Low4_M1.
Есть такая переменная типа double Low4_M1, которая принимает различные значения:
double Low4_M1=iLow(Symb,PERIOD_M1,4);
Если написать print ( Low4_M1 );
то выводит 0.
Изначальная задача:
получить значение минимума из n-го количества свечей.
Функция iLowest выдает только номер свечи, а нужен ее минимум.