Не влияет. так как ответы от сервера приходят пакетами, то отсылал заявки с максимально возможной скоростью, примерно со скоростью до 100 в секунду. В результате почти положил сервер , так как отключили и предупредили, чтобы так не делал.
Если я что-нибудь в чём-нибудь понимаю, то сделка может быть либо активной либо пассивной, то есть это ОДИН бит информации, а здесь их ДВА. И что будем делать с состояниями 0x00 и 0x60?
0x00 - отмененное состояние. 0x60 - прикольно . Расскажите, как уместить 60 в два бита?
Отладка подключаемой библиотеки Lua, Нужен способ отладки подключаемой библиотеки Lua
написал: Я отлаживаю свои dll в Scite. Отладил не одну сотню функций для работы в луа и не только для КВИК, но и других встраиваемых систем.В чем проблема?
Проблема описана в топике. Раньше было удобно ловить в отладчике плюсовые ошибки. Если есть что предложить по теме, прошу выложить инструкцию как с помощью Scite поймать в отладчике плюсовую ошибку при работе терминала. Указание числа отлаженных Вами функций считаю офтопом.
Выложите пример с ошибкой, попробую показать на Вашем примере.
Узнать точное время скриптом
Пользователь
Сообщений: Регистрация: 30.01.2015
24.09.2023 16:09:55
Написал скрипт на луа для коррекции компьютерного времени по серверу точного времени. Получилась вот такая погрешность ( шаг по горизонт. оси=10 сек):
Отладка подключаемой библиотеки Lua, Нужен способ отладки подключаемой библиотеки Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
24.09.2023 14:05:16
Цитата
Нуичточталексейужесуществует написал: Ну отладка через логирование у меня уже есть через нормальные lock-free очереди, вопрос не в этом. Раз заявляется поддержка LUA, необходимо предоставить и нормальные средства разработки. Пусть отладочный, заведомо неюзабельный в проде, терминал без символов, пусть какой-то mock на lua - свою же lua часть они как-то отлаживают? Всегда можно найти способ подходящий только для добросовестных разработчиков. Зачем провоцировать сообщество на взломы защит и распространение неофициальных релизов с подозрительными правками?
Я отлаживаю свои dll в Scite. Отладил не одну сотню функций для работы в луа и не только для КВИК, но и других встраиваемых систем. В чем проблема?
SearchItems не успевает обновить данные по заявкам при вызове в OnTrade
Пользователь
Сообщений: Регистрация: 30.01.2015
22.09.2023 06:50:13
Цитата
Cyber написал: Како же тормозной этот SearchItems. Или это у меня комп уже старый. Чтоб проверить 100 цен на наличие в них заявок уходит около минуты. Есть альтернативные методы?
Можно подробнее, что такое "Чтоб проверить 100 цен на наличие в них заявок "
У меня эта функция работает очень быстро. Покажите свой скрипт.
Race condition в Trans2Quik.dll?
Пользователь
Сообщений: Регистрация: 30.01.2015
21.09.2023 17:35:48
Информация к размышлению. Тестил скрипт на QLUA на демо сервере разработчиков. За 4 часа 250 тысяч заявок выставил и снял. Инструментов было 250. Потоки открывались из пула столько, сколько надо. чтобы не было очереди по инструменту. Максимальное число потоков получилось 12. ---------------- Проблем было ноль.
Узнать точное время скриптом
Пользователь
Сообщений: Регистрация: 30.01.2015
21.09.2023 05:54:27
Время сервере брокера никак не привязано к работе сервера биржи.
Узнать точное время скриптом
Пользователь
Сообщений: Регистрация: 30.01.2015
21.09.2023 05:53:59
Время сервере брокера никак не привязано к работе сервера брокера. Наблюдал случаи когда время сервера запаздывало относительно биржи и сервера точного времени, но это не влияло на начало сессии. Данные с биржи просто транслируются клиентам. ------------------ вообще-то время сервера биржи и время компьютера я не использую в торговле. Я использую эти данные лишь для изучения потоков либо для обнаружения запаздывания данных по причине очередей либо глюкам на сервере брокера. -------------------- Начало сессии определяю по движению цен и появлению заявок.
Узнать точное время скриптом
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2023 19:10:05
еще замечу, что нестабильность времени компьютера связана со стабильностью его часов на плате. Для наглядности вот две картинки
На этой картинке погрешность показаний сервера точного времени, которые принимает компьютер. Очевидно, что среднее значение равно нулю так как ошибка симметрична относительно нуля. А максимальное отклонение в пределах 10 ms ========================= А это картинка усредненной погрешности часов компьютера, которые синхронизируются от сервера точного времени Очевидно, что погрешность имеет смещение и дрейф , которого нет в показаниях сервера. Это результат дебильной системы фазовой автоподстройки винды и нестабильность аппаратных часов на плате.
Узнать точное время скриптом
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2023 18:36:23
Правда у некоторых брокеров бывают залеты, особенно по утрам.
Узнать точное время скриптом
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2023 18:35:00
для справки сервер брокера тоже дает точное время.
Узнать точное время скриптом
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2023 18:23:16
Цитата
Serge123 написал: Чтобы при приёме заявок раньше встать в очередь, я синхронизирую часы Виндовс по атомным часам и проверяю это в сервисах типа time100.ru. Но всё равно возникают погрешности. Напр., утром эти сервисы, как правило, говорят (да ещё и каждый по-своему), что у меня точное время, а в 19 часов, что мои часы спешат на 0.3 сек... Можно ли как-то узнавать время точнее, напр., с точностью 5-10 мсек? Например, получая его с сервера брокера? Или более точно установить его в Виндовс? Регион - Ставропольский край (не сам Ставрополь).
Писал про это на форуме. Для более точной синхронизации надо настроить параметры винды. Как и что , можно почитать на сайте майкрософт. Но погрешность менее 10 ms будет в среднем.
SearchItems не успевает обновить данные по заявкам при вызове в OnTrade
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2023 16:25:56
Колбек вызывыется терминалом не после изменения таблицы, а перед ее изменением. т е сначала вызывается колбек, а потом эти данные обновляют соответствующую таблицу. ------------------------- Поэтому попытка прочитать изменения таблицы в колбеке всегда безрезультатна.
Получение скриптом инфо по OnAllTrade
Пользователь
Сообщений: Регистрация: 30.01.2015
20.09.2023 06:20:56
Цитата
Serge123 написал: Subscribe_Level_II_Quotes на получение этой информации? Если не создавать табл. обезл. сделок, то скрипт получает только инфо по OnQuote...
Subscribe_Level_II_Quotes и OnQuote - это не сделки, а заявки.
Для писателей роботов
Пользователь
Сообщений: Регистрация: 30.01.2015
15.09.2023 17:00:18
Судя по откликам, писатели ничего не увидели интересного. Поэтому выскажу свое мнение. ------------ Про возможность конвертации данных из TXT в формат DAT и обратно. --------------------- Есть два случая, когда надо дописать данные в архив свечей в формате DAT. --- 1) Иногда в истории появляются пропущенные дни, которые хотелось бы восстановить. --- 2) Для тестирования алгоритмов на истории нужна история больше чем 3000 свечей, доступных с сервера. -- Пока единственный способ получить больше - это накапливать историю в реальном времени. -------------------- Да, в статье рассказываются проблемы (особенности ) работы брокеров с сервером. Но не стоит забывать, что все клиенты брокера получают инфу от этого сервера. проблемы сервера - проблемы клиентов. -------------- В статье есть два интересных момента. Первый касается загрузки данных по клиентам. Пусть и упрощенно, но показано, что клиенты могут курить бамбук многие минуты. ------------------ Второй момент связан с загрузкой состояния счетов, при которой блокируются остальные потоки. т е опять клиенты курят бамбук. --------------------- В статье говорится о скорости ядра в 2000 транзакций. Раньше читал о 1000. Писатели и буратины, могут просто посчитать сколько ждать ответки с биржи, когда рынок активно торгуется. ------------------------- Прикольно читать чистосердечные признания типа: Ничего не понял (не увидел, не внюхал). Всегда интересовало, зачем чел это пишет? Ну не понял, твоя проблема. Не интересует, не читай.
Несколько окон с графиками, Как поместить графики в несколько отдельных окон. Нужно если у вас несколько мониторов.
Пользователь
Сообщений: Регистрация: 30.01.2015
14.09.2023 16:26:40
Вкладки не выносятся.
Несколько окон с графиками, Как поместить графики в несколько отдельных окон. Нужно если у вас несколько мониторов.
Пользователь
Сообщений: Регистрация: 30.01.2015
14.09.2023 07:28:40
Открываете окна->менеджер окон.
Несколько окон с графиками, Как поместить графики в несколько отдельных окон. Нужно если у вас несколько мониторов.
Пользователь
Сообщений: Регистрация: 30.01.2015
14.09.2023 07:26:54
Открываете окна->монитор В этом окне делаете следующее: 1) выносите графики на второй монитор и Размещаете окна рядом. 2) Удаляете заголовки 3) Закрепляете ------------------ В результате :
Несколько окон с графиками, Как поместить графики в несколько отдельных окон. Нужно если у вас несколько мониторов.
Пользователь
Сообщений: Регистрация: 30.01.2015
13.09.2023 17:18:34
Цитата
написал: Здравствуйте, есть определенная сложность, поместить графики в отдельном окне (от окна терминала) графики с котировками, что бы их можно было бы переместить на другой монитор. В данный момент приходится пользоваться несколькими брокерами.
В чем сложность? У меня графики на втором мониторе без проблем
Некорректная информация
Пользователь
Сообщений: Регистрация: 30.01.2015
13.09.2023 17:17:01
Цитата
написал: Здравствуйте. Я клиент банка ПСБ. Сегодня на срочном рынке у меня сделок не было, а в Квике минус 13 контрактов на доллар. Последние сделки были вчера в вечернюю сессию. После возобновления торгов с 13.30 заявка на покупку даже одного контракта на доллар не ставилась, при попытке выставление заявки максимальное количество рассчитывалось. Мальцев Василий Николаевич +7(918)0332791
На срочном рынке дневная сессия начинается вчера вечером.
Для писателей роботов
Пользователь
Сообщений: Регистрация: 30.01.2015
12.09.2023 06:38:23
... поправят.
Для писателей роботов
Пользователь
Сообщений: Регистрация: 30.01.2015
12.09.2023 06:37:40
Цитата
написал: Я, конечно, не знаю давность информации и конфигурацию оборудования, но вот это: " Пропускная способность не сильно производительного mssql сервера примерно 1500-2000 транзакций в секунду " вызывает сомнения. 20-30к в секунду - это нормально. Бывает и 200к.
А если взять другие базы данных, то там 100-200к - это просто норма, не говоря уже про документные базы. Если бы, для примера Quik был на NYSE, то при 1,5к - просто все встало бы. И, кстати, оставаться сейчас на транзакционной базе данных для прокси сервера, уже выглядит странно.
Так что, если это так, то все настолько печально, что даже уже не вызывает никаких эмоций прибитая гвоздями кодировка win-1251.
Вы немного путаете. В данном случае речь идет о сервере. Раньше читал выступление разработчиков QUIK в котором они сами говорили что их сервера обеспечивают скорость 1000 транзакций в секунду. Если стало лучше , то поправит.
Для писателей роботов
Пользователь
Сообщений: Регистрация: 30.01.2015
11.09.2023 18:11:05
Еще очень прикольно, что есть API и его раздают брокерам, а их клиентам - фиг вам, хотя за все платят клиенты. ----------------
Для писателей роботов
Пользователь
Сообщений: Регистрация: 30.01.2015
11.09.2023 17:43:13
В данной статье меня заинтересовало следующее:
Также необходимо помнить, что объём передаваемых данных в сторону клиентов, так и в QuikExporter ограничен для обеспечения стабильности работы.
Попробуем немного посчитать. У нас есть 10000 клиентов, у каждого из них 3 счёта в валюте (рубли, доллары, евро). Плюс к этому портфель на 30 бумаг. При этом лимиты у нас существуют в двух днях(Т0 и Т+). 10000*3*2+10000*30*2 = 60000+600000 = 660000 элементов. Пропускная способность не сильно производительного mssql сервера примерно 1500-2000 транзакций в секунду. Итого для загрузки информации о портфелях в промежуточную базу нужно 660000/2000 = 330 секунд, это 5 с половиной минут.
и это:
Ниже скрипт для автоматического разбора группы файлов из бинарного формата в человекочитаемый.
quik_candlefile_dat_parser.py
и это: Дело в том, что в момент начала фазы передачи данных таблиц MoneyLimits и DepoLimits, QUIK Exporter полностью блокирует приём любых данных кроме этих, до окончания передачи.
Для писателей роботов
Пользователь
Сообщений: Регистрация: 30.01.2015
11.09.2023 08:24:46
Рекомендую ознакомиться :
getitem и тип сделки. маркет-мейкер маркет-тейкер
Пользователь
Сообщений: Регистрация: 30.01.2015
10.09.2023 07:08:17
Цитата
написал: Спасибо, я проверю на практике, но у меня закралось сомнение, что это не совсем тот маркет-мейкер, что нужно. Если не ошибаюсь тут маркет-мейкер - это не то, как была исполнена заявка(по рынку или как лимитная) , а как признак того, что заявка была выставлена участником маркет-мейкером.
Код
Из Вашего вопроса и следовало, что Вы хотите узнать участника. Чтобы получить нужный Вам ответ , пишите правильно вопросы.
getitem и тип сделки. маркет-мейкер маркет-тейкер
Пользователь
Сообщений: Регистрация: 30.01.2015
09.09.2023 16:33:31
Цитата
написал: Я перепутал, не deals, а trades имел в виду в getItem
примерно так:
capacity
NUMBER
Роль в исполнении заявки. Возможные значения:
«0» – не определено;
«1» – Agent;
«2» – Principal;
«3» – Riskless principal;
«4» – CFG give up;
«5» – Cross as agent;
«6» – Matched principal;
«7» – Proprietary;
«8» – Individual;
«9» – Agent for other member;
«10» – Mixed;
«11» – Market maker
Код
n = getNumberOf("trades")
for i=0,n-1 do
local t = getItem("trades", i)
if t.capacity==11 then
-- это Market maker
end
end
getitem и тип сделки. маркет-мейкер маркет-тейкер
Пользователь
Сообщений: Регистрация: 30.01.2015
09.09.2023 12:17:30
что-то я не вижу таблицу deals в списке таблиц, используемых в функциях getItem (см док)
TableName
Таблица
firms
Фирмы
classes
Классы
securities
Инструменты
trade_accounts
Торговые счета
client_codes
* Коды клиентов
all_trades
Обезличенные сделки
account_positions
Позиции участника по деньгам
orders
Заявки
futures_client_holding
Позиции по клиентским счетам (фьючерсы)
futures_client_limits
Ограничения по клиентским счетам
money_limits
Позиции по деньгам
depo_limits
Позиции по инструментам
trades
Сделки
stop_orders
Стоп-заявки
neg_deals
Заявки на внебиржевые сделки
neg_trades
Сделки для исполнения
neg_deal_reports
Отчеты по сделкам для исполнения
firm_holding
Позиции участника по инструментам
account_balance
Позиции участника по торговым счетам
ccp_holdings
Обязательства и требования по активам
rm_holdings
Валюта: обязательства и требования по активам
* - функция getNumberOf("client_codes") возвращает количество доступных
==================================
Дайте ссылку, где в документации на QLUa Вы ее нашли.
Все индикаторы на Lua
Пользователь
Сообщений: Регистрация: 30.01.2015
06.09.2023 19:41:09
Цитата
написал: Добрый день! Подскажите где взять indicators.zip под lua 5.4. У меня часть индикаторов на 5.4. и вместе на одном графике они не уживаются с 5.3.
indicators.zip Это какой-то архив? Вы где его взяли? Вы думаете, что все должны знать, что у Вас в этом архиве?
Take profit, Take profit
Пользователь
Сообщений: Регистрация: 30.01.2015
06.09.2023 15:18:25
Цитата
написал:
Цитата
написал: Алгоритм нормальный.
Не нормальный. Если я хочу продать от 18 100, то не надо продавать существенно ниже этой цены. А это произойдет, если сразу будет сделка на 40 пунтов ниже.
для этого есть спред.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
Пользователь
Сообщений: Регистрация: 30.01.2015
06.09.2023 15:15:40
Цитата
Цитата
написал: Задача такая. Есть график или стакан по одной акции. Нужно запустить скрипт и он должен отправить заявку по этой акции. Для заявки нужен sec_code. sec_code должен браться автоматом от графика или стакана. Графики и стаканы привязаны якорем к таблице с акциями.
функция getDataSourceInfo() работает как и говорилось. Вот пример как ваша хотелка. График подключен якорем к ТТТ щелкаем в ТТТ строку с инструментом. Он появляется на графике, а в окошке выводится код инструмента этой функцией.
Take profit, Take profit
Пользователь
Сообщений: Регистрация: 30.01.2015
06.09.2023 07:15:03
Цитата
написал: Установил тейк-профит 18 100, отступ 2, спред -2. На открытии был взлёт и падение цены. Заявка выставлена по 18 063 и исполнена по 18 084. Не лучший тут алгоритм.
ИМХО, надо чтобы цена выставлялась не ниже чем тейк-профит минус отступ минус спред. Это в случае если цена резко скакнёт против. В остальном случае будет как сейчас.
Алгоритм нормальный. У Вас есть лучше, с интересом почитаю, как он реально работает. Как задали , так и получили. Кроме того, все зависит от задержки выставления заявки по тейку. И Вы в очереди не первый.
Зеркало не виновато.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
Пользователь
Сообщений: Регистрация: 30.01.2015
06.09.2023 07:03:37
написал: tiker_id = "WWWbond"
local sec_code = getSecurityInfo(tiker_id, "SEC_CODE")
message("Название акции: " ..sec_code)
дает ошибку attempt to concatenate a nil value (local 'sec_code')
почему это не работает((( что за проклятье как тяжело получить этот SEC_CODE
============================== Вы не ту функцию взяли. Читайте внимательнее. вам выше специально скопировал из документации ------------------ функция getDataSourceInfo, а у Вас getSecurityInfo ------------------------ getSecurityInfo Функция предназначена для получения информации по инструменту. Формат вызова: TABLE getSecurityInfo (STRING class_code, STRING sec_code) Функция возвращает таблицу Lua с параметрами Таблицы инструментов.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
Пользователь
Сообщений: Регистрация: 30.01.2015
05.09.2023 13:57:08
Цитата
написал: Присвоил графику идентификатор WWWbond. Код работает. Выдает число свечек.
x = getNumCandles('WWWbond') message('x= ' ..x) Пытаюсь разными способами получить по этому идентификатору WWWbond sec_code. Никак не получается, такая возможность вообще есть?
Функция предназначена для получения информации об источнике данных для индикатора.
TABLE info getDataSourceInfo()
Функция возвращает таблицу Lua с параметрами:
ВАЖНО! Для корректной работы функции getDataSourceInfo, вызываемой из функции Init, необходимо перезапустить Рабочее место QUIK после добавления индикатора на график.
Параметр
Тип
Описание
interval
NUMBER
Текущий интервал (тайм-фрейм) графика
class_code
STRING
Код класса источника данных
sec_code
STRING
Код инструмента источника данных
param
STRING
Наименование параметра Таблицы текущих торгов, по которому строится график. Если поле пустое, то график строится на основании Таблицы обезличенных сделок
Возможные значения поля interval:
Работа асберг-заявки
Пользователь
Сообщений: Регистрация: 30.01.2015
05.09.2023 06:43:54
Цитата
написал: Недавно был удивлен, ставил айсберг примерно 1% от дневного оборота по акции кусочками по 100 лотов. До этого всегда думал, что если по этой же цене стоит кто-то еще за тобой, то между кусочками айсберга его пропустят вперед твоего очередного кусочка, при удовлетворении заявки. А тут кто-то крупный бахнул по рынку и мой айсберг почти полностью съел, но не весь, а тот чел так и остался за мной. Но самое удивительной, что в потоке обезличенных сделок эта сделка прошла одной строкой в несколько тысяч контрактов. Это как? Я вообще думал, что айсберги, как и стопы, хранятся на сервере брокера и отправляются на биржу по мере исполнения кусочков? Пусть даже это ММ шалит и убрал свою же заявку перед тем как бахнуть по моей. Но в потоке сделок должны же быть видны все кусочки айсберга?
Tue Aug 29 11 : 21 : 47 2023 , getDepo Ex currentbal = 0.0
Tue Aug 29 11 : 21 : 47 2023 ,выставляем заявку
Tue Aug 29 11 : 21 : 48 2023 , getDepo Ex currentbal = 10.0
Tue Aug 29 11 : 21 : 48 2023 ,OnDepolimit currentbal = 10.0
1 строка - до выставления заявки 2 строка выставили заявку по рынку и купили 3 строка getDepoEx ответ в колбеке 4 строка - колбек OnDepoLimit -------------------- Резюме: Задержка менее 1 секунды. .
Попробовал с колбеком. Запустил Скрипт отслеживания работы функций обратного вызова:
И вот результат: 1 29.08.2023 13:16:35 OnInit - инициализация функции main 15702.911 2 29.08.2023 13:19:40 (162) Заявка на покупку N 38404828165 зарегистрирована (1 удовлетворено). 3 29.08.2023 13:19:40 OnMoneyLimit - изменение денежного лимита 15888.112 ... 8 29.08.2023 13:19:40 OnMoneyLimit - изменение денежного лимита 15888.145 9 29.08.2023 13:19:40 OnOrder - новая заявка или изменение параметров существующей заявки 15888.149 10 29.08.2023 13:19:40 OnOrder - новая заявка или изменение параметров существующей заявки 15888.151 11 29.08.2023 13:19:40 OnTrade - новая сделка 15888.152 12 29.08.2023 13:19:40 OnMoneyLimit - изменение денежного лимита 15888.155 ... 17 29.08.2023 13:19:40 OnMoneyLimit - изменение денежного лимита 15888.185 18 29.08.2023 13:19:45 OnDepoLimit - изменение бумажного лимита 15893.151 ... 23 29.08.2023 13:19:45 OnDepoLimit - изменение бумажного лимита 15893.168 24 29.08.2023 13:20:08 (163) Заявка на продажу N 38404864243 зарегистрирована (1 удовлетворено). 25 29.08.2023 13:20:08 OnDepoLimit - изменение бумажного лимита 15915.868 ... 36 29.08.2023 13:20:08 OnDepoLimit - изменение бумажного лимита 15915.934 37 29.08.2023 13:20:08 OnOrder - новая заявка или изменение параметров существующей заявки 15915.958 38 29.08.2023 13:20:08 OnOrder - новая заявка или изменение параметров существующей заявки 15915.961 39 29.08.2023 13:20:08 OnTrade - новая сделка 15915.962 40 29.08.2023 13:20:08 OnMoneyLimit - изменение денежного лимита 15915.964 ... 45 29.08.2023 13:20:08 OnMoneyLimit - изменение денежного лимита 15915.994 46 29.08.2023 13:20:08 OnDepoLimit - изменение бумажного лимита 15915.995 ... 57 29.08.2023 13:20:08 OnDepoLimit - изменение бумажного лимита 15916.039
Строки 17 и 18 - это покупка бумаги. Как раз та самая 5-секундная пауза, которую я и наблюдаю. Обратите внимание, строки 45, 46 - это продажа бумаги. Паузы уже нет. Это реальный счет, не демо. Пример для покупки SBER.
Серегей, Я вам выложил скрипт и результат. У меня никаких запаздываний нет. ------------------------ Как я понял теперь у Вас другая проблема. Раньше вы писали о задержке между таблицей и функцией getDepoEx ------------ Теперь Вы лукавите, это у вас другая задержка ------------------------------- Если хотите, то выложите свой скрипт я его проверю.
Посмотрите Выше мое сообщение от 29.12.2022 20:34:14 относительно Вашего теста. Он работает без проблем. Если что-то не так, то выложите скрипт для теста проверю еще раз.
написал: Гадать нет смысла, а запустить у себя Ваш скрипт нет возможности.Но ,без обид,уверен, что ошибка Ваша, а не КВИКА.
Сто процентов не у меня! Какая нахрен ошибка? Один и тот же скрипт с утра и с вечера по разному заработал! В скрипте ничего не меняется. Один и тот же код, один и тот же цикл - то выводит, то не выводит. Я скажу так. В курсе вообще как и когда обновление окна происходит надеюсь. WM_PAINT это его дело! Так вот при при щелчке мышки в окне, WM_SIZE срабатывает, его разрабы написали, что он обрабатывает его, при этом все данные от SetCell попадают туда, куда надо - в буфер, а далее InvalidateRect или UpdateWindow, что вызывает WM_PAINT, где и перерисовывается таблица. Тож самое при щелчке мышкой WM_LBUTTONDOWN только срабатывает. Так вот а когда и как срабатывает WM_PAINT для окна, когда мы не щёлкаем, не меняем размер окна, когда окно просто на экране и ничего с ним не делаем? Вот это пусть разрабы и ответят. Об этом я их уже сколько прошу? Нет ответа никакого. Думаю вот если проблема не закроется - писать прогу, чтобы слала в окно сообщение WM_SIZE из вне с определённой переодичностью. Т.е. насильно извне заставить обработать WM_PAINT/ Может так и заработает, но при условии, что все данные от SetCell уже есть в нужном буфере. А если они не в буфере из которого идёт обновление таблицы, а "болтаются" неизвестно где, мало ли как у них там это реализовано?, промежуточные буфера, очереди и прочее, тогда ничего и так не получится!
если хотите выложите скрипт я могу его запустить на демо сервере и сказать Вам конкретно.
Задержка при зачислении бумаг
Пользователь
Сообщений: Регистрация: 30.01.2015
29.08.2023 10:39:45
это скрипт теста.
Код
paths = "D:/nkarray/"
package.cpath =paths.."?.dll";
require"nkarray"
require"nkthread"
path = "D:/QUIK_SCRIPT/nk_bot/"
event=nkevent.Create("event");
local acc="NL0011100043"
local firmid="NC0011100000"
local firmid_f="SPBFUT000000"
local Client_code="10590"
local acc_f="SPBFUT000ie"
local sec_code="SBER"
local class_code="QJSIM"
Order_buy = {
["ACTION"]="NEW_ORDER",
["ACCOUNT"] = tostring(acc),
["CLIENT_CODE"] = Client_code,
["TYPE"] = "M",
["TRANS_ID"] = 0,
["CLASSCODE"] = class_code,
["SECCODE"] = sec_code,
["OPERATION"] = "B",
["PRICE"] = "0",
["QUANTITY"] = "1",
["EXPIRY_DATE"]="TODAY",
}
function main()
local f=0;
local trans_id=1;
while true do
nkevent.wait(event); --ждем события
local z=getDepoEx(firmid, Client_code,sec_code,acc,0); --или 2
if z then z=z.currentbal;
Log:write(os.date()..",getDepoEx currentbal="..tostring(z).."\n"); Log:flush();
end
if f==0 then
Log:write(os.date()..",выставляем заявку\n"); Log:flush();
Order_buy.TRANS_ID=tostring(trans_id);
local res = sendTransaction(Order_buy);
if res ~="" then message("Ошибка транзакции:"..res) else trans_id=trans_id+1; end
f=1;
local z=getDepoEx(firmid, Client_code,sec_code,acc,0).currentbal;
Log:write(os.date()..",getDepoEx currentbal="..tostring(z).."\n"); Log:flush();
-- f=0;
end
end
end
function OnDepoLimit(t)
sec=t.sec_code -- STRING Код инструмента
acc=t.trdaccid --STRING Счет депо
firm=t.firmid --STRING Идентификатор фирмы
client=t.client_code-- STRING Код клиента
cur=t.currentbal -- NUMBER Текущий остаток
Log:write(os.date()..",OnDepolimit currentbal="..tostring(cur).."\n"); Log:flush();
nkevent.Set(event);
end
function OnInit(pfile)
path = getScriptPath();
Log=io.open(path.."/forum_test.log","w") --лог файл
fconnect=isConnected();
end
function OnParam(c,s)
nkevent.Set(event);
end
написал: Выше я выкладывал скрипт, который тестировал. И все там обновляется.
С утра запущены 4 скрипта абсолютно одинаковые. Выставлены разные переменные просто. Все 4 скрипта сейчас идеально всё выводят в ячейку и показывают last синхронно с ТТТ. При этом код сейчас крутится в вышеприведённом цикле(так как last в определённом диапазоне). При выходе из этого диапазона идёт выход из цикла и из функции и попадаем в main() в цикл while(так как уже в другом диапазоне last). Там во while тоже идёт вывод в ячейку last, но только уже в другую и нихрена уже ничего не выводит! Щёлкнишь мышкой по строке - данные обновятся. Или размер окна дёрнешь - обновятся. Опять попадает last в нужный диапазон, опять вызов функции и в repeat цикл и опять всё обновляется. Вчера было всё НАОБОРОТ!!! while обновлял ячейку, repeat нет.
Гадать нет смысла, а запустить у себя Ваш скрипт нет возможности. Но ,без обид,уверен, что ошибка Ваша, а не КВИКА.
Задержка при зачислении бумаг
Пользователь
Сообщений: Регистрация: 30.01.2015
29.08.2023 10:32:45
сделал тест. вот результат:
Код
Tue Aug 29 11:21:47 2023,getDepoEx currentbal=0.0
Tue Aug 29 11:21:47 2023,выставляем заявку
Tue Aug 29 11:21:48 2023,getDepoEx currentbal=10.0
Tue Aug 29 11:21:48 2023,OnDepolimit currentbal=10.0
1 строка - до выставления заявки 2 строка выставили заявку по рынку и купили 3 строка getDepoEx ответ в колбеке 4 строка - колбек OnDepoLimit -------------------- Резюме: Задержка менее 1 секунды. .
_res = sendTransaction(Transaction_buy) if _res ~= "" then message("Ошибка транзакции покупки:".._res) end end
попробуйте для начала заменить это:
Код
while getDepoEx(Firm_ID, Client_code, _ticker_buy, Account, 2) == nil
do
sleep(100)
end
while tonumber(getDepoEx(Firm_ID, Client_code, _ticker_buy, Account, 2).currentbal) < 1
do
sleep(100)
end
на это:
Код
local z; while (z==nil) or (z.currentbal<1) do z=getDepoEx(Firm_ID, Client_code, _ticker_buy, Account, 2) end
Выше я выкладывал скрипт, который тестировал. И все там обновляется. ------------------------- В вашем случае, так как полного скрипта нет, могу лишь предположить. -------------------- Проблема в Вашем скрипте . Возможно у Вас внутренний цикл блокирует обновление таблицы. ----- Попробуйте убрать его. У Вас уже есть один внешний цикл и часто внутренние циклы оказываются лишними. --------- В программах реального времени (QUIK и скрипты - это и есть программы РВ) применение циклов считается плохим решением. Как правило они лишь тормозят обработку и всегда можно сделать алгоритм без этих циклов.
Поясните, Вы это делаете в индикаторе или в скрипте.
QLua — Получить время возобновления торгов, "Старт торгов ... установлен с хх:хх:00 мск."
Пользователь
Сообщений: Регистрация: 30.01.2015
28.08.2023 19:08:49
есть еще такой способ. использовать колбек onParam. В него приходят все изменения TTT Можно поставить фильтр на нужный инструмент и обнаруживать начало торгов по появлению заявок и сделок.
написал: Что-то у Вас не так, возможно в Вашем скрипте Функция getDepoEx лишь берет данные из архива терминала , откуда Вы и видите в таблице их.
Я бы согласился с тем, что проблемы в моем скрипте, если бы не было разницы между первой и последующими сделками. Ведь скрипт не видит разницу между ними, для него все сделки одинаковы.
Вы тоже не видите ошибку, пока ее не найдете. Если хотите помощь, выложите пример с результатом.
Преобразование времени в число
Пользователь
Сообщений: Регистрация: 30.01.2015
28.08.2023 18:02:02
я делаю так так лучше : local t = dat a:T(i) YYMMDD = t.day +100*( t.month +100*t.year) HHMMSS =t.sec +100*( t.min +100* t.day)