Anzhelika Belokur написал: Просто попробуйте установить программу заново не в Program Files, а в диск С.
Если проблема все еще актуальна, просьба прислать архив терминала. Для этого выполните следующие действия:
1. Откройте таблицу "Текущие торги". 2. Закройте программу QUIK. 3. Убедитесь, что QUIK исчез из списка процессов в диспетчере задач Windows. 4. Сделайте копию папки с QUIK. 5. Удалите из копии папки с QUIK файлы ключей pubring.txk и secring.txk, если они там присутствуют. 6. Сделайте архив копии папки с QUIK и пришлите его нам в почту на quiksupport@arqatech.com (или выложите на любой удобный для Вас файлообменник, а нам пришлите ссылку на скачивание).
После формирования архива просьба перезаказать данные: Выберите пункт меню Система / Заказ данных / Перезаказать данные, включите флажки «Торговые данные текущей сессии» и «Локальные справочники», нажмите на кнопку «Перезаказать». Программа закроется и автоматически запустится. Проверьте наличие Срочного рынка и сообщите нам результат, пожалуйста.
опять глупый ответ ------------------------ Это же QUIK-Junior и демо сервер. ----------------------- вы все можете скачать с Вашего сервера. ---------------------- Там есть инструкция как установить. -------------------------------------------------------------------------- Вопросы глупыми не бывают, бывают глупые ответы.
Полагаю, что отсутствие класса фьючерсов на демо связано с тем, что Вы забыли установить входящий остаток по средствам на демо счете фьючерсов. --------------------- Потому и класс нет. ====================== Может в консерватории надо что-то исправить.
nikolz написал: это равносильно вопросу "У вас windows установлена?"
Обычный вопрос, у некоторых установлена ОС Linux.
Вы не ответили на мой вопрос. повторяю: Как Вы объясните чтодля класса акций и валюты не надо (все работает) предложенных вами танцев с бубном, а для фьючерсов надо(класса вообще нет)? ================================================ Вопросы глупыми не бывают, бывают глупые ответы.
Права на Срочный рынок имеются. У Вас папка с программой в Program Files установлена? Если да, перенесите папку с программой на любой диск, например, на диск С и запустите от имени администратора info.exe.
прикольно, У меня каталог квик-демо установлен год назад. За прошедшее время я раз десять пере подключался к демо серверу. ------------------------------- Т е год все работало , а сейчас надо переносить на другой диск и менять права? --------------------------------- Попробуйте объяснит Ваше стремное предложение. ----------------- Почему класс акции и валюты есть а класс фьючерсов исчезает? Как это связано с диском и правами запуска. --------------------- Сейчас запустил - есть лишь класс акций. ================================================ Вопросы глупыми не бывают, бывают глупые ответы. ------------ Примечание: Мой вам совет. Никогда не спрашивайте это: У Вас папка с программой в Program Files установлена? это равносильно вопросу "У вас windiws установлена?"
Log=io.open("D:/test.log","w") --лог файл
tparam={}
function main()
local firm,account,client,x;
while true do
while #tparam>0 do
local t=tparam[1];
local clas=t[1]; local sec=t[2]; w=nil; local z=string.find(clas,'FUT');
for i=0,getNumberOf("client_codes")-1 do
x=getItem("client_codes",i); if x~="" then if string.find(clas,'FUT')==z then client=x; break; end end
end
for i=0,getNumberOf("trade_accounts")-1 do
x=getItem("trade_accounts",i);
if string.find(x.class_codes,clas) and x.status==0 then firm=x.firmid; account=x.trdaccid;break; end
end
Log:write("clas="..clas..",sec="..sec..",firm="..firm..",account="..account..",client="..client.."\n");Log:flush();
local t1=getDepo(client,firm,sec,account);
Log:write("type="..type(t1).."\n");Log:flush();
table.sremove(tparam, 1)
end
sleep(1);
end
end
--------------
function OnInit(pfile) sleep(1000); end
-------------------
function OnParam(c,s) table.sinsert(tparam,{c,s}); end
nikolz написал Вы экспортируйте своим сервером в свою прогу или сервером Excel в таблицу Excel. ------------------ У меня свой сервер для скрипта луа, вроде нет проблем.
А возможно из луа экспортировать таблицу "Купить/Продать", которая в Квике составляется из таблицы "Клиентский портфель" ?
в луа можно получить это : getPortfolioInfo -Функция предназначена для получения значений параметров таблицы «Клиентский портфель» , соответствующих идентификатору участника торгов «firmid» и коду клиента и это getBuySellInfo - Функция предназначена для получения параметров таблицы «Купить/Продать».
Quikos_1 написал: Перезапустил Квик - заработало. Что ж за странность такая.
Ранее уже писал на форуме, что есть изъян в работе сервера QUIK (мое субъективное мнение) -------------------------------- Проблема в том, что если запустите терминал рано до начала сессии, то сервер не все загружает , но позже не проверяет корректность начальных данных. спасает лишь перезагрузка терминала, но обязательно надо подождать, чтобы сервер обнаружил потерю соединения и загрузил все сначала. --------------------------- В таких ситуациях можно получить вчерашнюю дату сервера, пропущенные торговые дни ну и т д ------------------------ Не исключаю, что проблема связана с брокером ( слабой тех поддержкой) Но и в этом случае - -это недоработка разработчиков. Надо учитывать низкую квалификацию не только клиентов но и брокеров. ======================================================================== И – боже вас сохрани – не читайте до обеда сказки про искусственный интеллект у брокеров.
специально для очень занятых разработчиков написал очень простой тест
Код
Log=io.open("D:/test.log","w") --лог файл
------------------------
tparam={}
function main()
local firm,account,client,x;
while true do
while #tparam>0 do
local t=tparam[1]; local clas=t[1]; local sec=t[2]; w=nil;
local z=string.find(clas,'FUT');
for i=0,getNumberOf("client_codes")-1 do
x=getItem("client_codes",i);
if e~="" then local z1=string.find(clas,'FUT');if z1==z2 then client=x; break; end end
end
--------------------
for i=0,getNumberOf("trade_accounts")-1 do
x=getItem("trade_accounts",i);
if string.find(x.class_codes,clas) and x.status==0 then firm=x.firmid; account=x.trdaccid;break; end
end
----------------------------------
Log:write("clas="..clas..",sec="..sec..",firm="..firm..",account="..account..",client="..client.."\n");Log:flush();
local t1=getDepo(client,firm,sec,account);
Log:write("type="..type(t1).."\n");Log:flush();
table.sremove(tparam, 1)
end
sleep(1);
end
end
--------------
function OnInit(pfile) sleep(1000); end
-------------------
function OnParam(c,s) table.sinsert(tparam,{c,s}); end
условия тестирования такие же как указаны выше. В таблице позиций лишь SBER с нулями ---------------- если в тесте закомментировать строку local t1=getDepo(client,firm,sec,account); то работает без проблем ------------------ с активной строкой в лог файле получаем:
nikolz написал Вы экспортируйте своим сервером в свою прогу или сервером Excel в таблицу Excel. ------------------ У меня свой сервер для скрипта луа, вроде нет проблем.
А возможно из луа экспортировать таблицу "Купить/Продать", которая в Квике составляется из таблицы "Клиентский портфель" ?
в луа можно получить это : getPortfolioInfo -Функция предназначена для получения значений параметров таблицы «Клиентский портфель», соответствующих идентификатору участника торгов «firmid» и коду клиента и это getBuySellInfo - Функция предназначена для получения параметров таблицы «Купить/Продать».
Добрый день, тестирую функции на демо сервере. Сделал лишь старт квика. т е ничего не покупал и не продавал. ----------------- поясняю: колбек OnParam принимает сделки:function OnParam(c,s)
Код
for i=1,#tparam do local t=tparam[i]; if t=="table" then if t[1]==14 and t[3]==s then return end end end
local t={14,c,s}; if #tparam==0 then tparam[1]=t; ESet(event); else table.sinsert(tparam,t); end
end
и загружает clas и sec в таблицу tparam
фунция main в цикле принимает значения из tparam и вызывает функцию getDemo
Код
Log:write("clas="..clas..",sec="..sec..",firm="..firm..",account="..account..",client="..client.."\n");Log:flush();
local t1=getDepo(client,firm,sec,account);
Log:write("type="..type(t1).."\n");Log:flush();
1 строка выводит в лог файл все параметры функции getDemo, которая вызывается во 2-ой строке 3 строка - выводим в лог файл тип возвращенного значения t1 ------------------ В результате получаем следующий кирдык: --------------------- Таблица позиций по инструментам имеет вид: т е в таблице есть лишь SBER c нулевыми значениями ================ А теперь смотрим лог файл
Уточните, настроены ли фильтры в таблице "Текущие торги"? Если да, то какие? А так же поясните подробнее, что значит "пропадает экспорт"? Для наглядности желательно со скриншотами.
Добрый вечер!
Фильтров нет (таблица по умолчанию) В таблице 100 фьючерсов, при начале работы все данные по фьючерсам из таблицы экспортируются, а через некоторое время (бывает минуты, бывает 1 - 2 часа) перестают экспортироваться данные по произвольным инструментам. Данные других фьючерсов передаются. Нет никаких ошибок и зависаний. Сегодня обновился до 10,0,1,18 все тоже самое. Невозможно представить скриншот, странно, что Вы не знаете, что в такой ситуации скриншот бесполезен.
К участникам форума У меня только такое поведение терминала, при выводе данных по DDE ?
Вы экспортируйте своим сервером в свою прогу или сервером Excel в таблицу Excel. ------------------ У меня свой сервер для скрипта луа, вроде нет проблем.
serggio написал: И что еще за проблема вставки картинок из буфера в предыдущем сообщении?
А где Вы прочитали, что это показание часов? Написано -"Интервал" А интервал может быть и 60 минут и 600 минут. ------------------- Трудно быть бестолковым.
VargoR написал: dis_not = true and false or true dis_not = false and false or true дают одинаковые значение true? Ведь должны давать разные.если сделать такКод dis_not = true and true or false dis_not = false and true or false
приоритет логических операций определяется их порядком слева на право. -------------------------- В данных примерах первым исполняется AND потом OR true and false ==false true and true==true ----------------- в итоге имеем dis_not = (true and false) or true=(false or true)=true dis_not = (false and false) or true= true --------------------- dis_not = (true and true) or false=true dis_not = (false and true) or false =(false or false)=false ----------------- в результат всех операторов : true true true false ================= Резюме: Автор не знает булевой алгебры. читайте учебники.
nikolz написал: Сессия по фьючерсам начинается с момента клиринга.Т е торги сегодня по фьючерсам начались в пятницу вечером.
Отсортировал по дате, вчерашняя вечерняя сессия выглядит в ТОС как аукцион открытия, но расписание MOEX показывает старт торгов срочного рынка в 9:00 https://www.moex.com/ru/derivatives/ Наверное клиринги вечерней и следующей уиренней/дневной сессии совмещены и проводятся сегодня днём. Других причин включать вчерашние сделки в ТОС за сегодня пока не вижу.
Вы не придумывайте, а ищите в документах биржи. я этот вопрос выяснял лет десят назад. с тех пор ничего не изменилось.
D7DSk написал: После перезагрузки принципиальных изменений нет, стык между текущей сессией и прошлой немного сместился от текущего времени сервера (скриншот 7)
Все правильно. Сессия по фьючерсам начинается с момента клиринга. Т е торги сегодня по фьючерсам начались в пятницу вечером.
перезапустите квик. чтобы так не получалось надо запускать квик не раньше, чем за 10 минут до начала торгов особенно в понедельник. Такая фишка у сбербанка.
D7DSk написал: На разных интервалах (перебрал все доступные) Quik показывает графики только за сегодня, а на другой вкладке такой проблемы нет - масштабирует по оси времени.
vladindre написал: При отсутствии класса Фьючерсы пропали мои ранее выставленные стоп-заявки. Сейчас я нахожусь на откатанной версии и все в порядке. Для Вашего предложения мне надо опять все заломать , а потом вернутся назад. Уж поверьте мне на слово. Пока я чувствую себя комфортно. Лучше подожду следующие 2-3 обновления и потом решусь опять обновиться.(может быть)
Бесплатный совет. вы можете не обновлять, а установить в новой папке. И запустить и настроить . старая версия тоже будет рабочая. Запускать можно лишь одну. ------------------- Но ставить версию 9 не рекомендую Ставил три раза и возвращался на 8.7. жду 10-ю.
Hius74 написал: Я использую собственный DDE сервер. Если я вводу в поле DDE сервера отличное от excel, то QUIK не дает выводить во внешние системы.
имя сервера определяется в вашей программе. если оно не excel, то предположу, что у вас ошибка в программе и ваш сервер либо не регистрируется ОС, либо не работает колбек функция. --------------- поставьте контрольную печать в функции открытия сервера и в колбеке.
Павел Bosco написал: Уф, после долгого отдыха доделал таки тест кейс, который доказывает что действительно в Quik есть мьютекс на lua_lock/lua_unlock. Моя ошибка в прошлый раз было предположение что sleep в Quik Lua - это функция на lua. Вот и нет, это cfunction. Поэтому вызов её с любым большим значением из нескольких потоков к блокировке не приводит. Если я поменял тест: сделал два потока в C++, которые обращались в CustomSleep на Quik Lua, одновременно. А в CustomSleep я просто сделал очень большой цикл. В итоге поток Б ждал возврата потока А из lua CustomSleep. Блокировка налицо, хотя в моем C и моем Lua её нет.
Итак схема работы как я её сейчас вижу, ещё раз: Quik Lua обычный работает в однопоточном режиме (+ колбэки), под единой блокировкой. При обращении из lua в C функцию (любая ваша собственная библиотека dll), блокировка снимается, при возвращении оттуда - снова возвращается блокировка. Если же из C функции идет вызов другой функции по pcall например, то при обращении в Lua блокировка тоже навешивается, а при возврате - снимается. всё просходит попарно. Так же блокировки вешаются при обращении к любым функциям которые меняют стек, типа lua_pop. Но не к tonumber (о чем тут начался пост), потому что он стек не меняет.
Почему это было важно мне? Хотел понимать, где могут блокироваться потоки из C, которые конкуретно, но под моей собственной критической секцией обращаются в Lua. Возможно, в моем случае эта самая дополнительная критическая секция не очень-то и нужна, или надо очень аккуратно выстраивать работу, чтобы не пересекать блокировки в Quik Lua и мои собственные.
На форуме я выкладывал результаты теста исполнения обращения к общему глобальному стеку и там все предельно ясно. ------------------------ По моим тестам ситуация следующая. ------------------------- Функция main запускается в отдельном потоке, но имеет общий глобальный стек с основным потоком, в котором запускаются колбеки. Поэтому, если Вы обращаетесь к глобальным переменным , то обращение к этим переменным реализуется через критические секции и следовательно майн и основной поток будут ждать друг друга т е буде блокировка. -------------------- Локальные стеки у луа машин майн и основного потока разные и следовательно синхронизация потоков при обращении к ним не требуется и нет блокировки. ==================
Кроме того, уже писал на форуме, что тестил работу пула потоков. ------------------ Тест состоял в следующем. Новый поток активировался для нового колбека или для колбека активировался новый поток, если предыдущий вызов колбека еще не был полностью обработан потоком. --------------- В тесте при совершении сделки по инструменту выставлялась заявка и после ее регистрации она снималась. ----------------- В итоге тест работал 4 часа по 200 инструментам выставил и снял более 200 тысяч заявок. в процессе выполнения активировалось максимум 12 потоков (1 раз) , наиболее часто активировалось 5 потоков. ================= И все работало без проблем и ошибок. ===============
вот функция для расчета и расчет для 3-х значений:
Код
function EMA(y,x,N,i) if i==1 then return x; else return (y*(N-1)+2*x)/(N+1); end
----------
--Вот есть три цены закрытия:
local N=3;
x=193.6 i=1
y=EMA(y,x,N,i) print(y)
x=193.98 i=2
y=EMA(y,x,N,i) print(y)
x=200.16 i=3
y=EMA(y,x,N,i) print(y)
Очевидно у Вас нет средств для торговли на валютном рынке, поэтому Вам этот класс не подключили. В любом случае, свяжитесь с брокером и узнайте что Вы должны сделать чтобы этот класс Вам подключили. ------------------ класс: МБ Валюта: ETC(металлы)
и еще... При обработке сигналов есть такое понятия как окно наблюдения. так вот на приведенном вами графике сигнал слева от первого видимого значения свечи считается равным нулю как и сигнал справа от текущего видимого значения т е мы предполагаем что применяем прямоугольное окно. в итоге у вас не два отсчета для расчета третьего, а бесконечное множество отсчетов слева от третьего, но лишь два из них не равны нулю. поэтому можно считать что у вас всегда отсчетов столько, сколько желаете, т е в вашем случае их N+1 даже для первой свечи на графике. ------------------- читайте учебники.
nikolz написал: от периода зависит весовой коэффициент "альфа" читайте учебники
От периода так же зависит, то с какой свечи от начала будет произведен расчет. Можете читать учебники или не читать - это ни как не изменит данный факт.
Рассказываю начальные понятия. ------------------- В цифровых фильтрах, как и в аналоговых есть понятие - "переходной процесс" Т е это процесс установления на выходе EMA сигнала равного входному при условии что входной сигнал постоянный. время за которое сигнал на выходе станет равный входному - это время запаздывания сигнала или время переходного процесса. --------------------- Это время зависит от периода т е от N но не равно ему. ------------------- Вы спросили про расчет значения на выходе EMA, а не про время запаздывания (установления) сигнала. =============== поэтому повторяю еще ...надцатый раз Для расчета достаточно одного значения на входе и предыдущего значения на выходе. Т е число отсчетов для расчета не зависит от периода. ===================== От периода зависит время запаздывания сигнала на выходе. Время запаздывания больше чем период. -------------------- Точно равенство сигнала на выходе сигналу на входе будет в бесконечности. ------------------------- Фильтр EMA - это фильтр с бесконечной импульсной характеристикой. В аналоговом варианте - это RC цепочка. Период - это постоянная времени этой цепи. Выходной сигнал EMA - это эквивалент заряда емкости через резистор. ------------------ Если Вы подадите на вход EMA постоянный уровень например 100, то на выходе сигнал будет изменятся от 0 до 100, но 100 будет лишь в бесконечности.
Вы увидите, что там лишь 3 значения - текущий входной предыдущий входной и предыдущий выходной.
Неправильно. ------------------------ Для расчета RSI и EMA для третьей с начала свечи с периодом 3, нужно кол-во свечей равное: period + 1, то есть в данном случае для расчета нужны 4 свечи с указанным периодом.
Если есть желание разобраться в математике обработки сигналов, то для начала почитайте учебник, чтобы иметь хотя бы начальные знания по цифровой обработке сигналов. -------------------- Например, можно почитать это: http://www.pselab.ru/Books/Gold_Rader_1973.pdf
nikolz написал: НЕправильно ------------------- В цифровой обработке сигналов эти индикаторы называются БИХ фильтрами. Новое значение таких индикаторов рассчитывается на основе предыдущего значения и приращений значений на входе. Так как это простейшие фильтры ,то для их расчета достаточно приращения текущего значения относительно предыдущего. Таким образом, необходимое для расчета число отсчетов на входе не зависит от периода.
Что именно "Неправильно" ?
Вот есть три цены закрытия:
193,6
193,98
200,16
Рассчитайте "Правильно" значение EMA для третьей свечи с периодом 3.
мне лень считать. возьмите формулу и посмотрите какие значение туда ставить. Вы увидите, что там лишь 3 значения - текущий входной предыдущий входной и предыдущий выходной. т е два входных отсчета. если непонятно, то покажите свой расчет. Скажу, где ошибка.
НЕправильно ------------------- В цифровой обработке сигналов эти индикаторы называются БИХ фильтрами. Новое значение таких индикаторов рассчитывается на основе предыдущего значения и приращений значений на входе. Так как это простейшие фильтры ,то для их расчета достаточно приращения текущего значения относительно предыдущего. Таким образом, необходимое для расчета число отсчетов на входе не зависит от периода.
function CntTradesSellPosition (zCLASSCODE,zSECCODE)
cnt = 0
local TableName = 'trades'
local rows_total = getNumberOf (TableName)
for r = rows_total - 1 , 0 , - 1 do
local table_row = getItem (TableName,r)
--message(tostring(table_row.flags));stop()
if table_row.class_code = = zCLASSCODE and table_row.sec_code = = zSECCODE and table_row.flags = = 36 then -- сделка продажа
cnt = cnt + 1
end
end
return cnt
end
Пишу как самоучка, но мне как-то сложно (невозможно) вытаскивать из битовых флагов эти нужные значения, которые там закодированы в двоичной системе. В частности мне нужно определить только тип заявки ордера Buy или Sell.
Я так и не нашёл нигде пример алгоритма получения этих битовых значений, поэтому беру 10-тичные числа, но это кривовато, ибо по причине изменения других свойств и числа будут другие. Вот я методом научного тыка определил коды для продаж и второй флаг (бит) принимает разные значения: 64 = 1000000 36 = 100100 28 = 11100 1048604 = 100000000000000011100 - Продажа от стоплосса
Прошу, измените мой код, чтобы он нормально обрабатывал эти битовые флаги.
В документации в скобках указано значение в 16 формате для каждого бита (до 8 это тоже самое что и в 10 формате) если надо несколько бит то складывайте эти значения Флаги для таблиц «Заявки», «Заявки на внебиржевые сделки»
Флаг установлен
Значение
бит 0 (0x1)
Заявка активна, иначе – не активна
бит 1 (0x2)
Заявка снята. Если флаг не установлен и значение бита «0» равно «0», то заявка исполнена
бит 2 (0x4)
Заявка на продажу, иначе – на покупку
бит 3 (0x8)
Заявка лимитированная, иначе – рыночная
бит 4 (0x10)
Исполнить заявку по разным ценам
бит 5 (0x20)
Исполнить заявку немедленно или снять (FILL OR KILL)
бит 6 (0x40)
Заявка маркет-мейкера. Для адресных заявок – заявка отправлена контрагенту
бит 7 (0x80)
Скрытая заявка
бит 8 (0x100)
Снять остаток
бит 9 (0x200)
Айсберг-заявка
бит 10 (0x400)
Заявка отклонена торговой системой
бит 20 (0x100000)
Поле «linkedorder» заполняется номером стоп-заявки
поясняю, для тех кто пишет на "чистом" луа. --------------- в исходном примере операторы типа _G.QTABLE_CLOSE заменил на QTABLE_CLOSE так как исходная запись это - масло масленое _G - это глобальная таблица а QTABLE_CLOSE - это функция в ней поэтому _G.QTABLE_CLOSE это тоже самое , что просто QTABLE_CLOSE ------------------ такая запись используется в создании модулей , а здесь не модуль, поэтому смысла в ней нет.
если взять пример выше и убрать последний параметр в функции SetCell и Highlight , то все обновляется. Может пример другой кто-нибудь напишет?
Код
local sec_code = 'SBER'
local class_code = 'QJSIM'
local SeaGreen = 12713921 -- RGB(193, 255, 193) нежно-зеленый
local RosyBrown = 12698111 -- RGB(255, 193, 193) нежно-розовый
local getParamEx = getParamEx
local GetCell = GetCell
local Highlight = Highlight
local SetCell = SetCell
local function get_price()
if flag then
local last_price = tonumber(getParamEx(class_code, sec_code, 'LAST').param_value) or 0
local lp = GetCell(t_id, 1, 0).value or last_price
SetCell(t_id, 1, 0, tostring(last_price))--, last_price)
-- if lp < last_price then Highlight(t_id, 1, 0, SeaGreen, 0, 1000)
-- elseif lp > last_price then Highlight(t_id, 1, 0, RosyBrown, 0, 1000)
-- end
end
flag=false
end
function OnParam(class, sec)
if t_id and sec == sec_code and class == class_code then flag=true end
end
function CreateTable()
t_id =AllocTable()
AddColumn(t_id, 0, "price", true, QTABLE_DOUBLE_TYPE, 15)
CreateWindow(t_id)
SetWindowPos(t_id, 90, 120, 170, 100)
InsertRow(t_id, 1)
InsertRow(t_id, 2)
end
local function Animate(sym,maxSym)
if sym and maxSym>string.len(sym) then sym=sym..'|' else sym='|' end
return sym
end
function event_callback(_, msg)
if (msg == _G.QTABLE_CLOSE) then
isRun = false
end
end
function OnInit()
CreateTable()
SetTableNotificationCallback(t_id, event_callback)
flag=true
get_price()
end
function main()
ds = CreateDataSource(class_code, sec_code, 1)
isRun = ds ~= nil
if ds then
ds:SetEmptyCallback()
end
while isRun and ds do
get_price();
sym=Animate(sym,20)
SetCell(t_id, 2, 0, sym, 0)
sleep(100)
end
end
у SetCell 5 параметров ---------------------------------------1 ---------------2---------------3----------------4-----------------5----------- BOOLEAN SetCell(NUMBER t_id, NUMBER key, NUMBER code, STRING text, NUMBER value) если оставить 3 ,то что тогда будет обновлять ячейку? ---------------- Но спорящим видимо один ... продолжайте =======================