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

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 След.
Беспрерывная робота робота, Как сделать так, чтобы робот был постоянно в работе и обрабатывал каждый тик?
 
Владимир, Вы правы только в том, что обрабатывать тиковые данные через proxy терминал Квик - это не лучшая затея.
Хотя обрабатывать обезличенные сделки, т.е. каждый тик, вполне можно. Все зависит от задачи и скорости принятия решений. Для примера, задача: определить был ли реализован видимый объем в стакане сделками или снят - решается довольно просто, с достаточной точностью.

В остальном же, как обычно - не надо мне, не надо никому. Но мир не вращается вокруг Вас.
неужели OnParam самый быстрый?
 
Цитата
Старатель написал:
Nikolay, видимо, у вас не проверяется класс инструмента.
Это сделка из класса неполных лотов:
Да, в этом месте было без проверки. Спасибо.
неужели OnParam самый быстрый?
 
Опять поднимаю тему.

Сегодня брокер Сбербанк вернул по инструменту GAZP в параметрах
LAST =  287.79
TIME = 122304

Такой цены не было 19 сессий.

Возвращаюсь опять к вопросу: как контролировать корректность|актуальность значений, получаемых через getParamEx?
Чтение данных метки, Зависание терминала
 
Версия 9.5


Скрипт простой: ставим метку и потом читаем данные.  После установки метки берем и перетаскиваем ее на графике, желательно  быстро. Терминал зависает. На таком простом скрипте это происходит не  сразу, поэтому можно просто двигать метку до выявления эффекта. Частично помогает избежать проблемы увеличение sleep до 500.

На версиях 8.* - сколько не двигал не получается эффект зависания, даже на sleep 55.


На самом деле - серьезная проблема, т.к. считывание данных с меток - это единственный способ взаимодействия пользователя  с скриптом через график.

Ссылка на запись эффекта: https://disk.yandex.ru/d/OaffyXPOxRlG_Q


Тестовый скрипт:
Код
local sleep = _G.sleep
local isRun = true

local AddLabel          = _G.AddLabel
local GetLabelParams    = _G.GetLabelParams

function _G.OnStop()
    isRun = false
end

function _G.main()

    local tag       = 'virt_test'

    local label_params = {}
    label_params.YVALUE = 119.5
    label_params.TEXT = 'TEST    |||||||||||||||||||||||||||||||||||||||||||||'
    label_params.HINT = 'Еще текст'
    label_params.DATE = 20220611
    label_params.TIME = 152000
    label_params.FONT_FACE_NAME = 'Arial'
    label_params.ALIGNMENT = 'RIGHT'
    label_params.FONT_HEIGHT    = 10
    label_params.TRANSPARENT_BACKGROUND    = 1

    local l_id = AddLabel(tag, label_params)
    sleep(1000)

    while isRun do
        label_params = GetLabelParams(tag, l_id)
        if label_params then
            _G.message(tostring(label_params.yvalue))
        end
        sleep(100)
    end
end
Динамическое количество линий индикатора
 
Это значит что при попытке вывода линий они выводятся не на своих местах.
Для примера, в Settings.line три линии. В Init добавили еще две линии - их стало пять. Вернули из функции Init 5.
При отрисовке линий 4, 5 они выводятся поверх линий 1-3.
Ошибка: attempt to call a nil value (global 'foo'), непонятная ошибка в вызове пользовательской функции
 
В момент вызова foo она еще не определена.
Код в теле скрипта выполняется построчно вниз, определяя контекст.
Транзакции на снятие Лимит. заявки
 
Код, снимающий заявки у Вас написан, какой бы он ни был.

А далее есть вопросы организации последовательности вызовов методов. Необходимо учитывать, что скрипт работает на клиенте, а ответы приходят с сервера. Т.е. время ответа неизвестно.
Далее, если используете колбеки, то необходимо учитывать, что последовательность их прихода не гарантирована. Также, раз у нас клиент-сервер, то изменение состояния ордера после отправки транзакции на снятие, не придет мгновенно. Т.е. если транзакция на снятие ушла без ошибок, то пока не придет ответ или не прочитаете новое состояние ордера, отправлять новую транзакцию нельзя. Иначе возникнет ситуация когда отправили транзакцию на снятие, не дождались ответа и отправили новую.

