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

[Удален]
Nikolai Semko:

Прошу помочь знающих людей разобраться в вопросе указателей на экземпляры классов. А то я не въезжаю. 

Имеем такой пример скрипта:

При выполнении имеем, как и предпологалось:


если экземпляр класса объявляем так:

тогда при выполнении имеем:

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


Если же экземпляр класса объявляем так:

то конструктор запускается два раза, деструктор 1 раз, но при этом память не освобождается и имеем тип указателя объекта POINTER_AUTOMATIC , хотя предпологалось POINTER_DYNAMIC


Как добиться всегда выполнения деструктора и правильного выполнения delete

Ну и каша в голове.

TheXpert: Все комбинации берет на себя шаблон, поэтому для 9 параметров надо 10 перегрузок функций.

Спасибо, земляк, дай бог тебе плюсов в карму)

Andrey Khatimlianskii:

Имел в виду, что нужно воспользоваться поиском:


В этом руководстве, кажется, есть то, что нужно. Буду копать в этом направлении. Спасибо!

Из работающего советника, поясните плз, в чём дело? 

Привязка чисел к вершинам Зигзага

Вывод данных и привязка их к графику (по "опорной" ценовой координате Low) выполнены следующим образом:

1) определены нужные переменные

extern string font_name = "Arial"; extern int font_size = 8; extern color HighColor=Orange, LowColor=PaleGreen;

int kBtT,DtT; //количество Баров, Длина текущего тренда  и      bool tvT,tnT; //Тренд текущий восходящий/нисходящий 

2) определена функция 

void ORT(int n, double Y1, string l, color c) {

  string Obj = TimeToStr(Time[n], TIME_DATE|TIME_MINUTES);

  ObjectCreate (Obj, OBJ_TEXT, 0, Time[n], Y1);

  ObjectSetText(Obj, l, font_size, font_name);

  ObjectSet    (Obj, OBJPROP_COLOR, c); } 

3) после команды 

if(tvT) ORT(kBtT,Low[kBtT],DtT,LowColor);   else ORT(kBtT,High[kBtT]+6*_Point,DtT,HighColor);

на графике любой валютной пары с установленным индикатором Зигзаг ВБЛИЗИ его вершин и низин выводятся соответствующие им значения. 

Однако в последующем числа в НИЗИНАХ Зигзага остаются без изменений, а в ВЕРШИНАХ Зигзага при изменениях РАЗМЕРА окна - почему-то начинают смещаться вверх или вниз на несколько пикселей.

В чём причина и что можно предпринять, чтобы устранить эту "неполадку"? 

aleger:

Из работающего советника, поясните плз, в чём дело? 

Вывод данных и привязка их к графику (по "опорной" ценовой координате Low) выполнены следующим образом:

1) определены нужные переменные

extern string font_name = "Arial"; extern int font_size = 8; extern color HighColor=Orange, LowColor=PaleGreen;

int kBtT,DtT; //количество Баров, Длина текущего тренда  и      bool tvT,tnT; //Тренд текущий восходящий/нисходящий 

2) определена функция 

void ORT(int n, double Y1, string l, color c) {

  string Obj = TimeToStr(Time[n], TIME_DATE|TIME_MINUTES);

  ObjectCreate (Obj, OBJ_TEXT, 0, Time[n], Y1);

  ObjectSetText(Obj, l, font_size, font_name);

  ObjectSet    (Obj, OBJPROP_COLOR, c); } 

3) после команды 

if(tvT) ORT(kBtT,Low[kBtT],DtT,LowColor);   else ORT(kBtT,High[kBtT]+6*_Point,DtT,HighColor);

на графике любой валютной пары с установленным индикатором Зигзаг ВБЛИЗИ его вершин и низин были выводятся соответствующие им значения. 

Однако в последующем числа в НИЗИНАХ Зигзага остаются без изменений, а в ВЕРШИНАХ Зигзага при изменениях РАЗМЕРА окна - почему-то начинают смещаться вверх или вниз на несколько пикселей.

В чём причина и что можно предпринять, чтобы устранить эту "неполадку"? 

Для текстового объекта, располагающегося на High[], точка привязки (свойство OBJPROP_ANCHOR) должно иметь значение ANCHOR_LOWER (точка привязки снизу по центру).

