Kolossi (Автор тем)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Что изменилось в версии 11.1.1.11?
 
Обнаружилось, что при запуске терминала вместе со скриптом и последующем коннекте функция IsConnected() возвращает значение 1 раньше чем устанавливается фактическая связь с сервером.

в итоге
Код
if isConnected()==1 then
  message("IsConnected "..tostring(Isconnected()))
  csi,error_desc=CreateDataSource("INDX", "IMOEX", INTERVAL_D1)
...
...
пишет в лог:
10:06:35 isConnected 1
10:06:35 csi Source error==>INDX - unknown class code.
10:06:36 Соединение установлено. Предыдущий вход был 07.03.2024 10:05:04 с адреса 92.62.59.149.

Что за ...? В этой части скрипта я уже лет пять ничего не трогал.
Приходится перезапускать скрипт после коннекта.
Обезличенные сделки. Подписка/отписка
 
При возникновении стандартной ситуации смены рабочего тикера для робота довольно просто подписатся/отписатся на/от свечных баз данных.
В случае же с обезличенными сделками ситуация выглядит иначе. Я предположил, что подписка на тиковую базу при помощи CreateDataSource
решает эту проблему.
Тестовый скрипт:
Код
is_run=true
function main()
   ds,error_desc=CreateDataSource("TQBR", "GAZP", INTERVAL_TICK)
   if error_desc~=nil and error_desc~="" then message(" Source error==>" .. error_desc) end
   local nn=0
   while ds:Size()<5 and nn<100 do
      sleep(100) nn=nn+1
   end
   message("Data "..tostring(ds:Size()))
   ds:SetEmptyCallback()

   while is_run do   
      sleep(100)
   end
end

function OnStop(stop_flag)
   ds:Close()
   is_run=false
end
Запускаю скрипт и , о чудо(!), в фильтре Основные_настройки/Программа/Получение_данных/Обезличенные_с­делки появляется Газпром.
Т.е. задача подписки на ленту сделок успешно решена и данные заказаны.
Но...
- ничего не появляется в фильтре таблицы обезличенных сделок
- убрать эту подписку можно только вручную после похода в меню настроек.

В связи с вышеописанным имею два вопроса:

1. Достаточно ли такой подписки для корректной работы в скрипте колбэка OnAllTrade и выборки SearchItems("all_trades", .....) не имея этого инструмента в таблице обезличенных сделок?
2. Как отписаться от этого счастья средствами Qlua при следующей смене иструмента?
Расхождение в таблицах
 
Подскажите по какой причине может быть расхождение позиции по одному из инструментов (в моем случае MAGN) ?
В таблице "Состояние счета" --> "Позиция" --> -240 (T1)   - правильное значение
В таблице "Позиции по инструментам" --> "Текущий остаток" -->  -2400 (Т1)
В указаных таблицах еще четыре инструмента, по ним все ровно
GetParamEx2(). А что, так можно?
 
Наткнулся на то, что иногда значения param_value совсем не соответствуют значениям param_image  
Например:
--
local aaa=getParamEx(p_classcode,"GMKN","EV_SESS_ALLOWED").param_value
local bbb=getParamEx(p_classcode,"LSRG","EV_SESS_ALLOWED").param_value
message(aaa.."/"..bbb)

--> 0.0000/0.0000
--
тоже с param_image  :
--
local aaa=getParamEx(p_classcode,"GMKN","EV_SESS_ALLOWED").param_image
local bbb=getParamEx(p_classcode,"LSRG","EV_SESS_ALLOWED").param_image
message(aaa.."/"..bbb)

--> Да/
--

Это нормально?
Таблицы lua
 
Добрый день!
Подскажите как получить список ключей таблицы
x={one=4, next="a"},
что нибудь типа "one next" ?
Интервалы CreateDataSource
 
Подскажите возможно ли каким-то образом получение данных для свечи с интервалом от 1 мин или более с разбивкой объема сделок V на "покупка" и "продажа" как это сделано в ленте сделок?
Выбирать это из тиковой базы уж очень затратно по ресурсам, особенно если не по одному инструменту.
Контроль работы скрипта
 
Я тут пользую визуальный индикатор работы скрипта который показывает его замедление или затык при выполнении.
Веселенький такой крутилок в крайней ячейке таблицы.
Может кому пригодится.
С Новым Годом!
Код
function cyrcle(c) -- крутилок
   local t=os.time()
   if c=="|" then 
      return "/", t
   elseif c=="/" then 
      return "--", t
   elseif c=="--" then 
      return "\\", t
   elseif c=="\\" then
      return "|", t
   else
      return "" ,t
   end    
end