Поэтому просто кусок кода ничего не даст.
Обмен сообщениями приложений , скриптов на Lua, Python ,С
 
Вопрос только один: как обеспечивается гарантированность доставки?
Как вручную активировать стоп-заявку через qlua?
 
Цитата
s_mike@rambler.ru написал:
Возможность принудительной активации стоп-заявки из луа, конечно же есть.

Поле транзакции и типом заявки выглядит так:

action="АКТИВИРОВАТЬ СТОП-ЗАЯВКУ"
Да, каждый раз забываю об это слабо-документированной возможности выгрузки кармана транзакций, с целью посмотреть формат транзакции.
Подскажите как передать информацию из QUIK в скрипт PYTHON через память компа?
 
Вот, вспомнил про это решение. Не пробовал сам, но в основе там socket

https://github.com/cia76/QuikPy.git
Как вручную активировать стоп-заявку через qlua?
 
Такой возможности нет. Но Вы всегда можете снять стоп ордер, дождаться статуса снятия и просто закрыть по рынку. Это будет аналогичное действие.
Как получить цену приобритеня акции?
 
Цитата
Владимир написал:
Nikolay, Не совсем так: торгую как раз ТОЛЬКО я - это я "купил 5 штук по цене X, потом еще 3 по цене Y, потом продал 2 по цене Z". Я их купил, это моя собственность, и только я могу знать, какие именно из них я продаю (хочу ли я это знать - это другой вопрос). Но ни брокер, ни кто-либо ещё этого знать в принципе не могут, и потому вынуждены считать по FIFO.
Так поэтому в Квике так и транслируется. Не нравится - считай сам.
Как получить цену приобритеня акции?
 
Возникает встречный вопрос - Вы пробовали посмотреть что хранится в указанных таблицах?

Что же касается стоимости, то вот купили Вы 5 штук по цене X, потом еще 3 по цене Y, потом продали 2 по цене Z. Какая стоимость приобретения?
Т.к. торгуете не только Вы, то приняты соглашения о методике расчета.
Как получить цену приобритеня акции?
 
В таблицах и хранится уже рассчитанное значение.
Как получить цену приобритеня акции?
 
Вы может узнать цену, рассчитанную брокером методом ФИФО. Будут ли она близка к той, что Вы хотите получить - это вопрос.

Но получить можете, сделав запрос к таблицам

futures_client_holding для FORTS
depo_limits для фондовой секции.

Можно получить прямым доступом к таблице, найдя нужную строку или воспользовавшись вспомогательными функциями
getDepo
getFuturesLimit
Подскажите как передать информацию из QUIK в скрипт PYTHON через память компа?
 
Цитата
Alex написал:
Пытался запустить Ваш скрипт, выдает. ошибку.   attempt to index a nil value (local 'pipe')
Правильно. Lua умеет писать (читать) в существующий "именованый файл". Поэтому на другой стороне его надо создать. Т.е. нужен сервер (служба), обслуживающий каналы. Вот его и надо на стороне питона делать
Подскажите как передать информацию из QUIK в скрипт PYTHON через память компа?
 
named pipes Lua поддерживает "прямо из коробки"
Код
    local pipe = io.open("\\\\.\\PIPE\\"..pipe_name, "w+b")
    if not pipe then
        return
    end
    pipe:write('BlaBla') -- записываем команду в канал

--Читаем
    local rd = ''
    local ct = os.time()
    -- Для примера: Т.к. время ожидания ответа может быть не мгновенным, то ожидаем 2 секунды, читая из канала ответ.
    while os.time() - ct < 2 and rd == '' do
        rd = pipe:read('*a')
    end
    tele_pipe:close() -- закрываем канал

А python - это же такая "помойка". Неужели нет готовой библиотеки сервера named pipes? Поиск выдает тонны вариантов.
Подскажите как передать информацию из QUIK в скрипт PYTHON через память компа?
 
named pipes, socket
Отладка кода, Программа для отладки кода на языке lua для квик версии 9+
 
методика print debug вам в помощь.

Для тестирования кода, лучше его тестировать, а не отлаживать.
Последовательность функций обратного вызова
 
Цитата
срабатывания условий тэйка  сервером выставляется новая заявка с новым  номером  order_num который нужно как-то отфильтровать и получить

