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 перевести.
На сервере сверять пришедший номер со всеми строками в файле CSV, и если есть совпадение, то с этой строки файла посылать в ответе в терминал сообщение. Осталось прочесть ответ от сервера в терминале, и вывести его на график.
Вообще, такие вещи проще реализовывать на MySQL, чем на файле.
Спасибо за ответ, Виталий!
Три дня пытаюсь разобраться, но пока ни фига не выходит(я пока новичок - в начале пути)...
Можно чуть подробней расписать? С каким либо примером...
Хотел добиться, чтобы Луч рисовал линию от текущей цены - до конца дня к концу уровня(23:59)(white2), но он рисует по времени до конца дня(как и нужно), но не на уровне (white2), а уходит глубоко вниз к границе графика.
Причем подсовываю ему любой из уровней (red1, red2 и т.д.), но все равно Луч уходит или вверх в бесконечность или вниз. И правильно ли я написал, чтобы начало Луча всегда начиналось с High[0] т.е. при новой свече начало перемещается на новую свечу(т.е. следует за ценой) или он отрисовывает Луч только один раз? Уровни получаются из CSV. Помогите плз...
Хотел добиться, чтобы Луч рисовал линию от текущей цены - до конца дня к концу уровня(23:59)(white2), но он рисует по времени до конца дня(как и нужно), но не на уровне (white2), а уходит глубоко вниз к границе графика.
Причем подсовываю ему любой из уровней (red1, red2 и т.д.), но все равно Луч уходит или вверх в бесконечность или вниз. Уровни получаются из CSV. Помогите плз...
Выясните (уточните проверьте ) значение white2 с помощью Alert или Print.
STARIJ: Выясните (уточните проверьте ) значение white2 с помощью Alert или Print.
Выясняю при помощи Alert сразу пишет "EURUSD Error FileOpen() for write" и пропадают все уровни текущего дня... вчерашние и все прошлые остаются... во как.. Луч на месте начинается там где надо и уходит на уровень вчерашнего white2, но не в конец дня, а сегодня вертикально вниз визуально видно что останавливается на уровне вчерашнего white2.
MosheDayan: Выясняю при помощи 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.
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 ?
объясните, пожаалуйста...