dimka (Все сообщения пользователя)

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

Страницы: 1
как за AddLabel() отметку цены
 
Цитата
nikolz написал:
Вам ехать или шашечки на дверь?
:) А все вместе никак нельзя ?
как за AddLabel() отметку цены
 
Quik 9.3.1.11. Win10 - 64

Хочется на график вывести красоту типа "Отметка цены"(хвост понравился) и подвигать ее через SetLabelParams() - 1.jpg берем график Si тег графика = "jbd"

Код
Setup = {
class = "SPBFUT",
sec = "SiH2"
}


local tostring__ = tostring
function tostring(x)
return tostring__(math.tointeger(x) or x)
end

function metka(pos, price)
   local h,m,t = string.match(getInfoParam("SERVERTIME"),"(%d%d)%p(%d%d)%p(%d%d)")
   local time_pos = h..m..t
   local d,m,y = string.match(getInfoParam("TRADEDATE"),"(%d%d)%p(%d%d)%p(%d%d%d%d)")
   local date_pos = y..m..d

   label_params = {
      TEXT = tostring(price),
      IMAGE_PATH = "",
      ALIGNMENT = "LEFT",
      YVALUE = price,
      DATE = date_pos,
      TIME = time_pos,
      R = 80,
      G = 80,
      B = 180,
      TRANSPARENCY = 0,
      TRANSPARENT_BACKGROUND = 1,
      FONT_FACE_NAME = "Arial",
      FONT_HEIGHT = 10,
      HINT = tostring(pos)
   }
   return label_params
end

function main()
   local curp = getParamEx2(Setup.class, Setup.sec, "LAST").param_value+0
   up_label_id = AddLabel("jbd", metka("UP", curp+100))
   dwn_label_id = AddLabel("jbd", metka("DWN", curp-100))
   SetLabelParams("jbd", up_label_id, metka("UP", curp+100))
   SetLabelParams("jbd", dwn_label_id, metka("DWN", curp-100))
end


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

Код
Setup = {
class = "SPBFUT",
sec = "SiH2"
}


local tostring__ = tostring
function tostring(x)
return tostring__(math.tointeger(x) or x)
end

function metka(pos, price)
   local h,m,t = string.match(getInfoParam("SERVERTIME"),"(%d%d)%p(%d%d)%p(%d%d)")
   local time_pos = h..m..t
   local d,m,y = string.match(getInfoParam("TRADEDATE"),"(%d%d)%p(%d%d)%p(%d%d%d%d)")
   local date_pos = y..m..d

   label_params = {
      TEXT = tostring(price),
      IMAGE_PATH = "",
      ALIGNMENT = "LEFT",
      YVALUE = price,
      DATE = date_pos,
      TIME = time_pos,
      R = 80,
      G = 80,
      B = 180,
      TRANSPARENCY = 0,
      TRANSPARENT_BACKGROUND = 1,
      FONT_FACE_NAME = "Arial",
      FONT_HEIGHT = 10,
      HINT = tostring(pos)
   }
   return label_params
end

function search_metka(idmetka, inum)
   local q = GetLabelParams(idmetka, inum)
   if q ~= nil then
      return inum
   end
      return -1
end

function main()
   local curp = getParamEx2(Setup.class, Setup.sec, "LAST").param_value+0
   up_label_id = -1
   dwn_label_id = -1
   local q = 0
   for i = 0, 100, 1 do
      q = search_metka("jbd", i)
      if q ~= -1 then
         if up_label_id < 0 then
            up_label_id = q
         elseif dwn_label_id < 0 then
            dwn_label_id = q
            break
         end
      end
   end
   SetLabelParams("jbd", up_label_id, metka("UP", curp+100))
   SetLabelParams("jbd", dwn_label_id, metka("DWN", curp-100))
end

Получаем 3.jpg  

Но так делать мне кажется это не комильфо ...
Status это работает ?
 
Забыл добавить брокер Открытие.
Константин у Вас прям это строка работает ? У меня показывает 0 должно вроде 1
Код
function main()
      Status =  getParamEx("SPBFUT",  "SiZ0", "STATUS ").param_value
      message("!!!"..Status)
end
Status это работает ?
 
В рабочую торговую сессию при активном инструменте
Status =  getParamEx("SPBFUT",  "SiZ0", "STATUS ").param_value
Выдает:
Status = 0.0
Шоткат для LUA скриптов
 
