Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
22.01.2025, 11:23:51
Начало Помощь Поиск Войти Регистрация
Новости: ООО «Скрин маркет системз», правообладатель программы «Система брокерского обслуживания «TRANSAQ» официально заявляет, что не ведет никакой деятельности в мессенджерах или социальных сетях. 
Подробности на нашем сайте  WWW.TRANSAQ.RU.

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Объект не является массивом « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: Объект не является массивом  (Прочитано 5076 раз)
bugem
Full Member
***
Сообщений: 105



Просмотр профиля Email
« : 12.09.2012, 10:45:13 »

Построен вот такой вот индикатор:

Code: [Select]
extern FastPrd = 7;
extern SlowPrd = 65;
extern StdDevPrd = 20;
extern Koeff = 5;
//==============================================================
var ravi = 0; var raviSum = 0; var raviTmp = 0; var raviStd = 0;
//==============================================================
function init()
{
ravi = new_object("linebuffer");

setInitCandles(SlowPrd);
                setBounds(0, SlowPrd, 0);
setBounds(1, (SlowPrd + 1), 0);
}
//==============================================================
function calc()
{
var fastSMA = MovAvg(ind_sma, FastPrd, pt_close);
var slowSMA = MovAvg(ind_sma, SlowPrd, pt_close);
line[0] = 100 * (fastSMA - slowSMA) / (slowSMA + 0.0000000001);

ravi[0] = line[0] - line[0][-1];
raviSum += ravi[0];
raviSum -= ravi[-StdDevPrd];
var raviAvg = raviSum / StdDevPrd;
raviTmp += ravi[0] - raviAvg;
raviTmp = abs(raviTmp - (ravi[-StdDevPrd] - raviAvg));
raviStd = sqrt(raviTmp / StdDevPrd);
line[1] = Koeff * raviStd;
}

регулярно вылетает сообщение : Объект не является массивом. (object::operator[])
ругается на строку ravi[0] = line[0] - line[0][-1];
но ravi то объявлен как объект "linebuffer"
в чем же дело?

и еще, в окне вывода ATF указывалась бы переменная которая вызывает ошибку
спасибо.
« Последнее редактирование: 12.09.2012, 14:55:55 от bugem » Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #1 : 27.09.2012, 10:56:21 »

Честно говоря не понятно в чем ситуация. "Объект не является массивом. (object::operator[])" - это на самом деле наверное не очень удачная формулировка, которая выскакивает каждый раз, когда встречается конструкция "x[n]=" при условии что x не является объектом вообще, но нам воспроизвести эту ситуацию не удалось.

А ситуация проявляет себя в какой-то конкретный момент, никаких закономерностей нет? Может быть это как-то воспроизводится? У вас один индикатор работает, или их несколько?
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #2 : 27.09.2012, 10:58:41 »

В качестве эксперимента попробуйте заменить var ravi на static ravi. Влиять в данном случае это не должно, но это пока единственная зацепка, какую я вижу.
Записан
bugem
Full Member
***
Сообщений: 105



Просмотр профиля Email
« Ответ #3 : 27.09.2012, 21:06:52 »

Переменную поменяю, посмотрю.
Да, индикатор применяется одновременно на нескольких графиках. Какой именно не понятно. Закономерности пока не заметил, но подозреваю, что ошибка возникает когда не хватает истории и, возможно, line[0][-1] возвращает недопустимое (предполагаю "не числовое") значение, которое не принимает объект "linebuffer".
Стратегия там ну очень, очень не спешная по этому особо пока не напрягает, но хотелось бы победить :)
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #4 : 28.09.2012, 12:53:00 »

Отсутствие истории не должно влиять. Недопустимое значение может быть преобразовано к нулю в linebuffer, так что это не беда. Ну в общем пишите если будет еще себя как-то проявлять.
Записан
bugem
Full Member
***
Сообщений: 105



Просмотр профиля Email
« Ответ #5 : 28.09.2012, 15:32:27 »

Заменил var на static. Четыре часа наблюдений показали "полет нормальный". Спасибо.
Записан
Страниц: [1] Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: Объект не является массивом « предыдущая тема следующая тема »
Перейти в:  


Войти

Powered by MySQL Powered by PHP Powered by SMF 2.0.10 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS!