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

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

Страницы: 1 2 След.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
наше в разы проще в реализации
Цитата
Sergey Gorokhov написал:
согласование с разработчиком возможно исключительно только после регистрации пожелания

Получается сотрудник QUIK clients support самовольно решает, что будет "проще в реализации" для программистов, демонстрируя при этом отсутствие понимания клиент-серверного взаимодействия.

Цитата
Sergey Gorokhov написал:
Этому вопросу уже больше 10 лет
Причина установлена: диверсант на предприятии.
Написание автономного бота
 
Это ваше пожелание, не мое.
Мое предложение здесь: #81
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Речь была именно про запрос на сервер. те запрос к серверу, сколько есть на сервере в такой-то таблице.
Я только сейчас понял, что такое не могло быть зарегистрировано в принципе.
Вы бы хоть с программистами посоветовались, прежде, чем писать это.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Речь была именно про запрос на сервер. те запрос к серверу
Это дурость, такого нам не надо.

Когда вы, например, запрашиваете время сервера getInfoParam("SERVERTIME"), функция не отправляет запрос серверу, а берет из кеша последнее полученное значение.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
getServerNumberOf вернет данные в момент запроса. Хотите запрашивайте ДО описания параметров таблицы Торговые счета, хотите после.
Но это же не прямой запрос на сервер. getServerNumberOf вернет последнее значение, полученное с сервера.
Или я вас не так понял? Синхронная функция здесь нафиг не нужна.

Цитата
Sergey Gorokhov написал:
если второй шлюз пришлет другие фирму и счет, то лимит совершенно точно будет и условие не сработает
Условие не сработает только ПОСЛЕ получения нового значения "доступных лимитов на сервере" (N + L).
А в промежуток времени между обновлением trade_accounts и получением нового значения getServerNumberOf будет возвращать старое значение с первого шлюза
getNumberOf("depo_limits") = N
И количество лимитов в это время будет getNumberOf("depo_limits") = N

Цитата
Sergey Gorokhov написал:
Цитата
Mixa написал:
В противном случае, getServerNumberOf("depo_limits") = N и getNumberOf("depo_limits") = N
Не доказано.
Доказано, см. сообщение выше и
https://forum.quik.ru/messages/forum10/message56684/topic6537/#message56684
https://forum.quik.ru/messages/forum10/message56725/topic6537/#message56725
https://forum.quik.ru/messages/forum10/message56729/topic6537/#message56729

Цитата
Mixa написал:
Чтобы понять свое заблуждение, напишите нормальный псевдокод с проверкой наличия прав на нужный класс
Написание автономного бота
 
Пока не будет получено новое значение "доступных лимитов на сервере" с нового шлюза, условие
getServerNumberOf("depo_limits") == getNumberOf("depo_limits")
будет выполняться.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Если лимит есть на сервере, но еще не загружен в терминал то условие НЕ выполнится и getNumberOf("depo_limits") покажет МЕНЬШЕ чем getServerNumberOf("depo_limits").

Для этого надо гарантировать, что сервер отправит количество доступных на сервере лимитов ДО описания параметров таблицы Торговые счета.
В противном случае, getServerNumberOf("depo_limits") = N и getNumberOf("depo_limits") = N
Написание автономного бота
 
Вернемся к нашему примеру.
После подключения первого шлюза:
getServerNumberOf("trade_accounts") == getNumberOf("trade_accounts") = 1
После загрузки лимитов:
getServerNumberOf("depo_limits") == getNumberOf("depo_limits") = N

Запускается второй шлюз.
Как мы выяснили:
Цитата
Mixa написал:
лимиты загружаются на клиента НЕ РАНЬШЕ описания параметров таблицы Торговые счета
Поэтому
getServerNumberOf("trade_accounts") == getNumberOf("trade_accounts") = 2  -- условие выполняется
Но и getServerNumberOf("depo_limits") == getNumberOf("depo_limits") = N  -- выполняется
Хотя лимиты со второго шлюза могут быть еще не загружены!
Написание автономного бота
 
Чтобы понять свое заблуждение, напишите нормальный псевдокод с проверкой наличия прав на нужный класс
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
после того как (getServerNumberOf("depo_limits") == getNumberOf("depo_limits")) и (getServerNumberOf("trade_accounts") == getNumberOf("trade_accounts")), проверяем по trade_accounts наличие прав на нужный класс

Если не гарантировать
Цитата
Mixa написал:
сервер должен отправить "количество строк доступных на сервере" ДО описания параметров таблицы Торговые счета
то оба эти условия выполнятся раньше, чем загрузится лимит.

Цитата
Sergey Gorokhov написал:
ищем в depo_limits нужный лимит, уже уверенные что данные получены с сервера
И это заблуждение.
Получение позиций по инструментам
 
Sergey Gorokhov, то что вы предлагаете - бесполезно.

Я придерживаюсь этого варианта:
https://forum.quik.ru/messages/forum10/message56521/topic6537/#message56521
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Цитата
Mixa написал:
С учетом того, что сервер должен отправить "количество строк доступных на сервере" ДО описания параметров таблицы Торговые счета.

Ранее было сказано что у нас нет структуры определяющей строгость загрузки тех или иных данных.
Проще говоря, никто не следит за тем какие данные придут точно раньше, а какие точно позже.
Очередности просто нет. А значит и поменять ее нельзя.
Причина в том что данные едут разными потоками, которые между собой никак специально не синхронизируются.
Да есть некое условное представление о том что приедет раньше, а что позже, но это  не  вбито в коде, а просто устоявшееся поведение, которое может поменяться в любой момент.

В таком случае, "ваш взгляд, что такая реализация решает поставленную задачу" неверный:
У вас выполнится условие getServerNumberOf("depo_limits") == getNumberOf("depo_limits"), когда загрузятся лимиты по любому рынку.
А запись в trade_accounts может точно появится раньше, чем загрузятся лимиты по бумаге X.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Код
   function   main ()

   while  getServerNumberOf( "depo_limits" )  !  =   getNumberOf ( "depo_limits" )  do 
     sleep ( 100 )
   end 

 end   

Пусть делают.

Цитата
Sergey Gorokhov написал:
И на наш взгляд такая реализация вкупе с проверкой trade_accounts решает поставленную Вами задачу
С учетом того, что сервер должен отправить "количество строк доступных на сервере" ДО описания параметров таблицы Торговые счета.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Определите самостоятельно, это не так трудно.
Для вас, видимо, трудно.
Я определил. И делюсь информацией: лимиты загружаются на клиента НЕ РАНЬШЕ описания параметров таблицы Торговые счета.
Утверждение
Цитата
Sergey Gorokhov написал:
Клиент уже может проверить наличие {Firm2 = {D, E}} в trade_accounts
Если есть  =>  Лимиты по бумаге X  загружены
не соответствует действительности.
Без дополнительного уведомления невозможно достоверно говорить о загруженности лимита по бумаге X.


Цитата
Sergey Gorokhov написал:
Вам предлагалось зарегистрировать такое пожелание. А именно проверку количества строк в таблице с количеством строк доступных на сервере.
Если количество совпадает то данные загружены, если нет грузятся.
И на наш взгляд такая реализация вкупе с проверкой trade_accounts решает поставленную Вами задачу, без излишних "если".
Напишите псевдокод, как это использовать.
Отладка QUIK 9.1
 
Цитата
28. При совпадении кода инструмента на разных рынках в Таблице позиций по инструментам могло отображаться название инструмента на другом рынке.
Можете привести пример как было и как стало?
Отладка QUIK 9.1
 
Цитата
Nikolay написал:
изменения и исправления в версии
В самом архиве есть pdf
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
И на наш взгляд такая реализация вкупе с проверкой trade_accounts решает поставленную Вами задачу

Полагаю, что не решает, потому что
Цитата
Sergey Gorokhov написал:
Цитата
Mixa написал:
И опять же, сервер не скажет по какому рынку он будет передавать лимиты?
Только в разрезе таблиц, что для фьючерсов столько, для остальных столько.
Цитата
Sergey Gorokhov написал:
Но, косвенно можно судить по наличию класса
Цитата
Mixa написал:
Цитата
Sergey Gorokhov написал:
запись там не появится пока не будет получен лимит по  любой  бумаге связывающей фирму+счет+код клиента.
Вот именно, "по любой", т.е. лимиты могут находиться еще в процессе загрузки.
А нужно уведомление, что получены  все  лимиты (для данных firmid + class_code).
Это будет то же гадание, что и сейчас: загрузились/не загрузились.


Цитата
Sergey Gorokhov написал:
Флаг загрузки данных (его нет) и флаг наличия прав (уже есть в trade_accounts).
Цитата
Sergey Gorokhov написал:
наличие прав не всегда равно наличию данных.

Именно поэтому я и пишу:
Цитата
Mixa написал:
И после загрузки всех лимитов (даже если их там было 0) сервер отправляет уведомление клиенту
Если уведомление получено, а данных нет, значит их действительно нет. Это не то же самое, что сейчас, когда вы не можете определенно сказать "нулевая ли позиция" или "она ещё не получена с сервера".


Цитата
Sergey Gorokhov написал:
сервер сверяет транслируемые классы с правами пользователя и отправляет клиенту trade_accounts
ДО или ПОСЛЕ загрузки лимитов? Это ключевой момент.

