Количество активных заявок одной командой, Количество активных заявок одной командой
Пользователь
Сообщений: Регистрация: 30.01.2015
30.04.2022 19:06:44
исправил опечатку:
Код
local S="orders"; local t=SearchItems(S,0,getNumberOf(S)-1,function(flag) if bit.band(flag,3)~=1 then return false end return true end, "flags") -- #t -число активных заявок
Количество активных заявок одной командой, Количество активных заявок одной командой
Подскажите, пожалуйста, а можно как-то покороче получить число активных заявок, не перебирая всю таблицу orders?
Что-то типа tonumber(getFuturesHolding(fClass, Account, fFirst, 0).totalnet) - для получения текущей позиции по инструменту?
можно так :
Код
local t=SearchItems(S,0,getNumberOf("orders")-1,function(flag) if bit.band(flag,3)~=1 then return false end return true end, "flags") -- #t -число активных заявок
Количество активных заявок одной командой, Количество активных заявок одной командой
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 17:59:42
поправлю на запись о регистрации или снятии (исполнении) заявки уходит не более 10 мкс --------------- на формирование и отсылки транзакции на снятие заявки уходит до 300 мкс ---------------------------- на формирование и отсылку транзакции на новую заявку уходит 400 мкс
Количество активных заявок одной командой, Количество активных заявок одной командой
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 17:55:59
в итоге на регистрацию или снятие заявки уходит не более 10 мкс.
Количество активных заявок одной командой, Количество активных заявок одной командой
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 17:54:04
я например сканирую таблицу лишь при включении скрипта. после этого к таблицам квика заявок и стоп заявок скрипт не обращается вообще.
Количество активных заявок одной командой, Количество активных заявок одной командой
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 17:52:20
Цитата
Nikolay написал: Вы, конечно, можете постоянно не сканировать активные заявки по таблице. При первичной постановке ордера необходимо один раз найти ордер в таблице ордеров и запомнить индекс таблицы. Тогда последующие обращения уже будут простые, без поиска. Если же речь про то, чтобы вообще не искать ордера, то для лимитных ордеров - это не лучшая затея, т.к. в клиринг их снимут и необходимо предпринять какие-то действия. Да, можете по колбеку получить новое состояние ордера и отреагировать, но это если этот колбек не был пропущен.
не все так просто. Например, уже есть активные заявки до включения скрипта. либо произошел разрыв соединения и восстановление через несколько минут и часть активных заявок сработали. Ну и т д
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 13:01:36
поправил работает быстро
Код
function main()
while is_run do
while #MAIN_QUEUE > 0 do
ProcessingCallbakc(MAIN_QUEUE[1])
table.sremove(MAIN_QUEUE, 1)
end
sleep(100)
end
end
function ProcessingCallbakc(value)
message(string.format("Обработка события %s начата", value.callback))
message(string.format("Обработка события %s завершена", value.callback))
end
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 12:50:48
можно сделать main так:
Код
function main()
while is_run do
while #MAIN_QUEUE > 0 then
ProcessingCallbakc(MAIN_QUEUE[1])
table.sremove(MAIN_QUEUE, 1)
end
sleep(100)
end
end
function ProcessingCallbakc(value)
message(string.format("Обработка события %s начата", value.callback))
message(string.format("Обработка события %s завершена", value.callback))
end
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 12:11:42
В этом примере куча алгоритмических и смысловых ошибок и заблуждений. ---------------------- Например, зачем в очередь записывать множество изменений цены инструмента , полученные onParam? Если main не успело обработать 999 изменений из 1000, то 999 устарели и важно лишь последнее.
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 12:11:17
В этом примере куда алгоритмических и смысловых ошибок и заблуждений. ---------------------- Например, зачем в очередь записывать множество изменений цены инструмента , полученные onParam? Если main не успело обработать 999 изменений из 1000, то 999 устарели и важно лишь последнее.
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 12:10:09
В этом примере куда алгоритмических и смысловых ошибок и заблуждений. ---------------------- Например, зачем в очередь записывать множество изменений цены инструмента , полученные onParam? Если main
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 12:10:09
В этом примере куда алгоритмических и смысловых ошибок и заблуждений. ---------------------- Например, зачем в очередь записывать множество изменений цены инструмента , полученные onParam? Если main
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
29.04.2022 12:03:01
Цитата
Konstantin написал: Вот из PDF "Использование Lua в Рабочем месте Quik" (пункт 2 "Взаимодействие потоков Lua скрипта") вешает терминал. Что я делаю не так
поясню в чем проблема. В данном примере все колбеки записывают свою информацию в таблицу. Функция main обрабатывает первую запись этой таблицы в функции ProcessingCallbakc потом удаляет эту запись и обрабатывает следующую При этом в функции ProcessingCallbakc есть sleep(3000) т е после обработки каждой записи спим 3 секунды Выше я привел данные по скорости работы колшбеков примерно 3 мкс за время сна 3 секунды в таблицу которую орабатывает main успеет записаться 1000 строк из колбеков Поэтому и зависает ------------------- Это очень плохой пример. в нем не только плохо сделана работа с колбеками но и используется удаление строк ирз таблицы что вызывает сдвиг всех строк - это очень медленно так как у Вас в этой таблице уже строк 1000 -------------------- Короче это пример как нельзя писать скрипт. Какой-то дебил написал этот примаер.
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
28.04.2022 11:35:54
Цитата
Владимир написал: , Использование sleep - ЛУЧШЕЕ решение! Простое, отлаженное, работающее, эффективное. Не sleep (1), конечно, а sleep (500). Использовать меньшие задержки в скриптах для торговли не вижу ни малейшего смысла. А если нет диалога, то и вообще sleep (1000).
Владимир, Сможете как-то обосновать Ваше решение лучшего выбора sleep и и величины 500 ms? ------------------------ Раньше Вы писали, что торгуете по 1000 инструментам. Тогда поясните сколько времени уйдет на обработку изменений цены инструмента, если на один инструмент Вы тратите не менее 0.5 секунды сна + время обработки? ------------------------
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
27.04.2022 20:33:09
относительно sleep. ------------------------------------- например вот время реакции колбеков и main. колбеки вызываются каждые 2- 5 мкс. Sleep (1) даст задержку на 1000 и более мкс. Вот и посчитайте сколько сигналов изменения цены инструмента Вы пропустите с таким сном.
написал: Я спросил что значит "мониторы не связаны в единое пространство"?
чтобы второй монитор не был продолжением рабочего стола (пространства) первого монитора , то есть, чтобы на 2-й не могли попадать окна от программ, за исключением терминала Quik..Пусть Quik выводит излбражение только на 2-й монитор, а остальные программы только на 1-й
возможно так в Windows?.
А для манипулятора мышь, желательна возможность работы с мониторами 1 и 2.
У меня так и работает уже лет ...дцать. Поместите окно квика на второй монитор и щелкните в правом углу окна терминала - во весь экран Будет ровно на весь второй монитор. На первом также делайте для программ на тервом.
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
27.04.2022 20:21:14
Цитата
Anton Belonogov написал: , добрый день. Такое поведение связано с особенностями работы Lua-машины: при использовании бесконечных циклов в скрипте необходимо вносить небольшую задержку, иначе возникают зависания. Таким образом, для корректной работы данного скрипта в цикл while в теле функции main нужно добавить функцию sleep :
Код
function main ()
while is_run do
if # MAIN_QUEUE > 0 then
ProcessingCallbakc(MAIN_QUEUE[ 1 ])
table.sremove (MAIN_QUEUE, 1 )
message ( "Размер очереди " .. tostring( # MAIN_QUEUE))
end
sleep ( 1 )
end
end
В примере уже есть sleep на 3 секунды куда еще и зачем?
Запуск скрипта из примера подвешивает терминал Quik
Пользователь
Сообщений: Регистрация: 30.01.2015
27.04.2022 20:18:29
если комп с несколькими ядрами, то ничего не вешает. --------------------- Я использую системные события для синхронизации потоков. ------------------------- Без синхронизации загрузка процессора 33% с синхронизацией 1-5%. --------------------- Использование sleep не лучшее решение. -------------------------- Проще и лучше, если не используете системное событие , использовать флаги.
Сдвиг массива без цикла for или while, Возможно ли сдвинуть массив без цикла for или while, если количество строк массива может изменяться?
Пользователь
Сообщений: Регистрация: 30.01.2015
27.04.2022 20:12:23
Цитата
Айдар написал: Подскажите, пожалуйста, для понимания вот полный код:
Например так: --------------------------- table.remove(t,1)
не все то золото, что блестит
Пользователь
Сообщений: Регистрация: 30.01.2015
26.04.2022 16:32:51
таблица не очень поэтому повторю ее еще раз:
Код
_tk(us)=1.2
SBER(us)=3089.9
__tk(us)=3124.1
TransReply t(us)=2.3
Order t(us)=6.3
TransReply t(us)=0.9
Order t(us)=5.0
SBER(us)=165.5
__tk(us)=199.4
Order t(us)=3.3
Order t(us)=2.6
__tk(us)=1.4
__tk(us)=1.3
__tk(us)=11.1
SBER(us)=182.7
__tk(us)=221.2
FLOT(us)=3879.5
__tk(us)=3916.3
TransReply t(us)=7.2
__tk(us)=119.8
FLOT(us)=547.5
__tk(us)=587.2
Order t(us)=11.5
Order t(us)=9.0
LKOH(us)=4958.5
__tk(us)=3586.8
__tk(us)=2.1
__tk(us)=0.9
TransReply t(us)=7.2
TransReply t(us)=1.1
Order t(us)=3.4
FLOT(us)=224.7
__tk(us)=397.8
LKOH(us)=540.6
__tk(us)=687.2
Order t(us)=6.2
Order t(us)=2.7
Order t(us)=2.4
__tk(us)=1.6
__tk(us)=1.4
SBER(us)=190.5
__tk(us)=223.0
__tk(us)=0.9
SBER(us)=199.9
__tk(us)=344.4
__tk(us)=0.9
SBER(us)=224.4
__tk(us)=268.7
SBER(us)=217.0
__tk(us)=255.2
SBER(us)=223.6
__tk(us)=263.0
__tk(us)=1.1
LKOH(us)=362.7
__tk(us)=406.7
SBER(us)=216.2
__tk(us)=236.4
__tk(us)=1.0
CHMF(us)=4883.2
__tk(us)=4917.7
TransReply t(us)=7.9
__tk(us)=2.1
__tk(us)=1.6
CHMF(us)=733.1
__tk(us)=774.4
SBER(us)=169.0
__tk(us)=185.8
Order t(us)=3.3
Order t(us)=2.4
TransReply t(us)=2.7
Order t(us)=3.8
CHMF(us)=614.0
__tk(us)=834.3
RNFT(us)=3410.1
__tk(us)=3447.4
Order t(us)=8.0
__tk(us)=1.8
__tk(us)=11.0
TransReply t(us)=10.4
TransReply t(us)=2.3
__tk(us)=2.3
__tk(us)=1.6
__tk(us)=1.4
__tk(us)=1.4
CHMF(us)=482.3
__tk(us)=660.0
RNFT(us)=441.2
__tk(us)=459.7
__tk(us)=0.9
Order t(us)=3.6
Order t(us)=2.9
Order t(us)=2.8
Order t(us)=2.8
TransReply t(us)=2.9
__tk(us)=1.8
TransReply t(us)=1.6
Order t(us)=3.3
CHMF(us)=620.0
__tk(us)=797.2
SBER(us)=187.0
__tk(us)=208.0
__tk(us)=1.0
Order t(us)=3.8
Order t(us)=3.1
Order t(us)=2.9
__tk(us)=1.9
__tk(us)=1.6
TransReply t(us)=6.9
__tk(us)=2.4
__tk(us)=1.8
AFKS(us)=3926.4
__tk(us)=3960.6
Order t(us)=5.9
Order t(us)=2.4
TransReply t(us)=8.5
__tk(us)=1.8
AFKS(us)=501.9
__tk(us)=538.4
LKOH(us)=163.5
__tk(us)=183.6
SBER(us)=159.5
__tk(us)=180.2
__tk(us)=1.1
Order t(us)=4.2
Order t(us)=3.2
TransReply t(us)=3.7
Order t(us)=4.2
AFKS(us)=348.4
__tk(us)=524.3
Order t(us)=5.0
SGZH(us)=4205.9
__tk(us)=3090.5
__tk(us)=1.9
__tk(us)=0.7
TransReply t(us)=5.9
TransReply t(us)=2.2
Order t(us)=4.3
AFKS(us)=503.0
__tk(us)=605.1
MRKV(us)=1123.5
__tk(us)=1239.7
__tk(us)=1.0
Order t(us)=3.7
Order t(us)=3.1
Order t(us)=2.7
__tk(us)=1.9
__tk(us)=1.6
__tk(us)=1.8
TransReply t(us)=11.4
TransReply t(us)=1.7
__tk(us)=2.3
__tk(us)=1.4
AFKS(us)=440.4
__tk(us)=600.9
SBER(us)=138.8
__tk(us)=158.4
__tk(us)=0.9
Order t(us)=6.9
Order t(us)=3.1
Order t(us)=2.8
Order t(us)=2.7
__tk(us)=2.2
TransReply t(us)=11.2
AFKS(us)=629.5
__tk(us)=663.4
SBER(us)=131.6
__tk(us)=214.6
Order t(us)=3.3
Order t(us)=2.5
TransReply t(us)=3.8
Order t(us)=3.6
AFKS(us)=498.4
__tk(us)=624.5
SBER(us)=99.7
__tk(us)=111.3
Order t(us)=8.7
SNGS(us)=3741.5
__tk(us)=2769.7
TransReply t(us)=8.1
TransReply t(us)=1.1
__tk(us)=1.8
__tk(us)=1.3
__tk(us)=1.3
AFKS(us)=582.5
__tk(us)=733.9
Order t(us)=4.7
Order t(us)=5.1
Order t(us)=4.0
SNGS(us)=2139.4
Order t(us)=3.8
__tk(us)=19.6
TransReply t(us)=3.8
__tk(us)=2.4
TransReply t(us)=1.9
Order t(us)=6.5
AFKS(us)=458.8
__tk(us)=650.8
ROSN(us)=4161.7
__tk(us)=4191.7
Order t(us)=8.0
Order t(us)=4.3
Order t(us)=3.2
__tk(us)=2.2
TransReply t(us)=2.5
__tk(us)=2.5
TransReply t(us)=2.0
Order t(us)=4.2
AFKS(us)=642.0
__tk(us)=825.9
__tk(us)=1.3
Order t(us)=3.3
Order t(us)=3.0
Order t(us)=2.6
__tk(us)=1.7
__tk(us)=1.3
TransReply t(us)=11.8
__tk(us)=2.9
AFKS(us)=584.2
__tk(us)=623.6
SBER(us)=140.5
__tk(us)=154.1
Order t(us)=4.2
Order t(us)=3.0
TransReply t(us)=4.7
Order t(us)=6.7
не все то золото, что блестит
Пользователь
Сообщений: Регистрация: 30.01.2015
26.04.2022 16:30:49
В качестве информации и для сравнения, выкладываю время работы колбеков и main скрипта на тестовом сервере QUIK. --------------------- В данном тесте роботу задана работа по 36 инструментам. ---------------------------------- При получении колбека onParam по инструменту, робот вычисляет свечи 4 таймов, снимает ранее выставленную заявку и выставляет новую. и так далее ---------------------------- В приведенной ниже таблице результата обозначено: _tk -время main ; если указан инструмент, то это время получения свечей 1 минута и формирование на их основе свечей 5 мин 30 мин и 1 день. Время колбеков содержит их имя.
--------------------------------
Скрытый текст
Скрытый текст
_tk(us)=1.2
Скрытый текст
SBER(us)=3089.9
Скрытый текст
__tk(us)=3124.1
Скрытый текст
TransReply t(us)=2.3
Скрытый текст
Order t(us)=6.3
Скрытый текст
TransReply t(us)=0.9
Скрытый текст
Order t(us)=5.0
Скрытый текст
SBER(us)=165.5
Скрытый текст
__tk(us)=199.4
Скрытый текст
Order t(us)=3.3
Скрытый текст
Order t(us)=2.6
Скрытый текст
__tk(us)=1.4
Скрытый текст
__tk(us)=1.3
Скрытый текст
__tk(us)=11.1
Скрытый текст
SBER(us)=182.7
Скрытый текст
__tk(us)=221.2
Скрытый текст
FLOT(us)=3879.5
Скрытый текст
__tk(us)=3916.3
Скрытый текст
TransReply t(us)=7.2
Скрытый текст
__tk(us)=119.8
Скрытый текст
FLOT(us)=547.5
Скрытый текст
__tk(us)=587.2
Скрытый текст
Order t(us)=11.5
Скрытый текст
Order t(us)=9.0
Скрытый текст
LKOH(us)=4958.5
Скрытый текст
__tk(us)=3586.8
Скрытый текст
__tk(us)=2.1
Скрытый текст
__tk(us)=0.9
Скрытый текст
TransReply t(us)=7.2
Скрытый текст
TransReply t(us)=1.1
Скрытый текст
Order t(us)=3.4
Скрытый текст
FLOT(us)=224.7
Скрытый текст
__tk(us)=397.8
Скрытый текст
LKOH(us)=540.6
Скрытый текст
__tk(us)=687.2
Скрытый текст
Order t(us)=6.2
Скрытый текст
Order t(us)=2.7
Скрытый текст
Order t(us)=2.4
Скрытый текст
__tk(us)=1.6
Скрытый текст
__tk(us)=1.4
Скрытый текст
SBER(us)=190.5
Скрытый текст
__tk(us)=223.0
Скрытый текст
__tk(us)=0.9
Скрытый текст
SBER(us)=199.9
Скрытый текст
__tk(us)=344.4
Скрытый текст
__tk(us)=0.9
Скрытый текст
SBER(us)=224.4
Скрытый текст
__tk(us)=268.7
Скрытый текст
SBER(us)=217.0
Скрытый текст
__tk(us)=255.2
Скрытый текст
SBER(us)=223.6
Скрытый текст
__tk(us)=263.0
Скрытый текст
__tk(us)=1.1
Скрытый текст
LKOH(us)=362.7
Скрытый текст
__tk(us)=406.7
Скрытый текст
SBER(us)=216.2
Скрытый текст
__tk(us)=236.4
Скрытый текст
__tk(us)=1.0
Скрытый текст
CHMF(us)=4883.2
Скрытый текст
__tk(us)=4917.7
Скрытый текст
TransReply t(us)=7.9
Скрытый текст
__tk(us)=2.1
Скрытый текст
__tk(us)=1.6
Скрытый текст
CHMF(us)=733.1
Скрытый текст
__tk(us)=774.4
Скрытый текст
SBER(us)=169.0
Скрытый текст
__tk(us)=185.8
Скрытый текст
Order t(us)=3.3
Скрытый текст
Order t(us)=2.4
Скрытый текст
TransReply t(us)=2.7
Скрытый текст
Order t(us)=3.8
Скрытый текст
CHMF(us)=614.0
Скрытый текст
__tk(us)=834.3
Скрытый текст
RNFT(us)=3410.1
Скрытый текст
__tk(us)=3447.4
Скрытый текст
Order t(us)=8.0
Скрытый текст
__tk(us)=1.8
Скрытый текст
__tk(us)=11.0
Скрытый текст
TransReply t(us)=10.4
Скрытый текст
TransReply t(us)=2.3
Скрытый текст
__tk(us)=2.3
Скрытый текст
__tk(us)=1.6
Скрытый текст
__tk(us)=1.4
Скрытый текст
__tk(us)=1.4
Скрытый текст
CHMF(us)=482.3
Скрытый текст
__tk(us)=660.0
Скрытый текст
RNFT(us)=441.2
Скрытый текст
__tk(us)=459.7
Скрытый текст
__tk(us)=0.9
Скрытый текст
Order t(us)=3.6
Скрытый текст
Order t(us)=2.9
Скрытый текст
Order t(us)=2.8
Скрытый текст
Order t(us)=2.8
Скрытый текст
TransReply t(us)=2.9
Скрытый текст
__tk(us)=1.8
Скрытый текст
TransReply t(us)=1.6
Скрытый текст
Order t(us)=3.3
Скрытый текст
CHMF(us)=620.0
Скрытый текст
__tk(us)=797.2
Скрытый текст
SBER(us)=187.0
Скрытый текст
__tk(us)=208.0
Скрытый текст
__tk(us)=1.0
Скрытый текст
Order t(us)=3.8
Скрытый текст
Order t(us)=3.1
Скрытый текст
Order t(us)=2.9
Скрытый текст
__tk(us)=1.9
Скрытый текст
__tk(us)=1.6
Скрытый текст
TransReply t(us)=6.9
Скрытый текст
__tk(us)=2.4
Скрытый текст
__tk(us)=1.8
Скрытый текст
AFKS(us)=3926.4
Скрытый текст
__tk(us)=3960.6
Скрытый текст
Order t(us)=5.9
Скрытый текст
Order t(us)=2.4
Скрытый текст
TransReply t(us)=8.5
Скрытый текст
__tk(us)=1.8
Скрытый текст
AFKS(us)=501.9
Скрытый текст
__tk(us)=538.4
Скрытый текст
LKOH(us)=163.5
Скрытый текст
__tk(us)=183.6
Скрытый текст
SBER(us)=159.5
Скрытый текст
__tk(us)=180.2
Скрытый текст
__tk(us)=1.1
Скрытый текст
Order t(us)=4.2
Скрытый текст
Order t(us)=3.2
Скрытый текст
TransReply t(us)=3.7
Скрытый текст
Order t(us)=4.2
Скрытый текст
AFKS(us)=348.4
Скрытый текст
__tk(us)=524.3
Скрытый текст
Order t(us)=5.0
Скрытый текст
SGZH(us)=4205.9
Скрытый текст
__tk(us)=3090.5
Скрытый текст
__tk(us)=1.9
Скрытый текст
__tk(us)=0.7
Скрытый текст
TransReply t(us)=5.9
Скрытый текст
TransReply t(us)=2.2
Скрытый текст
Order t(us)=4.3
Скрытый текст
AFKS(us)=503.0
Скрытый текст
__tk(us)=605.1
Скрытый текст
MRKV(us)=1123.5
Скрытый текст
__tk(us)=1239.7
Скрытый текст
__tk(us)=1.0
Скрытый текст
Order t(us)=3.7
Скрытый текст
Order t(us)=3.1
Скрытый текст
Order t(us)=2.7
Скрытый текст
__tk(us)=1.9
Скрытый текст
__tk(us)=1.6
Скрытый текст
__tk(us)=1.8
Скрытый текст
TransReply t(us)=11.4
Скрытый текст
TransReply t(us)=1.7
Скрытый текст
__tk(us)=2.3
Скрытый текст
__tk(us)=1.4
Скрытый текст
AFKS(us)=440.4
Скрытый текст
__tk(us)=600.9
Скрытый текст
SBER(us)=138.8
Скрытый текст
__tk(us)=158.4
Скрытый текст
__tk(us)=0.9
Скрытый текст
Order t(us)=6.9
Скрытый текст
Order t(us)=3.1
Скрытый текст
Order t(us)=2.8
Скрытый текст
Order t(us)=2.7
Скрытый текст
__tk(us)=2.2
Скрытый текст
TransReply t(us)=11.2
Скрытый текст
AFKS(us)=629.5
Скрытый текст
__tk(us)=663.4
Скрытый текст
SBER(us)=131.6
Скрытый текст
__tk(us)=214.6
Скрытый текст
Order t(us)=3.3
Скрытый текст
Order t(us)=2.5
Скрытый текст
TransReply t(us)=3.8
Скрытый текст
Order t(us)=3.6
Скрытый текст
AFKS(us)=498.4
Скрытый текст
__tk(us)=624.5
Скрытый текст
SBER(us)=99.7
Скрытый текст
__tk(us)=111.3
Скрытый текст
Order t(us)=8.7
Скрытый текст
SNGS(us)=3741.5
Скрытый текст
__tk(us)=2769.7
Скрытый текст
TransReply t(us)=8.1
Скрытый текст
TransReply t(us)=1.1
Скрытый текст
__tk(us)=1.8
Скрытый текст
__tk(us)=1.3
Скрытый текст
__tk(us)=1.3
Скрытый текст
AFKS(us)=582.5
Скрытый текст
__tk(us)=733.9
Скрытый текст
Order t(us)=4.7
Скрытый текст
Order t(us)=5.1
Скрытый текст
Order t(us)=4.0
Скрытый текст
SNGS(us)=2139.4
Скрытый текст
Order t(us)=3.8
Скрытый текст
__tk(us)=19.6
Скрытый текст
TransReply t(us)=3.8
Скрытый текст
__tk(us)=2.4
Скрытый текст
TransReply t(us)=1.9
Скрытый текст
Order t(us)=6.5
Скрытый текст
AFKS(us)=458.8
Скрытый текст
__tk(us)=650.8
Скрытый текст
ROSN(us)=4161.7
Скрытый текст
__tk(us)=4191.7
Скрытый текст
Order t(us)=8.0
Скрытый текст
Order t(us)=4.3
Скрытый текст
Order t(us)=3.2
Скрытый текст
__tk(us)=2.2
Скрытый текст
TransReply t(us)=2.5
Скрытый текст
__tk(us)=2.5
Скрытый текст
TransReply t(us)=2.0
Скрытый текст
Order t(us)=4.2
Скрытый текст
AFKS(us)=642.0
Скрытый текст
__tk(us)=825.9
Скрытый текст
__tk(us)=1.3
Скрытый текст
Order t(us)=3.3
Скрытый текст
Order t(us)=3.0
Скрытый текст
Order t(us)=2.6
Скрытый текст
__tk(us)=1.7
Скрытый текст
__tk(us)=1.3
Скрытый текст
TransReply t(us)=11.8
Скрытый текст
__tk(us)=2.9
Скрытый текст
AFKS(us)=584.2
Скрытый текст
__tk(us)=623.6
Скрытый текст
SBER(us)=140.5
Скрытый текст
__tk(us)=154.1
Скрытый текст
Order t(us)=4.2
Скрытый текст
Order t(us)=3.0
Скрытый текст
TransReply t(us)=4.7
Скрытый текст
Order t(us)=6.7
Время сервера, время последней сделки., Разное время передаваемое с сервера.
Пользователь
Сообщений: Регистрация: 30.01.2015
26.04.2022 16:20:34
Цитата
Nikolay написал: Прямо сейчас наблюдаю такую картину. Время сервера отстает на минуту от текущего времени (оно синхронизировано и корректно). При этом время последней сделки на минуту впереди времени сервера и близко к правильному текущему времени, т.е. тоже опережает время сервера.
Я могу понять, что это проблема брокера (Сбербанк), но с какой стати время сделки в будущем относительно времени сервера брокера и времени пакета? Т.е. я понимаю, что время сделки просто транслирует биржа, но серверная часть должна же не просто транслировать, но и как-то контролировать, что она транслирует.
сервер брокера никак не контролирует то, что транслирует с биржи. его задача работать со заявками клиентов, проверять достаточность средств и формат заявок и отправлять их на сервер биржи. время сервера иногда гуляет относительно времени биржи.
не все то золото, что блестит
Пользователь
Сообщений: Регистрация: 30.01.2015
26.04.2022 08:44:51
Расскажу Вам об одном заблуждении, которое бытует не столько у чайников, как у профи, ваяющих роботов на луа. -------------- Постановка задачи : --------------------- Есть инструмент X и его параметр P. Надо сделать таблицу инструментов и их параметров. Периодически надо искать параметры конкретного инструмента X в этой таблице. ------------------ Вопрос: Как быстрее сделать поиск нужного элемента таблицы. ----------------------- есть как минимум два способа организации таблицы ------------- Вариант 1 использовании хэш индексов. В этом случае для записи параметра P инструмента X таблицу T, пишем T[X]=P , чтобы прочитать параметр P надо записать P=T[X] ---------------------------------- Вариант 2 -любимый тех писателей роботов, которые плохо знают луа, но писали на других языках программирования. В этом случае используем два индексных массива T1 и T2, в которых под одинаковыми номерами j пишем T1[j]=X; T2[j]=P ============= Теперь для поиска параметра P элемента X во втором варианте надо перебрать в цикле по индексу массив T1 и найти X потом по этому индексу прочитать параметр из массива T2 =========== Какой вариант быстрее? Давайте сравним на следующем тесте: ------------ заполняем три массива
Код
local t,t1,t2={},{},{}
local N=1000
for i=1,N do local x="a"..i; local x1="b"..i; t[i]=x; t1[i]=x1; t2[x]=x1 end
считаем время по первому варианту:
Код
local Tm1=0;
for i=1,N do local x="a"..i;
nklib.startA();
local s=t2[x];
Tm1=Tm1+nklib.stopA();
end
print(0.1*Tm1);
считаем время по второму варианту :
Код
local Tm2=0;
for i=1,N do local j; local x="a"..i;
nklib.startA();
for n=1,N do if t[n]==x then j=i; break end end
local s=t1[j];
Tm2=Tm2+nklib.stopA();
end
print(0.1*Tm2);
print(Tm2/Tm1)
Результат:
Вариант 1: 58 мкс Вариант 2: 8027 мкс ------------------ Резюме: Вариант 2 в 138 раз медленнее, чем Вариант 1.
1. Вероятность того, что все клиенты одновременно выставляют заявки РАВНА нулю.
2. Даже в этом случае данные от клиентов обрабатываются последовательно, и очередь (системная) одна: даже просто для того, чтобы раскидать пакеты по серверам, нужно принимать какие-то решения на уровне диспетчера, даже если эти решения принимаются на аппаратном уровне.
3. Заявка клиента будет стоять в очереди до тех пор, пока не будет исполнена или снята, а никакие не "8 секунд". Если же под "заявкой" подразумевается любая транзакция, то время её обработки наверняка будет зависеть от её вида.
4. Брокер, у которого столько клиентов, не может быть стеснён в деньгах по определению, и с радостью расширит свою пропускную способность до любых требуемых величин. Возможно даже, он часть заявок своих клиентов замкнёт друг на друга у себя, связываясь с биржей лишь в остальных случаях.
5. В любом случае "реальное время" у робота на клиенте нужно измерять В СЕКУНДАХ, а не в МИЛЛИсекундах и не в МИКРОсекундах. Dixi.
Владимир, ---------------- Я хотя бы привожу свое со ссылкой на числовые данные доступные на отчетах конференций разработчиков QUIK. Вы же голословно рассуждаете. ----------------------- Все Ваши домыслы полная хрень. ------------------------- Вот лишь доказательство этого п.4: ---------------- По существу замечу следующее (читайте ФЗ "о рынке ЦБ" и ГК РФ) ---------------- Брокер не имеет право замыкать сделки между клиентами, если они не дали согласие на внебиржевые сделки. Но и в этом случае клиенты должны подать соответствующие поручения. ----------------- Остальные пункты даже критиковать не буду. Мало ли что на заборе пишут.
Как получить значение индикатора на предыдущей свече
Пользователь
Сообщений: Регистрация: 30.01.2015
25.04.2022 12:46:40
пишите значения индикатора в массив и читайте со смещением ------------------ Пример: local t={ } ----- local x=indicator(i) ---------------------- if x then t[i]=x else if #t>0 then t[i]=t[i-1] end end -- если значения нет, то пишем предыдущее значение ------------------- local M=#t; local x1; if M>0 then x1=t[M-1] end --читаем предыдущее значение ------------------- local x2; if M>01 then x1=tM-2] end --читаем предпредыдущее значение
написал: Это означает, что данные мы получаем не чаще чем один раз в 0.7 секунды в виде пакета, Потом этот пакет пересылается нам в колбеки. В итоге вам кажется, что вы получаете данные в реальном времени, а в действительности с задержкой на 0.7 секунды. В реальных торгах задержка возможно и меньше, но передачу пакетом никто не отменял.
По моему опыту мне кажется, что данные я получаю чаще, чем один раз в 0.7 секунды. Но, как говорится, частота получения данных и задержка - это две большие разницы. В реальных торгах задержка может достигать нескольких секунд или более. Хоть получать вы можете данные с высокой частотой, но это будут "старые" данные с большой задержкой.
У меня данные с сервера приходят с задержкой 0.03 сек - это задержка канала связи (смотрим в информационном окне терминала QUIK в расширенном режиме) . ----------------------------------- Но как быстро обновляются данные в пакетах среза - это вопрос открытый. ---------------------------------- Ранее встречал информацию, что биржа рассылает широковещательно информацию с интервалом 0.5 сек. ================= При большой очереди к серверу брокера задержка реакции на транзакцию может составить и секунды. ------------------------ Сами разработчики QUIK сообщали ранее, что скорость обслуживания транзакции сервером QUIK составляет 0.001 сек. ============== Пример задержки реакции сервера брокера на транзакцию клиента. ----------------------- У известного брокера число клиентов 800 тысяч. Предположим, у него 100 серверов. Предположим, что все клиенты выставляют заявки. В среднем на каждом сервере будет очередь 8000. ----------------------------------------- Последний в очереди будет стоять в очереди 8 секунд.
TWS - это терминал как и QUIK Терминал к терминалу подключать смысла нет. ---------------------------- Вам надо терминал QUIK подключать к серверу TWS. Но это вам не дадут сделать разработчики QUIK ------------------------ Если Вы хотите сделать робота для TWS то для этого их API - аналог QLUA в терминале QUIK ---------------------
тейк профит, отступ от мах, мин.
Пользователь
Сообщений: Регистрация: 30.01.2015
25.04.2022 12:16:36
Цитата
Алексей написал: Здравствуйте, почитал пост но все равно не разобрался. Помогите пожалуйста. Оставлял тейк профит заявку на покупку одного лота AGRO по цене 865 отступ и спред стояли 0,стояла галочка "купить по рыночной цене" в итоге цена пришла на 864 заявка висит как исполнена но лот не купился. Указано "Не прошла контроль лимитов" Если не сложно покажите на примере какие параметры заявки тейк профит на покупку должны стоять если я хочу взять 1 лот по цене 865. Заранее спасибо
У Вас пробема в том, что Вы указали -купить по рынку. Поставьте конкретную цену и все будет OK
Кривые шибки в QLua
Пользователь
Сообщений: Регистрация: 30.01.2015
08.04.2022 08:41:27
Цитата
Старатель написал: QUIK 9.3.1.11, Lua 5.4 Ещё парочка "неуловимых" косяков. Обе ошибки были в main. Никаких сторонних библиотек не подключено, только QLua-код.
1.
Код
local Time = tonumber(( os.date ( '%H%M' )))
if Time > = 2300 then
Вопрос к любителям ловли ошибок в QLUA ----------------- Представим , что в момент вывода функцией main параметров некоторой таблицы QUIK происходит вызов терминалом колбека QLUA и изменение этой таблицы., ------------ Вопросы: 1) что будет выводить функция main в этом случае, то что было до вызова колбека или то, что осталось после вызова. ------------------------------- 2) если будут в параметрах nil, то это ошибка QLUA, или ошибка писателя main, который использует потоко не безопасные функции в ней? Например, использовал функцию getParamEx.
Если его запустить, то length = 5. Если закомментировать a[4] length = 3. Если закомментировать a[2] или a[3], то сразу или с какого то раза length = 5.
Все работает правильно. Чтобы проверить это набираем Ваш пример в Scite -редакторе текста со встроенным отладчиком версия вот ваш скрипт:
Если его запустить, то length = 5. ----------------- a[1]=1 a[2]=3 a[3]=5 a[4]=7 a[5]=9 a[6]=nil length=5 >Exit code: 0 >D:/lua54/lua54.exe -e "io.stdout:setvbuf 'no'" "test_.lua" ===================== Если закомментировать a[4] length = 3. a[1]=1 a[2]=3 a[3]=5 a[4]=nil a[5]=9 a[6]=nil length=3 >Exit code: 0 ========================== Т е QLUA не виновата __________________ В документации на Lua Вы можете прочитать, что длина массив #a - не является действительной длиной, если в массиве есть дырки - nil --------------------------
[CODE][/CODE]
доработка таблицы Позиции по инструментам
Пользователь
Сообщений: Регистрация: 30.01.2015
08.04.2022 08:06:41
Цитата
написал: Вы должны сами решить, в каком классе из возможных продавать ваши бумаги. Кроме вас, никто об этом не знает.
вы сами писали в первом сообщении, что можете перебрать доступные торговому счету классы и найти там тот в котором можно продать ваши бумаги. Ну и делайте так, если все равно, как превратить бумаги в деньги.
ваш ответ, еще больше усилил проблему. то, что можно найти класс не решает проблемы совершения сделки по рынку. Например, как Вы пишите, докупили в классе не полных лотов. И при поиске класса нашли именно его В нем Вы и выставите стоп по рыночной цене. А когда стоп сработает, то там либо будет мало ликвидности либо ее вообще нет. И Ваш робот огребет по полной. как Вам такой расклад?
Найдите, где правильно?, Вопрос к разработчикам QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
08.04.2022 07:38:16
плечо - это то же самое что риск (почти тоже самое)
Найдите, где правильно?, Вопрос к разработчикам QUIK
Пользователь
Сообщений: Регистрация: 30.01.2015
08.04.2022 07:36:23
Добрый день,
Вопрос к разработчикам:
Что считает терминал QUIK в таблице купить/продать и что же считает функция getBuySellInfo . ------------------- Казалось бы должны считать одно и тоже. ====================== Если -нет, то дайте ссылку на документацию. =============== Проверяем: Берем данные из таблицы терминала купить продать и по этим данным считаем функцией getBuySellInfo =========== результат ниже: Сумма - это произведение цены на количество. --------------------------------- Отличия: 1) Все суммы различные , даже там , где цена и количество одинаковые Например ===========================================
28
MGNT
4201
71
298 271
71
298 662
=============================================
2) QUIK для всех акций считает как не маржинальные, а формула очевидно учитывает маржинальные Но учитывает как то странно Например:
Риск 5.9, но для физ лиц не может быть более 5, а для юр. лиц может быть аж 8. Откуда 5.9 ? ------------------------ Там, где риск=1, количество не совпадает в большинстве случаях.
Например:
================================================
20
ISKJ
85.2
3512
299 222
3518
299 804
1.0
================================================
QUIK Позиции
getBuySellInfo
плечо
Код инструмента
Цена
Купить
Сумма
Купить
Сумма
Риск
2
AFKS
13.821
21709
300 040
62013
855 283
2.9
3
AFLT
38.14
7867
300 047
46576
1 760 573
5.9
4
AGRO
1041
288
299 808
288
299 520
1.0
5
ALRS
93
3226
300 018
18921
1 759 653
5.9
6
BANEP
671
445
298 595
1250
843 750
2.8
7
BSPB
63.12
4753
300 009
4753
299 772
1.0
8
CHMF
1077.4
278
299 517
1627
1 753 906
5.8
9
CNTL
10.2
28685
292 587
29394
299 819
1.0
10
DSKY
85.31
3515
299 865
3527
299 795
1.0
11
ENRU
0.5283
567206
299 655
564219
299 826
1.0
12
ETLN
71.58
4177
298 990
4166
299 785
1.0
13
FIVE
1360
220
299 200
223
299 378
1.0
14
FLOT
53.27
5632
300 017
5634
299 785
1.0
15
GAZP
242.8
1234
299 615
7110
1 728 868
5.8
16
GCHE
3197.5
93
297 368
93
297 182
1.0
17
GLTR
384
781
299 904
781
299 826
1.0
18
HYDR
0.7816
381357
298 069
2203275
1 727 368
5.8
19
IRAO
2.678
112043
300 051
112206
299 826
1.0
20
ISKJ
85.2
3512
299 222
3518
299 804
1.0
21
KAZT
474.8
631
299 599
639
299 691
1.0
22
KMAZ
101.3
2947
298 531
2959
299 747
1.0
23
KZOSP
21.51
13801
296 860
13906
299 813
1.0
24
LKOH
5306.5
56
297 164
326
1 733 994
5.8
25
LSRG
540
555
299 700
555
299 700
1.0
26
MAGN
43.34
6919
299 869
6893
299 811
1.0
27
MDMG
597
500
298 500
500
299 250
1.0
28
MGNT
4201
71
298 271
71
298 662
1.0
29
MOEX
104.2
2872
299 262
2869
299 811
1.0
30
MRKC
0.2622
1131419
296 658
1135705
299 826
1.0
31
MRKP
0.1718
1731404
297 455
1744205
299 829
1.0
32
MSNG
1.78
168568
300 051
168633
299 829
1.0
33
MTLR
102.2
2935
299 957
2956
299 768
1.0
34
MTLRP
195.8
1525
298 595
1524
299 695
1.0
35
MTSS
217.8
1376
299 693
1375
299 750
1.0
36
MVID
248.8
1205
299 804
1200
299 640
1.0
37
NKNCP
81.18
3696
300 041
3699
299 767
1.0
38
NLMK
161.9
1852
299 839
1852
299 728
1.0
39
NMTP
4.94
60191
297 344
60510
299 827
1.0
40
NVTK
1288
232
298 816
232
299 466
1.0
41
OGKB
0.4179
718000
300 052
720558
299 824
1.0
42
OKEY
27.93
10735
299 829
10738
299 805
1.0
43
OZON
1302.5
230
299 575
232
299 280
1.0
44
PIKK
589.9
508
299 669
510
299 625
1.0
45
PLZL
13479.5
22
296 549
22
296 472
1.0
46
POGR
12.69
23644
300 042
23608
299 822
1.0
47
POLY
942.3
318
299 651
318
299 810
1.0
48
POSI
1051.8
285
299 763
285
299 820
1.0
49
QIWI
443.5
675
299 363
674
299 728
1.0
50
RASP
389
771
299 919
771
299 803
1.0
51
RENI
46.98
6386
300 014
6382
299 826
1.0
52
RNFT
103.4
2901
299 963
2910
299 730
1.0
53
ROSN
407
737
299 959
736
299 552
1.0
54
RSTI
0.7177
417842
299 885
417528
299 827
1.0
55
RTKM
62.35
4793
298 844
4833
299 791
1.0
56
RTKMP
62.65
4785
299 780
13640
854 546
2.8
57
RUAL
70.74
4238
299 796
4243
299 768
1.0
58
RUGR
25.2
11906
300 031
12260
299 806
1.0
59
SBER
145.86
2055
299 742
12076
1 760 560
5.9
60
SBERP
153.34
1956
299 933
1949
299 737
1.0
61
SELG
46.86
6403
300 045
6434
299 824
1.0
62
SFTL
289
1038
299 982
1037
299 589
1.0
63
SGZH
9.298
32267
300 019
32347
299 824
1.0
64
SIBN
434.95
689
299 681
692
299 705
1.0
65
SMLT
2709
110
297 990
110
299 233
1.0
66
SNGS
26.13
11483
300 051
11395
299 825
1.0
67
SNGSP
35.15
8535
300 005
8528
299 802
1.0
68
TATN
395.5
758
299 789
758
299 789
1.0
69
TATNP
348
861
299 628
861
299 628
1.0
70
TCSG
3542
84
297 528
84
298 746
1.0
71
UPRO
1.647
181410
298 782
181935
299 829
1.0
72
VKCO
511.4
586
299 680
581
299 680
1.0
73
VTBR
0.022835
13140021
300 052
13225443
299 821
1.0
74
YNDX
2108.4
142
299 393
142
298 654
1.0
доработка таблицы Позиции по инструментам
Пользователь
Сообщений: Регистрация: 30.01.2015
08.04.2022 07:12:38
Цитата
написал: Вы должны сами решить, в каком классе из возможных продавать ваши бумаги. Кроме вас, никто об этом не знает.
вы сами писали в первом сообщении, что можете перебрать доступные торговому счету классы и найти там тот в котором можно продать ваши бумаги. Ну и делайте так, если все равно, как превратить бумаги в деньги.
я и решаю сам. Но предложение мое направлено на то, чтобы не заниматься этим . Никто не мешает поставить туда класс по которому куплена первое количество, либо последнее количество, А если кому-то хочется поплясать с бубном, так никто не запрещает.
Цена последней сделки
Пользователь
Сообщений: Регистрация: 30.01.2015
07.04.2022 21:58:59
Цитата
Андрей написал: Коллеги, подскажите, пожалуйста, как будет полностью выглядеть скрит Qlua для получения последней цены фьючерса? Заранее спасибо
local last = getParamEx(class, sec, "last").param_value;
Задержка в выставлении заявок.
Пользователь
Сообщений: Регистрация: 30.01.2015
07.04.2022 21:56:42
Цитата
Сергей написал: Добрый день! Вчера, начиная с 18:20 не выставлялись заявки на срочном рынке, при этом терминал никаких ошибок не выдавал(но заявки в таблице заявок не появлялись), свечи обновлялись. sendTransaction ошибок не выдавал. OnTransReply - тоже ничего не зафиксировал, как будто заявок и не было. В 18:44 попытался выйти в деньги и выставить заявку вручную - тоже не получилось. В 19:00 посыпались ошибки "невозможно выставить заявку т.к. сессия неактивна". Брокер(Альфа-директ) сообщил, что у них всё работало штатно, проблема, вероятно, с моей стороны. Что это могло быть, и как избежать подобных ситуаций.
выводите сообщения транзакций и колбеков в лог-файл. сможете разобраться что и как было и почему.
Дисконты применяются только при маржинальной торговле.
nikolz, как обычно, сел в лужу
как обычно, это вы из нее вылезли ,чтобы прокукарекать чушь. ------------------ Вы прочитайте внимательно. речь идет о функции, которая при расчетах дает не то, что дает терминал КВИК. А он считает без учета плечей, ---------------------- Про заемные средства Вы тоже не в теме. ---------------------- Если У вас нет никаких бумаг то нахрен Вам дисконты. ---------------------- Заемные средства считаются лишь с учетом плеча. --------------------------- Торгую с маржинальными сделками давно. ================= но в данной теме никакие плечи не учитываются, а дисконты вообще применять можно лишь к тупой голове, так как акций для залога в данном расчете нет. --------------------------- Тему уже засрали все, кому не лень, аА объяснить на числах, почему формула и КВИК дает разные результаты никто не может. =================== Хотелось бы услышать автора этой формулы. Просьба разработчиков рассказать , что эта формула считает и почему такое расхождение в результатах расчета КВИКа и этой формулы.
чтобы это значило?
Пользователь
Сообщений: Регистрация: 30.01.2015
07.04.2022 21:36:44
Читаем таблицу, которую получает колбек OnDepoLimit ---------------- currentbal=0.0 locked_sell=0.0 locked_buy=0.0 wa_position_price=0.0 sec_code=CNTL firmid=NC0011100000 client_code=1737 limit_kind=-3 locked_buy_value=9.96 awg_position_price=0.0 wa_price_currency=SUR openbal=0.0 trdaccid=NL0011100043 locked_sell_value=-1e+48 -- Стоимость инструментов , заблокированных на продажу currentlimit=0.0 openlimit=0.0 ----------------------- Вопрос к знатокам: сколько стоят инструменты, заблокированные на продажу?
доработка таблицы Позиции по инструментам
Пользователь
Сообщений: Регистрация: 30.01.2015
07.04.2022 21:30:51
да, напомню, что в документации по квику сказано:
CLASSCODE
Код класса, по которому выполняется транзакция, например TQBR. Обязательный параметр
доработка таблицы Позиции по инструментам
Пользователь
Сообщений: Регистрация: 30.01.2015
07.04.2022 21:21:24
Цитата
написал: Акции в вашем портфеле не привязаны к классам. Это кажется необычным, но это так. Акци. Лукойла теоретически вы можете купить в разных классах, при этом они будут учтены вместе одним количеством.
стандартный случай, когда вы купили тот же Лукойл в классе tqbr и потом догнались тем же лукойлом в классе неполных лотов
Вот именно. Но Вы не поняли проблемы. Вопрос в том, как выставить заявку на число акций в позиции, если класс вам не известен? или вы можете выставить заявку без указания класса?
доработка таблицы Позиции по инструментам
Пользователь
Сообщений: Регистрация: 30.01.2015
07.04.2022 10:31:50
Добрый день, Предлагаю зарегистрировать следующее пожелание. Добавить в таблицу "Позиции по инструментам" class_code. -------------------- Объясняю в чем проблема. ================= При написании скриптов возникает необходимость получить параметры по инструментам, чтобы выставлять какие-либо заявки. ------------- Для формирования заявки по позиции инструмента нужен класс этого инструмента, а его в таблице позиций нет. ---------------- В результате, чтобы найти класс надо делать "танцы с бубном" извлекать клиента по нему находить торговый счет по счету находить фирму и получать список торгуемых классов потом в классах искать тот, в каком есть данный инструмент. ----------------- Напоминает наблюдение гланд через зад. Занятие занятное , но бесполезное. ================= Спасибо
Таких глюков ещё не было. брокер Открытие, В таблице отображаются не существующие заявки, которые нельзя не увидеть, не снять.
В таблице отображаются не существующие заявки, которые нельзя не увидеть, не снять
А короткая продажа на фьючерсе сейчас разрешена?
Чудно считает CalcBuySell
Пользователь
Сообщений: Регистрация: 30.01.2015
05.04.2022 19:20:11
Для тех,кто не понял либо не знает, но что-то советует. -------------------- Показываю, что считает QUIK ---------------- Квик считает именно так, как посчитал Я. --------------------------- Сумма 300 тысяч.
Дисконты вообще не из той оперы. ---------------------------------- Удивляюсь, как Вы вообще торгуете, если ничего не понимаете, но даете советы.
сильно тормозит quik
Пользователь
Сообщений: Регистрация: 30.01.2015
05.04.2022 10:30:00
Цитата
Павел написал: P.S.S. Торгую через Сбербанк, ВТБ, ПСБ. Картина везде одинаковая.
посмотрите в информационном окне задержку обмена с сервером.
сильно тормозит quik
Пользователь
Сообщений: Регистрация: 30.01.2015
04.04.2022 19:49:47
Цитата
Павел написал: P.S.S. Торгую через Сбербанк, ВТБ, ПСБ. Картина везде одинаковая.
посмотрите пинг до сервера брокера, а также в диспетчере задач загрузку процессора и использование памяти. и напишите результат.
Два Quik с одним брокером, Конфликты ?
Пользователь
Сообщений: Регистрация: 30.01.2015
04.04.2022 15:18:41
Цитата
Александр П написал: добрый день. подскажите, а возможно ли установить один квик и в нём уже переключаться между двумя-тремя брокерами?
PS: не нашел подходящей темы, поэтому пишу тут)
Интересно, как терминал будет создавать архивы под разных брокеров и защищенные каналы связи. сейчас все брокеры используют двухфакторное соединение, Тоже прикольно посмотреть как QUIK с этим справится. --------------- Проще откройте кучу квиков, но в одном окна и все индикаторы, а в других лишь стаканы торгуемых интсрументов. и будет Вам счастье.
Программа не запускается, не хватает памяти под объекты
Пользователь
Сообщений: Регистрация: 30.01.2015
02.04.2022 17:04:01
Цитата
Вячеслав написал: При запуске приложения ошибка , пишет не хватает памяти под объекты, без которых приложение не может работать. Памяти на компьютере свободной дост аточно, программ запущенных больше нет. Как это все можно исправить ?
Можно, надо показать, что Вы написали.
Не могу заставить работать функцию Subscribe_Level_II_Quotes()
Пользователь
Сообщений: Регистрация: 30.01.2015
02.04.2022 17:02:03
Цитата
Вася написал: function Subscribe(list) for i = 1, #list do local classCode = list[1] local secCode = list[2] local x = Subscribe_Level_II_Quotes(class_code, sec_code) while not x do sleep(10) end Calculate(classCode, secCode) endendВ ней я по очереди подписываюсь на котировки по каждому инструменту функцией Subscribe_Level_II_Quotes(). Дальше цикл (на всякий случай), чтобы убедиться, что функция вернула true. И дальше какое-то вычисление.Здесь у меня все работает нормально.Дальше я прохожусь циклом по этому же списку, чтобы отписаться от каждой котировки.function Unsubscribe(list) for i = 1, 100 do local classCode = list[1] local secCode = list[2] local x =Unsubscribe_Level_II_Quotes(class_code, sec_code) while not x do sleep(10) end endendЗдесь на первом же элементе из списка я застреваю в цикле while. Если цикл убрать, то функция отрабатывает, а отписка не происходит.Подскажите как справиться с этой проблемой. Нужно сначала подписаться на инструменты, потом отписаться от них.Версия квика 9.2.3.15. Может дело не в моих кривых руках, а в версии?
если актуально, то ловите решение: -------------------------- фрагмент скрипта
Код
while Subscribe_Level_II_Quotes(cl,se)==false do sleep(5) end --подписываемся на стакан
local z=IsSubscribed_Level_II_Quotes (cl,se); --проверяем подписку
Log:write(tostring(cl)..","..tostring(se)..",z="..tostring(z).."\n"); --выводим в файл результат
while Unsubscribe_Level_II_Quotes(cl,se)==false do sleep(5) end -- отписываемся от стакана
z=IsSubscribed_Level_II_Quotes (cl,se); --проверяем отписку
Log:write(tostring(cl)..","..tostring(se)..",z="..tostring(z).."\n"); --выводим в лог файл результат
Что думают по этому поводу разработчики этой функции? --------------------------- Хотелось бы услышать начальника транспортного цеха.
Чудно считает CalcBuySell
Пользователь
Сообщений: Регистрация: 30.01.2015
29.03.2022 06:30:12
Цитата
Дмитрий написал: ,а что не так? Бумаги маржинальные, соответственно, и покупка больше, чем на 300 тыс. Откройте таблицу Купить/Продать и сравните
На учебном сервере плечо 2. Т е максимум 600 тысяч, но не 1 млн.759тыс982. Даже, если предположить, что плечо максимальное (для квалифицированных инвесторов, которым я являюсь, плечо 5 ) , то все равно не выходит каменная чаша.