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

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

Страницы: Пред. 1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 72 След.
Race condition в Trans2Quik.dll?
 
Не влияет.
так как ответы от сервера приходят пакетами, то отсылал заявки с максимально возможной скоростью,  примерно со скоростью до 100 в секунду. В результате   почти положил сервер , так как отключили и предупредили, чтобы так не делал.
getitem и тип сделки. маркет-мейкер маркет-тейкер
 
Цитата
Владимир написал:

Если я что-нибудь в чём-нибудь понимаю, то сделка может быть либо активной либо пассивной, то есть это ОДИН бит информации, а здесь их ДВА. И что будем делать с состояниями 0x00 и 0x60?
0x00 - отмененное состояние.
0x60  - прикольно . Расскажите, как уместить 60 в два бита?  
Отладка подключаемой библиотеки Lua, Нужен способ отладки подключаемой библиотеки Lua
 
Цитата
Нуичточталексейужесуществует написал:
Цитата
nikolz написал:
Я отлаживаю свои dll в Scite.   Отладил не одну сотню функций для работы в луа и не только для КВИК, но и других встраиваемых систем.В чем проблема?
Проблема описана в топике. Раньше было удобно ловить в отладчике плюсовые ошибки. Если есть что предложить по теме, прошу выложить инструкцию как с помощью Scite поймать в отладчике плюсовую ошибку при работе терминала. Указание числа отлаженных Вами функций считаю офтопом.
Выложите пример с ошибкой, попробую показать на Вашем примере.
Узнать точное время скриптом
 
Написал скрипт на луа для коррекции компьютерного времени  по серверу точного времени.
Получилась вот  такая погрешность ( шаг по горизонт. оси=10 сек):


Отладка подключаемой библиотеки Lua, Нужен способ отладки подключаемой библиотеки Lua
 
Цитата
Нуичточталексейужесуществует написал:
Ну отладка через логирование у меня уже есть через нормальные lock-free очереди, вопрос не в этом.
Раз заявляется поддержка LUA, необходимо предоставить и нормальные средства разработки. Пусть отладочный, заведомо неюзабельный в проде, терминал без символов, пусть какой-то mock на lua - свою же lua часть они как-то отлаживают? Всегда можно найти способ подходящий только для добросовестных разработчиков.
Зачем провоцировать сообщество на взломы защит и распространение неофициальных релизов с подозрительными правками?  
Я отлаживаю свои dll в Scite.  
Отладил не одну сотню функций для работы в луа и не только для КВИК,
но и других встраиваемых систем.
В чем проблема?
SearchItems не успевает обновить данные по заявкам при вызове в OnTrade
 
Цитата
Cyber написал:
Како же тормозной этот SearchItems.
Или это у меня комп уже старый.
Чтоб проверить 100 цен на наличие в них заявок уходит около минуты.
Есть альтернативные методы?
Можно подробнее, что такое
"Чтоб проверить 100 цен на наличие в них заявок "

У меня эта функция работает очень быстро.  
Покажите свой скрипт.
Race condition в Trans2Quik.dll?
 
Информация к размышлению.
Тестил  скрипт на QLUA на демо сервере разработчиков.
За 4 часа 250 тысяч заявок выставил и снял.
Инструментов было 250.
Потоки открывались из пула столько, сколько надо. чтобы не было очереди по инструменту.
Максимальное число потоков получилось 12.
----------------
Проблем было ноль.
Узнать точное время скриптом
 
Время сервере брокера никак не привязано к работе сервера биржи.
Узнать точное время скриптом
 
Время сервере брокера никак не привязано к работе сервера брокера.
Наблюдал случаи когда время сервера запаздывало относительно биржи и сервера точного времени, но это не влияло на начало сессии.
Данные с биржи просто транслируются клиентам.
------------------
вообще-то время сервера биржи и время компьютера я не использую в торговле.
Я использую эти данные лишь для изучения потоков либо для обнаружения запаздывания данных по причине очередей  либо глюкам на
сервере брокера.
--------------------
Начало сессии определяю по движению цен и появлению заявок.
Узнать точное время скриптом
 
