XXM пишет: А зачем их отправлять в Lua, в таком случае?
Терминал никогда не будет фильтровать колбэки, кому их слать, а кому нет. Пришел колбэк получите. Фильтра не будет. И это абсолютно правильный и логичный подход к реализации.
Старатель пишет: Тогда не нужно перекладывать ответственность на биржу.
Еще раз вынужден обратить внимание что Вы неверно интерпретируете сказанное. Был вопрос
Цитата
Старатель пишет: Какие параметры являются обновляемыми?
На что был ответ
Цитата
Sergey Gorokhov пишет: Все параметры которых нет на бирже, плюс те параметры которые на бирже можно менять, являются обновляемыми.
Вы же сделали абсолютно неверный вывод:
Цитата
Старатель пишет: биржевые параметры стали обновляемыми
Есть другие биржи (не МБ) и на них некоторые параметры сделки обновляемые. Например там сделки можно отменять. Мы поддержали этот функционал в QUIK На МБ ничего не менялось, там параметры обновляемыми НЕ стали.
Цитата
Старатель пишет: Может ли брокер повлиять на изменение параметров сделки, которая уже была получена клиентом?
Старатель пишет: Какие параметры являются обновляемыми?
Все параметры которых нет на бирже, плюс те параметры которые на бирже можно менять, являются обновляемыми. Речь не только про TRANS_ID (это только частный случай) , есть еще комиссия брокера, флаги, UID и д
Alex пишет: Добрый день, я бы обобщил просьбу Андрей Мандра , "источник данных для построения пользовательских индикаторов " из таблицы истории значений параметров.
Здравствуйте, Вы уже сейчас можете добавить на график источник данных из таблицы истории и строить по нему пользовательские (и любые другие) индикаторы. Ровно по уже озвученному алгоритму
Цитата
Egor Zaytsev пишет: При добавлении индикатора в окне нажмите "Новый источник", далее поставьте точку "таблица истории значений параметров" и выберите там "кол-во открытых позиций"
Старатель пишет: А разве сейчас у вас 0 - не есть значение "по-умолчанию" для trans_id? Только в текущей реализации при получении значения 0 мы не можем с уверенность сказать, действительно ли там 0 или просто сервер ещё не нашёл транзакцию.
0 это не значение по умолчанию, а отсутствие значения, ибо trans_id нельзя задать равным 0. А Вы как раз хотите его сделать значением. То есть чтобы сервер его проставлял как сейчас не нулевой trans_id
Цитата
Старатель пишет: Sergey Gorokhov пишет: Ну тогда колбеки будут сыпаться по несколько раз еще чаще чем сейчас Поясните.
Так как сервер будет проставлять сам trans_id=0 это приведет к тому же что сейчас происходит с trans_id не равным 0.
Старатель пишет: Вы что-то путаете: это вы сейчас делаете двойную работу. Судя по сообщению #34 (вы же не опровергли его), в общем случае, сервер сначала проставляет trans_id=0, а затем проставляет правильный trans_id.
То есть Вы хотите чтобы "0" стал номером транзакции по умолчанию для заявок/сделок? И чтобы сервер его проставлял сам после получения информации. Ну тогда колбеки будут сыпаться по несколько раз еще чаще чем сейчас, разве не с этим мы тут боремся?
Цитата
Старатель пишет: Я правильно понимаю, что весь это "сыр-бор", чтобы отправить сделку клиенту сразу по получению с биржи, не "шурша" по БД SQL в поисках недостающих параметров (в частности trans_id и uid), а эти параметры отправятся следом, когда выполнится команда SELECT?
Старатель пишет: Если параметр не проставлен, то он = nil . Таким образом, получив колбек с trans_id (или любым другим параметром) = nil мы понимаем, что данный параметр не был проставлен в текущем колбеке и нужно ждать следующего колбека.
Вы не совсем понимаете как оно работает. Когда сделка приезжает на сервер, то сервер понятия не имеет есть на ней trans_id или нет., и не знает должен он вообще на ней быть или нет. Чтобы сервер узнал что на сделке есть trans_id и проставил trans_id=0, он должен найти транзакцию. Ровно это он сейчас делает чтобы проставить trans_id Вы же предлагаете чтобы сервер делал одну и ту же работу два раза. первый раз он будет искать транзакцию по сделке чтобы проставить trans_id=0 а второй раз чтобы проставить правильный trans_id масло масленое получается.
Цитата
Старатель пишет: Это справедливо для всех параметров?
нет не для всех, а только для тех которые берутся из транзакции, конкретно UID и trans_id
Старатель пишет: подстановка значения 0 или "" вместо nil там, где значения в принципе нет, приводит к неопределённому поведению программы. В программировании это недопустимо. А суть такова, что проставлять нужно только те параметры, которые заведомо имеют какое-то значение. Параметры, не имеющие значений должны быть nil . Тогда робот, получивший колбек, в котором, не проставлены интересующие его параметры, будет понимать, что нужно ждать следующего колбека.
В данной ситуации это выглядело бы так: При получении сделки с бижи, если сервр не успел проставить номер транзакции, то он так и отправляет сделку с trans_id=nil (а не 0 ). После, когда сервер будет отправлять следующий колбек, он уже проставит номер транзакции.
Пожелание зарегистрировали. Однако, конкретно с trans_id это не решит проблему. Так как trans_id="0" мы не можем указать в транзакции, а значит получив trans_id=nil или как сейчас trans_id=0 реакция будет одной и той же.
Цитата
Старатель пишет: возникает вопрос: если мы получили сделку с проставленным trans_id, можно ли рассчитывать, что он в будущем не изменится?
Не совсем так, в штатной ситуации да действительно, если trans_id есть то поменяться он уже не может. Но в случае сбоя на стороне сервера, есть вероятность что сделка может приехать без UID и без trans_id
Старатель пишет: Поэтому обозначить, какие именно параметры являются не обновляемыми для вас не составит труда. Обновляемые параметры мы уж определим сами методом исключения.
Вы можете самостоятельно определить список, просто взглянув на описание биржевого интерфейса.
Цитата
Старатель пишет: Вы предлагаете при подаче ручного поручения пользователю забивать ещё комментарий?
Я предлагаю роботу писать некий символ в комментарии который будет однозначно определять транзакцию как поданную роботом. Все остальное, что не содержит этот спец символ, считать поданным вручную.
Старатель пишет: Какие параметры являются обновляемыми?
Все параметры которых нет на бирже, плюс те параметры которые на бирже можно менять, являются обновляемыми. Речь не только про TRANS_ID (это только частный случай) , есть еще комиссия брокера, флаги, UID и др.
Цитата
Старатель пишет: Сколько должно быть колбеков на одну сделку? Есть ли какое-то определённое число? Известно ли оно вам?
от 1 до бесконечности.
Цитата
Старатель пишет: Задача состоит в том, чтобы при получении сделки, совершённой вручную, выполнить определённые действия. Из предыдущего комментария следует, что trans_id является обновляемым параметром, и, если там 0, то это значит, что этот параметр может быть ещё не заполнен. А может быть заполнен... В общем, надо угадать...
Дмитрий пишет: Для того чтобы получить все сделки сессии, обычно, мы должны открыть набор данных через CreateDataSource, пройти в цикле по этому набору данных и забрать всё что там есть. И дальше забирать все вновь поступающие сделки в OnAllTrade. А что будет если мы запустили quik в середине дня. За пол дня было совершено, допустим 100 000 сделок. Как известно, эти 100 000 сделок в наборе данных появляются не сразу, а только начинают загружаться с сервера quik. В итоге при переборе всех сделок в цикле мы будем иметь в наборе данных только, допустим 10 000 сделок. Так вот, остальные 90 000 старых сделок придут в OnAllTrade ?
При новой загрузке потока всех сделок, OnAllTrade сработает для каждой пропущенной сделки.
Антон пишет: а по заявкам эти параметры уже можно было узнать(были обновляемыми
Вы сами ответили на свой вопрос. Вот именно что "можно узнать" Слово "Узнать" является здесь ключевым. С точки зрения кода, оно означает прошерстить по всем записям и найти нужную из которой подхватить параметры которых на сделке нет.
Цитата
Антон пишет: будет прислано несколько обновлений на каждую сделку?
Да именно так.
Цитата
Антон пишет: Почему не оставили только для заявок, меньше нужно было бы информации повторной пересылать..
Потому что пользователи хотели чтобы на сделках был TRANS_ID и другие параметры
Sergey Gorokhov пишет: Как уже было сказано и еще раз повторю, трансляция нескольких OnTrade есть, будет и от этого избавляться не планируется, по уже озвученным причинам. Это значит что если данная реализация приводит к неудобству, предложите способ его избежать и мы зарегистрируем пожелание. Варианты типа "сделайте как было" не принимаются. На вскидку, например можно подумать над добавлением порядкового номера обновления для каждой сущности. 1, 2, 3 и т.д. Тогда, в коде можно будет фильтровать по номеру обновления if num=1 then.
Если возражений нет, предлагаю зарегистрировать такое пожелание.
Это отличный способ. Возражений нет, зарегистрируйте, пожалуйста!
Здравствуйте!
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Как уже было сказано и еще раз повторю, трансляция нескольких OnTrade есть, будет и от этого избавляться не планируется, по уже озвученным причинам. Это значит что если данная реализация приводит к неудобству, предложите способ его избежать и мы зарегистрируем пожелание. Варианты типа "сделайте как было" не принимаются. На вскидку, например можно подумать над добавлением порядкового номера обновления для каждой сущности. 1, 2, 3 и т.д. Тогда, в коде можно будет фильтровать по номеру обновления if num=1 then.
Если возражений нет, предлагаю зарегистрировать такое пожелание.
На сделке, которая является сущностью торговой системы нет некоторых полей, которые есть в QUIK В частности это UID, TRANS_ID а также набор флагов и ряд других специфичных параметров Серверу чтобы проставить эти обновленные параметры приходится отправлять сделку несколько раз. Иначе, отправка сделки задерживалась бы до установки всех параметров, что гораздо хуже чем получить подряд несколько обновлений.
Здравствуйте, Начиная с последнего обновления сервера, таблица сделок стала обновляемой. Поэтому событие OnTrade может срабатывать по нескольку раз Это не ошибка, так и должно быть
Антонио пишет: Мой практический опыт подтверждает это утверждение. Если требуется последнее (текущее) значение параметра из ТТП, то getParamEx выдаёт это значение без предварительного заказа потока через CreateDataSource. Я не проверял на всех Параметрах, но полтора десятка точно использовал.
Это работает только если включена настройка "Исходя из настроек открытых пользователем таблиц"
Антонио пишет: Не нужно разве заботиться, чтобы почистить за собой мусор?
Конкретно в моем примере расчета греков, нет не нужно. В общем случае, нет представления о ситуации когда это действительно требуется.
Прошу прощения, ответ не совсем верный. Ситуация все же есть. для экономии трафика все же есть смысл закрывать поток, однако в случае указанного примера это второстепенно
Sergey Gorokhov пишет: Вы указываете на частный случай, о статусе которого я к сожалению сейчас не готов ответить. Однако в общем случае, решение доступа к данным в виде заказа через CreateDataSource должно работать.
Что есть частный случай и что есть общий случай в данной ситуации?
Речь о том, что в общем случае, если делается заказ данных через CreateDataSource с параметром INTERVAL_TICK (это важно) то мы получаем саму таблицу (вернее ее поток данных) и можем с ней работать минуя функции работы с графиками. Но, если мы заказываем интервал, то мы не получаем саму таблицу, а получаем только график, с которым функции доступа к таблицам не работают.
Вы указываете на частный случай, о статусе которого я к сожалению сейчас не готов ответить. Однако в общем случае, решение доступа к данным в виде заказа через CreateDataSource должно работать.
Антонио пишет: Вопрос 2: Как узнать способ обращения к ПАРАМЕТРу? Есть ли список ПАРАМЕТРОВ, для которых обязательно/необязательно перед первым обращением создавать поток?
В текущих версиях QUIK создавать поток для параметров бумаг с помощью функции CreateDataSource , если в дальнейшем вы собираетесь обращаться к этим параметрам через getParamEx , нет никакого смысла.
Здравствуйте, Можете обосновать или привести пример? В том скрипте, о котором идет речь, CreateDataSource используется именно для заказа данных. То есть, для случая когда параметр нигде не заказан, но его нужно получить через getParamEx.
Здравствуйте, Начнем с того что данный скрипт не "образцовый". Да, его написал лично я. Да, я сотрудник компании. Но данный скрипт это лишь пример, который был написан с одной и только одной целью - помочь Вам, как пользователям, понять расчет греков, не более. И этот скрипт вполне замечательно справляется конкретно с этим. Я вполне допускаю, что этот скрипт не идеален и не скрываю этого, но он работает и, выполняет именно те фундаментальные функции, которые на него возложены. Если есть адекватные претензии к логике решения тех или иных задач в скрипте, я с радостью приму их и внесу соответствующие изменения. Однако, следует заметить что данный код нигде в виде ссылки на сайте не публикуется, а значит, решение будет опубликовано только при очередном запросе на форуме.
А теперь к делу:
Цитата
Антонио пишет: Видим, что потоки в переменных не сохраняются, а какое-то время живут как локальные переменные. При выходе из скрипта потоки не закрываются с помощью DS:close(). Вопрос 1 : Это нормально не хранить и не закрывать после себя потоки ?
А зачем закрывать? Мы потом с этими данными работаем.
Цитата
Антонио пишет: Вопрос 2: Как узнать способ обращения к ПАРАМЕТРу? Есть ли список ПАРАМЕТРОВ, для которых обязательно/необязательно перед первым обращением создавать поток?
Списка нет, так как для разных бирж или рынков, он может быть разный. Есть секретный способ, если при выводе по DDE с формальными заголовками, параметр написан БОЛЬШИМИ буквами, значит он статичный и его заказывать нет нужды. Публиковать в документации эту фишку мы не будем, по своим внутренним причинам.
Цитата
Антонио пишет: Вопрос 3: Поток с интервалом INTERVAL_TICK почему открывается быстрее и действительно ли для расчёта греков надо использовать именно тиковый интервал, не увеличит ли это катастрофически трафик и память?
Тиковый поток - это есть то что мы запрашиваем в ТТП или в ТВС, а интервальный - это агрегированная информация в виде графика. Если проще, заказывая тиковый поток по ТТП мы получаем саму таблицу ТТП. Если по ТВС, то мы получаем саму таблицу ТВС и можем с ними работать минуя функции работы с графиками. Но если мы заказываем интервал, то мы НЕ получаем ТТП или ТВС, а получаем только график, с которым данный скрипт не работает. И да, мы эту фишку тоже не будем публиковать, по своим внутренним причинам.
Старатель пишет: Давайте уж сейчас определимся, как будет правильно называться параметр в будущем (надеюсь названия параметров останутся унифицированными).
Будет оба параметра (для поддержки обратной совместимости)
Старатель пишет: Может ли OnTrade в принципе прийти с незаполненным полем "Номер заявки"? Вы обещали добавить информацию по обязательным полям в документацию.
Если это поставочные сделки, но это лучше уточнить у биржи.