Ошибки, баги, вопросы - страница 758

 
Ну да, теперь уже на 4 секунды убежали вперёд.
 
Почему, во время изменения положения трендовой линии, на ней исчезает средняя точка?
 

Здравствуйте!

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

Как мне это лучше сделать? Писать индикатор, присоединять к графику и передавать ему значения переменных из эксперта через глобальные переменные терминала? Или есть более "красивый" способ? 

Заранее, спасибо. 

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
Alex5757000:

Здравствуйте!

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

Как мне это лучше сделать? Писать индикатор, присоединять к графику и передавать ему значения переменных из эксперта через глобальные переменные терминала? Или есть более "красивый" способ? 

Заранее, спасибо. 

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

Задайте параметры отрисовки буфера индикатора как барный график.

и пишите в соответственные буфера все четыре значения,

опен при открытии бара, хай лоу и клосе динамично (последнем баре).

короче как то вот так: в прикрепе

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

ЗЫ а хотя нет, там же шкала динамичная так что можно и второй вариант, вполне читабельно.

Файлы:
 
Urain:

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

Задайте параметры отрисовки буфера индикатора как барный график.

и пишите в соответственные буфера все четыре значения,

опен при открытии бара, хай лоу и клосе динамично (последнем баре).

Значения эквити и баланса - да, а если я хочу видеть значение переменной, рассчитываемой в эксперте?
 

OBJ_LABEL на чарт выведите.

 

Еще можно почитать тут:

https://www.mql5.com/ru/forum/1111/40260#comment_40260

https://www.mql5.com/ru/forum/2963 

 
Alex5757000:
Значения эквити и баланса - да, а если я хочу видеть значение переменной, рассчитываемой в эксперте?

Через пользовательское событие можно отправить, только нужно не забыть обновить после в эвенте чарт,

а то ведь тик приходит раньше чем обработается событие, в порядке очереди.

ЗЫ хотя можно и через глобалы, но таже проблема тик уже пришёл а переменная ещё в советнике обрабатывается (готовятся её изменения), конечно данные дойдут, но будет задержка на один тик, всё таки в евенте будет корректней, там есть где поставить обновление чарта постфактум когда уже точно известно что переменная имеет актуальные данные.

 

Вот такой вот код не компилируется с ошибкой "'return' - structure have objects and cannot be copied" из-за сторки "CTest getCopy(void) {CTest res; return res;}"

Это можно исправить 2 способами:

1) изменить "class" на "struct"

2) раскомментировать стоку с перегруженным оператором присваивания

То есть так и должно быть что роль копирующего конструктора выполняет перегруженный оператор присваивания? Почему тогда это не указано в справочнике кроме одного примера класса матрицы(детальный разбор которого кстати и позволил мне найти ошибку в своем коде)?

class CTest
  {
public:
    CTest(void): cnt(0) {}
   ~CTest(void) {}
    CTest(const CTest& T) {cnt = T.cnt;} // copy constructor
    //------------------------
    CTest getCopy(void) {CTest res; return res;} 
    //------------------------
    //CTest* operator=(const CTest& T) {cnt = T.cnt; return GetPointer(this);}
private:
         int cnt;
  };
Документация по MQL5: Основы языка / Операторы / Оператор-выражение
Документация по MQL5: Основы языка / Операторы / Оператор-выражение
  • www.mql5.com
Основы языка / Операторы / Оператор-выражение - Документация по MQL5
 
WWer:

Вот такой вот код не компилируется с ошибкой "'return' - structure have objects and cannot be copied" из-за сторки "CTest getCopy(void) {CTest res; return res;}"

Ну естественно.  Объект не может быть возвращен из функций. (В отличии от структур.) Это документировано.


Это можно исправить 2 способами:

1) изменить "class" на "struct"

См. выше.

2) раскомментировать стоку с перегруженным оператором присваивания

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

// Только синтаксически правильным.

// Возврат неинициализированной переменной из функции getCopy(), надеюсь, служит лишь для демонстрации синтаксической проблемы, и не претендует на разумность.

То есть так и должно быть что роль копирующего конструктора выполняет перегруженный оператор присваивания?

Ээээ... Причём здесь роли?  Можно и оператор присваивания перегрузить как угодно, и копирующий конструктор правильно написать.  У вас ошибка в другом месте совсем.


Почему тогда это не указано в справочнике кроме одного примера класса матрицы(детальный разбор которого кстати и позволил мне найти ошибку в своем коде)?

Потому что динозавр Вася 11 февраля  2096785 года до рождения Христова неаккуратно наступил на ящерицу Клаву.   Это повлекло за собой длинную цепь причин и следствий которые и привели к текущей ситуации.   Ничего не поделаешь. 

;)

 
MetaDriver:// Возврат неинициализированной переменной из функции getCopy(), надеюсь, служит лишь для демонстрации синтаксической проблемы, и не претендует на разумность.

А зачем ее инициализировать? Это же экземпляр класса у которого есть конструктор как раз для этого.

MetaDriver:
Ээээ... Причём здесь роли?  Можно и оператор присваивания перегрузить как угодно, и копирующий конструктор правильно написать.  У вас ошибка в другом месте совсем.

 И как же тогда правильно написать копирующий конструктор для этой цели?

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