Sergey Gorokhov, вы вообще понимаете разницу между состояниями 1) "загрузка еще не началась", 2) "идет процесс загрузки данных" и 3) "загрузка закончена"?
Пока вы не поймете эти базовые вещи, у вас так и будут "вопросы и примеры трудности реализации".


Цитата
Sergey Gorokhov написал:
Клиент уже может проверить наличие {Firm2 = {D, E}} в trade_accounts
Если есть  =>  Лимиты по бумаге X  загружены (скрипт может это проверить в таблице лимитов)
Как интерпретировать такую информацию: запись {Firm2 = {D, E}} в trade_accounts есть, а самого лимита по бумаге X в таблице лимитов нет?


Цитата
Sergey Gorokhov написал:
Если есть  =>  Лимиты по бумаге X  загружены
Следует ли из вашего утверждения, что описания параметров таблицы Торговые счета загружаются на клиента ПОСЛЕ загрузки лимитов по деньгам и инструментам?
Конкретизирую вопрос: следует ли из вашего утверждения, что сначала будут ПОЛНОСТЬЮ загружены лимиты по классам D и E для Firm2 и лишь затем в trade_accounts появится запись с {Firm2 = {D, E}}?
Добавьте эту информацию в официальную документацию по QLua.
Получение позиций по инструментам
 
Тема НЕ ЗАКРЫТА!
Написание автономного бота
 
Пример:

У пользователя есть права на классы A, B по фирме Firm1 и классы D, E по фирме Firm2.
Бумага X торгуется в классах A, C и E
Скрипт торгует бумагой X в классе E, соответственно ждет лимит по фирме Firm2: isLimitsLoaded(Firm2, E)
Сервер подключен к двум шлюзам: первый шлюз транслирует классы A, B, C по фирме Firm1; второй - классы D, E по фирме Firm2.

После подключения первого шлюза сервер сверяет транслируемые классы с правами пользователя и формирует табличку вида {Firm1 = {A, B}}
Пользователю приходят лимиты по бумагам, содержащимся в классах A и B, в т.ч. по бумаге X. Как обычно, в этой части никаких изменений не требуется!
И после загрузки всех лимитов (даже если их там было 0) сервер отправляет уведомление клиенту {Firm1 = {A, B}}.
Но isLimitsLoaded(Firm2, E) = false, поэтому скрипт ждет.

Далее запускается второй шлюз.
И клиенту транслируются лимиты по бумагам D и E. Поскольку лимиты по бумаге X уже были раннее загружены, то повторно не транслируются. Все как обычно, в этой части никаких изменений не требуется!
Затем клиенту отправляется уведомление {Firm2 = {D, E}}. Это уведомление формируется на основании прав, не лимитов!
После его получения isLimitsLoaded(Firm2, E) = true  =>  Лимиты по бумаге X загружены, можно торговать в классе E.

Так понятно?
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
в предложенном варианте, серверу понадобится проверить ранее отправленные лимиты, сверив их с поступившим набором инструментов. Чтобы убедиться что отправка действительно была.
Нахрена?!
Подключился шлюз. Сервер получил фирму, классы, отправил лимиты клиенту (если они есть), как и раньше. Далее
Цитата
Mixa написал:
сверить права на firmid + class_code с теми, что дает шлюз.
Цитата
Mixa написал:
Если они есть, значит отправляем клиенту уведомление.

И как я написал выше, вот это
Цитата
Mixa написал:
сверить права на firmid + class_code с теми, что дает шлюз
можно сделать первым делом. И тогда
Цитата
Mixa написал:
если для пользователя в правах нет ни одного доступного "firmid + class_code" с этого шлюза, то в лимиты можно уже не смотреть.


Цитата
Sergey Gorokhov написал:
было же сказано что если прав нет то и лимитов нет.
Ага, только вы не знаете наверняка, что сервер сначала делает:
SELECT по SQL-базе или
проверку прав, а если доступных лимитов нет, то и SELECT тогда уже не нужен


Цитата
Sergey Gorokhov написал:
Например на СПБ американские бумаги, на ФР российские, права одинаковые, лимиты разные.
И? Если загружены только лимиты по ФР МБ, то isLimitsLoaded(firmid, "TQBR") даст true, а isLimitsLoaded(firmid, "SPBXM") - false и наоборот.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
К сожалению, наш внутренний регламент не разрешает связь клиента с разработчиком.

Ну а как по другому, если для вас приходится "разжевывать"
Цитата
Mixa написал:
"таблица еще не загрузилась" и "таблица пустая и позиции нулевые" - это принципиально разные состояния.

И после всех объяснений, вы бьете себя пяткой в грудь и кричите: "задача не решаема, закрываем!"
Это что за самоуправство такое?!
Форум называется "Программирование на языке Lua". Если чего-то не поняли, ну проконсультируйтесь с программистом. Это-то ваш регламент разрешает?