Для текстового объекта, располагающегося на Low[], точка привязки (свойство OBJPROP_ANCHOR) должно иметь значение ANCHOR_UPPER (точка привязки сверху по центру).

Либо ANCHOR_CENTER для обоих расположений - точка привязки по центру.

Попробуйте.

Artyom Trishkin:

Для текстового объекта, располагающегося на High[], точка привязки (свойство OBJPROP_ANCHOR) должно иметь значение ANCHOR_LOWER (точка привязки снизу по центру).

Для текстового объекта, располагающегося на Low[], точка привязки (свойство OBJPROP_ANCHOR) должно иметь значение ANCHOR_UPPER (точка привязки сверху по центру).

Либо ANCHOR_CENTER для обоих расположений - точка привязки по центру.

Попробуйте.

Спасибо. Начну с утра пораньше (чтобы сейчас не огорчаться или не слишком шумно радоваться). Спокойной ночи!

Artyom Trishkin:

Для текстового объекта, располагающегося на High[], точка привязки (свойство OBJPROP_ANCHOR) должно иметь значение ANCHOR_LOWER (точка привязки снизу по центру).

Для текстового объекта, располагающегося на Low[], точка привязки (свойство OBJPROP_ANCHOR) должно иметь значение ANCHOR_UPPER (точка привязки сверху по центру).

Либо ANCHOR_CENTER для обоих расположений - точка привязки по центру.

Попробуйте.

Но это получается, что надо создавать ДВА объекта с именами, например, Hi и Lo (верхний и нижний экстремумы зигзага или верхний и нижний концы фактического восходящего или нисходящего локального тренда), и оба привязывать к графику с соответствующими значениями ANCHOR_LOWER и ANCHOR_UPPER. Не проще ли выполнить (как-нибудь) привязку Верха Зигзага - к ранее "привязанному" Низу? Примерно это я и сделал, добавив в прежнюю функцию строку

ObjectSetInteger(0,Obj,OBJPROP_ANCHOR,ANCHOR_CENTER); и введя "поправки смещения" в строку вывода   if(tvT) ORT(kBtT,Low[kBtT]-2*_Point,DtT,LowClr);   else ORT(kBtT,High[kBtT]+2*_Point,DtT,HighClr); //

Пока вроде работает. Спасибо!

aleger:

Но это получается, что надо создавать ДВА объекта с именами, например, Hi и Lo (верхний и нижний экстремумы зигзага или верхний и нижний концы фактического восходящего или нисходящего локального тренда), и оба привязывать к графику с соответствующими значениями ANCHOR_LOWER и ANCHOR_UPPER. Не проще ли выполнить (как-нибудь) привязку Верха Зигзага - к ранее "привязанному" Низу? Примерно это я и сделал, добавив в прежнюю функцию строку

ObjectSetInteger(0,Obj,OBJPROP_ANCHOR,ANCHOR_CENTER); и введя "поправки смещения" в строку вывода   if(tvT) ORT(kBtT,Low[kBtT]-2*_Point,DtT,LowClr);   else ORT(kBtT,High[kBtT]+2*_Point,DtT,HighClr); //

Пока вроде работает. Спасибо!

Зачем? Привязку же можно менять в любое время. Или я чего не понял? Вы же цвет меняете. Так же и привязку меняйте.

После закрытия окна дебаг-визуализатора, перекомпиляции и запуска в Тестере одиночного прогона без визуализации получил такое

2018.09.27 14:01:52.784 Core 1  agent process started
2018.09.27 14:01:52.784 Core 1  connecting to 127.0.0.1:3000
2018.09.27 14:02:11.358 Core 1  tester agent authorization error
2018.09.27 14:04:15.875 Core 1  no connection
2018.09.27 14:04:15.875 Core 1  connect error

20 секунд ничего не мог сделать. Кнопка Старт была серой все этой время.


Записи Агента

DM      3       14:01:49.711    Tester  close visual tester window
RH      0       14:01:49.711    Tester  shutdown tester machine
LN      0       14:01:54.186    Server  MetaTester 5 stopped


Из логов следует, что Тестер попытался подключиться к Агенту в 01:52, а сам Агент (Server) остановился только в 01:54. Отсюда невозможность подключения и зависание. Давний баг, но сейчас хоть стала понятна причина.

Результаты профилировщика на исторических данных


Штатная OrderSend треть времени занимает. За счет чего такие неприятные показатели?