Шоткат ctrl-f11 открывает список QPILE скриптов
Шотката для открытия списка LUA скриптов нету! Можно добавить ?
Подгонка по содержимому или названию в таблице
 
Таблица созданна через CreateWindow(t_id).

1. Запускаю все отлично
2. Делаю подобрать ширину столбцов и ширина столбцов вместе с названием подгоняется не по названию столбцов, а по содержимому ячеек.
Вариант подгонки ширины столбцов по содержимому ячеек это неплохо, но можно ли как то сделать подгонку по названию столбцов ?
luasql (проблема с cursor:fetch)
 
Цитата
Старатель написал:
Цитата
Nikolay написал:
блокировки транзакций на уровне базы
C версии 3.7.0 появился режим журнала  WAL , в котором, как утверждается, читатели БД и писатели в БД уже не мешают друг другу.
Wow! Несмотря на то что 3.7.0 уже 10 лет только сейчас узнал PRAGMA journal_mode=WAL; наше все !!! Спс
getCandlesByIndex опа опа а что это у нас тут, getCandlesByIndex опа опа а что это у нас тут
 
getNumCandles() - конечно .... смотрю в книгу и вижу фигу :)
Ну и впрочем getCandlesByIndex() чтоб работал с фильтрованным диапазоном
getCandlesByIndex опа опа а что это у нас тут, getCandlesByIndex опа опа а что это у нас тут
 
1) Открываем график ставим ему идентификатор
getCandlesByIndex() - показывает 3677 свечей
2) Ставим в "Диаграмма" -> "Диапазон данных" -> Ставим последние 500 интервалов и ставим фильтр времени "10:00 - 18:40"
getCandlesByIndex() - 3677
То есть getCandlesByIndex() просто тупо выводит все свечи и никак не фильтруется ?
Ежели так то можно как-то добавить фильтрацию от "Диаграмма" -> "Диапазон данных".
Таблица не обновляется
 