-- Пример (цветовые функции здесь не привожу)
go,gt="",0
...
...
function main()
 is_run=true
 ...
 while is_run do
  go,gt=cyrcle(go)
  ...
  ...
  ...
  ...  
  SetCell(kt_id,x,y,go) -- вывод в ячейку таблицы
  --раскраска крутилка
  if go=="/" or go=="\\" then
   color(x,y,kt_id,"Lemon")
  else
   color(x,y,kt_id,"Salad")
  end
  if os.time()-gt>60 then color(x,y,kt_id,"Red") end 
  ...
  sleep(50)
 end
end
Иногда доступные скрипты
 
Уважаемые разработчики !

Ну сделайте наконец возможность изменения размера окна "Доступные скрипты"!
Достало уже забавляться целый день прокруткой после изменения шрифтов. У вас что, все экраны 15 дюймов ?

Заодно поставьте уже кнопку запуска этого окна рядом с веселиньким паровозиком.
Волшебное исчезание меток
 
Всем добрый день!

Столкнулся с тем, что после аварийного выхода из терминала  при его зависании по сторонней причине, исчезают все метки
добавленные при помощи функции  AddLabel после последнего запуска скрипта.
Очень неприятно и в голову ничего не пришло кроме сохранения параметров меток в файл при их создании с последующим удалением и пересозданием каждой при новом запуске.
Наверное можно было бы решить эту проблему имея в lua функцию сохранения параметров терминала
в файл info.wnd, но увы. Кто-то нашел решение этой проблемы?

Попутно изучая в доках функцию AddLabel на предмет что курили разработчики когда придумали использовать для параметра "Время в формате «ЧЧММСС»..." тип "NUMBER" наехал вот на такую шутку:
Код
   local a="09:15:18"
   local b=string.gsub(a,":","")
   local c=tonumber(b)
   local d=tonumber(string.gsub(a,":",""))
   message(tostring(c).." "..tostring(d))
Результат:
91518 nil

Кто коллекционирует, дарю ))
v.9.8.0.11, Lua 5.3.5
Получение цены инструмента
 
Подскажите, есть ли возможность получения цены последней сделки по инструменту запросом с сервера не занося его в таблицу текущих торгов руками и не создавая всю базу через CreateDataSource ?
Снова AddLabel
 
Как говорится "у кого что болит"

Описание проблемы:
В случае прикрепления графика якорем к таблице текущих торгов функция AddLabel лепит метку согласно только идентификатору в текущий на графике инструмент. T.е. метка о сделке по любому тикеру выставляется в текущее окно графика.    В итоге в одном окне мешанина из меток разнообразных инструментов, а при переключения на нужные они отсутствуют.  В настоящее время способов автоматически правильно разносить метки на графики соответствующих тикеров нет. Единственный вариант какой я придумал - вручную открывать нужное окно и запускать скрипт который перебирает список UIDов меток относящихся к этому тикеру, поштучно удаляет ее и выставляет заново с другим uid что бы она появилась на текущем графике.
Замечу, что метки покупки/продажи выставляемые самим Квиком попадают в окно нужного инструмента автоматически.

Предложение:

1. Доработать функцию AddLabel возможностью выставлять метку на график в соответствии с параметром "тикер инструмента". При отсутствии параметра пусть лепит в текущее окно.

или

2. Дать возможность позиционировать средствами qlua указатель в таблице текущих торгов на нужный тикер с тем что бы  текущий график переключился на нужный инструмент. Тут наверное придется создать еще функцию получения текущей позиции укозателя.

Прошу рассмотреть данные предложения.
Обязуюсь честно напоминать о них ежегодно )
Последовательность функций обратного вызова
 
Всем добрый день!

При подаче и обработке лимитных заявок давно использую простую последовательность:

sendTransaction(...)( задание TRANS_ID) --> OnTransReply(...)(получение номера заявки order_num )-->OnTrade(...)(обработка исполнения заявки с номером  order_num)
Функцию OnOrder() тут не использую благо до сих пор не было необходимости.

Попытка сделать подобную схему для стоп-заявки типа тэйк-профит поставила в тупик - полученный от  OnTransReply при выставлении стоп-заявки order_num бесполезен т.к. после срабатывания условий тэйка  сервером выставляется новая заявка с новым номером  order_num который нужно как-то отфильтровать и получить.

Прошу у знатоков совета по оформлению последовательности функций обратного вызова для этого типа заявок.
Как закрыть форточку?
 
Сломал себе мозг пытаясь закрыть окно способом указанным в документации.
 Тестовый пример:
Скрытый текст
В итоге вывод message: false/true/false
Это нормально? Как его еще можно закрыть чтобы оно было закрыто?
getPortfolioInfoEx в девятой версии
 
  Может быть кто-то уже разбирался с этим?

