Евгений написал: растет цена или падает на свече тоже видно на свечках
На свече цены. Это надо ещё виртуальную линию провести от объёма к свече цены, и попасть в правильную. При мелком масштабе - не очевидно.
Цитата
Евгений написал: сигнал индикатора объема в том и состоит чтобы видеть быстро скачки объемов
Скачки объёмов сразу видно, и цветовая индикация тут не помощник, имхо. Ну раскрасили вы объёмы по росту-падению. Тут объём вырос на два лота, тут - упал, какая разница?
Надо делать так, как надо. А как не надо - делать не надо.
function main()
if sendTransaction{
TRANS_ID = tostring(trans_id),
ACTION = "NEW_ORDER",
ACCOUNT = account,
CLIENT_CODE = client,
CLASSCODE = class_code,
SECCODE = sec_code,
OPERATION = "B",
TYPE = "L",
PRICE = price,
QUANTITY = "1"
} == "" then run = true end
while run do sleep(1) end
end
function OnTransReply(trans_reply)
if trans_reply.trans_id ~= trans_id then return end
run = nil
sendTransaction{
TRANS_ID = tostring(trans_id + 1),
ACTION = "KILL_ORDER",
CLASSCODE = class_code,
ORDER_KEY = tostring(trans_reply.order_num)
}
end
function OnStop()
run = nil
end
Надо делать так, как надо. А как не надо - делать не надо.
TGB написал: вариант с локальным объявлением gcrunner
Так __gc вызывается до OnInit
Скрытый текст
Код
local run = true
local tid = nil
local gcrunner = {}
setmetatable(gcrunner, { __gc = function()
if tid then DestroyTable(tid) end
message('__gc', 2)
end })
function OnInit(script_path)
file = io.open(script_path .. ".log", "w")
file:write("OnInit\n")
message("OnInit")
end
function main()
message("main")
tid = AllocTable()
AddColumn(tid, 1, '1', true, QTABLE_INT_TYPE, 1)
CreateWindow(tid)
collectgarbage()
while run do sleep(300) end
end
function OnStop()
run = nil
end
Убираем какую-нибудь строку, например
Код
file:write("OnInit\n")
и срабатывает при вызове collectgarbage. Как-то так.
Цитата
TGB написал: вариант с локальным объявлением gcrunner не работает в QLua 5.3.5 для финализации скрипта.
Без collectgarbage сработает и для финализации.
Надо делать так, как надо. А как не надо - делать не надо.
Старатель написал: Цитата TGB написал:-- collectgarbage () --- Если эту строку раскомментировать и при этом local gcrunner = {}, то при запуске collectgarbage () сработает __gc. Вроде, не срабатывает.
Здравствуйте! При этом необходимо, чтобы gcrunner был объявлен локальным: local gcrunner = {}
__gc срабатывает до вызова collectgarbage, возможно при автоматической сборке.
Надо делать так, как надо. А как не надо - делать не надо.
TGB написал: -- collectgarbage () --- Если эту строку раскомментировать и при этом local gcrunner = {}, то при запуске collectgarbage () сработает __gc.
Вроде, не срабатывает.
Надо делать так, как надо. А как не надо - делать не надо.
Nikolay написал: По какому признаку мне понять, что пока рано идти и смотреть позицию в таблице futures_client_holding?
Цитата
Andrey Bezrukov написал: можем зарегистрировать пожелание на индикацию в скрипте о том, что необходимые для отображения таблиц данные были получены с сервера после очистки
Может, будет полезно добавить трансляцию таблицы sys_events со шлюза?
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
Было бы неплохо в руководстве указывать тип данных, как для передаваемых параметров, так и возвращаемых, не number, а dooble или integer, раз уж теперь это важно.
Надо делать так, как надо. А как не надо - делать не надо.
есть синхронизационная ошибка возникающая в момент остановки скрипта. Мы исправим её в очередном обновлении ПО.
Цитата
Речь идет об аварийной остановке скрипта из-за ошибки, сообщение о которой Вы не получаете по причине зависания терминала.
Думаю, это ошибки вида: раз, два Об устранении самой проблемы, из-за которой возникают ошибки в рабочих скриптах, ни слова.
А тем временем поймал ещё одно зависание, уже в колбеке. Тестовый скрипт для воспроизведения:
Скрытый текст
Код
local run = true
local z = {0, 1}
local table_ssort = table.ssort
function c(func)
table_ssort(z, function()
func()
return true
end)
end
local string_format = string.format
local function f()
string_format('%.1f / %.f', 100 / 1000, 10)
end
function OnQuote(class_code, sec_code)
for i = 1, 50 do
c(f)
end
end
function OnParam(class_code, sec_code)
for i = 1, 50 do
c(f)
end
end
function main()
local class_code = 'QJSIM'
local s = {}
local n = 0
for sec_code in string.gmatch(getClassSecurities(class_code), '([^,]+)') do
if Subscribe_Level_II_Quotes(class_code, sec_code) == true then
n = n + 1
s[n] = sec_code
end
end
while run do
sleep(1)
end
for i = 1, n do
Unsubscribe_Level_II_Quotes(class_code, s[i])
end
end
function OnStop()
run = nil
end
Запустил 4 скрипта. Через несколько часов квик повесился.
Надо делать так, как надо. А как не надо - делать не надо.
local run = true
local tid = nil
local file
local gcrunner = (function()
local t = {}
setmetatable(t, { __gc = function()
local t = tid
tid = nil
if t then DestroyTable(t) end
file:write("__gc\n")
file:close()
end })
return t
end)()
function OnInit(script_path)
file = io.open(script_path .. ".log", "w")
file:write("OnInit\n")
end
function main()
file:write("main\n")
tid = AllocTable()
AddColumn(tid, 1, '1', true, QTABLE_INT_TYPE, 1)
CreateWindow(tid)
while run do sleep(300) end
file:write("main stopped\n")
end
function OnStop()
run = nil
file:write("OnStop\n")
end
В логе:
Цитата
OnInit main OnStop main stopped
Надо делать так, как надо. А как не надо - делать не надо.
Треугольник, указывающий вверх, показывает восходящий порядок. Он соответствует порядку с самым малым элементом (вершиной треугольника) вверху списка и самым большим (основанием треугольника) внизу.
Надо делать так, как надо. А как не надо - делать не надо.
Roman Azarov написал: Обеспечить хорошее качество каналов связи с учетом большого количества трейдеров - это задача Вашего брокера
Вы (ваши коллеги) пишите, что у вас нет возможности подключения к реальным торговым серверам. Вопрос: как вы осуществляете нагрузочные тестирования в боевых условиях и проводите ли их вообще? Имеете ли вы возможность дать брокеру рекомендации по организации серверного оборудования в зависимости от количества клиентов?
Надо делать так, как надо. А как не надо - делать не надо.
Александр Кашников написал: Берем таблицу "securities" и сохраняем в файл, а там - дохлые инструменты (опционы, фьючерсы) аж с 2018г. о какой производительности речь? Вот откуда берутся 17к + инструментов - из них 70% просто не существуют.
В таблицу securities только добавляются новые инструменты. Старые не удаляются. Чтобы избавиться от дохлых инструментов, удалите файл sec.dat. После подключения к серверу у вас будут только актуальные инструменты.
Надо делать так, как надо. А как не надо - делать не надо.
Roman Azarov написал: с сервера QUIK будут заказаны все сделки по всем инструментам, на получение информации по которым у терминала (пользователя) есть права независимо от того, какие фильтры настроены в таблице обезличенных сделок или по какому конкретному инструменту открыт тиковый график.
Это очень странно, то, что вы пишите. Потому что я наблюдаю значительную разницу входящего трафика при использовании фильтров и при заказе сделок по всем инструментам всех классов. Могли бы вы проверить актуальность информации.
Надо делать так, как надо. А как не надо - делать не надо.
В таком случае, прошу компетентных сотрудников ответить по теме или аргументированно ответить, почему данный функционал не может быть реализован:
Цитата
Anton написал: флажок в датасорце, "ответ сервера получен". В сухом остатке что тогда от арки требуется: 1) убедиться, что сервер всегда что-нибудь отвечает на подписку, есть ли данные или нет; 2) на клиенте по получении первого ответа поставить флажок в датасорце.
Цитата
Старатель написал: Вообще такого флага не хватает во многих таблицах терминала.
например, stop_orders, money_limits, depo_limits
Надо делать так, как надо. А как не надо - делать не надо.
Alexey Ivannikov написал: Но за наводку благодарим, заметите ещё - можете кидать в личку, скажем только спасибо. Цитата в ответе - не есть реклама, хотя конечно правильно было бы распознать спам и отправить пользователя в вечный бан (что уже сделано, ещё раз спасибо).
Ну, знаете, если вас надо тыкать носом в каждое сообщение с неприкрытой рекламой, тогда чем вы занимаетесь? Что сложного распознать сообщение, не относящееся к теме QUIK и вообще фондового рынка?
Заказ полного набора всех сделок происходит все зависимости от установленных в таблице обезличенных сделок фильтров или открытого тикового графика по конкретному инструменту.
Прошу техподдержку прокомментировать, что сие значит.
Надо делать так, как надо. А как не надо - делать не надо.
Alexey Ivannikov написал: Приведите ссылки на не исправленные проблемы пятилетней и более давности (как Вы пишите) - и я обещаю лично заняться этими вопросами.
Тикет обсуждаемой проблемы с метками от меня CQ01939238 от 27.12.16
Надо делать так, как надо. А как не надо - делать не надо.
Alexey Ivannikov написал: прямо нарушают правила форума, рекламируя на нашем ресурсе свои сайты. То, что мы пока смотрим на это сквозь пальцы, в том числе и означает уровень нашего хорошего отношения к Вам лично и к другим подобным участникам.
Чаще всего это раздолбайтсво и отсутствие модератора. У вас половина аккаунтов фейковые
Скрытый текст
А иногда и ваши коллеги рекламируют другие ресурсы
Скрытый текст
Надо делать так, как надо. А как не надо - делать не надо.
Anton написал: Тогда остается что, а остается ничего, сам факт приезда (первого) пакета на клиент только. Даже и функции много, флажок в датасорце, "ответ сервера получен". В сухом остатке что тогда от арки требуется: 1) убедиться, что сервер всегда что-нибудь отвечает на подписку, есть ли данные или нет; 2) на клиенте по получении первого ответа поставить флажок в датасорце.
Проверил. При запросе данных (открытием графика али через скрипт) сервер в любом случае отвечает клиенту, даже если свечей нет.
Можно ли тут обратиться к компетентным сотрудникам/разработчикам минуя первую линию защиты поддержки?
Надо делать так, как надо. А как не надо - делать не надо.