Let_it_go, Тогда ищите ошибку в формуле. почему у Вас идет умножение на два? И почему Вы умножаете комиссию на количество сделок? в формуле на которую Вы указали этого нет.
Let_it_go, Не совсем понятно в чем именно вопрос. В том что Ваши расчеты за сбор не совпадают с биржевыми (тогда вопрос к бирже)? или в том что Вы подали больше неэффективных транзакций чем ожидалось (тогда вопрос к Вам, зачем подавать столько не эффективных транзакций)?
Алексей Степанов, Настройки терминала позволят только уменьшить глубину, но не увеличить (о чем и просит автор). А увеличить можно действительно только со стороны биржи. Да глубина ограничивается минимальной-максимальной возможной ценой, однако Вы легко можете убедиться в том что строк в стакане меньше чем установлено этим ограничением.
John написал: Есть такие величины как время сервера, дата сервера
Есть такие величины как время сервера QUIK, дата сервера QUIK, время биржи, дата биржи, и это совершенно не одно и тоже. Даже более того на одном сервере QUIK Вы можете одновременно работать с разными рынками и биржами и время на них может быть разным. Для примера, сравните таблицу обезличенных сделок по фортс и по акциям, на удивление, при одновременном появлении там следок, время на них разное. И это только на одной Московской Бирже, а ведь QUIK умеет работать и с другими. Пока все биржи мира друг с другом не договорятся, придется с этим как-то жить. В связи с чем, со стороны QUIK нет смысла синхронизации времени с биржей. Просто потому, что не известно с какой именно биржей нужно синхронизоваться. Хотя технически такая возможность есть, впрочем как и на любом другом компьютере.
Цитата
John написал: Может у ПО сервера биржи есть опция по синхронизации времени с внешним сервером точного времени - time provider.
Это опция есть на любом компьютере, в том числе и на компьютерах серверов биржи и на Вашем компьютере тоже. Синхронизация настраивается в "панель управления" - "дата и время".
Цитата
John написал: Если в этом случае настроить синхронизацию с тем же сервисом, то можно косвенно обеспечить получение времени и даты сервера биржи. Или это не надежный вариант?
Это надежный вариант, но с учетом ряда особенностей: Во-первых, нужно знать с каким NTP сервером Вам нужно настроить синхронизацию. Уточните у специалистов нужной биржи, какой NTP сервер использовать (с учетом того что на разных рынках одной биржи, время тоже может быть разным). Во вторых, готовьтесь к тому что в любом случае будет какая-то погрешность. Возможно она будет не существенной, какие-то сотые доли секунд, но все-же она будет. И в-третьих, поменяйте батарейку на материнской плате, так на всякий случай.
s_mike@rambler.ru написал: идея просто посмотреть, за какие даты есть в таблице обезличенных сделок сделки и выбрать те, что имеют старшую дату, не проходит из-за того, что таблица обезличенных сделок может быть в процессе закачки и сделки второго дня ещё в ней могут не присутствовать.
Цитата
Sergey Gorokhov написал: Если дата торгов не совпадает с датой сделки, значит что это "вечерние" сделки предыдущего дня.
s_mike@rambler.ru написал: Сергей, мне даже неудобно Вам на это указывать, но астрономическая дата никак не связана с содержимым таблиц терминала. Например в воскресенье, если данные в терминале не очищены с пятницы. Они будут разными отсутствии соединения с брокером и т.д.
Михаил, мне даже неудобно Вам на это указывать, но если в час ночи Вы выставите заявку по какому-нибудь рынку который в это время торгуется, то увидите текущую астрономическую дату, а не дату торговой сессии.
Цитата
s_mike@rambler.ru написал: "Получается как только пройдет полночь, дата на графиках поменяется, а TRADEDATE останется прежним." Я не уверен, что вы уверены в написанном вами.
Цитата
Sergey Gorokhov написал: Если нет доверия к сказанному, увы убеждать Вас в противном никто не будет.
Цитата
s_mike@rambler.ru написал: Мне нужно собирать данные из таблицы обезличенных сделок, обрабатывать их и раскладывать по файлам. Один файл - один торговый (!) день. С отсеиванием вечерней сессии.
Есть нормальный и надежный костыль. Если дата торгов не совпадает с датой сделки, значит что это "вечерние" сделки предыдущего дня. Оба параметра есть в таблице обезличенных сделок и никакой TRADEDATE не нужен впринципе.
s_mike@rambler.ru, Для начала, Вам нужно определиться, для чего именно Вам нужна дата. Если для получения данных из таблиц, графиков и прочие, то как уже было сказано TRADEDATE в данном случае не подойдет. Так как TRADEDATE это дата торговой сессии, а не астрономическая дата. Получается как только пройдет полночь, дата на графиках поменяется, а TRADEDATE останется прежним. На наш взгляд, дата торговой сессии Вам не нужна. А нужна текущая астрономическая дата, т.е. компьютера.
s_mike@rambler.ru написал: 1. Если после прихода колбека мы видим герустую торговую дату - это ГАРАНТИРОВАННО в любым случаях актуальная торговая дата, а не оставшаяся в кишках со вчерашнего дня?
нет, Вы же сами про это целый пост создали.
Прошу прощения, вопрос был не так понят. Если OnCleanUp сработал именно из-за смены сессии, то да, после колбека Вы получите актуальную дату торговой сессии. Однако, OnCleanUp может сработать не только из-за смены сессии на сервере.
s_mike@rambler.ru написал: 1. Если после прихода колбека мы видим герустую торговую дату - это ГАРАНТИРОВАННО в любым случаях актуальная торговая дата, а не оставшаяся в кишках со вчерашнего дня?
Это некий уникальные набор букв и цифр, которые однозначно определяют торговую сессию на сервере. Если этот набор поменялся, значит на сервере поменялась сессия, ну либо это какой-то другой сервер. По этому и было сказано что лучше его использовать совместно с TRADEDATE.
Цитата
s_mike@rambler.ru написал: Актуальная торговая дата в моем понимании -это совпадающая с тем что на графиках, таблицах и прочие.
Тогда Вам лучше забыть про TRADEDATE, т.к. после перехода на полночь она не меняется.
s_mike@rambler.ru написал: От моего имени зарегистрировано за 10 лет пара десятков пожеланий.Не было случая чтобы реализовали. Уж не знаю какой у вас толк, а для меня никакого.
Простите, но именно лично от Вас было зарегистрировано пожелание на добавление функций SetValue, GetValue, SetRangeValue Конкретно пост на старом форуме 19/03/2014 18:54 реализовано в версии 6.15 от 03.10.2014. Да делаем не все и не сразу, но это не значит что "толку нет".
Цитата
s_mike@rambler.ru написал: Отлично. И насколько позже? И как узнать, что данные уже обновились, если придти может снова вчерашняя дата?
Добавить флаг в OnCleanUp и следить за ним в main?
s_mike@rambler.ru написал: Я правильно понимаю, что сначала срабатывает колбек oncleanup и только потом торговая дата кладется в то место, откуда ее вынимает getInfoParam?
Похоже что Вы запрашиваете данные через getInfoParam в момент когда в терминал эти данные еще не пришли. Колбеки срабатывают непосредственно перед тем как данные появятся в терминале. Как вариант, можно смотреть getInfoParam в main(), после того как сработает OnCleanUp Можем предложить зарегистрировать пожелание на добавление в OnCleanUp параметра, в котором будет возвращаться дата торгов.
s_mike@rambler.ru, Если нет доверия к сказанному, увы убеждать Вас в противном никто не будет. Если есть проблема, значит с ней нужно разбираться, а не надеяться что ответ будет найден сходу. Как уже было сказано и еще раз повторим, у нас описанная ситуация не повторяется. А у Вас? И хотелось бы взглянуть на полную версию кода.
s_mike@rambler.ru написал: Вопрос по tradedate. В какой момент происходит ее изменение?
tradedate меняется после смены сессии на сервере. Это не тоже самое что смена астрономической даты. Смена сессии как правило происходит утром следующего дня, после рестарта сервера. Иногда делается два рестарта сервера, при этом сессия меняется только после второго рестарта. А иногда, сервер утром подымают на старых данных и сессия меняется только после подключения первого шлюза. Все зависит от нужд брокера.
На нашем демо контуре, смена сессии происходит ежедневно после первого рестарта утром, примерно в 3 часа по МСК. Судя по логам, 25го числа демо контур корректно поменял сессию примерно в 3 утра по МСК и никаких проблем с этим не было. В связи с чем объяснить почему Вы видели 24е число к сожалению не можем. Проверили сегодня, проблема не повторяется. В связи с чем можем предположить что это какая-то локальная проблема.
Алексей написал: Именно поэтому, в идеале, хотелось бы увидеть для каждого class_code свой справочный файл с описанием полей отправки транзакций и полей потоков OnOrder и OnTrade (для торговых поручений).
Только по примерным прикидкам, удалось насчитать около 2000 разных class_code которые поддерживаются в QUIK. Описать их все? И сколько простите гигабайт тогда будет весить документация?
Цитата
Алексей написал: Ведь наименования и информационное наполнение этих полей не являются копией протоколов биржевых шлюзов, а являются собственной разработкой ARQA.
Вот как раз копией они и являются. QUIK не умеет брать информацию из воздуха. На разных биржах одинаковые по смыслу параметры называются по разному, а в QUIK они объедены и называются одинаково.
Цитата
Алексей написал: В руководствах spectra plaza я увижу описание потока информации по шлюзу между биржей Forts и сервером брокера, но я не увижу какие параметры нужно заполнить в таблице для sendTransaction и в каких полях OnOrder я смогу увидеть информацию, связанную, например, с ежедневным перевыставлением заявки.
Правила торгов это не тоже самое что описание протокола, которое Вы видимо и читаете.
Цитата
Алексей написал: В описании *.tri файла я не нашел подходящего параметра. Но может быть, все же, в английском варианте есть поле, соответствующее ["Переносить заявку"]? (Или для выяснения этого я должен переключить язык интерфейса клиентского места? Опять же, в региональных установках у меня только одна возможность выбора языка - это "Russian[Standard Set]").
Вы категорически неверно поняли. Описание параметров транзакций, которое приведено в документации это один вариант. Описание "на русском" это второй вариант Описание "на английском" это третий вариант.
Первый, это объединенный вариант, который содержит параметры транзакций которые являются общими для разных торговых площадок. Т.е. тут есть далеко не все возможные параметры. Второй и третий это одно и тоже, они представляют варианты транзакций с полным набором параметров который есть на бирже. Параметра "Переносить заявку" нет в первом варианте, так как этот параметр является специфичным.
Цитата
Алексей написал: Опять же, в региональных установках у меня только одна возможность выбора языка - это "Russian[Standard Set]").
Английский интерфейс является отдельно приобретаемой услугой т.е. не все брокера его предоставляют.
Цитата
Алексей написал: Просто смешно наблюдать, когда пользователи на форуме начинают гадать, какая информация содержится в exchange_code, там ни одного вразумительного ответа.
Всегда есть поддержка у которой можно спросить.
Цитата
Алексей написал: И, пожалуйста, расшифруйте значения битов ext_order_flags хотя бы для фондовой и срочной площадок московской биржи. (Хотя в описании столбца "Расширенный статус" указано 8 вариантов, никак не связанных с конкретной торговой площадкой).
Пожалуйста, конкретно для срочной секции:
Цитата
заявка снята COD = 4 заявка заменена = 16 заявка в состоянии отмены = 32 заявка отвергнута = 64 приостановлено исполнение заявки = 512 заявка в состоянии регистрации = 1024 заявка снята по причине закрытия сессии = 2048 заявка снята по времени действия = 4096 заявка в состоянии замены = 8192
Дело в том что Ваш вопрос вообще никак не связан с QLUA да и с QUIK в принципе. Вы торгуете на бирже и заявки там исполняются по правилам биржи. И совершенно не важно как Вы эти заявки подаете, через QLUA, динамический импорт или через терминал. Все равно они исполнятся по правилам биржи. И то как заявка переносится через сессию это опять же правила биржи. И к слову, на нашей планете есть не только Московская биржа. Бирж много и у каждой свои правила. А QUIK умеет работать с очень большим количеством бирж. Так как бирж много и так как у каждой свои правила, мы чисто физически не можем впихнуть в одну документацию правила вообще всех бирж, которые поддерживаются в QUIK. Да это и не нужно так как эти правила есть на сайте нужной Вам биржи.
Что касается полноценного описания формата *.tri файла с ключами на русском языке. Вы его не нашли потому что его не существует. И не может существовать в принципе. Как уже было сказано бирж много, у каждой свои правила и свои транзакции и даже если транзакции разных бирж делают одно и тоже, у них могут быть разные параметры. Формат "на русском" это формат транзакции в том виде как она представлена согласно протоколу обмена данными с биржей и он поддерживает все параметры которые возможны на конкретной бирже. Включив в настройках терминала галку "Стандартные формы ввода" Вы увидите форму ввода транзакции как раз в этом виде. И как можно заметить в такой форме обычно гораздо больше параметров чем в "красивой". Так как на разных биржах параметры разные, чтобы было удобно, мы объединили некоторые совпадающие по смыслу в заранее заданные константы. Именно они представлены в нашей документации. А тот формат который "на русском", это родной биржевой формат. Так как бирж много, так как у каждой свои транзакции, так как совпадающие по смыслу транзакции имеют разные параметры, мы опять же чисто физически не можем впихнуть в одну документацию описание вообще всех транзакций вообще всех бирж, которые поддерживаются в QUIK. Да это и не нужно так как эти параметры есть в правилах торгов которые есть на сайте нужной Вам биржи.
К слову, чтобы узнать как называется нужный параметр "на русском", достаточно добавить нужную транзакцию в карман транзакций и сохранить от туда в tri файл. Открыв файл блокнотом, Вы увидите транзакцию в формате "на русском". Или можно воспользоваться галкой "Стандартные формы ввода"
Почему "на русском" пишется в кавычках? Дело в том что в английском интерфейсе терминала, эти же параметры будут "на английском". Параметры "на русском" не работают в английской версии интерфейса. Параметры "на английском" не работают в русской версии интерфейса. Параметры в том виде как они приведены в документации, работают в обоих версиях интерфейса.
Алексей написал: 1. Для quik 7.6 ситуация с реакцией на возврат nil из fn - забыли упомянуть в документации или еще не реализованный функционал?
еще не реализованный функционал
Цитата
Алексей написал: Можно ли из fn вместо true возвращать любое значение, отличное от nil и false? (в lua при проверке результатов выражений любой результат, отличный от nil или false, интерпретируется как true)
Иван Ру, К сожалению затруднимся назвать причины. т.к. core.dll не является нашей разработкой. Попробуйте другую версию, или поискать ответ в интернете.
Вопрос не понятен. Согласно документации, функция SearchItems возвращает либо TABLE либо nil. Если речь про функцию fn, то опять же по документации, Вы можете вернуть из нее, либо true, либо false, либо nil
Цитата
fn – функция обратного вызова, возвращающая одно из следующих значений: true – текущий индекс учитывается в результате; false – текущий индекс не учитывается в результате; nil – поиск прерывается, функция SearchItems возвращает таблицу с индексами, найденными ранее, включая текущий индекс.
Здравствуйте, Такое может быть, если в каком-либо колбеке происходит зависание. Например если в колбеке, используется какой-либо тяжелый цикл. Или если выход из колбека предусмотрен только когда в другом колбеке что-то произойдет. Или вовсе это бесконечный цикл. Нельзя такого допускать, все подобные вещи должны быть в main() В любом случае, гадать не лучший вариант для решения проблемы. Если требуется точный диагноз, необходимо предоставить полную версию кода скрипта.
sendTransaction возвращает только ошибки возникающие ДО отправки транзакции на сервер. Например, неправильный синтаксис. Все остальное, приходит в OnTransReply
Если Вы остановите колбек, то у Вас зависнет терминал. Именно потому что колбеки идут в одном потоке терминала QUIK и никак это изменить нельзя. Решение - выставить ожидание в main, а в колбеках использовать флаги, которые будут влиять на поведение цикла в main
Александр Правилов написал: Sergey Gorokhov, какой среду разработки вы могли бы порекомендовать?
Ту, в которой Вам будет удобно.
Цитата
Александр Правилов написал: Да, я переходил по ссылке, но её уже не существует, вылетает просто на форум.
Ссылка работает, специально проверили на разных компьютерах. У Вас что то не так с браузером?
Цитата
Александр Правилов написал: Не соглашусь в этом плане относительно decod'a, ибо я в режиме онлайн могу запросить вместо заявок - сделки и всё будет ок. и если я в режиме онлайн игнорируя эту ошибку пропишу через точку row.order_num к примеру, число выдастся, поэтому в принципе работать можно
Александр Правилов, Вы читали ссылку которая приведена выше? Там ведь тоже была речь про decoda Может быть стоит взглянуть на описанные там рекомендации.
Александр Правилов написал: в row=getItem("orders",i) пишет - improperly formatted XML data
В интернете говорят что проблема может быть из за кодировки Файл скрипта должен быть строго в ANSI, а по Вашему примеру кода видно что у Вас это не так.
Александр Правилов написал: Сергей,подскажите, у отправленной транзакции есть мой уникальный ID, можно ли отследить данную транзакцию и успеть её отменить до того как она улетела на биржу?
Как Вы себе это представляете? отправить транзакцию на отмену быстрее чем транзакцию на выставление? Скорость транзакции никак контролировать нельзя.
Цитата
Александр Правилов написал: Какие варианты может принимать аргумент ACTION="NEW_ORDER" в транзакции?
Посмотрите документацию на терминал QUIK, "Раздел 6. Совместная работа с другими приложениями" - "6.11 Импорт транзакций"
Цитата
Александр Правилов написал: может мне использовать цикл while внутри onParam?
Что делает функция killAllOrders? Если перебирает данные в таблице заявок, то да, пока заявка там не появится функция естественно ее не увидит. То что заявка появляется не в момент отправки транзакции, это нормально, ведь даже у света есть скорость. Как вариант, можно ловить ответ на транзакцию в OnTransReply и отправлять транзакцию на снятие там.
Здравствуйте, При первом запуске, выводится вся таблица, потом только обновления. Если нужны только данные по последней сделке, то средствами настроек QUIK никак. Разве что только средствами самого DDE сервера.