При срабатывании стоп ордера происходит отправка транзакции сервером брокера. В случае успеха отправки (может не пройти), в стоп ордере, точнее в таблице stop_orders для записи вашего ордера, будет заполнено поле linked_order. Это и есть тот номер лимитного ордера, который отправлен по факту активации стоп ордера. По нему и ищите, фильтруйте. Правда, как и всегда при клиент-серверном взаимодействии, событие смены статуса стоп ордера и событие заполнения linked_order, и появление его в таблице orders, не мгновенные. И необходимо организовать методы ожидания.
Динамическое количество линий индикатора
 
Цитата
Zoya Skvorcova написал:
Nikolay, Добрый день,
     
      Описанная в данном инциденте проблема была устранена в версии       7.23.0 терминала QUIK.
      Данная версия была разослана всем брокерам системы QUIK в рамках       стандартной процедуры обновления версии 23.11.2018.
      По поводу получения обновления рекомендуем вам обратиться к своему       брокеру.
     
      Приносим извинения за причиненные неудобства.
Подниму..

Вроде работало, не следил. Но теперь в 9-ой версии не работает.

Если при первичной инициализации индикатора было x линий (добавление на график). А уже при повторной (после изменения настроек) линий больше x, то отрисовка линий происходит некорректно.
# и table.getn, # и table.getn - косячно
 
Да, никто не мешает самому организовать счетчик при добавлении и удалении элемента.
# и table.getn, # и table.getn - косячно
 
В Lua массивы начинают свою нумерацию от 1. Если будет дырка, то оператор # не вернет корректно значение.

Победить - создать метатаблицу, с переопределенным метаметодом  __len
Поиск ошибок в индикаторе
 
Так она и так выводится если код индикатора открыт.
Впрочем, можно обернуть текст функции OnCalculate (или исполняемой функции) в pcall. И выводить в лог или сообщения текст ошибки. Только стоит сделать кеш ошибок, чтобы не выводить одну и ту же на каждом баре, а то терминал "умирает" на длинных графиках, выводя в три прохода все эти сообщения.
Количество активных заявок одной командой, Количество активных заявок одной командой
 
Цитата
nikolz написал:
поправлю на запись о регистрации или снятии (исполнении) заявки уходит не более 10 мкс
---------------
на формирование и отсылки транзакции на снятие заявки уходит до  300 мкс
----------------------------
на формирование  и отсылку транзакции на новую заявку уходит 400 мкс
Это при летной погоде. Надеяться на такие времена всегда - плохая затея. Мой наблюдаемый рекорд от отправки транзакции до появления ордера - 10 минут.
Количество активных заявок одной командой, Количество активных заявок одной командой
 
Цитата
nikolz написал:
не все так просто.
Например,  уже есть активные заявки до включения скрипта.
либо произошел разрыв соединения и восстановление через несколько минут и часть активных заявок сработали.
Ну и т д
Конечно не просто. Собственно это и было написано, что необходимо свои заявки опрашивать. Также скрипт должен хранить свое состояние, чтобы при перезапуске, восстановлении соединения и т.д., проверить себя, что изменилось. Может быть так, что терминал упал вчера, а восстановился только сегодня. Поэтому все такие ситуации необходимо предусматривать. И закладывать архитектуру на колбеках - не самое надежное решение.
Количество активных заявок одной командой, Количество активных заявок одной командой
 
Вы, конечно, можете постоянно не сканировать активные заявки по таблице. При первичной постановке ордера необходимо один раз найти ордер в таблице ордеров и запомнить индекс таблицы. Тогда последующие обращения уже будут простые, без поиска.
Если же речь про то, чтобы вообще не искать ордера, то для лимитных ордеров - это не лучшая затея, т.к. в клиринг их снимут и необходимо предпринять какие-то действия. Да, можете по колбеку получить новое состояние ордера и отреагировать, но это если этот колбек не был пропущен.
Запуск скрипта из примера подвешивает терминал Quik
 
Цитата
Konstantin написал:
Убрал onAllTrade результат тот же. Может ещё что убрать...
Советую последовательно анализировать.

Для начала уберите обработку очереди и просто в каждом колбеке выводите сообщение, что пришел такой колбек. Функция main будет cодержать только sleep(10), например.


Код
 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 ( 10 )
     end 
 end

Потом уже последовательно возвращать в колбеках заполнение очереди. По одному, не во всех сразу.
Тогда, анализируя поведение скрипта, найдете причину.

