MetaTrader 4. Build 171. - страница 2

 
При нанесении текста на график фиксируются две кнопки ''A''(текст) и ''T''(текстовая метка) - выводится текст . При нанесении лейбла кнопка ''T'' не фиксируется , но лейбл выводится . Билд 171
 
При нанесении текста на график фиксируются две кнопки ''A''(текст) и ''T''(текстовая метка) - выводится текст . При нанесении лейбла кнопка ''T'' не фиксируется , но лейбл выводится . Билд 171

спасибо. исправили
 
Пытался коментируя фрагменты кода найти где утечка (если это утечка - ВМ - 100М за два часа работы).
Обнаружил глюк.

Вот такой фрагмент кода:
int newBar()
{
   Log(1,"NewBar "+SID);
   Log(1,"End NewBar "+SID);
}


newBar вызывается из другой функции находящейся в библиотеке, которая подключается инклюдом

#include <Utils.mqh>


Все работает (ВМ утекает).

Если закоментировать содержимое функции:

int newBar()
{
//   Log(1,"NewBar "+SID);
//   Log(1,"End NewBar "+SID);
}


то в логе вылазит ошибка типа

2005.05.31 14:10:17	ASCTrend Exp GBPUSD,Daily: wrong function pointer 9924 (totalcode is 9924)
2005.05.31 14:10:17	ASCTrend Exp EURJPY,Daily: wrong function pointer 9924 (totalcode is 9924)
2005.05.31 14:10:16	ASCTrend Exp EURUSD,Daily: wrong function pointer 9924 (totalcode is 9924)
2005.05.31 14:10:15	ASCTrend Exp GBPCHF,Daily: wrong function pointer 9924 (totalcode is 9924)
2005.05.31 14:10:15	ASCTrend Exp EURUSD,Daily: wrong function pointer 9924 (totalcode is 9924)
2005.05.31 14:10:15	ASCTrend Exp EURUSD,Daily: wrong function pointer 9924 (totalcode is 9924)


(ВМ не смотрел, наверное так же утекает)

 
Пытался коментируя фрагменты кода найти где утечка (если это утечка - ВМ - 100М за два часа работы).
Обнаружил глюк.

Вот такой фрагмент кода:
int newBar()
{
   Log(1,"NewBar "+SID);
   Log(1,"End NewBar "+SID);
}


newBar вызывается из другой функции находящейся в библиотеке, которая подключается инклюдом

#include <Utils.mqh>


Все работает (ВМ утекает).

Если закоментировать содержимое функции:

int newBar()
{
//   Log(1,"NewBar "+SID);
//   Log(1,"End NewBar "+SID);
}


то в логе вылазит ошибка типа

2005.05.31 14:10:17	ASCTrend Exp GBPUSD,Daily: wrong function pointer 9924 (totalcode is 9924)
2005.05.31 14:10:17	ASCTrend Exp EURJPY,Daily: wrong function pointer 9924 (totalcode is 9924)
2005.05.31 14:10:16	ASCTrend Exp EURUSD,Daily: wrong function pointer 9924 (totalcode is 9924)
2005.05.31 14:10:15	ASCTrend Exp GBPCHF,Daily: wrong function pointer 9924 (totalcode is 9924)
2005.05.31 14:10:15	ASCTrend Exp EURUSD,Daily: wrong function pointer 9924 (totalcode is 9924)
2005.05.31 14:10:15	ASCTrend Exp EURUSD,Daily: wrong function pointer 9924 (totalcode is 9924)


(ВМ не смотрел, наверное так же утекает)


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

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

ВМ кстати уже 161М (3 часа работы)
 
Про утечку.

Утечка начинается при использовании в эксперте хотя бы одной функции
   BuySignal   = iCustom(NULL,0,"ASCTrend Ind",3,0,0,0) > 0;


Причем скорость утечки независит от числа вызовов этой функции (у меня 4).

Если эти функции закоментировать,
утечка прекращается.

 
Про утечку.

Утечка начинается при использовании в эксперте хотя бы одной функции
   BuySignal   = iCustom(NULL,0,"ASCTrend Ind",3,0,0,0) > 0;


Причем скорость утечки независит от числа вызовов этой функции (у меня 4).

Если эти функции закоментировать,
утечка прекращается.


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

ОК.
Пусть это теперь так называется :)

Есть небольшая проблема.
Если меняем таймфрейм, то эксперты (и наверное индикатоы) выполняют повторную инициализацию, и это (ИМХО) правильно.

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

В результате возникают ошибки в работе экспертов.
Типа таких:
2005.06.01 12:52:48	ASCTrend Exp #MSFT,Daily: unknown ticket 275704 for OrderModify function
2005.06.01 12:52:42	ASCTrend Exp #INTC,Daily: unknown ticket 275702 for OrderModify function
2005.06.01 12:52:31	ASCTrend Exp #IBM,Daily: unknown ticket 275652 for OrderModify function
2005.06.01 12:52:21	ASCTrend Exp #XOM,Daily: unknown ticket 275667 for OrderModify function
2005.06.01 12:52:10	ASCTrend Exp #QQQ,Daily: unknown ticket 275705 for OrderModify function


Причина ошибки понятна.
Эксперт в момент переключения на предыдущем аккаунте просматривал список ордеров.
После переключения на другой аккаунт он продолжал работать считая что аккаунт не сменился.
Эта ошибка вылезла из-за того, что в начале обработки я запоминаю тикет и дальше выборка идет по нему. Если выбирать ордера по позиции, то будут другие ошибки или просто некорректные действия эксперта.

Как правильно разрулить эту ситуацию?

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

ОК.
Пусть это теперь так называется :)

утечкой памяти (memory leak) называется "убитая" ссылка на область памяти. так как ссылка убита, то нет никакой возможности освободить память. например:
char *ref;
...
ref=new char[128];
ref=new char[256];


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

 
Эксперт в момент переключения на предыдущем аккаунте просматривал список ордеров.
После переключения на другой аккаунт он продолжал работать считая что аккаунт не сменился.
Эта ошибка вылезла из-за того, что в начале обработки я запоминаю тикет и дальше выборка идет по нему. Если выбирать ордера по позиции, то будут другие ошибки или просто некорректные действия эксперта.

Как правильно разрулить эту ситуацию?

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