еще замечу, что нестабильность времени компьютера связана со стабильностью его часов на плате.
Для наглядности вот две картинки


На этой картинке погрешность показаний сервера точного времени, которые принимает компьютер.
Очевидно, что среднее значение равно нулю так как ошибка симметрична относительно нуля. А максимальное отклонение в пределах 10 ms
=========================  

А это картинка усредненной погрешности часов компьютера, которые синхронизируются от сервера точного времени
Очевидно, что погрешность имеет смещение и дрейф , которого нет в показаниях сервера.
Это результат дебильной системы фазовой автоподстройки винды и нестабильность аппаратных часов на плате.
Узнать точное время скриптом
 
Правда у некоторых брокеров бывают залеты, особенно по утрам.
Узнать точное время скриптом
 
для справки
сервер брокера тоже дает точное время.
Узнать точное время скриптом
 
Цитата
Serge123 написал:
Чтобы при приёме заявок раньше встать в очередь, я синхронизирую часы Виндовс по атомным часам и проверяю это в сервисах типа time100.ru. Но всё равно возникают погрешности. Напр., утром эти сервисы, как правило, говорят (да ещё и каждый по-своему), что у меня точное время, а в 19 часов, что мои часы спешат на 0.3 сек... Можно ли как-то узнавать время точнее, напр., с точностью 5-10 мсек? Например, получая его с сервера брокера? Или более точно установить его в Виндовс? Регион - Ставропольский край (не сам Ставрополь).
Писал про это на форуме.
Для более точной синхронизации надо настроить параметры винды.
Как и что , можно почитать на сайте майкрософт.
Но погрешность менее 10 ms будет в среднем.

 
SearchItems не успевает обновить данные по заявкам при вызове в OnTrade
 
Колбек вызывыется терминалом не после изменения таблицы, а перед ее изменением.
т е сначала вызывается колбек, а потом эти данные обновляют соответствующую таблицу.
-------------------------
Поэтому попытка прочитать изменения таблицы в колбеке всегда безрезультатна.
Получение скриптом инфо по OnAllTrade
 
Цитата
Serge123 написал:
Subscribe_Level_II_Quotes на получение этой информации? Если не создавать табл. обезл. сделок, то скрипт получает только инфо по OnQuote...
Subscribe_Level_II_Quotes и  OnQuote - это не сделки, а заявки.
Для писателей роботов
 
Судя по откликам, писатели ничего не увидели интересного.
Поэтому выскажу свое мнение.
------------
Про возможность конвертации данных из TXT в формат DAT и обратно.
---------------------
Есть два случая, когда надо дописать данные в архив свечей в формате DAT.
---
1) Иногда в истории появляются пропущенные дни, которые хотелось бы восстановить.
---
2) Для тестирования алгоритмов на истории нужна история больше чем 3000 свечей, доступных с сервера.
--
Пока единственный способ получить больше - это накапливать историю в реальном времени.
--------------------
Да, в статье рассказываются проблемы (особенности ) работы брокеров с сервером.
Но не стоит забывать, что все клиенты брокера получают инфу от этого сервера.
проблемы сервера - проблемы клиентов.
--------------
В статье есть два интересных момента.
Первый касается загрузки данных по клиентам. Пусть и упрощенно, но показано, что клиенты могут курить бамбук многие минуты.
------------------
Второй момент связан с загрузкой состояния счетов, при которой блокируются остальные потоки. т е опять клиенты курят бамбук.
---------------------
В статье говорится о скорости ядра в 2000 транзакций. Раньше читал о 1000.  
Писатели и буратины, могут просто посчитать сколько ждать ответки с биржи, когда рынок активно торгуется.
-------------------------  
Прикольно читать чистосердечные признания типа:
Ничего не понял (не увидел, не внюхал).
Всегда интересовало, зачем чел это пишет?
Ну не понял, твоя проблема.
Не интересует, не читай.  
Несколько окон с графиками, Как поместить графики в несколько отдельных окон. Нужно если у вас несколько мониторов.
 