Цитата
Sergey Gorokhov написал:
Никто не говорил про повторную загрузку.
Тогда при чем здесь "десятки миллионов лимитов"?

Цитата
Sergey Gorokhov написал:
По сути это и есть "повторная проверка доступности"
Но не по лимитам же.
Допустим, получил сервер со шлюза классы "class1,class2,class3" для firmid. Их же он и проверяет в правах (не в лимитах!) пользователей.
И это можно использовать для оптимизации: если для пользователя в правах нет ни одного доступного "firmid + class_code" с этого шлюза, то в лимиты можно уже не смотреть.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Никак нельзя определить что лимиты загружены по firmid + class_code.
Капец!
Вы сами пишите:
Цитата
Sergey Gorokhov написал:
Если инструмент есть хотя бы по одному (любому) доступному пользователю классу, то тогда лимит отправится.
Цитата
Sergey Gorokhov написал:
пользователь увидит лимиты только по той фирме которая у него в правах
Цитата
Sergey Gorokhov написал:
Если же фирмы одинаковые, и инструменты одинаковые, но по первому шлюзу прав на классы нет (ни на один), а по второму есть (хотя бы на один), то даже если первый шлюз придет раньше, клиент не получит лимита пока не приедет второй шлюз.
Я вам пишу, что сами лимиты грузить повторно не надо.
Надо только сверить права на firmid + class_code с теми, что дает шлюз. Если они есть, значит отправляем клиенту уведомление.

Цитата
Sergey Gorokhov написал:
Ок?
Не ОК.
Давайте я буду общаться с программистом на уровне кода, раз вы не понимаете.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
запись там не появится пока не будет получен лимит по любой бумаге связывающей фирму+счет+код клиента.
Вот именно, "по любой", т.е. лимиты могут находиться еще в процессе загрузки.
А нужно уведомление, что получены все лимиты (для данных firmid + class_code).
Написание автономного бота
 
Sergey Gorokhov, вы куда-то ушли от темы.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Смотрите колбек OnFirm или таблицу firms
Этот колбек нам что-то говорит о загрузке лимитов?
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
только если залезет в "отправленные" и еще раз проверит лимит по LKOH на доступность.
Еще раз.
Не в "отправленные", а в права для пользователя и сверить firmid + class_code. А есть ли в лимитах или классах LKOH серверу по барабану. Он сообщит клиенту только, что загрузил связку firmid + class_code

Цитата
Sergey Gorokhov написал:
сервер может его запомнить при первой отправке и функция сработает
И функция сработает на клиенте! Это клиент запоминает, какие классы он получил!

Цитата
Sergey Gorokhov написал:
"Доступность" это ведь не только фирма и класс, но и инструмент же. Если какой то инструмент снимут с торгов (со всех классов), сервер не отправит лимит.
Я не говорю про конкретные инструменты. Сервер отправит уведомление, что лимиты "firmid + class_code загружены". Даже если в этой связке было загружено ноль лимитов.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Цитата
Mixa написал:
isLimitsLoaded(firmid, "TQBR") == true сработает именно после запуска шлюза с классом TQBR.
Не сработает, потому что лимиты  уже  были отправлены при появлении EQRP_INFO

Сработает, потому что связки firmid - "TQBR" еще не было.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
серверу придется при появлении каждого инструмента по каждому классу проверять все ранее отправленные лимиты
Нет.
Серверу достаточно сверить для каких фирм какие классы транслирует шлюз и отправить клиенту true для каждой такой связки firmid - class_code.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Никаких гарантий что конкретный лимит всегда будет грузиться по конкретному классу.
Было сказано же
Цитата
Mixa написал:
не нужна привязка конкретного лимита S к классу C.

Цитата
Sergey Gorokhov написал:
Еще пример, есть класс EQRP_INFO, и есть классы TQBR, SMAL, во всех трех классах есть одинаковые инструменты.
НО, класс EQRP_INFO транслируется отдельным шлюзом. По Вашей логике, сервер должен отправить Вам только класс EQRP_INFO, а про TQBR, SMAL вообще ничего не сказать.
Когда запустится шлюз с классом EQRP_INFO сервер отправит клиенту его. А когда запустится шлюз с классами TQBR и SMAL, шлюз отправит их.

Цитата
Sergey Gorokhov написал:
Вы же торговать явно не в EQRP_INFO будете.
Я буду ждать isLimitsLoaded(firmid, "TQBR") == true

Цитата
Sergey Gorokhov написал:
А завтра брокер возьмет и поменяет расписание запуска шлюзов
isLimitsLoaded(firmid, "TQBR") == true сработает именно после запуска шлюза с классом TQBR.
Написание автономного бота
 
