-- Флаг поддержания работы скрипта
IsRun = true;
function main()
-- Цикл будет выполнятся, пока IsRun == true
while IsRun do
sleep(1000);
end;
end;
-- Функция вызывается терминалом QUIK при получении изменений лимита по бумагам
function OnDepoLimit(dlimit)
message("Код бумаги "..tostring(dlimit.sec_code));-- STRING
message("Счет депо "..tostring(dlimit.trdaccid));-- STRING
message("Идентификатор фирмы "..tostring(dlimit.firmid));-- STRING
message("Код клиента "..tostring(dlimit.client_code));-- STRING
message("Входящий остаток по бумагам "..tostring(dlimit.openbal));-- NUMBER
message("Входящий лимит по бумагам "..tostring(dlimit.openlimit));-- NUMBER
message("Текущий остаток по бумагам "..tostring(dlimit.currentbal));-- NUMBER
message("Текущий лимит по бумагам "..tostring(dlimit.currentlimit));-- NUMBER
message("Заблокировано на продажу количества лотов "..tostring(dlimit.locked_sell));-- NUMBER
message("Заблокированного на покупку количества лотов "..tostring(dlimit.locked_buy));-- NUMBER
message("Стоимость ценных бумаг, заблокированных под покупку "..tostring(dlimit.locked_buy_value));-- NUMBER
message("Стоимость ценных бумаг, заблокированных под продажу "..tostring(dlimit.locked_sell_value));-- NUMBER
message("Цена приобретения "..tostring(dlimit.awg_position_price));-- NUMBER
message("Тип лимита "..tostring(dlimit.limit_kind));-- NUMBER Возможные значения: "0" – обычные лимиты, значение не равное "0" – технологические лимиты
message("__________");
end;
-- Функция вызывается терминалом QUIK при остановке скрипта из диалога управления и при закрытии терминала QUIK
function OnStop()
-- Останавливает цикл в функции main
IsRun = false;
end;
насчёт документации разработчикам уже даже и перестал напоминать :) )) просто отчаился - это бесполезно. Даже тему создал: https://forum.quik.ru/forum8/topic521/ а в ответ - тишина. думаю, недолго осталось - эволюция сделает своё дело - безответственные фирмы - рано или поздно разваливаются...
sam063rus пишет: думаю, совсем было бы чудом, если со временем каким-то образом можно было бы построить полноценную "улыбку волатильности", а также весь открытый интерес по всем страйкам (страйки по абсциссе, а величина OI - по ординате разумеется). Но, это уже врядли возможно без создания полноценного модуля отрисовки чартов.
таким макаром можно было бы строить и показывать отрытый интерес по опционам (put/call разными цветами). Хотя бы те страйки, которые умещаются в отображаемый диапазон окна.
думаю, совсем было бы чудом, если со временем каким-то образом можно было бы построить полноценную "улыбку волатильности", а также весь открытый интерес по всем страйкам (страйки по абсциссе, а величина OI - по ординате разумеется). Но, это уже врядли возможно без создания полноценного модуля отрисовки чартов.
Но... в любом случае, спасибо за наводку. Посмотрю, что из себя представляет библиотека: LuaFileSystem.
Николай Камынин пишет: Хочу обратить внимание на то, что НЕ для подачи заявок на биржу, а лишь поручений брокеру.
если я правильно понимаю то, по крайней мере у нас в России, напрямую на рынке "физики" не имеют право торговать, а лишь институциональные инвесторы в лице брокеров и т. д. Даже если Вы торгуете напрямую через шлюз - Вы всё равно зависите от брокера - у него к вам полный доступ и именно он устанавливает вам лимиты.
Николай Камынин пишет: Зачем делать открытый проект библиотеки ?
это лишь один из вариантов - "не мытьём - так катаньем". Просто если разработчики - не "телятся" - то пользователям нельзя сидеть сложа руки. Если Вы предложите полностью коммерческий проект, обладающий аналогичным функционалом и стабильностью - предлагайте и, самое главное. как уже писал - назовите его итоговую сумму (в вашем понимании).
Цитата
Николай Камынин пишет: В остальном реализуемо любые мечты буратины.
sam063rus пишет: квик не предназначен для стабильной роботорговли по определению. бо как любое его обновление может в одночасье угробить весь депозит, за что разработчики только в очередной раз мило извиняться и пообещают исправить прискорбную ситуацию в новых своих версиях, а брокер тем временем скажет, что, цитирую дословно: "... надо учитывать риски". Ну, а биржа, весело назовёт техническим сбоем и забудет об этом, в отличии от всяких SEC - так и не анулировав сделки.
извиняюсь:)))) не в ту ветку написал:))) но, как говорится, из песни слов не выкинешь.)))
квик не предназначен для стабильной роботорговли по определению. бо как любое его обновление может в одночасье угробить весь депозит, за что разработчики только в очередной раз мило извиняться и пообещают исправить прискорбную ситуацию в новых своих версиях, а брокер тем временем скажет, что, цитирую дословно: "... надо учитывать риски". Ну, а биржа, весело назовёт техническим сбоем и забудет об этом, в отличии от всяких SEC - так и не анулировав сделки.
Раньше я почему-то считал, что микросекунда - это своего рода квант биржевого времени - т.е. время, за меньшее которого нельзя однозначно определить время сделки. Однако, уделив чуть больше времени наблюдению за Таблицей Всех Сделок (ТВС) - я пришёл к разным интересным выводам. В квике, присутствует столбец "время (мкс)" - и хоть на нём и написано "мкс" - время в нём, почему-то всегда округлено до милисекунд, на манер: 123000, 430000, 234000 и т. п. Спрашивается, м-м, э-э, ЗАЧЕМ??? Я, конечно понимаю, что мне тут всегда могут сказать: так мол, транслирует биржа. Но, думаю, врядли.
прошу также присоединиться к обсуждению. Как Вы считаете (как программист) - сколько должен в итоге стоить проект такого уровня? (написание функционального аналога qchart.dll (возможно, с LUA-прокладкой на манер, vclua))
Sergey Gorokhov пишет: Да он платный. Но Вы же как раз про это и говорили, не так ли
одно дело когда платишь один раз и немного (при условии достаточности участников) и совершенно другое когда каждый месяц платить за "кота в мешке" от 6000р
в крайнем случае, если никто не откликнется - сделаю сам (да что греха таить - итак уже по-тихоньку делаю). Просто хотелось бы рассмотреть альтернативу.
на всякий случай, поясню: если кого-то тут пугает прямая интеграция в квик посредством dll - всегда можно сделать lua-обёртку (считай, та же dll, например, как это сделано в vclua)
Sergey Gorokhov пишет: Если хотите создать опенсорс проект для этого есть FIX Client Connector
во первых, это несовсем то, а точнее, совсем не то, что я спрашивал. К тому же, там сказано, что у него ежемесячная плата за пользование: http://www.arqa.ru/company/news/?id=1888
кроме того, что исходный код, а также интерфейс к ней - не распространяется - я ничего нового не услышал. Но если к примеру, пусть даже сам разработчик возьмётся за это - это не станет нарушением коммерческой тайны и не вступит в корпоративный конфликт интересов - бо как нас, как пользователей интересует не абсолютно точный клон, а лишь функциональный аналог. к тому же - есть такое понятие, как clear room.
Предложение к остальным Пользователям и самим Разработчикам: Ввиду закрытости интерфейса qchart.dll, а также крайней "урезанности" её пользовательского функционала (хотя полный функционал для разработчиков у ней просто шикарный) - предлагаю: Создать опенсорс-проект по созданию её полного аналога, например, на кикстартере или ещё где-то. То есть, каждый участник проекта "скидывается" финансово, "сколько ему не жалко" и если итоговая сумма будет приемлемой - кто-то, например, пусть даже автор qchart.dll или неменее опытный разраб - берётся за работу. В итоге, все - в плюсе и с минимальными усилиями и даже не придётся засорять более этот форум своими очередными пожеланиями на тему GUI и его функционала в квике.
Разработчики и пользователи, задумайтесь над этим...
Michael Bulychev пишет: То что я привел - лишь реализация моей идеи. Вы не поставили задачу корректно и полно.
Михаил:)))) вот вам охота лишним "писательством" заниматься. У меня, выражаясь Вашим языком, вполне корректная и полная задача - сделать секундный "спидометр" сделок. -> т.е. счётчик сделок по активу за одну секунду. Под конец, я её упростил до спидометра сделок по одному конкретному инструменту.
Лично я бы использовал в качестве счетчика таблицу, в которой ключами являются строки из кода класса, бумаги и времени на сделке с точностью до секунд. И при получении сделки накручивал значение в нужном поле.
Серж, Дмитрий - спасибо за ссылки. Почитаю. Почти решил проблему - считает но, с декрементом на единицу. Думаю, добью впоследствии. Но, в любом случае, рад новым идеям.
act_time = 0
deal_time = 0
counter = 0
is_run = true
function OnAllTrade(alltrade)
if alltrade.class_code == "SPBFUT" and alltrade.sec_code == "SiM5" then
act_time =tonumber(string.sub(getInfoParam("SERVERTIME"), 7, 8))
if act_time == deal_time then
counter=counter+1
else
do
message(act_time .. " " .. tostring(counter))
counter = 0
deal_time = tonumber(alltrade.datetime.sec)
end
end
end
end
function main()
while is_run
do
sleep(100)
end
end
function OnStop()
is_run = false
return 1000
end
стало только хуже бо как время сервера и время из таблицы невсегда совпадает.
Дмитрий пишет: Проверьте настройки в "Связь / Заказ всех сделок" - возможно, там включено получение сделок по классам Фьючерсы или Опционы FORTS (дополнительная сессия). Также название этих классов может содержать в скобках слова "история пред. вечерней сессии".
я к тому, что одно дело когда они (сделки/данные) приходят для всяких таблиц и совершенно другое когда вдобавок это ещё влияет на приход коллбеков, что мне совершенно не нужно.
к тому же, я не в той ситуации когда могу отключить приход данных за вчерашнюю сессию не нарушив тем самым функционал других своих скриптов. таким образом, мне надо "и то и это" НО!!! в разных целях и без ущерба.
Николай Камынин пишет: позволю предложить следующий алгоритм (так cделал бы сам): ------------------- 1) По спискам формируем таблицу играющих инструментов (критерий на ваш вкус) 2) если я ожидаю, что будут запаздывающие данные, то задаю таблицу неопределенности (т е таблицу памяти N секунд, которые могут корректироваться опоздавшими данными. 3) В колбеке считаем распределение числа сделок по N последним секундам. ------------------------------------ Ну а далее думаю - и зачем я это все посчитал???
я уже смотрел в эту сторону - но, как уже написал выше - квик будет виснуть.
Цитата
Ну а далее думаю - и зачем я это все посчитал???
а вы не думайте - я уже подумал. Вы главное, код здесь приведите.
Дополнительная информация: Чуть изменил скрипт, чтоб отслеживал только один тикер:
Скрытый текст
Код
local act_time = 0
local prev_time = 0
local counter = 0
local is_run = true
local date_time= ""
function OnAllTrade(alltrade)
if alltrade.class_code == "SPBFUT" and alltrade.sec_code == "SiM5" then
act_time = tonumber(alltrade.datetime.sec)
if act_time == prev_time then
counter=counter+1
else
date_time = tostring(alltrade.datetime.hour) .. ":" .. tostring(alltrade.datetime.min) .. ":" .. tostring(alltrade.datetime.sec)
message(date_time .. " " .. tostring(counter))
counter = 0
prev_time = tonumber(alltrade.datetime.sec)
end
end
end
--[[
function OnAllTrade(alltrade)
date_time = tostring(alltrade.datetime.hour) .. ":" .. tostring(alltrade.datetime.min) .. ":" .. tostring(alltrade.datetime.sec)
message(date_time)
end
--]]
function main()
while is_run
do
sleep(100)
end
end
function OnStop()
is_run = false
return 1000
end
тестовый 5-минутный прогон - показал:
"флешбеки" (нарушение временной последовательности распространения данных - прекратились).
Заглянул в ТВС - там полная "дискотека" - в рамках одного тикера - последовательность данных сохраняется, а между разными - полный хаос.
Скрипт считает сделки - неправильно. Пока непонятно в чём причина.