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

Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: При переходе с 1.8 на 1.15 похоже перестал работать file.close() « предыдущая тема следующая тема »
Страниц: [1] 2 3 Печать
Автор Тема: При переходе с 1.8 на 1.15 похоже перестал работать file.close()  (Прочитано 18555 раз)
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« : 09.07.2012, 21:46:39 »

Блин, да еще 1.15 сделали в Финами обязательным обновлением... У меня все скрипты перестали работать.  :'( Я xml архивом не пользуюсь, сам с файлами работаю. Открываю файл на чтение в ините, потом закрываю, потом октрываю на wopen и пишу по мере работы скрипта. В частности есть запись в этот файл и в самом конец инита. (В общем все как у вас в тестово м примере на вики "Сохранение данных в файл" + запись в файл в конце инита). В 1.8 все нормально работало.
А теперь похоже file.close() перестало работать. В чем проявляется:
1)  при запуске скрипта - по прежнему скрипт при запуске выполняет инит 2-3 раза (старый глюк, я надеялся в 1.15 исправился. для справки у меня 3 графика с автозапускаемыми скриптами), так вот при чтении из файла с переменными при втором запуске инита (при первом запуске - он мне все  переменные нормально заполняет) мне заполняет переменные пустыми местами. Вывод запись в файл в конце инита не состоялась корректно. Возможно потому, что файл плохо закрылся или "недооткрылся". Проверяем эту гипотезу:
2) пытался это лечить следующим образом (ниже кусок инита):
file.ropen();  // это было в изначальном скрипте
чтение переменных из файла;  // это было в изначальном скрипте
file.close();  // это было в изначальном скрипте
while(file.isopen()) {file_log.writeLn(getFormattedDateTime(getServerTime())+": не успело закрыть");}
file.wopen();  // это было в изначальном скрипте
запись переменных в файл // это было в изначальном скрипте
file.close();
В результате транзак при запуске графики не открывает - там пустые места а в лог - в другой открытый файл  (file_log) пишет "не успело закрыть". я пару минут, пока она мне в файл 100 МБ накатало подождал. В общем не успело оно за 2 минуты файл закрыть...
В общем получается, что файл действительно не закрывается после чтения

Но увы не все так просто. Если закомментарить while - После 3-го запуска инита вызывается (быстрее чем через 2 минуты) onNewCandle , в конце которого тоже стоит сохранение в файл, а в начале (при первом запуске onNewCandle ) file.wopen(). И при этом, правда с глюками (переменные==0 не сохраняет, не смотря на использование as_string(переменная)) сохранение работает.
Т.е. - есть альтернативная гипотеза - при втором/третье вызове инита некорректно работает file.ropen из-за слишком быстрого подряд вызова. Но почему не работает - может потому что file.close(), которое в конце инита не успевает исполниться, или вообще не работает?  ;)
Ибо, если его file.close() из конца инита убрать, т.е. когда file.close() точно не работает - наблюдаются те же эффекты.
И опять же в 1.8 то же выполнение инита 3 раза подряд не мешало корректно работать и открывать файл на чтение, даже несмотря на то, что он был в состоянии "открыт на запись" (file.close() в конце инита не было) перед вторым и третьим запуском инита.

Проверяйте file.close и в любом случае исправляйте тройной вызов инита.
« Последнее редактирование: 10.07.2012, 07:37:36 от ddd323 » Записан
mega_traider
Newbie
*
Сообщений: 21


Просмотр профиля Email
« Ответ #1 : 10.07.2012, 09:03:47 »

Вчера принудительно обновился мой Transaq до:
Transaq 5.05.303.02, rev.51, ATF 1.15