Sergey Gorokhov, здесь не нужна привязка конкретного лимита S к классу C.
Сервер знает, по каким классам он загружает лимиты, т.к.
Цитата
Sergey Gorokhov написал:
Если инструмент есть хотя бы по одному (любому) доступному пользователю классу, то тогда лимит отправится.
Это тот же самый список классов, который сервер получил со шлюза. Этот список он и должен отправить клиенту.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Если инструмент есть хотя бы по одному (любому) доступному пользователю классу, то тогда лимит отправится.
Вот же решение: сервер должен отправить клиенту список классов, по которым он только что отгрузил лимиты.
Самое простое решение - без разбивки по фирмам: isLimitsLoaded(class_code) покажет true для всех классов с этого шлюза.

Цитата
Sergey Gorokhov написал:
если есть два шлюза которые транслируют одинаковые инструменты, но разные фирмы, то пользователь увидит лимиты только по той фирме которая у него в правах
Решение посложнее - с фильтром по фирмам: isLimitsLoaded(firmid, class_code) покажет true только по той фирме, которая в правах у пользователя
Написание автономного бота
 
Моя идея такова: сервер отправляет true по каждому подключенному шлюзу ПОСЛЕ всех лимитов. Причем, даже если на каком-то шлюзе для пользователя нет доступных лимитов, он должен отправить true в подтверждение, что все ноль доступных лимитов отгружены.
Теперь надо понять, к чему эти true привязывать на клиенте.
isLimitsLoaded(firm_id, trdaccid or client_code (в зависимости от рынка)) или isLimitsLoaded(firm_id, trdaccid, client_code) даст нам однозначный ответ?

Цитата
Sergey Gorokhov написал:
Сервер отправляет клиенту количество строк в таблице с лимитами, а потом отправляет сами лимиты.
Запустили еще шлюз. Сервер отправляет клиенту новое количество строк в таблице с лимитами, а потом отправляет сами новые лимиты.
Это предложение согласовано с программистами? Сам сервер в момент передачи первого лимита знает сколько всего лимитов он сейчас отправит?
Если клиент подключится к серверу, когда все шлюзы уже подключены, сколько раз сервер отправит клиенту количество строк? Один раз или столько же, сколько шлюзов?
И опять же, сервер не скажет по какому рынку он будет передавать лимиты?
Вы будете ждать лимиты по российским бумагам на ФР, а сервер передаст лимиты рынка СПБ, как быть?
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Одна бумага может быть даже на разных биржах.
Пользователь может купить бумагу на одном рынке и тут же продать ее на другом? И это будет один и тот же инструмент?

Цитата
Sergey Gorokhov написал:
Со счетом может быть еще сложнее т.к. на том же СПБ и MOEX счета могут совпадать, а фирмы нет.
Но связка фирма + торговый счет однозначно определяет рынок?

Цитата
Sergey Gorokhov написал:
Например если есть два шлюза которые транслируют одинаковые инструменты, но разные фирмы
Речь про шлюзы к одному рынку? Сервер может быть подключен к нескольким шлюзам одного рынка?

Цитата
Sergey Gorokhov написал:
А если так:
узнать когда количество загруженных строк в таблице будет равно количеству на сервере в том состоянии которое  доступно пользователю  в данный момент.
Что должен отправить сервер клиенту и как это что-то клиент должен интерпретировать? С учетом, что шлюзы могут быть запущены в разное время. Хотелось бы увидеть пример. Пока не понятно.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Одна бумага может быть даже на разных биржах.
Цитата
Sergey Gorokhov написал:
на сервере лимит есть, он не знает можно ли давать его пользователю, пользователь подключился лимит не видит. А потом когда шлюз запустят лимит вдруг появился.
Как в этом случае будут загружаться лимиты? После запуска какого из шлюзов?

Цитата
Sergey Gorokhov написал:
на том же СПБ и MOEX счета могут совпадать, а фирмы нет.
А код клиента?

Цитата
Sergey Gorokhov написал:
но опять же без класса, без рынка.
Для решения задачи этого и не требуется. Грубо говоря, нам нужно уведомление, что лимиты по конкретному рынку загружены, но, поскольку в QUIK нет такого понятия "рынок", нужно делать привязку к чему-то другому.

Цитата
Sergey Gorokhov написал:
Чем предложенный вариант не устаревает?
Цитата
Sergey Gorokhov написал:
узнать когда количество загруженных строк в таблице будет равно количеству на сервере в том состоянии которое есть в данный момент.

Вы же сами пишите, что сервер может транслировать не все лимиты, которые на него загружены:
Цитата
Sergey Gorokhov написал:
сервер не будет транслировать фондовые лимиты по тем инструментам которые отсутствуют, либо у пользователя нет прав.
Написание автономного бота
 
Цитата
Mixa написал:
Можно сделать привязку к фирме или счету.