Почему-то в девятке возвращаемое значение getPortfolioInfoEx(...,2).all_assets абсолютно не соответствует значению соответствующего поля ТекСредства таблицы  Клиентский портфель. В восьмерке такого не было (
Таблица алгоритмических заявок
 
А можно узнать у уважаемых разработчиков по какой причине в таблице алгоритмических заявок утром до начала торгов по каждой заявке пустое поле "Инструмент сокр."? Какой смысл тогда заполнения остальных полей этой таблицы в это время?
Настройки и их сохранение.
 
Я чего-то недопонимаю в логике настроек переноса заказа данных в настройки (?).
Стоял фильтр заказа котировок. Снимаю галочку "фильтр инструмента" класса в
/Программа/Получение данных/Котировки и уверен что все хорошо. Однако при следующем входе галка на месте.
Ручное сохранение настроек эффекта не дает.   Версия 8.11
Получение тикеров инсрументов
 
Добрый день всем.

Подскажите, есть ли возможность получить с сервера в свою таблицу список ВСЕХ тикеров по конкретному классу?
Типа той которая используется в таблицах квика для настройки фильтров и тп.
Подкиньте идею
 
Привет всем.

У меня работает несколько роботов с выводом данных каждый в свою таблицу.
Возникла необходимость сделать сводную таблицу для всех.
Пока не понимаю как передавать данные из скрипта в скрипт.  Вернее одно решение есть - отдавать через сохраняемый и затем читаемый файл, но во первых это криво, во вторых медленно.
Буду благодарен за рабочую идею.
Сохранение параметров некоторых окон
 
Здравствуйте!
При изменении шрифтов в настройках Квика естественно приходится корректировать ширину столбцов и размеры таблиц.
Особых проблем в большинстве таблиц это не создает.  Кроме стакана. Т. к. отсутствует возможность сохранить параметры окна и каждый раз при вызове стакана из таблицы текущих торгов стакан является в корявом виде и размере по умолчанию. Прошу зарегистрировать возможность изменять и сохранять размеры и ширину столбцов по умолчанию.

Кроме того прошу аналогично дать возможность изменять размер окна "Доступные скрипты"

Спасибо.
Перестали скачиваться тиковые данные
 
Сегодня обновил квик до версии 8.8.4.3 , перестали скачиваться тиковые данные.

Скрипт
--
local ldsa={}
local error_desc=""
ldsa,error_desc = CreateDataSource(p_classcode, p_seccode, INTERVAL_TICK)
while not ldsa or ldsa:Size()==0 do
sleep(10000)
message("ожидание данных")
if error_desc ~= nil and error_desc ~= "" then
message(p_classcode.."/"..p_seccode.."/".."Source2 error ==>" .. error_desc)
end
end
message("получено "..tostring(ldsa:Size()))
--
висит в "ожидание данных".

Что за .....? Что-то добавили в настройки?
Статус сессии.
 
Господа разработчики, в связи с появлением на ММВБ вечерней сессии есть пара замечаний и предложений по теме.

Вот протокол изменения статуса сессии в течении дня:
--
09:50:01    Ststus 0==>3 (открытие)
09:59:40    Ststus 3==>0 (закрыта)
10:00:00    Ststus 0==>1 (открыта)
18:39:59    Ststus 1==>0 (закрыта)
18:40:05    Ststus 0==>4 (аукцион)
18:45:20    Ststus 4==>5 (ЦАЗ)
18:50:01    Ststus 5==>0 (закрыта)
19:00:01    Ststus 0==>3 (открытие)
19:04:31    Ststus 3==>0 (закрыта)
19:05:00    Ststus 0==>1 (открыта)
23:50:00    Status 1==>0 (закрыта)
--
Предложения:
1. Сделать разными статусы открытия дневной и вечерней сессии с 9-50-00 до 9-59-40 и с 19-00-00 до 19-04-30.
   Сейчас оба периода имеют одинаковый статус 3.

2. Периоды с 09-59-40 до 10-00-00 и с 19-04-30 до 19-05-00 имеют статус сессии 0 (закрыта). Однако в это время сервером обрабатываются встречные заявки выставленные в период открытия сессии. Логично было бы этим периодам присвоить отдельный статус.

Спасибо за понимание.
Скрипт индикатора
 
Добрый день.

В тексте индикатора встретил выражение
x=ds[I]
подскажите что это и почему оно NUMERIC?

Если это база свечей текущего таймфрейма, то по идее такое должно возвращать nil.
Снова CreateDataSource
 
Добрый день,

подскажите пожалуйста есть ли возможность что бы CreateDataSource(classcode, seccode, INTERVAL_TICK) тащила с сервера только данные текущей сессии? А то это действо занимает около пяти минут.
Заодно как узнать, что данные получены полностью?
Изменение фильтра из скрипта
 
Здравствуйте!

Подскажите пожалуйста есть ли какая-либо возможность изменять из скрипта параметры заказа данных?
Конкретно интересует возможность изменять фильтр в заказе потока обезличенных сделок.  
SetSelectedRow()
 
Всем добрый день!

Подскажите пожалуйста способы обхода бага:
1. Создаю таблицу с идентификатором kt_id и размером окна  вмещающем n строк
2 Поштучно добавляю строки при помощи InsertRow(kt_id,k).
3. В итоге добавлено строк больше n и в окне начинает работать прокрутка с установкой бегунка прокрутки вниз так, что видна последняя строка.
4. Выделяю первую строку SetSelectedRow(kt_id,1). Строка выделяется, однако ее не видно тк она остается за пределами окна.

 Как мне средствами Lua поднять этот бегунок и увидеть в окне первую строку?
Мышь окочурилась :)
 
