Индикатор вызывается с неправильным набором параметров
Да, у индикатора довольно много параметров, а есть возможность точно удостоверится, что iCustom заполняет память? Заполнение памяти происходит где-то за 2 часа, значит тестирование пустого iCustom и добавляя по одному параметру затянет на долго. Какие нибудь советы? П.С. Само собой и пройдусь визуально по всем параметрам.
TheXpert: в логах будет создание множества индикаторов
Да, я знаю о чем вы, такое и в тестере стратегий видел когда много индикаторов после теста появляется. Но здесь в тестере стратегий все отлично работает. А в реале в логах все правильно отображается.
Да, у индикатора довольно много параметров, а есть возможность точно удостоверится, что iCustom заполняет память? Заполнение памяти происходит где-то за 2 часа, значит тестирование пустого iCustom и добавляя по одному параметру затянет на долго. Какие нибудь советы? П.С. Само собой и пройдусь визуально по всем параметрам.
Оставьте вызов без параметров (тогда они возьмутся умолчательные), и понаблюдайте. Если утечка исчезнет, значит дело именно в этом.
С определенного момента позиции исчезают. Эквити и баланс равны N. В истории торгов о позициях ни слова.
Перезагрузки Терминала не помогают.
Проходит несколько часов, в истории торгов появляются позиции (закрылись по определенному условию). Баланс и эквити скорректированы сооответствующим образом.
Это очень редкая ситуация, вызванная стечением многих обстоятельств. Но она может возникнуть, пусть и с вероятностью около нуля.
Предлагаю всем боевым роботам в обязательном порядке поместть механизм идентификации таких ситуаций.
Для этого нужно запоминать тикеты открытых ордеров и в случае их исчезновения проверять их наличие в истории торгов. Если нет в истории торгов, Алертим!
Функция такой защиты.
#define TICKET_TYPE int// Получаем все текущие тикеты.int GetTickets( TICKET_TYPE &Tickets[] )
{
int Amount = ArraySize(Tickets);
for (int i = ArrayResize(Tickets, Amount + OrdersTotal()) - Amount - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
Tickets[Amount++] = OrderTicket();
return(ArrayResize(Tickets, Amount));
}
// Проверяет наличие потерянных тикетов.int CheckTickets( void )
{
staticconstbool IsTester = MQLInfoInteger(MQL_TESTER);
int Amount = 0;
if (!IsTester)
{
static TICKET_TYPE Tickets[];
TICKET_TYPE BadTickets[];
for (int i = ArrayResize(BadTickets, ArraySize(Tickets)) - 1; i >= 0; i--)
if (!OrderSelect(Tickets[i], SELECT_BY_TICKET))
{
BadTickets[Amount++] = Tickets[i];
Alert("Ticket " + (string)Tickets[i] + " is not found!");
}
ArrayResize(BadTickets, Amount);
#ifdef __MQL5__ArraySwap(Tickets, BadTickets);
#else // __MQL5__ArrayFree(Tickets);
ArrayCopy(Tickets, BadTickets);
#endif // __MQL5__
GetTickets(Tickets);
}
return(Amount);
}
Индикатор вызывается с неправильным набором параметров
Да, у индикатора довольно много параметров, а есть возможность точно удостоверится, что iCustom заполняет память? Заполнение памяти происходит где-то за 2 часа, значит тестирование пустого iCustom и добавляя по одному параметру затянет на долго. Какие нибудь советы?
П.С. Само собой и пройдусь визуально по всем параметрам.
Да, у индикатора довольно много параметров, а есть возможность точно удостоверится, что iCustom заполняет память?
в логах будет создание множества индикаторов
Да, я знаю о чем вы, такое и в тестере стратегий видел когда много индикаторов после теста появляется. Но здесь в тестере стратегий все отлично работает. А в реале в логах все правильно отображается.
Да, у индикатора довольно много параметров, а есть возможность точно удостоверится, что iCustom заполняет память? Заполнение памяти происходит где-то за 2 часа, значит тестирование пустого iCustom и добавляя по одному параметру затянет на долго. Какие нибудь советы?
П.С. Само собой и пройдусь визуально по всем параметрам.
Оставьте вызов без параметров (тогда они возьмутся умолчательные), и понаблюдайте. Если утечка исчезнет, значит дело именно в этом.
Эксперт жрет память которая понемножку наращивается.
"понемножку" - это сколько?
Может, действительно понемножку, и это - появившаяся с момента запуска история котировок?
"понемножку" - это сколько?
Может, действительно понемножку, и это - появившаяся с момента запуска история котировок?
Запускаю МТ4 с несколькамы ЕА, включаю запись памяти. Там где стрелка показывает там вылет, происходит "not enough memory for EX4 file".
Оставьте вызов без параметров (тогда они возьмутся умолчательные), и понаблюдайте. Если утечка исчезнет, значит дело именно в этом.
Ок, сделаю так.
Запускаю МТ4 с несколькамы ЕА, включаю запись памяти. Там где стрелка показывает там вылет, происходит "not enough memory for EX4 file".
40% от скольки используется?
Растет линейно, похоже на кривой вызов индикатора, да.
40% от скольки используется?
Растет линейно, похоже на кривой вызов индикатора, да.
Похоже что проблема с параметрами. Спасибо!
На MT4 возможна такая ситуация (о причинах говорить не будем):
Это очень редкая ситуация, вызванная стечением многих обстоятельств. Но она может возникнуть, пусть и с вероятностью около нуля.
Предлагаю всем боевым роботам в обязательном порядке поместть механизм идентификации таких ситуаций.
Для этого нужно запоминать тикеты открытых ордеров и в случае их исчезновения проверять их наличие в истории торгов. Если нет в истории торгов, Алертим!
Функция такой защиты.