Т.е., в скрипте:
Код
if isLimitsLoaded(firmid) == true
или
Код
if isLimitsLoaded(trdaccid) == true
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Сделать задуманное означает реализовать/создать привязку лимита к классам. Проще говоря, чтобы по каждому лимиту, где то хранился список классов.

Кажется понимаю, что вы хотите сказать: в таблицах depo_limits и futures_client_holding нет параметра "Класс". Вы об этом?
Можно сделать привязку к фирме или счету. Если я правильно понимаю, технически это равнозначно:
"Загрузка всех лимитов на фондовой секции" == "загрузка лимитов по всем классам фондовой секции" == "загрузка лимитов по всем trdaccid, привязанным к фондовой площадке" == "загрузка лимитов по всем firmid, привязанным к фондовой площадке"
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
отдельно по срочной отдельно по фондовой секциям), т.е. без привязки к классу или бумаге.
Загрузка лимитов по фондовой секции автоматически означает, что загружены лимиты по ВСЕМ классам этой секции.
isLimitsLoaded вернет true тогда и только тогда, когда загружены ВСЕ лимиты секции.

Цитата
Sergey Gorokhov написал:
В фондовой секции 236 классов, Вы хотите все их указывать?
Да нафига мне указывать все классы в скрипте?
Я укажу только НУЖНЫЕ мне. Мне даже не надо перечислять все классы, а только по одному классу каждой секции, на которой скрипт торгует.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Цитата
Mixa написал:
isLimitsLoaded("TQBR")
Это не будет работать по простой причине, лимиты не привязаны к классу.
Возможно только узнать об окончании загрузки в терминал сразу по всем данным в таблице (отдельно по срочной отдельно по фондовой секциям)
А если подумать?
Код
isLimitsLoaded("фондовая секция") == isLimitsLoaded("TQBR") and isLimitsLoaded("TQOB") and isLimitsLoaded ... все классы на фондовой секции
Написание автономного бота
 
Цитата
Артем написал:
определения разграничения между архивными и текущими данными
Вы сами себе эти определения придумали, вот себе и разграничивайте.
А мне нахрен не сдались ваши "архивные данные". Нужны только входящие позиции на СЕГОДНЯ.

А псевдокод вот вам:
Код
function main()
  while isConnected() ~= 1 do
    sleep(100)
    if not is_run then return end
  end
  while isLimitsLoaded("TQBR") ~= true or isLimitsLoaded("SPBFUT") ~= true do -- указать все нужные классы, позиции по которым должны быть загружены
    sleep(100)
    if not is_run then return end
  end
  
end
Теперь можете мозгами подумать.
Написание автономного бота
 
Артем, железобетонная логика состоит в том, что стартовые позиции на начало торговой сессии (в принятой терминологии - входящие) можно было бы однозначно определить, имея признак окончания процедуры загрузки лимитов.
А что вы пытаетесь натянуть и что такое "архивные" данные в контексте вопроса, я не знаю.
Написание автономного бота
 
Или что вы сами лично за всех решили, что "признак вообще не нужен".

Цитата
Mixa написал:
Sergey Gorokhov , какое место вы занимаете в компании и почему решение о "надежности" функционала принимаете вы, а не программисты, которые явно лучше вас в этом разбираются?
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Этому вопросу уже больше 10 лет и никто так и не предложил надежного способа.
Цитата
Sergey Gorokhov написал:
признак вообще не нужен
Ну и не надо врать. Так и пишите, что ваши программисты не способны/не хотят (нужное подчеркнуть) сделать по-нормальному.
Получение позиций по инструментам
 
Цитата
Andrey Bezrukov написал:
Эти функции вполне конкретным образом сообщают о том, нулевая ли позиция, или она ещё не получена с сервера.
Тогда ответьте "вполне конкретно", если getDepoEx или getFuturesHolding ничего не возвращает, то "нулевая ли позиция" или "она ещё не получена с сервера"?
Получение позиций по инструментам
 
https://forum.quik.ru/messages/forum10/message56255/topic6537/#message56255
Если функции getDepoEx или getFuturesHolding ничего не возвращают, то говорить, что позиция по запрашиваемой бумаге нулевая можно только с определенной долей вероятности. Позиции могут быть еще не загружены с сервера.
Предлагаю убрать эту неопределенность, добавив уведомление "процедура загрузки позиций завершена", которое будет приходить клиенту ПОСЛЕ всех позиций. Отдельно для каждой секции после запуска шлюза.
Например, в виде функции, возвращающей: true ("позиции загружены"), false ("позиции не загружены"), nil (ошибка).
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Терминал подключается к серверу, начинает качать данные и сообщает скрипту isLimitsLoaded=true, т.е. на сервере все лимиты действительно загружены
Это действительно странно, что вы отвечаете в разделе "Программирование" и тем более имеете право принимать решения.
Цитата
Mixa написал:
А вслед за лимитами - уведомление "лимиты загружены". Отдельно для каждой секции.
Таким образом, в какое бы время не подключился клиент, уведомление "лимиты загружены" должно быть отправлено после лимитов.