Вкладки не выносятся.
 
Несколько окон с графиками, Как поместить графики в несколько отдельных окон. Нужно если у вас несколько мониторов.
 
Открываете окна->менеджер окон.
Несколько окон с графиками, Как поместить графики в несколько отдельных окон. Нужно если у вас несколько мониторов.
 
Открываете окна->монитор
В этом окне делаете следующее:
1)  выносите графики на второй монитор  и  Размещаете окна рядом.
2) Удаляете заголовки
3) Закрепляете
------------------
В результате :
Несколько окон с графиками, Как поместить графики в несколько отдельных окон. Нужно если у вас несколько мониторов.
 
Цитата
написал:
Здравствуйте, есть определенная сложность, поместить графики в отдельном окне (от окна терминала) графики с котировками, что бы их можно было бы переместить на другой монитор.
В данный момент приходится пользоваться несколькими брокерами.
В чем сложность?
У меня графики на втором мониторе без проблем
Некорректная информация
 
Цитата
написал:
Здравствуйте.  Я клиент банка ПСБ. Сегодня на срочном рынке у меня сделок не было, а в Квике минус 13 контрактов на доллар. Последние сделки были вчера в вечернюю сессию. После возобновления торгов с 13.30 заявка на покупку  даже одного контракта на доллар не ставилась, при попытке выставление заявки максимальное количество рассчитывалось.  Мальцев Василий Николаевич      +7(918)0332791     mvn5711@mail.ru  
На срочном рынке  дневная сессия начинается вчера вечером.
Для писателей роботов
 
... поправят.
Для писателей роботов
 
Цитата
написал:
Я, конечно, не знаю давность информации и конфигурацию оборудования, но вот это: " Пропускная способность не сильно производительного mssql сервера примерно 1500-2000 транзакций в секунду "   вызывает сомнения.
20-30к в секунду - это нормально. Бывает и 200к.

А если взять другие базы данных, то там 100-200к - это просто норма, не говоря уже про документные базы. Если бы, для примера Quik был на NYSE, то при 1,5к - просто все встало бы.
И, кстати, оставаться сейчас на транзакционной базе данных для прокси сервера, уже выглядит странно.

Так что, если это так, то все настолько печально, что даже уже не вызывает никаких эмоций прибитая гвоздями кодировка win-1251.
Вы немного путаете. В данном случае речь идет о сервере.
Раньше читал выступление разработчиков QUIK в котором они сами говорили что их сервера обеспечивают скорость 1000 транзакций в секунду.
Если стало лучше , то поправит.
Для писателей роботов
 
Еще очень прикольно,
что есть API и его раздают брокерам,
а их клиентам -  фиг вам,
хотя за все платят клиенты.
----------------
Для писателей роботов
 
В данной статье меня заинтересовало следующее:

Также необходимо помнить, что объём передаваемых данных в сторону клиентов, так и в 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 полностью блокирует приём любых данных кроме этих, до окончания передачи.



















Для писателей роботов
 
Рекомендую ознакомиться :
https://habr.com/ru/articles/680872/
getitem и тип сделки. маркет-мейкер маркет-тейкер
 
Цитата
написал:
Спасибо, я проверю на практике, но у меня закралось сомнение, что это не совсем тот маркет-мейкер, что нужно. Если не ошибаюсь тут маркет-мейкер - это не то, как была исполнена заявка(по рынку или как лимитная) , а как признак того, что заявка была выставлена участником маркет-мейкером.  
Код
    
Из Вашего вопроса и следовало, что Вы хотите  узнать участника.
Чтобы получить нужный Вам ответ , пишите правильно вопросы.  
getitem и тип сделки. маркет-мейкер маркет-тейкер
 
Цитата
написал:
Я перепутал, не deals, а trades имел в виду в getItem
примерно так:
capacityNUMBERРоль в исполнении заявки. Возможные значения:  
  • «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 и тип сделки. маркет-мейкер маркет-тейкер
 