И, главное, измените в функции ProcessingCallbakc sleep(3000) на sleep(10). А лучше вообще убрать. Я не представляю что необходимо выполнять три секунды на каждый колбек.
Сдвиг массива без цикла for или while, Возможно ли сдвинуть массив без цикла for или while, если количество строк массива может изменяться?
 
Цитата
Владимир написал:
Nikolay, Не помогут. ::  

Сдвинуть помогут. Вопрос был про сам сдвиг. Давить в конец, удалить в начале. Как я понимаю задача держать в массиве заданное число элементов.
Правда эту задачу можно решить кольцевым массивом, рассчитывая очередное место индекса массива через остаток от деления, например.
Сдвиг массива без цикла for или while, Возможно ли сдвинуть массив без цикла for или while, если количество строк массива может изменяться?
 
И очень странная работа с временем. Если необходимо получить разницу времени, то у Вас есть unix-time, простое арифметическое действие даст разницу в секундах.
Также время есть и в параметре alltrade - время прошедшей сделки. И да, в этом колбеке выполнять что-то сложное - очень плохо.
Сдвиг массива без цикла for или while, Возможно ли сдвинуть массив без цикла for или while, если количество строк массива может изменяться?
 
Если это именно массив, то помогут функции table.insert и table.remove
Запуск скрипта из примера подвешивает терминал Quik
 
Т.к. в примере присутствует OnAllTrade и у Вас организована подписка на поток сделок, скажем, по многим инструментам, то он будет постоянно блокировать поток для внесения новых данных.
Лучше удалить этот колбек. Либо добавляйте print debug сообщения, для оценки происходящего.
Время сервера, время последней сделки., Разное время передаваемое с сервера.
 
Цитата
nikolz написал:
 сервер брокера никак не контролирует то, что транслирует с биржи.
его задача работать со заявками клиентов, проверять достаточность средств и формат заявок и отправлять их на сервер биржи.
время сервера иногда гуляет относительно времени биржи.
Это я как раз понимаю. Вопрос ведь в том, что если время серверной части может быть так рассинхронизированным, то не приведет ли это к последствиям. Мы же не знаем как организована работа со временем в серверной части.
Время сервера, время последней сделки., Разное время передаваемое с сервера.
 
То что время серверной части не связано с временем биржи - это понятно. А вот если есть сильная рассинхронизация, то это повод что-то сделать.

Вопрос был не про синхронизацию. По факту вопрос был: контролирует ли серверная часть, поток данных от биржи.
Данная проблема решилась, когда брокер разорвал соединение (по крайнее мере терминал разорвал соединение самостоятельно) и после восстановления соединения время было синхронно.

И проблема явно была не в задержках, иначе бы данные приходили с задержкой. Они же приходили корректно.
Сохранение результатов работы скрипта в файл
 
Ищите сериализация данных lua и сразу найдете. На этом форуме была не одна тема с таким вопросом и даже примеры кода.
Время сервера, время последней сделки., Разное время передаваемое с сервера.
 
Прямо сейчас наблюдаю такую картину. Время сервера отстает на минуту от текущего времени (оно синхронизировано и корректно).
При  этом время последней сделки на минуту впереди времени сервера и близко к  правильному текущему времени, т.е. тоже опережает время сервера.

Я  могу понять, что это проблема брокера (Сбербанк), но с какой стати  время сделки в будущем относительно времени сервера брокера и времени  пакета?
Т.е. я понимаю, что время сделки просто транслирует биржа, но  серверная часть должна же не просто транслировать, но и как-то  контролировать, что она транслирует.
Задержка в выставлении заявок.
 
Если не прошла транзакция, оправленная командой самого терминала, то это уже не проблема клиента, если говорите, что данные обновлялись и торговая сессия шла. Я бы брокеру Алфьа не стал так уж доверять.
Не могу заставить работать функцию Subscribe_Level_II_Quotes()
 
В данном случае, я тоже не очень понимаю смысл этого анализа, т.к. за время цикла задержки потока стакан изменится много раз. И это если анализировать всего один, не то что тысячи.
Можно догадываться, какая задача решается, но часто пытаются через стакан посчитать сумму заявок. Хотя это берется из ТТТ одной строкой. При этом, анализируя стакан, также стоит учитывать, что через Квик доступна только малая часть глубины стакана - в лучшем случае 50 строк, а чаще всего 20.