У меня тоже перестали работать мои индикаторы.
Например, в окне вывода ATF пишется ошибка:
Indicator, line 43: Встретился нечисловой параметр в арифметическом выражении
При этом в строчке 43 стоит оператор else{
« Последнее редактирование: 10.07.2012, 09:32:17 от mega_traider » Записан
Андерс
Newbie
*
Сообщений: 45


Просмотр профиля Email
« Ответ #2 : 10.07.2012, 09:36:23 »

   Установил на два компа. На первом всё нормально, на втором те же индикаторы не работают. Windows XP. Позвонил +78002004400 (доб.2222) : 1)обновление принудительное, отката не будет; 2) Когда будут исправления - неизвестно.
   Вот тебе и обновление - за что боролись на то и напоролись...

Ещё косяк: графики в офлайне не открываются.
« Последнее редактирование: 10.07.2012, 09:48:34 от Андерс » Записан
mega_traider
Newbie
*
Сообщений: 21


Просмотр профиля Email
« Ответ #3 : 10.07.2012, 17:23:53 »

Вчера принудительно обновился мой Transaq до:
Transaq 5.05.303.02, rev.51, ATF 1.15

У меня тоже перестали работать мои индикаторы.
Например, в окне вывода ATF пишется ошибка:
Indicator, line 43: Встретился нечисловой параметр в арифметическом выражении
При этом в строчке 43 стоит оператор else{

Частично разобрался в чем дело.
Во-первых. Ошибку показывает не на той строчке, то есть если в логе пишется строка 23, то надо смотреть строку 20, т.е сдвиг на 3 строки почему-то. У меня в коде ошибок нет, это выяснилось в ходе экспериментов.
Во-вторых, перестали работать те индикаторы, в которых имеется конструкция else if, если ее заменить на if, то работает, но логика немного меняется. Сделал просто в качестве эксперимента, чтобы докопаться до истины. Странно, почему вдруг перестало работать. Косяк явно где-то в софте.


П.С:
А вообще, странная нумерация. Я сначала подумал, что это даунгрейд, поскольку 1.15 меньше, чем 1.8 (1.80). По логике либо ATF должна быть уже 2.0, либо тогда предыдущая версия должна была быть 1.08.
« Последнее редактирование: 10.07.2012, 17:41:56 от mega_traider » Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #4 : 10.07.2012, 19:00:15 »

Quote
else if, если ее заменить на if, то работает, но логика немного меняется. Сделал просто в качестве эксперимента, чтобы докопаться до истины. Странно, почему вдруг перестало работать. Косяк явно где-то в софте.
Можете привести конкретный пример кода, где конструкция else if не работает?

Quote
П.С:
А вообще, странная нумерация. Я сначала подумал, что это даунгрейд, поскольку 1.15 меньше, чем 1.8 (1.80). По логике либо ATF должна быть уже 2.0, либо тогда предыдущая версия должна была быть 1.08.
Да, с этим согласны, недодумали. В дальнейшем исправимся.


Насчет file.close() будем смотреть, пока не ясно.
Записан
mega_traider
Newbie
*
Сообщений: 21


Просмотр профиля Email
« Ответ #5 : 10.07.2012, 20:03:30 »

Quote
else if, если ее заменить на if, то работает, но логика немного меняется. Сделал просто в качестве эксперимента, чтобы докопаться до истины. Странно, почему вдруг перестало работать. Косяк явно где-то в софте.
Можете привести конкретный пример кода, где конструкция else if не работает?
Легко :)
Берем пример из документации (Impulse System) и заменяем второй if на else if. После такой замены скрипт на экран ничего не выводит.
Code: [Select]
#line 0 nodraw
#line 1 nodraw
#line 2 hist
 
extern ma_period = 13;
extern macd1 = 12;
extern macd2 = 26;
extern macd_signal = 9;
 
function init()
{
   setInitCandles(1);
   setBounds(2, 1, 0);
}
 
function calc()
{
    line[0] = MovAvg(ind_ema, ma_period, pt_close);
    line[1] = IndRef("macdhistogram", macd1, macd2, macd_signal,
      ind_ema, ind_ema, ind_ema, pt_close)[0];
 
   if (line[0] > line[0][-1] && line[1] > line[1][-1]) {
      line[2] = 1;
   }
   else if (line[0] < line[0][-1] && line[1] < line[1][-1]) {
      line[2] = -1;
   }
}
« Последнее редактирование: 10.07.2012, 20:07:28 от mega_traider » Записан
Андерс
Newbie
*
Сообщений: 45