что-то я не вижу таблицу 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
 
Цитата
написал:
Добрый день!
Подскажите где взять indicators.zip под lua 5.4. У меня часть индикаторов на 5.4. и вместе на одном графике они не уживаются с 5.3.
indicators.zip  Это какой-то архив?
Вы где его взяли?
Вы думаете, что все должны знать, что у Вас в этом архиве?
Take profit, Take profit
 
Цитата
написал:
Цитата
написал:
Алгоритм нормальный.
Не нормальный. Если я хочу продать от 18 100, то не надо продавать существенно ниже этой цены. А это произойдет, если сразу будет сделка на 40 пунтов ниже.
для этого есть спред.  
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
Цитата
Цитата
написал:
Задача такая. Есть график или стакан по одной акции. Нужно запустить скрипт и он должен отправить заявку по этой акции. Для заявки нужен sec_code. sec_code должен браться автоматом от графика или стакана. Графики и стаканы привязаны якорем к таблице с акциями.
функция getDataSourceInfo() работает как и говорилось.
Вот пример как ваша хотелка.
График подключен якорем к ТТТ
щелкаем в ТТТ строку с инструментом. Он появляется на графике, а в окошке выводится код инструмента этой функцией.

Take profit, Take profit
 
Цитата
написал:
Установил тейк-профит 18 100, отступ 2, спред -2. На открытии был взлёт и падение цены. Заявка выставлена по 18 063 и исполнена по 18 084. Не лучший тут алгоритм.

ИМХО, надо чтобы цена выставлялась не ниже чем тейк-профит минус отступ минус спред.
Это в случае если цена резко скакнёт против. В остальном случае будет как сейчас.
Алгоритм нормальный. У Вас есть лучше, с интересом почитаю, как он реально работает.
Как задали , так и получили.
Кроме того, все зависит от задержки выставления заявки по тейку.
И Вы в очереди не первый.

Зеркало не виновато.
Как получить sec_code по идентификатору графика?, Как получить sec_code по идентификатору графика?
 
написал:
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 по идентификатору графика?
 
Цитата
написал:
Присвоил графику идентификатор WWWbond.
Код работает. Выдает число свечек.

x = getNumCandles('WWWbond') message('x= ' ..x)  Пытаюсь разными способами получить по этому идентификатору WWWbond sec_code. Никак не получается, такая возможность вообще есть?

Код не работает.

graphic_id = 'WWWbond'
sec_code = getSecurityInfo(graphic_id)
message("График " .. sec_code)
getDataSourceInfo

Функция предназначена для получения информации об источнике данных для  индикатора.  

TABLE info getDataSourceInfo()

Функция возвращает таблицу Lua с параметрами:  

ВАЖНО! Для корректной работы функции getDataSourceInfo, вызываемой из
функции Init, необходимо перезапустить Рабочее место QUIK после добавления
индикатора на график.  


ПараметрТипОписание
intervalNUMBERТекущий интервал (тайм-фрейм) графика
class_codeSTRINGКод класса источника данных
sec_codeSTRINGКод инструмента источника данных
paramSTRINGНаименование параметра Таблицы текущих торгов, по которому строится график.  Если поле пустое, то график строится на основании Таблицы обезличенных  сделок

Возможные значения поля interval:

Работа асберг-заявки
 
Цитата
написал:
Недавно был удивлен, ставил айсберг примерно 1% от дневного оборота по акции кусочками по 100 лотов. До этого всегда думал, что если по этой же цене стоит кто-то еще за тобой, то между кусочками айсберга его пропустят вперед твоего очередного кусочка, при удовлетворении заявки. А тут кто-то крупный бахнул по рынку и мой айсберг почти полностью съел, но не весь, а тот чел так и остался за мной. Но самое удивительной, что в потоке обезличенных сделок эта сделка прошла одной строкой в несколько тысяч контрактов.
Это как?
Я вообще думал, что айсберги, как и стопы, хранятся на сервере брокера и отправляются на биржу по мере исполнения кусочков?
Пусть даже это ММ шалит и убрал свою же заявку перед тем как бахнуть по моей. Но в потоке сделок должны же быть видны все кусочки айсберга?
читайте:
https://www.moex.com/s3171
Задержка при зачислении бумаг
 