Но обсуждали чисто техническую реализацию, поэтому все это лирика.
Не могу заставить работать функцию Subscribe_Level_II_Quotes()
 
Ну так Вы выполняете Unsubscribe_Level_II_Quotes один раз. Если она вернула false, то можете ее вызывать в цикле еще раз (но не бесконечно), пока она не вернет истину.
Это Вам выше и написали.
Не могу заставить работать функцию Subscribe_Level_II_Quotes()
 
Это почему она не выполнима...

Решается она в виде очереди обработки, раз скорость не так важна. Оставим в стороне вопрос самого этого анализа.

Создаете очередь задач. Очередь - массив. Задача - объект, содержащий методы подписки, анализа отписки.
Далее в цикле начинаете обрабатывать, например по 10 за раз. Если в какой-то момент не происходит подписка, то просто переключаетесь на следующую еще не выполненную задачу. И так пока очередь не опустеет.
Можете обрабатывать простым циклом, можете корутинами - как угодно.

В книге автора языка есть хороший пример по скачиванию файла из интернета кусками. Это, по сути, та же задача.
Значения param из функции CreateDataSource, Получение значений param из функции CreateDataSource
 
Получить можно и без рисования. Но как показывает практика, часто данные не транслируются вовсе или с перебоями. Возможно зависит от брокера, у одного работает, у другого нет.
Значения param из функции CreateDataSource, Получение значений param из функции CreateDataSource
 
Цитата
Но вот как мне из ds получить значения параметров для акций, к примеру "LAST"  ?
Предположу, что Вы хотите получить данные из Таблицы текущих торгов, т.к. не описываете какую задачу решаете.
Если так, то это не стоит делать через CreateDataSource.
Проще и быстрее это сделать через функцию getParamEx  http://luaq.ru/getParamEx.html

А CreateDataSource используйте если необходимо "упаковать" данные в свечи, бары.
Ошибка вставления заявки "Вам запрещена работа по данному торговому счёту"
 
Для срочного рынка и для фондового рынка используются разные счета.
Если Вы указываете класс фондовой секции TQBR, то и ACCOUNT укажите для нее.Он вряд ли будет начинаться с SPBFUT, т.к. это явно срочный рынок.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Нет, математики их не заменят. Но когда программист не знает элементарную математику, это гораздо хуже, если он не знает Git. Тем более, что сейчас Git, Docker, Cuber. А через несколько лет скажут что так не модно. Одно то, что сейчас почему-то все решили, что приложение - это браузер и больше ничего не надо, уже вызывает отторжение.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Цитата
Это не "сюр", а требование к качеству кода, который должен проходит ревью.
Так что есть минимальные требования к современным программистам для работы в команде.
Сюр. Потому как есть алгоритмист, который пишет код, выполняющий то, что могу понять несколько людей на планете. Кто проверять то будет?

Если же речь, про "показать котиков", то да. Надо проверять. Но как показывает практика, проверяют не то. Цепляются за форматирование  и нарушение "святого" SOLID, а безопасность остается дырявой. Почему, а потому что, опять же, специалистов мало.
[BUG] Повышенная загрузка CPU при большом количестве функций в скрипте
 
Справедливости ради, знание современных систем хранения версий - это ни в коем времени не характеризует кого-то как программиста.
Я когда начинал, мы учились на бумаге. В первую очередь просто алгоритмы. Потом код на бумаге. И ничего, абстрактное мышление хорошо развивает.
То что сейчас без знаний Git не считают кого-то полноценным программистом, то это сюр, т.к. это знание ничего не дает.
Бесконечный цикл функции с заданным интервалом времени
 