В последних версиях в терминал внесены значительные улучшения. Улучшения пишу честно, без скобок.
Например если кликнуть правой клавишей мыши по заголовку  пользовательской таблицы, предлагается сортировка столбца.
Точно так же сортировка предлагается если таким образом кликнуть и в ячейке с данными.
Великолепно! Только теперь при двойном клике по ячейке данных функция MouseClick(...) перестала возвращать QTABLE_LBUTTONDBLCLK.
А надо :(.  Вполне хватило бы оформить вызов сортировки только кликом на заголовок. Что делать?
Пользовательские таблицы, Привязка к вкладке
 
Очень бы хотелось иметь возможность привязывать пользовательские таблицы к конкретным вкладкам Квика.
Например иметь такую опцию в функции CreateTable() или SetWindowPos(...)

Сейчас для того, что бы открыть таблицу в определенной вкладке, нужно запускать скрипт робота находясь в ней.
Если скриптов несколько, то бегать по вкладкам запуская их.
Кроме того при закрытии терминала или аварийном перезапуске пользовательские таблицы вновь открываются во вкладке вкладке, которая была открыта на момент выхода из Квика.  Робот обижается :)
getDepoEx, Ошибки при выполнении функции
 

Добрый день !

Столкнулся с проблемой при использовании данной функции.

...
y=getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2).currentbal
...

Получаю ошибку несуществующего аргумента в момент очистки таблиц при первом за текущие сутки коннекте к серверу 9-30.  Дальше работает корректно, все данные из таблицы лимитов получаются, при переконнекте скрипт не вылетает.

Попробовал посмотреть что она в этот момент возвращает
...
y=type(getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2))
...

получил:   bad argument #1 to type (value expected)

Выборки из других таблиц getParamEx, getPortfolioInfoEx работают как и должны круглосуточно.

Возможно это баг разработчиков. Но я не могу придумать как это обойти, кроме как останавливать скрипт на время обновления данных. Подскажите если кого озарит

Обращение к произвольной таблицы
 
Добрый день знатоки!

Подскажите пожалуйста, а то я уже всю голову сломал.
В скрипте создаю таблицу

t_id=AllocTable()

Я так понимаю, что t_id создается случайным образом

Как обратится к этой таблице из другого скрипта, который этот идентификатор не знает?

Ну или передать переменную из скрипа в скрипт что ли ?

Спасибо,

Игорь

Сервисные функции, getInfoParam('SERVERTIME') возвращает пустую строку
 
Помогите пожалуйста коллеги.
getInfoParam возвращает пустую строку и я не понимаю почему.

Простейший код

if isConnected()==1 then
    local a=getInfoParam("Tradedate")
    local b=getInfoParam("Servertime")
    message(a,1)
    message(b,1)
end

в ответ в message пустые строки
Время рабочей сессии. Версия  7.6.1.1

Спасибо!
Звуки в Qlua, Вопрос по звуковой индикации
 
Добрый день !
Подскажите знатоки, есть какая то библиотека проигрывания звукового файла под lua?
Или хотя бы бипер на худой конец ?

Спасибо.

Игорь
Работа с именем переменной
 
Подскажите пожалуйста человеку не знакомому достаточно подробно с lua.
Как обработать переменную, имя которой представлено в строке?
Например :

var1=0
a = "var"
b = "1"
c =a..b
далее мне нужно например в конструкции if проверить значение переменной var1 имея переменную c.
В некоторых языках для этого используется оператор $
там это выглядит так:
if $c = 0 then
    ........
end

Как это сделать в lua?

Прошу извинить, что не нашел этого в руководстве :(
Вызов окна настроек при запуске индикатора
 
Добрый день.
Подскажите начинающему как победить проблему.
При добавлении индикатора, написаного на lua в появляющемся окне настроек индикатора отсутствует вкладка "Общие".
Имеются только вкладки "Дополнительно" и "Уровни". В результате невозможно задать параметры индикатора.
Quik версия 7.0.4.10
Спасибо
Страницы: 1
Наверх