Цитата
Сергей С. написал:
Цитата
nikolz написал:
 
Цитата
Сергей С.  написал:
 По вашей ссылки какой-то форум и там много чего написано.
   

Поместите сюда тот скрипт, результаты которого выложили. .
-- Флаг поддержания работы скриптаIsRun = true;

Это пустой скрипт.
в нем ничего не выставляется.
Поясните, что вы им тестируете и каким образом.
Задержка при зачислении бумаг
 
Цитата
Сергей С. написал:
По вашей ссылки какой-то форум и там много чего написано.


Поместите сюда тот скрипт, результаты которого выложили. .
Задержка при зачислении бумаг
 
Цитата
Сергей С. написал:
Цитата
nikolz написал:
сделал тест.
вот результат:  
Код
    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 секунды. .    
Попробовал с колбеком. Запустил Скрипт отслеживания работы функций обратного вызова:
https://quikluacsharp.ru/qlua-osnovy/funktsii-obratnogo-vyzova-vstroennye-v-qlua/

И вот результат:
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  
------------
Теперь Вы лукавите, это у вас другая задержка
-------------------------------
Если хотите, то выложите свой скрипт я его проверю.
Обновление пользовательской таблицы/окна
 
Цитата
Nikolay написал:
29.12.2022 20:34:14
Посмотрите Выше мое сообщение от 29.12.2022 20:34:14 относительно Вашего теста.
Он работает без проблем.
Если что-то не так, то выложите скрипт для теста проверю еще раз.
Обновление пользовательской таблицы/окна
 
Цитата
Alexander написал:
Цитата
nikolz написал:
Гадать нет смысла, а запустить у себя Ваш скрипт нет возможности.Но ,без обид,уверен, что ошибка Ваша, а не КВИКА.
Сто процентов не у меня! Какая нахрен ошибка? Один и тот же скрипт с утра и с вечера по разному заработал! В скрипте ничего не меняется. Один и тот же код, один и тот же цикл - то выводит, то не выводит. Я скажу так. В курсе вообще как и когда обновление окна происходит надеюсь. WM_PAINT это его дело! Так вот при при щелчке мышки в окне, WM_SIZE срабатывает, его разрабы написали, что он обрабатывает его, при этом все данные от SetCell попадают туда, куда надо - в буфер, а далее InvalidateRect или UpdateWindow, что вызывает WM_PAINT, где и перерисовывается таблица. Тож самое при щелчке мышкой WM_LBUTTONDOWN только срабатывает. Так вот а когда и как срабатывает WM_PAINT для окна, когда мы не щёлкаем, не меняем размер окна, когда окно просто на экране и ничего с ним не делаем? Вот это пусть разрабы и ответят. Об этом я их уже сколько прошу? Нет ответа никакого. Думаю вот если проблема не закроется - писать прогу, чтобы слала в окно сообщение WM_SIZE из вне с определённой переодичностью. Т.е. насильно извне заставить обработать WM_PAINT/ Может так и заработает, но при условии, что все данные от SetCell уже есть в нужном буфере. А если они не в буфере из которого идёт обновление таблицы, а "болтаются" неизвестно где, мало ли как у них там это реализовано?, промежуточные буфера, очереди и прочее, тогда ничего и так не получится!
если хотите выложите скрипт я могу его запустить на демо сервере и сказать Вам конкретно.
Задержка при зачислении бумаг
 
это скрипт теста.
Код
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
Обновление пользовательской таблицы/окна
 
