Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1236

 
Andrey Sokolov:

Приветствую. Подскажите, пожалста.

Возможно ли получить не значение а само имя какой-либо переменной? К примеру, вывести в печать имя переменной.

#define PRINTVAR(x) Print(" " ##x); Print(x)
void OnStart()
  {
      long anyvar=(long)TimeLocal();
      PRINTVAR(anyvar);
  
  }

результат:

2020.08.24 14:46:05.394    test (USDCHF,H1)     anyvar
2020.08.24 14:46:05.394    test (USDCHF,H1)    1598280365

возможно фича из неопубликованного :-) по аналогии с "С", но ещё недоведённое по юзабельности

 
Andrey Sokolov:

Нужно получить само название переменной.

Не зная названия, и не имея никаких отличительных признаков этого сделать нельзя. Можно например получить названия всех переменных равных 5 и вывести их названия, нашли, вывели. Или названия всех строковых переменных. Но в любом случае это перебор переменных.

 
Maxim Kuznetsov спасиб
 
Andrey Sokolov:
Maxim Kuznetsov спасиб


Да, вопрос так-же в том чтоб выбрать переменную по имени.

К примеру есть переменные a1, a2, a3, a4, a5 и тд. Нужно перебрать и эти переменные, выбрать у которой есть "a" и 5,  и ее использовать. 

тогда почти никак. Имена переменных доступны только из препроцессора (#макросов).

надо менять внутреннюю логику, например вместо переменных использовать хеш-массив объектов от имён. Тогда сразу доступны и ключ и значение. Или заюзать SQLite если долговременное хранение. Или совместить :-)

Но это так, без знания алгоритма совет впустую.

 
Andrey Sokolov:

Да, вопрос так-же в том чтоб выбрать переменную по имени.

К примеру есть переменные a1, a2, a3, a4, a5 и тд. Нужно перебрать и эти переменные, выбрать у которой есть "a" и 5,  и ее использовать. 

Писать имена в массив и перебирать массив. 

 

Всем доброго времени суток! Мой вопрос по тестеру MT4, язык mql4
Подскажите пожалуйста в чем моя ошибка при инициализации массива. Я создал одномерный массив из 750 элементов. И все 750 элементов инициализировал значением 50.0.

То есть , на первом и последующих тиках первый элемент массива с индексом 0 должен иметь значение 50.0 и последний элемент массива под индексом 749 должен иметь значение 50.0

Фактически же получается, что последний элемент массива имеет значение 0. А первый , как и положено - 50.0

Вопрос. Как сделать так, что бы все значения моего массива (в том числе и последнее) после инициализации имели значение 50.0

Вот мой код

double S_L[750]={50.0};

void OnTick()
{
if (Day()==4&&Month()==1&&Year()==2010&&Hour()==0&&Minute()==0)

Print("=========================749=======  ",S_L[749]," = 0= ",S_L[0]);

}

Внизу значение   Print() из журнала

2020.08.24 17:43:55.427 GBPUSD,M1: 52255 tick events (1440 bars, 53256 bar states) processed in 0:00:00.047 (total time 0:00:02.422)

2020.08.24 17:43:55.407 2010.01.04 00:00:53  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:52  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:50  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:47  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:45  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:43  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:41  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:40  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:37  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:35  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:32  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:30  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:28  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:26  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:25  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:22  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:20  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:17  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:15  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:13  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:11  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:10  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:07  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:05  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:02  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.407 2010.01.04 00:00:00  ТЕСТЕР(Б.ОРД.) GBPUSD,M1: =========================749=======  0 = 0= 50

2020.08.24 17:43:55.385 2010.01.01 00:00:00  ТЕСТЕР(Б.ОРД.) test started


Спасибо за помощь


Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
 
ANDREY:

Вот мой

Где?)))

 
Alexey Viktorov:

Где?)))

Вверху в моем отредактированном посте. Спасибо за отклик.

 

ANDREY:

Вопрос. Как сделать так, что бы все значения моего массива (в том числе и последнее) после инициализации имели значение 50.0 

int OnInit()
{
   ArrayInitialize(S_L, 50.0);
}
 
Igor Makanu:

Спасибо за подсказку. Попутно хотел уточнить..... В учебнике Ковалева написано что инициализировать массив можно одновременно с его объявлением( как я и сделал), без специальной функции. Я знаю что учебник Ковалева в чем то устарел. ВОПРОС. Правильно я понимаю, что сейчас в mql4  инициализировать массивы нужно исключительно  при помощи функции 

ArrayInitialize(S_L, 50.0)

Спасибо.

Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Функция ArrayResize() позволяет задать для массива размер с некоторым запасом для его будущего увеличения без физического перераспределения памяти. Это сделано для улучшения быстродействия, так как операции по распределению памяти...
Причина обращения: