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

 
Ivan_Invanov:
Здравствуйте. Зачем нужно в деинициализации удалять объекты классов? Они останутся в памяти после закрытия терминала? Или останутся в памяти во время работы терминала без советника? Что еще нужно удалять кроме объектов класса?

На пример, вы удалите эксперт с графика, а всякие рисунки (объекты) останутся на графике. В деинициализации удалять всё лишние чтобы был чистый график. Как то так.

 
Nauris Zukas:

На пример, вы удалите эксперт с графика, а всякие рисунки (объекты) останутся на графике. В деинициализации удалять всё лишние чтобы был чистый график. Как то так.

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

Добрый день !

Как присвоить id к индикатору? Приобрел советника, он ориентируется на старший ТФ, чтобы торговать на младшем. Разработчик написал, что нужно повесить на старший график индикатор и присвоить ему id. Я новичек в  работе с MT, не знаю как сделать. Подскажите, если кто понял как сделать. (Стоит версия MT5)

 
secret:

Как сделать, чтобы на графике не отображались сделки с других графиков?

Только сделки того робота, который стоит на данном графике.

Только меня одного беспокоит мешанина сделок от множества роботов на одном графике? Больше никто не озабочивался?

 
Vladimir Karputov:

Тогда уже так правильно:

а если не удалось закрыть - смотрите в лог-файл. Причин может быть миллион: реджект, запрет торговли, нет цен, близость стоп-уровней ...

     Спасибо. Тогда уж так) : 


void CloseSellPositions()
  {
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of current positions
	{
          if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
            {
             if(m_position.PositionType()==POSITION_TYPE_SELL)
                m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
            }
	}


  }

Просто скобочки добавил. Чтобы новички не путались.

 

Здравствуйте. В программе для записи логов в отдельные файлы часто использую строку вида:

StringConcatenate(M,"Начинаем проверять время работы модулей. i=",i); Log.write(M,__FILE__,__LINE__);

Подскажите как сократить эту строку ? Ведь по сути здесь меняется только сама строка для вывода и название переменой, в которую вывожу.

Пытался сделать на define

#define LOG(LogPerem,StrMes) StringConcatenate(M,StrMes,""); LogPerem.write(M,__FILE__,__LINE__);

но если вызвать вот так уже не работает:

LOG(Log,"i=",i);
 
pivomoe:

Здравствуйте. В программе для записи логов в отдельные файлы часто использую строку вида:

Подскажите как сократить эту строку ? Ведь по сути здесь меняется только сама строка для вывода и название переменой, в которую вывожу.

Пытался сделать на define

но если вызвать вот так уже не работает:

У Вас понимание о препроцессоре есть?

Ваш

LOG("i=",i);
разворачивается в
StringConcatenate(M,i,""); "i=".write(M,__FILE__,__LINE__);;

и именно это скармливается компилятору.

Даже не смешно. Рецепт один: курить доки,-желательно не местные, местные уже подразумевают какое-никакое понимание терминологии.

Попробуй это, вдруг поможет: https://metanit.com/cpp/c/3.1.php

С | Препроцессор
  • metanit.com
Препроцессор является обязательным компонентом компилятора языка Си. Препроцессор обрабатывает исходный текст программы до ее непосредственной компиляции. Результатом работы препроцессора является полный текст программы, который передается на компиляцию в исполняемый файл. Для управления препроцессором применяются директивы, каждая из которых...
 
Vladimir Simakov:

Даже не смешно. Рецепт один: курить доки,-желательно не местные, местные уже подразумевают какое-никакое понимание терминологии.

Попробуй это, вдруг поможет: https://metanit.com/cpp/c/3.1.php

   Что значит вдруг ? Вам то помогло ? Вы можете сократить мою строку используя define ?


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

LOG("i=",i);

на

LOG(Log,"i=",i);
 
pivomoe:

Здравствуйте. В программе для записи логов в отдельные файлы часто использую строку вида:

Подскажите как сократить эту строку ? Ведь по сути здесь меняется только сама строка для вывода и название переменой, в которую вывожу.

Пытался сделать на define

но если вызвать вот так уже не работает:

Решил свою проблему с помощью простыни из функций вида:

template<typename T1,typename T2,typename T3,typename T4,typename T5,typename T6,typename T7,typename T8,typename T9,typename T10>
void Write(T1 var1,T2 var2,T3 var3,T4 var4,T5 var5,T6 var6,T7 var7,T8 var8,T9 var9,T10 var10,string ffile,int line)
  {
   string Str;
   StringConcatenate(Str,var1,var2,var3,var4,var5,var6,var7,var8,var9,var10);
   write(Str,ffile,line);
  }; 

Теперь в проге вызываю так

   Log.Write("Test1",__FILE__,__LINE__);  
 
pivomoe:

   Что значит вдруг ? Вам то помогло ? Вы можете сократить мою строку используя define ?


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

на

Могу. LOG("Text"); Пример, как это реализуется я, где-то на просторах форума, приводил - ищите.