Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1076

 

Как прочитать большой файл в одну строку?

FileReadString()

When reading from a bin-file. the length of a string to read must be specified. When reading from a txt-file the string length is not required, and the string will be read from the current position to the line feed character "\r\n". When reading from a csv-file, the string length isn't required also, the string will be read from the current position till the nearest delimiter or till the text string end character.

Единственный флаг для всего файла это FILE_BIN, но он в MQL5 в отличие от MQL4 имеет ограничение в 4095 байт. Как еще можно получить большой текст из файла в одну строку?
 
Сергей Таболин:

Я не об этом.

"и с помощью логического NOT решить - инвертировать биты, но терминала нет - не помню как в MQL NOT побитовое сделать, а онлайн справку читать не хочу"

Я о том, что или уж или приведите доказательство, или не мутите воду )))

"Ошибиться может каждый. Признать ошибку может только сильный!". Если это ещё никто не озвучивал, то это моё мудростьё ))). Если уже кто-то говорил - я повторил мудростьё мудрого чела )))

все равно не понял Ваших претензий? Вы предлагаете мне Вам что то доказывать? - зачем? ))))

вот воспроизвел через NOT и проверил все обсужденные варианты:

void OnStart()
  {
//---
   uint TForiginal=OBJ_PERIOD_M1|OBJ_PERIOD_M2|OBJ_PERIOD_M3|OBJ_PERIOD_M4|OBJ_PERIOD_M5|OBJ_PERIOD_M6|OBJ_PERIOD_M10|
                   OBJ_PERIOD_M12|OBJ_PERIOD_M15|OBJ_PERIOD_M20|OBJ_PERIOD_M30|OBJ_PERIOD_H1;

   uint TFwithNOT=(~OBJ_PERIOD_H1&OBJ_PERIOD_H2)-1;
   uint TFwithShift=OBJ_ALL_PERIODS>>9;
   Print("TForiginal = ",TForiginal);
   Print("TFwithNOT = ",TFwithNOT);
   Print("TFwithShift = ",TFwithShift);
  }
//+------------------------------------------------------------------+

вариант с NOT работает с любыми ТФ, но заполнять по принципу (~ТФ_ниже которого отображаем & ТФ_на один старше от необходимого ТФ)-1;

 

Всем хорошего дня! Еще один вопрос... 

Есть MQL5 программа, она имеет настройки (много) "Входные параметры". Программа выполняет вычисления и по мере необходимости создает / удаляет и управляет графическими объектами.

После смены входных параметров из окна настройки генерируется событие Init, что приводит к инициализации программы и происходит "пересчет" и "перерисовка" объектов что в принципе и нужно, но  событие Init например генерируется и при смене периода графика (и другое), в результате чего процесс повторяется всякий раз, и даже когда это не нужно.

Вопрос: как исключить инициализацию программы при событии Init если  входные параметры не изменялись но оставить инициализацию при запуске программы(терминала)?

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

 
Anzhela Sityaeva:

Всем хорошего дня! Еще один вопрос... 

Есть MQL5 программа, она имеет настройки (много) "Входные параметры". Программа выполняет вычисления и по мере необходимости создает / удаляет и управляет графическими объектами.

После смены входных параметров из окна настройки генерируется событие Init, что приводит к инициализации программы и происходит "пересчет" и "перерисовка" объектов что в принципе и нужно, но  событие Init например генерируется и при смене периода графика (и другое), в результате чего процесс повторяется всякий раз, и даже когда это не нужно.

Вопрос: как исключить инициализацию программы при событии Init если  входные параметры не изменялись но оставить инициализацию при запуске программы(терминала)?

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

Вот несколько советов для другой, похожей проблемы

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

В советнике работает, а в индикаторе не правильно, музыка при старте индикатора

Ihor Herasko, 2019.06.17 14:12