Цитата
Sergey Gorokhov написал:
этому вопросу уже очень и очень много лет
Потому что этим вопросом занимается человек, мало понимающий в программировании.
Написание автономного бота
 
Что это за терминал, если даже такая базовая функция, как определение лимитов работает ненадежно?

Цитата
Sergey Gorokhov написал:
Документация на рабочее место QUIK, глава "Операции брокера" - "Операции над позициями"
Это не исчерпывающее описание всех вариантов загрузки лимитов на сервер.

Цитата
Sergey Gorokhov написал:
Самый верный вариант ждать пока нужные скрипту данные появятся в колбеке, если не появились значит ничего не делать.


Цитата
Sergey Gorokhov написал:
1) Придумывать новый НЕ надежный вариант и наткнуться на новые проблемы
2) Использовать старый тоже НЕ надежный вариант, но зато проблемы старые и известные
Чего? Какие "новые проблемы"? Пока я не увидел никаких "новых проблем", с которыми "новый НЕ надежный вариант" справился бы хуже.
Все ваши надуманные проблемы - бред сивой кобылы. Если брокер начнет козлить, он быстро растеряет своих клиентов.
В нормальной ситуации "новый вариант" отработал бы корректно, в отличие от вашего "старого НЕ надежного варианта".

Всегда можно ПРИДУМАТЬ ситуации, когда надежное решение будет работать ненадежно. С таким же успехом можно заявить: зачем делать защиту паролем вход в ЛК, если многие создают простые пароли, к тому же записывают на листочке? А некоторые используют скрипт автологин, в котором указывают пароль. Так давайте уберем окно ввода пароля, ведь
Цитата
Sergey Gorokhov написал:
всегда найдется НО которое делает решение не надежным.


Sergey Gorokhov, какое место вы занимаете в компании и почему решение о "надежности" функционала принимаете вы, а не программисты, которые явно лучше вас в этом разбираются?
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Если не будет значит ждать пока появятся.
Вы сами-то понимаете, что пишите? Если по бумагам, которыми скрипт торгует, позиции не открыты, то лимиты не появятся. Чего ждать-то?

Цитата
Sergey Gorokhov написал:
Вариантов масса.
Главное определиться с условиями.
Напишите хоть один вариант, который по вашему мнению, будет НЕ МЕНЕЕ НАДЕЖНЫМ, чем предложенный мной.
Условия указаны: скрипт должен определить начальные лимиты по корзине бумаг, в т.ч. по тем, по которым позиции не открыты (=0), прежде чем запустится алгоритм торговли.

Цитата
Sergey Gorokhov написал:
Как быть если брокер в течении дня грузит позиции?
Цитата
Sergey Gorokhov написал:
Брокер начинает грузить позиции, будет он их грузить пачками или все сразу ему самому решать.
В результате сервер не знает сколько позиций брокер будет грузить. Не знает окончился процесс или нет. Вдруг брокеру через час захочется загрузить еще?
Т.е., на начало торговой сессии лимитов нет, а потом вдруг в течение дня в произвольный момент времени они появляются?
Если вы скинете мне документ, описывающий процедуру загрузки лимитов, то я смогу ответить более конструктивно.
Пока я вижу это так: если брокер вдруг станет грузить лимиты не перед открытием сессии, а когда ему "захочется", то к черту такого брокера.

Цитата
Sergey Gorokhov написал:
на стороне брокера есть транзакция на корректировку входящей позиции срочного рынка.
А значит, Вам легко может приехать строка содержащая 0, а потом через некоторое время нормальное значение.
Все же это не обычный случай и просто так не делается.
И решение, предложенное мной, никак не ухудшает ситуацию в таких нестандартных случаях по сравнению с вашим вариантом, код которого вы так и не осмелились показать.

Цитата
Sergey Gorokhov написал:
Как быть?
Для фиксации изменений лимитов использовать колбеки. Это не противоречит моему предложению.

Цитата
Sergey Gorokhov написал:
Целесообразно ли ее вводить в условиях ненадежности
ИТОГО, функция isLimitsLoaded решает проблему с фондовыми, валютными и срочными лимитами в той мере, в которой предназначено ее использование.
В остальных нестандартных ситуациях, хоть я и не видел ваш код, но уверен, что он будет не более надежен, чем мое предложение.
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
А разве там есть признак окончания загрузки данных на клиента которым в данном случае является QUIK?
Я не сильно в этом разбираюсь. Но там есть:
Цитата
Уведомление в sys_events приходит ПОСЛЕ всех данных, в частности это означает, что в режиме получения данных on-line внешняя система получит сначала сами новые данные, например, инструменты, назначенные в новую сессию или перенесенные в новую сессию многодневные заявки, а уже потом – уведомление в sys_events.