Цитата
с этим кодом:
Код
   local  t0  =   os.clock ()
 local  t1,t2,t3,t4,t5,t6,t7 = t0,t0,t0,t0,t0,t0,t0   -- таймеры 
 -- функции исполняемого кода 
 function   f1 (x1)  print (x1 .. ", f1");    end 
 function   f2 (x1,x2)  print (x1 .. ", f2");    end 
 function   f3 (x1,x2,x3)  print (x1 .. ", f3");    end 
 function   f4 (x1,x2,x3,x4)  print (x1 .. ", f4");    end 
 function   f5 (x1,x2,x3,x4,x5)  print (x1 .. ", f5");    end 
 function   f6 (x1,x2,x3,x4,x5,x6)  print (x1 .. ", f6");    end 
 function   f7 (x1,x2,x3,x4,x5,x6,x7)  print (x1 .. ", f7");    end 

  while   true    do     --бесконечный цикл 
 local  x =  os.clock ()
  if  x - t1 >  1   then  f1(x) t1 = x  end 
  if  x - t2 >  2   then  f2(x,x2) t2 = x  end 
  if  x - t3 >  3   then  f3(x,x2,x3) t3 = x  end 
  if  x - t4 >  4   then  f4(x,x2,x3,x4) t4 = x  end 
  if  x - t5 >  5   then  f5(x,x2,x3,x4,x5) t5 = x  end 
  if  x - t6 >  6   then  f6(x,x2,x3,x4,x5,x6) t6 = x  end 
  if  x - t7 >  7   then  f7(x,x2,x3,x4,x4,x6,x7) t7 = x  end 
 end 
  


?????
И это удобно, красиво и т.д.

Мне нужен таймер в одной функции, в другой, в третьей и т.д.

Шаблон создания таймера должен быть одинаковый типа

local cf = functon()
end

local t = timer.new(24, cf)

а далее его просто проверять

t:check()
Бесконечный цикл функции с заданным интервалом времени
 
Развели....

Много примеров, но все они мало применимы. Какие циклы. Тайме, чаще всего, организуется по месту, а не где-то в main, в одной точке. Далее, чтобы это было удобно, могли бы хоть функцию обратного вызова организовать, чтобы по завершению она была бы вызвана. Иначе зачем он нужен, чтобы напечатать привет...

А исходя из этого - таймер это объект - шаблон, класс, замыкакние. Который создается там где он нужен и вызывается его проверка. По истечению вызовется функция в контексте определения, что даст захваченную область видимости этой функции и не надо возится с параметрами.
Как сверить количество лотов в Квике и в моем роботе .
 
Цитата
Мне НЕ НУЖНЫ обращения к данным сервера - мне нужны данные моего брокера, касающиеся моего портфеля

Так они и находятся на сервере брокера и транслируются в терминал. Если Вы не верите записям в терминале и хотите их проверить, то тогда и нужен прямой доступ к записям на сервере. Что, конечно, никогда не будет реализовано. И ни в коем случае недопустимо даже рассматривать такое.

Цитата
и почти 146% гарантии, что беготня по таблице сделок с этим НЕ справится
А по таблице сделок не надо бегать, тогда и проблемы не будет. Колбек же, в свою очередь, в ряде случаев требует решения синхронизации данных.
Впрочем, решение на колбеках тоже рабочее. И часто используется. Здесь вопрос предпочтений для конкретного алгоритмического решения.
Как сверить количество лотов в Квике и в моем роботе .
 
Система меню, конечно, позволяет изменять настройки, но есть настройки, которые не изменяются при активном алгоритме. Например ТФ баров. Да, Вы опять скажете, что это никому не надо, мне тоже не надо, но кому-то надо. И не мне указывать что и как делать. Поэтому в такой момент скрипт не совершает торговые операции, но при этом ведет контроль позиции и сделок. Поэтому снимать ордера - это не вариант. Судя по всему, у Вас все ордера "рыночные", но вернемся к другим пользователям и окажется, что видов ордеров может быть много. И есть те, кому это надо. И по наблюдениям, рыночные ордера - это не самое распространенное явление.

Что касается обсуждаемой "проблемы", то просмотр прямых таблиц дает гарантию, что если там есть запись, то она не будет пропущена. Если же Вы про гарантии, что запись есть у брокера, но нет в терминале, то это находится в области ошибок работы клиент-серверной архитектуры, рассогласование данных. И это Вы никак не проконтролируете, т.к. у Вас нет методов прямого обращения к данным сервера. Но даже исключение проблемы работы колбеков уже повышает стабильность решений.

Как часто смотреть - постоянно. Если это сделано корректно, то это не вызывает существенных накладных расходов. И смотреть во все необходимые таблицы.
Необходимы сделки - таблица сделок. Необходимы ордера - таблица ордеров. Необходимы данные лимитов по бумагам - таблица depo_limits, куда, собственно, метод getDepoEx и смотрит.
Вы же смотрите в таблицу текущих торгов, и, наверно, постоянно.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 След.
Наверх