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

 

Возможно ли дублировать объект Ccanvas?


Создаю объект с помощью Ccanvas, в процессе работы должны создаваться дубликаты. Иногда 10-20, а иногда и 100-200. 

Один раз объект точно рисуется. МОжно ли как-то дублировать его?

 
Sergey Likho:

Возможно ли дублировать объект Ccanvas?


Создаю объект с помощью Ccanvas, в процессе работы должны создаваться дубликаты. Иногда 10-20, а иногда и 100-200. 

Один раз объект точно рисуется. МОжно ли как-то дублировать его?

CCanvas *canv = new CCanvas
Но это не дублирование имеющегося. Это создание нового и указателя на него.
 
Artyom Trishkin:
CCanvas *canv = new CCanvad

Я имел ввиду графический объект. 

   CCanvas obj;
   obj.CreateBitmapLabel(0,1,name,x,y,x_size,y_size,COLOR_FORMAT_ARGB_NORMALIZE);
   obj.FillRectangle(0,0,x_size,y_size,ColorToARGB(Color,Alpha));
   obj.Update(false);


Как сделать 10 копий с измененными координатами?
 
Sergey Likho:

Я имел ввиду графический объект. 

Я показал. Если заранее не известно сколько нужно создавать объектов, то только посредством new.
Если количество известно, то
obj1, obj2, obj3,...,objN
 
Igor Makanu:

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

Не ошибаетесь. Недавно полностью листал весь топик автора. Где-то 2-3 дня ушло. В авторском топике в виду давности написания некоторые его функции уже не актуальны (или мне так показалось).Читать приходится абсолютно все и высоко актуальное и малоактуальное. И как вы заметили, у него действительно бывали ошибки, которые всплывали через 2-3, а то и более страниц, когда кто-то из участников решил воспользоваться его функцией, обнаружил ошибку и или исправил ее и просто сказал, что там-то была ошибка, или просто указал. Поэтому страниц даже через 10 снова может появиться эта же фукция исправленная, либо доработанная (прошло время и он ее захотел улучшить).

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

 
Как передать указатель на функцию в функцию(имеется в виду написана функция которая принимает указатель на функцию в качестве аргумента) в качестве параметра? Я ранее уже делал такое в mql4 такое тоже возможно, но я потерял копию того файла где был этот пример.
 
Seric29:
Как передать указатель на функцию в функцию(имеется в виду написана функция которая принимает указатель на функцию в качестве аргумента) в качестве параметра? Я ранее уже делал такое в mql4 такое тоже возможно, но я потерял копию того файла где был этот пример.

А разве в MQL когда то поддерживались указатели на функции? Вроде нет. Одно из решений - обёртывание функции в класс и передача указателя на объект. 

 
Sergey Popov:

Всем привет!

Хочу в советнике написать функцию запрещающую торговать в первые 2 часа после начала торговли.

Но столкнулся с тем что iTime(Symbol(),1440, 0) не правильно возвращает время открытия дневной свечи.

Конкретнее: 26.12.2019 рынок открылся в 06:00:00, а iTime определяет 00:00:00.

Как мне вычислить именно время открытия дня?

Время торговли узнать поможет SymbolInfoSessionTrade. Не знаю только отражает ли изменения для рождества и прочих праздников.

 
Aleksey Mavrin:

А разве в MQL когда то поддерживались указатели на функции? Вроде нет. Одно из решений - обёртывание функции в класс и передача указателя на объект. 

Поддерживает. Это делается с помощью спецификатора typedif читайте справку только схема отличается от с++. Я нашёл форум где человек записал этот код но я не сохранил файл и перезапустил систему, естественно файл удалился. Но в справке показан простой пример а у меня был пример именно тот о котором спрашиваю.

 
Aleksey Mavrin:

А разве в MQL когда то поддерживались указатели на функции? Вроде нет. Одно из решений - обёртывание функции в класс и передача указателя на объект. 

можно, код для воспроизведения:

#property copyright "Copyright 2019, IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
typedef void(*TFuncvoidPTR)(void);
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   TFuncvoidPTR f_ptr[3];
   f_ptr[0] = f_1;
   f_ptr[1] = f_2;
   f_ptr[2] = f_3;
   for(int i=0;i<ArraySize(f_ptr);i++)
   {
      printf("Вызываю фунцию № %i ",i);
      f_ptr[i]();
   }

}
//+------------------------------------------------------------------+
void f_1() {Print("Это вызов функции : ",__FUNCTION__);}
void f_2() {Print("Это вызов функции : ",__FUNCTION__);}
void f_3() {Print("Это вызов функции : ",__FUNCTION__);}

2019.12.30 18:30:55.518 Script tst EURUSD,H1: removed

2019.12.30 18:30:55.511 tst EURUSD,H1: uninit reason 0

2019.12.30 18:30:55.511 tst EURUSD,H1: Это вызов функции : f_3

2019.12.30 18:30:55.511 tst EURUSD,H1: Вызываю фукцию № 2 

2019.12.30 18:30:55.511 tst EURUSD,H1: Это вызов функции : f_2

2019.12.30 18:30:55.511 tst EURUSD,H1: Вызываю фукцию № 1 

2019.12.30 18:30:55.511 tst EURUSD,H1: Это вызов функции : f_1

2019.12.30 18:30:55.511 tst EURUSD,H1: Вызываю фукцию № 0 

2019.12.30 18:30:55.511 tst EURUSD,H1: initialized

2019.12.30 18:30:55.496 Script tst EURUSD,H1: loaded successfully