Ну и для полноты wrapper`a нужно добавить:
Код
-- Закрасить ячейку по номеру строки и имени столбца
function QTable:SetColor(row, name, b_color, f_color, sel_b_color, sel_f_color)
local t={}
local col_ind = self.columns[name].id
if col_ind == nil then
return nil
end
t = SetColor(self.t_id, row, col_ind, b_color, f_color, sel_b_color, sel_f_color)
return t
end
-- Функция для подсветки выбранного диапазона ячеек цветом фона
-- и цветом текста в течении указанного времени с плавным «затуханием»
function QTable:Highlight(row, name, b_color, f_color, timeout)
local t={}
local col_ind = self.columns[name].id
if col_ind == nil then
return nil
end
t = Highlight(self.t_id, row, col_ind, b_color, f_color, timeout)
return t
end
Таблица не обновляется
 
Вроде решил проблему ...
В документации:
SetCell(String, Integer,  Integer, String) - запись значения в таблицу по указанным номерам столбца и строки
4 аргумента передаются
Идем в Файл quik_table_wrapper.lua:
смотрим
Код
-- Установить значение в ячейке
function QTable:SetValue(row, col_name, data)
local col_ind = self.columns[col_name].id or nil
if col_ind == nil then
return false
end
-- если для столбца задана функция форматирования, то она используется
local ff = self.columns[col_name].format_function

if type(ff) == "function" then
-- в качестве строкового представления используется
-- результат выполнения функции форматирования
SetCell(self.t_id, row, col_ind, ff(data), data)_____________________<опа 5! аргументов, а не 4
return true
else
SetCell(self.t_id, row, col_ind, tostring(data), data)_____________________<опа 5! аргументов, а не 4
end
end

Сделал SetCell(self.t_id, row, col_ind, tostring(data)) глюк исчез
Таблица не обновляется
 
SetCell(t.t_id, row, 1, "time") <- спасибо заработало(я забыл  что с 1 надо было начинать)
НО
t:SetValue(row,"time","ai") <-  Не работает то есть в таблице ничего не показывает.
Такое чувство что t:SetValue() не работает QTABLE_STRING_TYPE, потому что числа(QTABLE_DOUBLE_TYPE) выводятся
Как в скрипте получить нужный параметр из произвольной таблицы?
 
Для VALTODAY и иже подобных ... Транслирует ли брокер с биржи эти данные(НЕ В МОМЕНТЕ,А ИМЕННО ИСТОРИЮ например неделю назад) ? Нет? Значит нет ... Чтобы это понять
делаем следующее:
1) Создать Окно -> Текущие торги -> Выбираем что надо  например "оборот" выбираем любой инструмент наиболее   ликвидный си  или ртс.
2) В таблице переходим в колонку "оборот"  и правой  кнопкой выбираем сделать график по "обороту"
3) В созданном графике меняем таймфрейм на дневки(например) и смотрим строится ли график по дням.
4) Если строится то ставим свой  идентификатор для графика и считываем  его getCandlesByIndex("vasya", X1, X2,X3) ИЛИ CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1, "VALTODAY")
5) Если в графике  только  тек. день и все  ... значит данные не  транслируются от брокера или с биржи. Точнее их и нет видать :). Значит делаем скрипт который пишет данные по  инструменту в файл ... ждем пару  недель и т.д.
dofile( ) - как дать путь в скрипте, чтобы Quik не ругался на отсутствие файла?
 
вместо
dofile (getScriptPath() .. "\\quik_table_wrapper.lua")
dofile (getScriptPath() .. "\\ntime.lua")
лучше сделать так
Допустим квик находится "c:\quik" в этой папке создаете папку например "scripts"
dofile (getWorkingFolder() .. "\\scripts\\quik_table_wrapper.lua")
dofile (getWorkingFolder() .. "\\scripts\\ntime.lua")
P.S. у меня в квик 7.27 getScriptPath() выставлен в  "c:\quik", а у вас вообще не выставлен. кстати спецы где эту папку прописать ?
Таблица не обновляется
 
оригинальный table_object.lua - кстати работает и все показывает
Таблица не обновляется
 
Забыл квик 7.27.2.1
Таблица не обновляется
 
скрипт у меня находится в папке c!Quik!scripts
Из "Руководство пользователя Интерпретатора языка Lua" взял методом copy&paste 2 файла:  quik_table_wrapper.lua и ntime.lua.
Файл table_object.lua обрезал до  https://pastebin.com/TrMfSzrH
Запуск и ...  таблица пустая а вот этот код(в ссылке строки 43-53) выдает 2 и 4 а должен 1 и 3
  1. row = t:AddLine()
  2. if SetCell(t.t_id, row, 0, "time") == true  then
  3.    message("1")
  4. else
  5.    message("2")
  6. end
  7. if t:SetValue(row,"ai","ai") == true then
  8.    message("3")
  9. else
  10.    message("4")
  11. end
SetCell():
Функция возвращает «true» в случае успешного завершения, иначе – «false».
как перевести rts в рубли
 
1) Нашел формулу в интернете 0.02* курс ЦБР*фьюч RTS. Смотрел спецификации не нашел этой формулы,решил работать через квик.
2) Нашел в квике " стоимость шага цены"(12.56008) + "стоимость шага цены в валюте"(0.2) . Что делать с ними не понял.
Например фюч ртс 156730 сколько это в руб(формула). так и не понял.
2-3-4 как считать будем индикаторы
 
Беру график цены одного инструмента в стакане и правой кнопкой делаю график ... потом добавляю цену другого инструмента прям на этот график... Один график привязан к левой шкале графику другой к правой...
Вопрос !
Может ли индикатор вытащить С()   для 1 графика и второго(при том что 2-3 и т.д. инструментов рисуются в одной области) и как это сделать ?
Пример:
Выбираю rts стакан делаю построить график .. добавляю к нему график в эту же зону рисования например si. И накидываю индикатор... как он может ловить O,H,L,C,T для каждого инструмента и строить свой график
Баг в таблице котировки фьючей ?, Баг в таблице котировки фьючей ?
 
Поставил терминал от брокера (в нем есть преднастроенный info.wnd с графиками, таблицами и т.д.).
В таблице "котировки фьючерсов" удаляю все и делаю один инструмент rts9-19.
Сохраняю info.wnd.
Оставляю терминал включ. на пару недель(иногда комп перезагружаю) и захожу на вкладку и вижу что rts9-19 уже не один ...
P.S. пробовал удалять все графики, все вкладки и таблицы и делал одну эту таблицу и один график + стакан и через пару дней опять левые инструменты набежали...

Квик 7.27.2.1
Кстати и год и 2 назад(тогда были другие версии квика) такая же проблема ... вот решился описать эту проблему.
Опционный модуль неверно считает ?
 
Забыл добавить Квик 7.27.2.1
Опционный модуль неверно считает ?
 
В разработчике стратегий выбрал например купленый стрэдл.
Факт. показывает одну прибыльность(тету вег и т.д.) по сценарию1 значения другие ...
Вот картинка
Может ли луа-скрипт перезагружаться от сессии к сессии ???
 
1) Может ли луа-скрипт перезагружаться от сессии к сессии ??? то есть запускаться как бы с нуля ?
2) как обьяснить такую картинку(ID транзакции 1,2,3 а дальше пусто - что(кто) это???)  http://s017.radikal.ru/i434/1603/f4/b158e3bbe6ad.png. Причем по скрипту это должно было в 19-00 - 19-20 но никак в 20-52 !!! Я допускаю лишь то что скрипт как бы заново запустился ... Да судя по схеме(если просто посчитать, а в теории должно быть 3 купленных си) у меня должен быть 0 !!!фьючей в 20-52,но по таблице портфель 3 си проданных фьюча(на момент 22-20) и маржа меняется. Че-то видать совсем нето с терминалом 6.17
видимо баг в getNumCandles и getCandlesByIndex
 
Цитата
Николай Камынин написал:
1) а это что за библилотека?require ('math')
2) поставьте slep больше от 200
- чтоб вызывать math.abs math.modf и т.д. она не влияет
- ставил и 350 400 500 все бестолку после 500-1500 изменений на си6-16(и не только на нем) висит терминал ... решил по другому индюк пишет в файл значения, а скрипт читает значения из файла ...
P.S. просто я понимаю что в 7.1 этого нету и вся бы проблема решилась бы ... но в бд Открытие почему-то версия обновления зависла на 6.17 и время на бодание чтоб обновить версию уйдет немерянно ...
видимо баг в getNumCandles и getCandlesByIndex
 
Quik 6.17.3.6
Берем график любой, например si-6.16, накидываем(можно в новом окне) индикатор MACD(указываем в нем идентификатор например siq10 + включил опцию показ посл. значение)
Временной интервал взял 10 минутки(не обязательно)
Запускаем DebugView чтоб видеть PrintDbgStr
Дальше Lua->Доступные скрипты и запускаем ниже описанную программу и получаем след. картинку:
- В районе строк в DebugView = 500-1500 вывод в DebugView - останавливается
- quik терминал наглухо зависает
Перезагрузка терминала, компа роли не играет ... терминал виснет наглухо
Естественно и без DebugView терминал виснет
Я так вижу проблема в getNumCandles и getCandlesByIndex

require ('math')
MAX_T_INFO = 12
tag = 'siq10'
s4et = 1

function PrintDbgStr2(pds)
PrintDbgStr(''..pds)
end

function main()

t_info =AllocTable()
AddColumn (t_info , 1, "T", true, QTABLE_STRING_TYPE,80)
CreateWindow(t_info)
for i=1,MAX_T_INFO do InsertRow(t_info , -1) end

while not_stopped do
sleep(50)
local t,n,l
local smz = getNumCandles(tag) or 0
if smz > 2 then
t,n,l = getCandlesByIndex(tag,0,smz-2,1)
t1,n1,l1 = getCandlesByIndex(tag,0,smz-1,1)
end

PrintDbgStr2('t:'..t[0].close..' t1:'..t1[0].close)

end--end while
end--end function
Время сервера
 
Цитата
Макс Крутой пишет:
Почему это нормально?
Сделки приходят время обновляется, сделок нет время не обновляется. Видать у Вас открыт редкосдельный инструмент ?
про печать
 
Да зарегестрируйте!
про печать
 
Почему графики в квик распечатываются ч/белыми ? ... тот же пайнт(любые в нем цветные картинки) печатает цветом(то есть дрова работают и в настройках дров разрешена печать цветом)...
Кроссплатформенный квик на деньги правительства
 
Цитата
Alex пишет:
вы имеете полное право не соглашаться. попробую развернуть:
1) что касается денег правительства - вот пример http://www.rosalab.ru/ эта РОСА объявляла о банкротстве в прошлом году, а тут такой сюрпиз - санкции и на тебе, люди вовремя сориентировались и присасались, смотрите мол импортозамещаем. гляньте на список их продуктов. и почти все они теперь платные.
А кто сказал что будет бесплатно? Вопрос тут в том что таже ОС(Винда) амеровская будь она русской или китайской Вы думаете она ДОЛЖНА быть бесплатной ? Другое дело если импортзамещенные аналоги при худших характеристиках стоят столько же сколько или даже больше чем дяди Сэмовского аналога ...
снятие заявок ..., снятие заявок ...
 
Цитата
Серж пишет:
Что возвращает sendTransaction(trans)?
Спасибо Серж! Проблема решена ! sendTransaction() - говорил о неправильном идентификаторе ... в общем оказалось что заявки вручную удаляются с TRANS_ID = "1"
снятие заявок ..., снятие заявок ...
 
atri брал через atri = getItem("orders", t1[i])
дальше kill_order(atri)
...
function kill_order(atri)
local trans = {
   ["ACTION"] = "KILL_ORDER",
   ["CLASSCODE"] = atri.class_code,
   ["SECCODE"] = atri.sec_code,
         ["ACCOUNT"] = TRADE_ACC,
         ["CLIENT_CODE"]=CLIENT_CODE,
   ["ORDER_KEY"] = tostring(atri.order_num),
   ["TRANS_ID"] = tostring(atri.trans_id)
   }
   local res = sendTransaction(trans)
   PrintDbgStr('kill:'..atri.order_num..'@'..atri.trans_id)
end

Получаем [508] kill:15125099165@0
Но заявка не снимается ...

P.S. заявку(не стоп-заявка!) ставил вручную через стакан(не используя луа)...
Как работает
 
Цитата
Sergey Gorokhov пишет:

Цитата
dimka пишет:
2) Если выполняется OnOrder() остальные On...()
Колбеки в LUA работают в одном потоке. пока один колбек занят остальные ждут. Именно поэтому мы не рекомендуем выполнять в колбеках какие-либо тяжелый манипуляции.
SetTableNotificationCallback() - я так понимаю устанавливает тоже колбэк на события в таблице ? Значит получается отрабатывая колбэк нажатия кнопки мыши - kill_all_order()  ... OnOrder() не сработает или я неправильно понял?
Как работает
 
Во 2) пункте общий вопрос имелся ввиду "Во время любого On...() может ли он прерватся новым On...() или отработается текущий On...() до конца и затем другие On...() последовательно из очереди будут отработаны. И кстати эта очередь есть или пришел On...() отработать не смог - выкидываем"
Как работает
 
Кратенько:
Нужно снять все заявки ...
Нажимаем левую кнопку мыши и через установленный обработчик(методом SetTableNotificationCallback) на это нажатие
выполянем kill_all_order() ... также установлен OnOrder()...OnTrade()

-- убираем 1 заявку
function kill_order(atri)
   local trans = {
   ["ACTION"] = "KILL_ORDER",
....тыр-тыр
   }
   local res = sendTransaction(trans)
end

local function fnorder(psecode,pflags)
   if psecode ~= sec then return false end
   if bit.band(pflags, 1)~=0 then return true end
end

-- убираем все заявки
function kill_all_order()
local t1 = SearchItems("orders", 0, getNumberOf("orders") +1, fnorder,"sec_code,flags")
           if t1 ~= nil then
               for i = 1, #t1, 1 do
                   atri = getItem("orders", t1[i])
                   kill_order(atri)
               end
           end
end

Вопрос!
1) Во время работы kill_all_order() будут срабатывать OnOrder(),OnTrade() ?
2) Если выполняется OnOrder() остальные On...() ждут последовательно в очереди или пришло событие начинаем отрабатывать ?
3) Нельзя ли это осветить в документации ?
закрытие всех заявок на срочном рынке
 
Спецы ответьте!
Как насчет пинга?
 
Цитата
Egor Zaytsev пишет:
"Добрый день.
Т.е все тоже самое, что описано мною выше, но только для всех серверов указанных в пункте Связь/Доступные соединения ?"
Да именно так ... но пинговать постоянно все серваки не надо ... Достаточно в "просмотр доступных соединений" к пунктам "Описание соединения", "IP-адресс","Порт", "Ключ сервера" добавить пункт "пинг" ... и только в этом диалоге делать пинговку всех серваков.
Как насчет пинга?
 
Я имел ввиду всех серверов а не текущ.
Как насчет пинга?
 
Раньше серваки одного брокера(их у него не меньше 4) мог пинговать для уменьшения лага ... терь пинги брокер блокирует ... Добавьте в квик возможность пинговки серваков хотя бы через меню списка серверов ....
Страницы: 1
Наверх