Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 282
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); Вот здесь пытаюсь уничтожить указатель. }
Как-то не ясно что именно можно здесь уничтожать. Не удивительно что память течет. Что такое указатель? Указатель - это ссылка на адрес памяти, где хранится созданная динамическая переменная. По сути вы вызываете процедуру получения указателя на переменную класса, в процедуре объект класса создается, помещается в память, далее указатель возвращается в функцию получения тиков и.... при выходе из функции уничтожается. Обращаю внимание на то, что уничтожается указатель, а память при этом не очищается! И с каждым новым тиком памяти сжирается все больше и больше! Чтобы обойти этот момент в вашей редакции кода вам прежде всего нужно убрать сокращение и поместить указатель в другую переменную: TickReturn* temptick = returntick(period, 1);// Получаем указатель и помещаем его в переменную int timeis = temptick.curtime; // Получаем нужное значение из объекта по указателю ...... delete temptick; // Уничтожаем указатель и очищаем память
Ну и перед уничтожением указателя было бы правильно проверить его корректность, чтобы избежать ошибки удаления.
Ну а в целом в вашем вопросе я бы не стал заморачиваться с указателями и с классом в частности, ведь по сути задача намного проще и нет необходимости использовать именно класс. Создайте структуру с нужными полями, объявите глобальную переменную с типом этой структуры, сделайте функцию обновления информации в этой структуре на каждом тике и собирайте из нее то, что требуется, так как переменная будет глобальной, то не нужно ее гонять по функциям и указатели не потребуются.
Спасибо, я вспомнил почему на сокращение перешел, переменная не обновляется в циклах (ну очевидно что функция не вызывается) и надо на каждый чих делать новую, а потом убивать. В общем проще returntick на switch перевести.
Посылать на сервер post-запрос с номером счёта
На сервере сверять пришедший номер со всеми строками в файле CSV, и если есть совпадение, то с этой строки файла посылать в ответе в терминал сообщение. Осталось прочесть ответ от сервера в терминале, и вывести его на график.
Вообще, такие вещи проще реализовывать на MySQL, чем на файле.
Спасибо за ответ, Виталий!
Три дня пытаюсь разобраться, но пока ни фига не выходит(я пока новичок - в начале пути)...
Можно чуть подробней расписать? С каким либо примером...
Извините, за мою непонятливость...
И еще один вопрос..
Хотел добиться, чтобы Луч рисовал линию от текущей цены - до конца дня к концу уровня(23:59)(white2), но он рисует по времени до конца дня(как и нужно), но не на уровне (white2), а уходит глубоко вниз к границе графика.
Причем подсовываю ему любой из уровней (red1, red2 и т.д.), но все равно Луч уходит или вверх в бесконечность или вниз. И правильно ли я написал, чтобы начало Луча всегда начиналось с High[0] т.е. при новой свече начало перемещается на новую свечу(т.е. следует за ценой) или он отрисовывает Луч только один раз? Уровни получаются из CSV. Помогите плз...
И еще один вопрос..
Хотел добиться, чтобы Луч рисовал линию от текущей цены - до конца дня к концу уровня(23:59)(white2), но он рисует по времени до конца дня(как и нужно), но не на уровне (white2), а уходит глубоко вниз к границе графика.
Причем подсовываю ему любой из уровней (red1, red2 и т.д.), но все равно Луч уходит или вверх в бесконечность или вниз. Уровни получаются из CSV. Помогите плз...
Выясните (уточните проверьте ) значение white2 с помощью Alert или Print.
Выясняю при помощи Alert сразу пишет "EURUSD Error FileOpen() for write" и пропадают все уровни текущего дня... вчерашние и все прошлые остаются... во как.. Луч на месте начинается там где надо и уходит на уровень вчерашнего white2, но не в конец дня, а сегодня вертикально вниз визуально видно что останавливается на уровне вчерашнего white2.
А зачем Вам обращаться к файлу? у Вас есть значение white2 и перед использованием выведите егос помощью Alert("white2 = ", white2);
А зачем Вам обращаться к файлу? у Вас есть значение white2 и перед использованием выведите егос помощью Alert("white2 = ", white2);
Спасибо за пояснение.... вот что пишет: white2 = 0.0
п.с. это я туплю... white2 = 0.0 пишет для других валютных пар на них в CSV нет уровней. А для EURUSD в CSV есть уровни и Алерт их показывает на вчера (white2 1.1720) на сегодня (white2 1.1810)
Луч начинается там где надо, но уходит на уровень вчерашнего white2 т.е на 1.1720, а надо сегодняшнего на 1.1810, и уходит не в конец дня 23:59, а сегодня вертикально вниз визуально видно что останавливается на уровне вчерашнего white2 т.е на 1.1720.
ччто-тонепонятное
описал функцию
int IsBelow
//>>>>>>>>>>>>>>>>>>>>>
{
Alert("beg IsBelow");
Alert("NextTick=",NextTick);
//---------------------------
//---------------------------
Alert("NextTick=",NextTick);
Alert("end IsBelow");
}
//>>>>>>>>>>>>>>>>>>>>>>>
получил сообщение перед телом фуекции semicolon expexted {
Вопрос какой semicolon expected ?
объясните, пожаалуйста...
ччто-тонепонятное
описал функцию
int IsBelow
//>>>>>>>>>>>>>>>>>>>>>
{
Alert("beg IsBelow");
Alert("NextTick=",NextTick);
//---------------------------
//---------------------------
Alert("NextTick=",NextTick);
Alert("end IsBelow");
}
//>>>>>>>>>>>>>>>>>>>>>>>
получил сообщение перед телом фуекции semicolon expexted {
Вопрос какой semicolon expected ?
объясните, пожаалуйста...
void IsBelow()
ччто-тонепонятное
описал функцию
int IsBelow
//>>>>>>>>>>>>>>>>>>>>>
{
Alert("beg IsBelow");
Alert("NextTick=",NextTick);
//---------------------------
//---------------------------
Alert("NextTick=",NextTick);
Alert("end IsBelow");
}
//>>>>>>>>>>>>>>>>>>>>>>>
получил сообщение перед телом фуекции semicolon expexted {
Вопрос какой semicolon expected ?
объясните, пожаалуйста...