Почему, при экспорте таблицы по DDE "Купить/продать" только с 4 колонками, а именно 1=Инструмент 2=Код инструмента 3=D long 4=D short Передается огромное количество строк, ведь ничего не меняется в течении сессии? Вывод "строчит" даже ночью. Зачем?
nikolz написал: Относительно халявы для QUIK на луа сложно сказать. Можете посмотреть мой тест https://forum.quik.ru/forum10/topic7909/ это рабочая болванка для робота При приходе сделки формирует все параметры для заявки по инструменту. =============== Если надо что-то конкретное и не сложное, напишите, нарисую.
Спасибо, конечно, но в ветке написано, что есть проблемы, тогда как у меня все работает. Я открыл эту тему, чтобы понять Квик шалит, или в моем приложении есть косяк. Приложение получилось большое (более 8 000 строк кода), возможно у меня где-то недочет.
Михаил Филимонов написал: 1024 советника и 4194304 (4 миллиона) заявки в день для каждого из них.
Дело в том, чтоMDI приложении работают одновременно от 97- до 134 роботов.
Мне тоже кажется, что можно 9 бит использовать под идентификатор советника - 512 значений более чем достаточно. Оставшиеся 22 можно использовать под TransID. Знаковый (старший) бит не трогаем, чтобы не было переполнения. И никаких проблем.
Kalmar написал: end; И, собственно все. Имя фьючерса здесь никак не учитывается. А два младших байта (1й и 0й) видимо дают 65535 вариантов TransID-ов.
Это никак не объясняет происхождение числа 0x83917001, из первого поста. По вышеприведенной логике 0x83 - это номер робота? - это 131, уже переполнение. Но 2й байт - 0х91 - не похож на месяц/год. Да и 0х7001 - 28673я транзакция?
Возможно где-то еще что-то примешивается?
Дело в то том, что я много пишу на MQL, там wdTransID - это Magic, объявленный как ULong Вот я, по привычке, для Квик использовал ULong, посылая Ulong я получал кастрированный Long/ Потом, переписал под DWORD
nikolz написал: Хочу поинтересоваться, что дает запись кода фьючерса в id. если можно, то интересует численная оценка выигрыша относительно целочисленного id. Номера советников можно написать в старших байтах. Я так раньше делал. Типа 32 бита в итоге 1024 советника и 4194304 (4 миллиона) заявки в день для каждого из них. ------------------------ Чего уж проще.
Дело в том, чтоMDI приложении работают одновременно от 97- до 134 роботов. Ордера я отсылаю асинхронно. При генерации dwTransID каждым из роботов, неизбежно дублирование ID, поэтому нужно делать уникальные ID
nikolz написал Вы экспортируйте своим сервером в свою прогу или сервером Excel в таблицу Excel. ------------------ У меня свой сервер для скрипта луа, вроде нет проблем.
А возможно из луа экспортировать таблицу "Купить/Продать", которая в Квике составляется из таблицы "Клиентский портфель" ?
в луа можно получить это : getPortfolioInfo -Функция предназначена для получения значений параметров таблицы «Клиентский портфель» , соответствующих идентификатору участника торгов «firmid» и коду клиента и это getBuySellInfo - Функция предназначена для получения параметров таблицы «Купить/Продать».
nikolz написал Вы экспортируйте своим сервером в свою прогу или сервером Excel в таблицу Excel. ------------------ У меня свой сервер для скрипта луа, вроде нет проблем.
А возможно из луа экспортировать таблицу "Купить/Продать", которая в Квике составляется из таблицы "Клиентский портфель" ?
Уточните, настроены ли фильтры в таблице "Текущие торги"? Если да, то какие? А так же поясните подробнее, что значит "пропадает экспорт"? Для наглядности желательно со скриншотами.
Добрый вечер!
Фильтров нет (таблица по умолчанию) В таблице 100 фьючерсов, при начале работы все данные по фьючерсам из таблицы экспортируются, а через некоторое время (бывает минуты, бывает 1 - 2 часа) перестают экспортироваться данные по произвольным инструментам. Данные других фьючерсов передаются. Нет никаких ошибок и зависаний. Сегодня обновился до 10,0,1,18 все тоже самое. Невозможно представить скриншот, странно, что Вы не знаете, что в такой ситуации скриншот бесполезен.
К участникам форума У меня только такое поведение терминала, при выводе данных по DDE ?
Вы экспортируйте своим сервером в свою прогу или сервером Excel в таблицу Excel. ------------------ У меня свой сервер для скрипта луа, вроде нет проблем.
Уточните, настроены ли фильтры в таблице "Текущие торги"? Если да, то какие? А так же поясните подробнее, что значит "пропадает экспорт"? Для наглядности желательно со скриншотами.
Добрый вечер!
Фильтров нет (таблица по умолчанию) В таблице 100 фьючерсов, при начале работы все данные по фьючерсам из таблицы экспортируются, а через некоторое время (бывает минуты, бывает 1 - 2 часа) перестают экспортироваться данные по произвольным инструментам. Данные других фьючерсов передаются. Нет никаких ошибок и зависаний. Сегодня обновился до 10,0,1,18 все тоже самое. Невозможно представить скриншот, странно, что Вы не знаете, что в такой ситуации скриншот бесполезен.
К участникам форума У меня только такое поведение терминала, при выводе данных по DDE ?
Вот так, для Квик, генерится Trans ID function CalcTransID(const Data: string; const idx: integer): Dword; var k, z: integer; Value: Dword; month, year: string; begin if(idx < 0) then begin result:= 0; exit; end; k:= Pos('-', Data); z:= Pos('.', Data); month:= Copy(Data, k + 1, z - k - 1); year:= Copy(Data, z + 1, Length(Data) - z); if(TryStrToInt(month, k) = true) then begin Value:= k; if(TryStrToInt(year, k) = true) then begin Value:= Value + k; result:= (idx shl 24); Result:= Result + Value shl 16; end else result:= 0; end else result:= 0; end; А так берется, при отправке ордера TTRansID = packed record ID: Dword; Value: Dword; end;
FTransAction: TTRansID;
function TExpert.GetTransID; begin FTransAction.Value:= TransAction.Value + 1; if(TransAction.Value >= 65530) then FTransAction.Value:= 0; result:= TransAction.ID + TransAction.Value; end;
Фьючерсы имеют имя не боле 6 байт Вы правильно все поняли. В старших 6 байтах имя символа а младшие байты служат для генерации уникальных ID. Если имя меньше, н-р RTS, то 4 байт просто не заполняется. В случае с MQL мне достаточно 1 байта для генерации уникальных ID для каждого советника. В Квик мне нужно более 256 переборов. При отсылке ордера к существующему ID прибавляется 1, если значение = 4096, то счетчик "обнуляется". Я переделал под Квик генерацию ID. К сожалению, я сейчас не дома и не могу выложить код генерации
Kalmar написал: Наконец-то добрался чтобы проверить. 1. Мое сообщение #2 говорило о том, что DWORD и LONG одно и тоже. Я не внял что сыр-бор изза знаковости. 2. Проверил, да, квик через транс2квик обрезает dwTransID если он больше "максимально положительного LONG".
Но, при этом в документации написано (см. скрин) "Указатель типа Long", т.е. никто не обещаел что с числом будут обращаться как с беззнаковым. Согласен, что есть расхождение в прототипе, и описании, и наверное это все-таки баг.
Но, признайтесь честно, вы уже подаете 2млрд. транзакций в течении одного торгового дня, и вам не хватает знакового диапазона чтобы покрыть свои нужды? Или тут принципиальный момент?
Добрый день! Дело в том, что я Генерирую автоматически dwTransID на основе имен фьючерсов, В старших байтах DWORD хранится имя фьючерса, а два младших байта 4096 вариантов dwTransID за торговый день. А в моем приложении работают от 99 до 134 экспертов (роботов), каждый из них использует свой (уникальный) dwTransID.
Добрый день! Экспортирую таблицу "Текущие торги" с фьючерсами по DDE При запуске, все экспортируется нормально, но иногда, через несколько минут или часов, пропадает экспорт по одному или нескольким фьючерсам. Версия Квик 9,7,1,10 Это только у меня такое поведение Квик:?
Добрый день. Я использую два экземпляра с одинаковыми версиями Квик. В одинаковых таблицах имеются одинаковые столбцы, но их названия отличаются. Н-р В одной таблице столбец называется "Макс. возм. цен.", а в другом экземпляре Квик этот же столбец называется "Макс.возм.цена".
Возможно ли редактировать названия столбцов в таблицах? Если да, то как это сделать? В каком файле дистрибутива Квик находятся названия столбцов таблицы?
Господа разработчики! Пожалуйста, дайте пояснения по следующей ситуации. Подается лимитированная заяка через Trans2quik с целью купить инструмент по указанной цене или снять заявку, если цена "ушла". Параметры заявки
TYPE=L - лимитированная заявка, должна исполнится по цене, указанной в заявке EXECUTION_CONDITION=KILL_BALANCE' - если этой цены (или лучшей) нет, то заявка должна сняться. Посылаю заявку на покупку с ценой 4927, а она исполняется по разным ценам, причем, не по тем, что указана в заявке. Что я не так делаю?
Господа разработчики! Возможна ли ситуация, когда я получаю TRANS2QUIK_ORDER_STATUS_CALLBACK, что сделка была совершена, но на самом деле в терминале этой сделки нет?
Скажите, почему частично исполненный ордер (стоит с стакане), при его удалении не вызывается TRANS2QUIK_ORDER_STATUS_CALLBACK (асинхронная подача приказов) ?
В таблицу «Купить/Продать» можно добавить столбцы «D long» и «D short». Самостоятельно рассчитать это не получится, поскольку согласно регламенту мы устанавливаем перечень ставок риска.
Anzhelika Belokur написал: Правильно понимаем, что Вы хотите иметь таблицу для своих каких-то записей, которые Вы будите вести аналогично блокноту и эта таблица никак не будет обновляться и изменяться терминалом? Если это так, то мы можем зарегистрировать пожелание на такую доработку.
nikolz написал: Можно, но желательно в содружестве с головой. ------------ Для справки, QLUA - это библиотека функций, написана на СИ и имеет интерфейс для вызова из скриптов, написанных на LUA. --------------- Но если не нравится Lua, то можете либо писать на любом другом языке.
У меня не стоит задача написать что-то на ЛЮБОМ языка, я задал конкретный вопрос.
Не смогли воспроизвести данную проблему на нашем примере API_Tester_DLG_x64.exe, TRANS2QUIK_ORDER_STATUS_CALLBACK срабатывает на изменение статуса заявки с аналогичными параметрами. Проверьте, пожалуйста, воспроизводится ли у Вас проблема с TRANS2QUIK_ORDER_STATUS_CALLBACK на нашем примере API_Tester_DLG_x64.exe.
Понятное дело, что не смогли.
Я около 10 лет программирую роботов и нигде не было такого, что для удаления ордера требовался ТО ЖЕ идентификатор транзакции (dwTransID)! Во всех платформах и терминалах транзакции нумеруются по порядку!
Тикет ордера понятно почему тот же, но транзакция ДРУГАЯ, значит и ее номер должен быть другой!
Опишите более подробно Вашу ситуацию, возникают какие-либо ошибки? Также уточним, что если под "отложенным ордером" Вы подразумеваете условную заявку, то TRANS2QUIK_ORDER_STATUS_CALLBACK не подойдет, так как в текущей версии trans2quik нельзя подписаться на события по стоп-заявкам.