Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1031

 
artmedia70:
Если при нечаянном удалении индикатора должны удаляться глобальные переменные, созданные этим индикатором, то в функции OnDeinit() индикатора должно быть прописано удаление этих глобальных переменных.
При этом нужно проверить, что это не переключение таймфрейма, а именно удаление индикатора с графика.
Спасибо!
 
artmedia70:
Нажмите в терминале F3, и вручную удалите эту переменную. Она же один раз создана, и находится в окружении - от-туда её и считывает советник. Или я вас не правильно понял? Вы в самом коде индикатора просто убрали создание глобальной переменной терминала, но до этого её уже создавали этим индикатором?

Артем, пожалуйста, помогите понять в чём дело. Вот здесь https://www.mql5.com/ru/code/10237 лежит код советника, который оповещает (точнее раньше оповещал) обо всех торговых событиях в терминале. Этот код исправно работал. Я достаточно длительно отсутствовал на сайте. Произошли какие-то изменения в mql4, сейчас этот код компилируется с ошибкой, выдается ошибка при компиляции строк инициализации массива. Если найдете время, посмотрите, пожалуйста.

С уважением.

ps если кто-то еще посмотрит в чем проблема, я буду благодарен. 

 
AlexeyVik:
Ну, не знаю, может в С++ который я не изучал никогда так правильно, но mql только С-подобный. И во-вторых измерение массива переменной задавать нельзя, хотя в твоём примере MAX_NUM_ORDER может и не переменная...
вот здесь посмотрите про инициализацию массива https://book.mql4.com/ru/variables/arrays
 
SunnYtheDreamer:

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

ArrayInitialize(Arr_Tickets, 0);



ссылка на элемент будет выглядеть так - Arr_Tickets[MAX_NUM_ORDER,2] =0;

у меня же записано - Arr_Tickets[MAX_NUM_ORDER][2] = {0,0, ,0,0};

 
valenok2003:
вот здесь посмотрите про инициализацию массива https://book.mql4.com/ru/variables/arrays
Ага, я-то считаю что массив объявляется на глобальном уровне, вот и умничаю...
 
valenok2003:

ссылка на элемент будет выглядеть так - Arr_Tickets[MAX_NUM_ORDER,2] =0;

у меня же записано - Arr_Tickets[MAX_NUM_ORDER][2] = {0,0, ,0,0};

Arr_Tickets[MAX_NUM_ORDER,2]  - ссылка на элемент массива

Arr_Tickets[MAX_NUM_ORDER][2] - ссылка на элемент массива

Компилятор не ругается, как ни напиши и ждёт одно конкретное значение, а не что-то другое. Специально проверено.
И подтверждение того же из сылки, которую вы же и дали другому участнику форума: Допускается также способ указания индексов, при котором каждый из индексов обрамляется квадратными скобками

 
SunnYtheDreamer:

Arr_Tickets[MAX_NUM_ORDER,2]  - ссылка на элемент массива

Arr_Tickets[MAX_NUM_ORDER][2] - ссылка на элемент массива

Компилятор не ругается, как ни напиши и ждёт одно конкретное значение, а не что-то другое. Специально проверено.
И подтверждение того же из сылки, которую вы же и дали другому участнику форума: Допускается также способ указания индексов, при котором каждый из индексов обрамляется квадратными скобками

переформулирую вопрос, - Раньше все компилировалось и хорошо работало, кто-нибудь сможет объяснить, в чем причина? Неработающие коды в кодобазу не пропускали...

Кстати, ошибку выдает в 53 и 54 строках кода. В 54 строке что неправильно?  И как тогда инициировать строковый массив? 

Перерыл учебник не нашел ничего про строковые массивы, только про числовые массивы есть информация. Может плохо искал? Дайте пожалуйста ссылку.

 
valenok2003:

Артем, пожалуйста, помогите понять в чём дело. Вот здесь https://www.mql5.com/ru/code/10237 лежит код советника, который оповещает (точнее раньше оповещал) обо всех торговых событиях в терминале. Этот код исправно работал. Я достаточно длительно отсутствовал на сайте. Произошли какие-то изменения в mql4, сейчас этот код компилируется с ошибкой, выдается ошибка при компиляции строк инициализации массива. Если найдете время, посмотрите, пожалуйста.

С уважением.

ps если кто-то еще посмотрит в чем проблема, я буду благодарен. 

Сперва-наперво вставьте в начале кода #property strict и откомпилируйте.

было так:

#property copyright "Copyright © valenok2003@mail.ru"
#property link      "http://bluedream.ucoz.ru"

сделайте так:

#property copyright "Copyright © valenok2003@mail.ru"
#property link      "http://bluedream.ucoz.ru"
#property strict

После этого нужно глядеть уже на те ошибки, которые он выдаст.

 
artmedia70:

Сперва-наперво вставьте в начале кода #property strict и откомпилируйте.

было так:

сделайте так:

После этого нужно глядеть уже на те ошибки, которые он выдаст.

Вставил, ничего не изменилось.

Предположим, строку  Arr_Tickets[MAX_NUM_ORDER][2] = {0,0,,0,0}; я ещё могу заменить на ArrayInitialize(Arr_Tickets,0); 

Что делать со строкой   Arr_Order_Symbol[MAX_NUM_SYMBOL] = {"",,""};? при попытке инициализировать  строковый массив через ArrayInitialize(Arr_Order_Symbol,""), он говорит - "моя твоя не понимай...", нет подходящих объектов для обработки функцией...

 
valenok2003:

Вставил, ничего не изменилось.

Предположим, строку  Arr_Tickets[MAX_NUM_ORDER][2] = {0,0,,0,0}; я ещё могу заменить на ArrayInitialize(Arr_Tickets,0); 

Что делать со строкой   Arr_Order_Symbol[MAX_NUM_SYMBOL] = {"",,""};? при попытке инициализировать  строковый массив через ArrayInitialize(Arr_Order_Symbol,""), он говорит - "моя твоя не понимай...", нет подходящих объектов для обработки функцией...

Ну обнулите этот массив: ZeroMemory()