Цитата
Sergey Gorokhov написал:
И чем тогда это отличается от предложенного варианта с ожиданием данных?
Как я уже писал: "таблица еще не загрузилась" и "таблица пустая и позиции нулевые" - это принципиально разные состояния.
Есть большая разница ожидания
Код
while getNumberOf(TableName) <= N do
-- где N - неизвестное число лимитов
и
Код
while isLimitsLoaded(class_code) do
-- где isLimitsLoaded - функция, возвращающая признак (true/false) загрузки данных
В первом случае, не известно, сколько лимитов ждать и ждать ли вообще. Во втором случае скрипт будет ждать вполне определенный признак.


Цитата
Sergey Gorokhov написал:
Каждый скрипт, знает чем будет торговать, а значит знает какие лимиты ему нужны, не так ли?
Знает. Допустим скрипт торгует КОРЗИНОЙ бумаг A, B, C.
Ждать "появление именно нужных скрипту лимитов" по бумагам A, B и C?
Если их не будет, что скрипту ждать? А если все-таки будут?
Напишите такой
Цитата
Sergey Gorokhov написал:
цикл который будет ловить появление именно нужных скрипту лимитов


Цитата
Sergey Gorokhov написал:
Цитата
Mixa написал:
И в чем по-вашему будет "решение не надежным"?
Вопрос не понятен, был приведен конкретный пример не надежного срабатывания.
Если есть ситуации когда предложенное решение выдаст неверный результат значит решение не надежное.
И вам задан конкретный вопрос.
Допустим, у нас есть функция isLimitsLoaded.
В чем по-вашему ожидание сигнала while isLimitsLoaded(class_code) do будет "не надежным"?
Какой именно "неверный результат" выдаст "предложенное решение"?
Написание автономного бота
 
Цитата
Sergey Gorokhov написал:
Данные не появились - сидим ждем дальше.
Дерьмо, а не вариант. Все ваши надуманные отговорки - разговор в пользу бедных.

Цитата
Sergey Gorokhov написал:
Это уже касается фондовых лимитов а не срочных?
Обсуждаются все лимиты, не только срочные.

Цитата
Sergey Gorokhov написал:
срочные лимиты НЕ грузятся на сервер. Они ТРАНСЛИРУЮТСЯ с биржи.
sys_events не решит вопрос?

Цитата
Sergey Gorokhov написал:
Так что когда пользователь подключается к серверу, фондовые лимиты уже точно на сервере есть.
Да плевать, что там есть на сервере. Скрипт работает на КЛИЕНТЕ, ему нужен сигнал, что на КЛИЕНТА ЗАГРУЖЕНЫ ВСЕ лимиты.

Цитата
Sergey Gorokhov написал:
Например если пользователь подключился к серверу до старта шлюза, лимитов он не увидит, хотя на сервере они есть.
И сервер не будет транслировать никакой признак о наличии таких лимитов т.к. не знает появятся инструменты или нет, может биржа их исключила из торговли.
Получается опять диссонанс, на сервере лимит есть, он не знает можно ли давать его пользователю, пользователь подключился лимит не видит.
И в чем по-вашему будет "решение не надежным"?

Цитата
Sergey Gorokhov написал:
А потом когда шлюз запустят лимит вдруг появился.
А вслед за лимитами - уведомление "лимиты загружены". Отдельно для каждой секции после запуска шлюза.
Таким образом, в какое бы время не подключился клиент, уведомление "лимиты загружены" должно быть отправлено после лимитов.
Написание автономного бота
 
Sergey Gorokhov, предложу свое решение.
На фондовой (и валютной) секции есть определённая процедура загрузки лимитов брокером на сервер. По окончании этой процедуры сервер должен отправить клиенту соответсвующее уведомление.
Когда клиент подключается к серверу, тот в первую очередь отправляет клиенту данные по лимитам и в конце - признак, что процедура загрузки лимитов (на сервер) завершена.
Таким образом можно гарантировать, что стартовые лимиты на начало торговой сессии загружены. Текущие лимиты скрипт сможет посчитать сам на основании этих данных и сделок.
Тогда скрипт будет ждать вполне определенный сигнал, а не "то, не зная что". И начинает торговлю только после получения уведомления "лимиты загружены".

Цитата
Sergey Gorokhov написал:
FuturesClientHolding  грузятся НЕ с сервера, а с биржи.
В биржевом шлюзе нет уведомления об окончании загрузки данных?
Думаю на срочной секции осуществим аналогичный вариант.

Sergey Gorokhov, как считаете, рабочий вариант?
Страницы: 1 2 След.
Наверх