Цитата
Alexander написал:
Цитата
nikolz написал:
Выше я выкладывал скрипт, который тестировал. И все там обновляется.
С утра запущены 4 скрипта абсолютно одинаковые. Выставлены разные переменные просто. Все 4 скрипта сейчас идеально всё выводят в ячейку и показывают last синхронно с ТТТ. При этом код сейчас крутится в вышеприведённом цикле(так как last в определённом диапазоне). При выходе из этого диапазона идёт выход из цикла и из функции и попадаем в main() в цикл while(так как уже в другом диапазоне last). Там во while тоже идёт вывод в ячейку last, но только уже в другую и нихрена уже ничего не выводит! Щёлкнишь мышкой по строке - данные обновятся. Или размер окна дёрнешь - обновятся. Опять попадает last в нужный диапазон, опять вызов функции и в repeat цикл и опять всё обновляется. Вчера было всё НАОБОРОТ!!! while обновлял ячейку, repeat нет.
Гадать нет смысла, а запустить у себя Ваш скрипт нет возможности.
Но ,без обид,уверен, что ошибка Ваша, а не КВИКА.
Задержка при зачислении бумаг
 
сделал тест.
вот результат:
Код
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 секунды. .    
Задержка при зачислении бумаг
 
Цитата
Сергей С. написал:
Цитата
nikolz написал:
Вы тоже не видите ошибку, пока ее не найдете.Если хотите помощь, выложите пример с результатом.  
round_trip = os.clock()
TransBuy(_market_buy, _ticker_buy)
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
round_trip = os.clock() - round_trip
str = string.format("%.3f", round_trip)
round_trip_file:write(os.date().."\t".._ticker_buy.."(".._market_buy..")\tBuy\t"..str.." сек\n")

function TransBuy(class_code, sec_code)
local _res
trans_id = os.time()
Transaction_buy = {
["ACCOUNT"] = Account,
["CLIENT_CODE"] = Client_code,
["TYPE"] = "M",
["TRANS_ID"] = tostring(trans_id),
["CLASSCODE"] = class_code,
["SECCODE"] = sec_code,
["ACTION"] = "NEW_ORDER",
["OPERATION"] = "B",
["PRICE"] = "0",
["QUANTITY"] = "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 
Обновление пользовательской таблицы/окна
 
Цитата
Alexander написал:
Цитата
Выше я выкладывал скрипт, который тестировал. И все там обновляется.
-------------------------
В вашем случае, так как полного скрипта нет, могу лишь предположить.
--------------------
Проблема в Вашем скрипте .  
Возможно у Вас внутренний цикл блокирует обновление таблицы.
-----
Попробуйте убрать его.
У Вас уже есть один внешний цикл и часто внутренние циклы оказываются лишними.
---------
В программах реального времени (QUIK и скрипты - это и есть программы РВ)
применение циклов считается плохим решением.
Как правило они лишь тормозят обработку и всегда можно сделать алгоритм без этих циклов.
Задержка при зачислении бумаг
 
Цитата
Сергей С. написал:
Поясните, Вы это делаете в индикаторе или в скрипте.
QLua — Получить время возобновления торгов, "Старт торгов ... установлен с хх:хх:00 мск."
 
есть еще такой способ.
использовать колбек onParam.
В него приходят все изменения TTT
Можно поставить фильтр на нужный инструмент и обнаруживать начало торгов по появлению заявок и сделок.
Задержка при зачислении бумаг
 
Цитата
Сергей С. написал:
Цитата
nikolz написал:
Что-то у Вас не так, возможно в Вашем скрипте Функция  getDepoEx лишь берет данные из архива терминала , откуда Вы и видите в таблице их.
Я бы согласился с тем, что проблемы в моем скрипте, если бы не было разницы между первой и последующими сделками. Ведь скрипт не видит разницу между ними, для него все сделки одинаковы.
Вы тоже не видите ошибку, пока ее не найдете.
Если хотите помощь, выложите пример с результатом.  
Преобразование времени в число
 
я делаю так
так лучше :
local t = dat a:T(i)
YYMMDD =  t.day +100*( t.month +100*t.year)
HHMMSS =t.sec +100*( t.min  +100* t.day)
Страницы: Пред. 1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 72 След.
Наверх