Ошибки, баги, вопросы - страница 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:
Ээээ... Причём здесь роли?  Можно и оператор присваивания перегрузить как угодно, и копирующий конструктор правильно написать.  У вас ошибка в другом месте совсем.

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