Просмотр профиля Email
« Ответ #6 : 11.07.2012, 06:00:04 »

...на втором те же индикаторы не работают.Ещё косяк: графики в офлайне не открываются.
  Ошибку исправил, заменив везде "&&" на "and".
  Графики в офлайне не открываются. Выдаёт сообщение:" Произошла неизвестная ошибка.  Обратитесь в службу тех. поддержки". Обращаюсь.
Записан
alxand
Newbie
*
Сообщений: 6


Просмотр профиля Email
« Ответ #7 : 11.07.2012, 14:45:42 »

mega_traider, спасибо! Сам бы не за что не догнал, что ошибка из-за else if.
Записан
mega_traider
Newbie
*
Сообщений: 21


Просмотр профиля Email
« Ответ #8 : 11.07.2012, 15:26:02 »

mega_traider, спасибо! Сам бы не за что не догнал, что ошибка из-за else if.
Пожалуйста.
Только вот понять бы еще почему. Но здесь уже только разработчики смогут сказать, в чем дело.
Без else if обойтись, конечно, можно, используя if, но придется флаги лепить, чего делать не хочется.
Самая засада в том, что обновление принудительное и использовать предыдущую версию нельзя :(
Ждем ответа от разработчиков.
« Последнее редактирование: 11.07.2012, 15:29:58 от mega_traider » Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #9 : 11.07.2012, 23:38:04 »

Для справки скрипт, который демонстрирует сабжевые глюки (file.close и тройной запуск инита) не содержит ни одного "else if"
Записан
ddd323
Sr. Member
****
Сообщений: 257


Просмотр профиля Email
« Ответ #10 : 13.07.2012, 12:37:36 »

Heller, воспроизвелись сабжевые глюки или тестовые примеры нужны?
Записан
Heller
Разработчики
Hero Member
*****
Сообщений: 1277


Просмотр профиля Email
« Ответ #11 : 18.07.2012, 11:26:56 »

Извиняюсь, что долго отвечал - было много багфиксинга.

В том числе насколько могу судить поправлено все перечисленное в этой ветке, за исключением проблем с оффлайновой работой Интре - эту ошибку не удалось воспроизвести.

Скоро в Финаме будет глобальное обновление клиентов - можно подождать его, либо написать на support@transaq.ru и в индивидуальном порядке попросить новую сборку.
Записан
Shubert
Full Member
***
Сообщений: 109



Просмотр профиля Email
« Ответ #12 : 20.07.2012, 03:05:59 »

Скоро в Финаме будет глобальное обновление клиентов - можно подождать его, либо написать на support@transaq.ru и в индивидуальном порядке попросить новую сборку.

А клиентам "не Финама"  можно надеяться на обновление или оно специфичное и только для Финама?
Записан
falcone
Newbie
*
Сообщений: 17


Просмотр профиля Email
« Ответ #13 : 21.07.2012, 09:03:15 »

... графики в офлайне не открываются.
  Ошибку исправил, удалив папку cache2.
[/quote]
Записан
klimov
Разработчики
Hero Member
*****
Сообщений: 815


Просмотр профиля Email
« Ответ #14 : 23.07.2012, 09:30:58 »

А клиентам "не Финама"  можно надеяться на обновление или оно специфичное и только для Финама?
Нет, данное обновление не является специфичным только для Финам
Напишите мне в личку Вашего брокера
Записан
Страниц: [1] 2 3 Печать 
Transaq  |  СБО "Transaq"  |  Подсистема ATF  |  Topic: При переходе с 1.8 на 1.15 похоже перестал работать file.close() « предыдущая тема следующая тема »
Перейти в:  


Войти

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