...., либо активировать настройку "Пересчитывать при изменении позиций" - обновление "Клиентского портфеля" будет происходить после каждого изменения позиций.
На периодичность расчета таблицы "Купить/Продать" влияет настройка Основные настройки (F9) / Торговля / Клиентский портфель - Обновлять через ... секунд . В Вашем случае расчет таблицы производится каждые 10 секунд, после расчета происходит вывод по DDE.
Чтобы данные из таблицы не выводились каждые 10 секунд, Вы можете изменить значение указанной настройки или вообще отключить ее - в этом случае обновление таблицы выполняться не будет.
Т.е при изменении записи в таблице Клиентский портфель строка не будет выводиться по DDE, если отключить обновление?
Почему, при экспорте таблицы по 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 нельзя подписаться на события по стоп-заявкам.