Да.

  1. При запуске индикатор создает глобальную переменную терминала. Мол - я загрузился.
  2. Проигрывается приветствие.
  3. При выгрузке (проверяется в OnDeinit) глобальная переменная терминала удаляется.
  4. Если в процессе работы переключен ТФ или изменены параметры, то при выходе в OnInit проверяется наличие глобальной переменной терминала. Если есть, то приветствие не проигрывается. Если нет - звучит.

 
Alexey Viktorov:

Вот несколько советов для другой, похожей проблемы



Благодарю за ответ, похоже что в нашем случае придется отслеживать состояние пары десятков изменений соответствий описав это через "пустышку" на графике, чтобы следить за их изменением, либо смириться с не нужной инициализацией пока объектов не так много...
 
Anzhela Sityaeva:
Благодарю за ответ, похоже что в нашем случае придется отслеживать состояние пары десятков изменений соответствий описав это через "пустышку" на графике, чтобы следить за их изменением, либо смириться с не нужной инициализацией пока объектов не так много...

Но ведь в вашем вопросе было

Anzhela Sityaeva:

Всем хорошего дня! Еще один вопрос... 

Есть MQL5 программа, она имеет настройки (много) "Входные параметры". Программа выполняет вычисления и по мере необходимости создает / удаляет и управляет графическими объектами.

После смены входных параметров из окна настройки генерируется событие Init, что приводит к инициализации программы и происходит "пересчет" и "перерисовка" объектов что в принципе и нужно, но  событие Init например генерируется и при смене периода графика (и другое), в результате чего процесс повторяется всякий раз, и даже когда это не нужно.

Вопрос: как исключить инициализацию программы при событии Init если  входные параметры не изменялись но оставить инициализацию при запуске программы(терминала)?

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

И в вашей ситуации один из тех советов предотвратит эти не нужные перерисовки объектов. А если в OnDeinit() эти объекты удаляются, то и там надо запретить удаление при переключении графика.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как удалить глобальную переменную терминала при закрытии графика?

Alexey Viktorov, 2019.06.29 08:40

Обратите внимание на эту таблицу

REASON_PROGRAM

0

Эксперт прекратил свою работу, вызвав функцию ExpertRemove()

REASON_REMOVE

1

Программа удалена с графика

REASON_RECOMPILE

2

Программа перекомпилирована

REASON_CHARTCHANGE

3

Символ или период графика был изменен

REASON_CHARTCLOSE

4

График закрыт

REASON_PARAMETERS

5

Входные параметры были изменены пользователем

REASON_ACCOUNT

6

Активирован другой счет либо произошло переподключение к торговому серверу вследствие изменения настроек счета

REASON_TEMPLATE

7

Применен другой шаблон графика

REASON_INITFAILED

8

Обработчик OnInit() вернул ненулевое значение

REASON_CLOSE

9

Терминал был закрыт


и на эту строку вашего кода

   if(reason==1) GlobalVariableDel("val");

Но, если я правильно помню начало вашей проблемы, то лучше условие поставить так

   if(reason != REASON_CHARTCHANGE) GlobalVariableDel("val");

 
Alexey Viktorov:

Но ведь в вашем вопросе было

И в вашей ситуации один из тех советов предотвратит эти не нужные перерисовки объектов. А если в OnDeinit() эти объекты удаляются, то и там надо запретить удаление при переключении графика.


Направление понятно, попробуем... Благодарю за ответ.
 
Так и не нашел в Codebase пример советника, где условие закрытие позиции можно прописать, а не только стандартно SL/TP. Может кто подскажет?
 
Sprut112:
Так и не нашел в Codebase пример советника, где условие закрытие позиции можно прописать, а не только стандартно SL/TP. Может кто подскажет?

А чем условие открытия отличается от условия закрытия?

 
Sprut112:
Так и не нашел в Codebase пример советника, где условие закрытие позиции можно прописать, а не только стандартно SL/TP. Может кто подскажет?

У Владимира Карпутова были в кодах такие условия, но чтобы его код прочитать нужно самому научиться)

Причина обращения: