[CR] Использование залоговков в таблицах
Atom Ответить
15.07.2011


Помню что в описании было указано что заголовки в таблицах игнорируются и экспорт DDE идет по номеру колонки - для получения максимальной скорости экспорта.
Согласен с этим, но в тоже время сталкивался с тем что это создает неудобства - хочется добавить свои колонки в таблицы, и иногда - например в случае со стаканом - не хочется добавлять их в конец.

Поэтому предлагаю такую фичу:
- при запуске импорта считыать в таблицах имена колонок и запоминать их номера
- а дальше уже вести экспорт по номерам.

Т.о. и скорость будет не хуже.
И колонки можно будет настроить какие угодно.

Как вариант - сделать такое только для стаканов.

Теги:


Спасибо:




14 Ответов
Alexander

Фотография
Дата: 15.07.2011
Ответить


См. документацию, 4ый пункт

Цитата:
Если колонки добавляются не в конец, а перемешаны с основными колонками, то необходимо вставлять колонки относительно их порядка сделования друг за другом (DdeTableColumn.Index) в таблице:

Код

// вставить колонку волатильность, чтобы она была 5-ой с начала (нумерация идет с нуля)
// все последующие колонки за волатильностью автоматически перестраивают свой порядковый номер
this.Trader.SecuritiesTable.Columns.Insert(4, DdeSecurityColumns.Volatility);
Спасибо:

President

Фотография
Благотворитель
Дата: 26.07.2011
Ответить


Alexander Перейти
См. документацию, 4ый пункт

Цитата:
Если колонки добавляются не в конец, а перемешаны с основными колонками, то необходимо вставлять колонки относительно их порядка сделования друг за другом (DdeTableColumn.Index) в таблице:

Код

// вставить колонку волатильность, чтобы она была 5-ой с начала (нумерация идет с нуля)
// все последующие колонки за волатильностью автоматически перестраивают свой порядковый номер
this.Trader.SecuritiesTable.Columns.Insert(4, DdeSecurityColumns.Volatility);


понял что это можно делать вручную.
мое предложение заключается в том чтобы это происходило автоматически в момент соединения с Квиком:
1. считываются существующие заголовки колонок у таблиц
2. сравниваются с предопределенными именами колонок
3. по результатам сравнения конфигурится импорт
4. если какие-то колонки не найдены то экспешн

в результате
- можно будет менять порядок колонок не заботясь о перепрограммировании экспорта
- при выходе новых версий больше шанс что не нужно будет квик перенастраивать
- по сообщению об ("не найдена колонка XXX в таблице YYY") и можно будет сделать исправление руками в таблице без залезания в документацию (чтобы понять на каком месте она должна быть) или сброса настроек квика (через загрузку wnd-файла)

важно что на скорость импорта это не влияет, а на удобство влияет положительно.
Автор топика
Спасибо:

Alexander

Фотография
Дата: 26.07.2011
Ответить


Экспорт будет замедляться, т.к.:
1) если передавать данные по DDE с названием колонок - это намного медленнее работает, описывали документацию;
2) если дополнительно открывать окно редактирования таблицы и считывать данные оттуда - медленнее за счёт дополнительных действий для каждой из колонок.

Т.е. по сути ненужная функциональность - дополнительные колонки добавляет малая часть пользователей, если поменяли порядок - вставили свои пару методов в код - всё работает.
Настройки Квика от версии к версии изменяется не так сильно - самые большие изменения как раз будут в 3.2 final по сравнению с 3.1. До этого изменений было минимум и больше их пока не планируется - всё что хотели - сделали и поддержали.

Если реализовать передачу заголовок таблиц - будет дополнительное замедление экспорта для всех пользователей ради мнимой пользы для считанных пользователей. Я против.


Если кому есть что возразить - напишите, может я и не прав.
Спасибо:

EugeneP

Фотография
Курсы
Дата: 27.07.2011
Ответить


Ну как я понял речь шла о том, чтобы сначала через DDE вывести названия колонок таблиц, запомнить их, а уже затем стартовать DDE без названий колонок..
Спасибо:

Alexander

Фотография
Дата: 27.07.2011
Ответить


EugeneP Перейти
Ну как я понял речь шла о том, чтобы сначала через DDE вывести названия колонок таблиц, запомнить их, а уже затем стартовать DDE без названий колонок..


Я об этом и написал - что для каждой таблицы будет вызываться лишнее действие (для того чтобы узнать где какая колонка) - за счёт этого медленнее.
Спасибо:

EugeneP

Фотография
Курсы
Дата: 27.07.2011
Ответить


так замедление будет лишь на "этапе настройки" (пара секунд). А на скорость дальнейшей работы DDE никак не скажется.
Спасибо:

Alexander

Фотография
Дата: 27.07.2011
Ответить


EugeneP Перейти
так замедление будет лишь на "этапе настройки" (пара секунд). А на скорость дальнейшей работы DDE никак не скажется.


При каждом старте экспорта DDE будет подниматься дополнительное окно с настройками, его чтение.
На этом этапе излишняя как раз работа.

Чем текущий вариант не нравится?
Спасибо:

President

Фотография
Благотворитель
Дата: 28.07.2011
Ответить


Alexander Перейти

Чем текущий вариант не нравится?


да все нравится, BigGrin но слишком уж много думать и понимать нужно - порог входа в S# и сложность поддержки всего комплекса в связке с квиком повышается.
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 28.07.2011
Ответить


EugeneP Перейти
Ну как я понял речь шла о том, чтобы сначала через DDE вывести названия колонок таблиц, запомнить их, а уже затем стартовать DDE без названий колонок..


Не, не очень красивое решение. Мне кажется, лучше создать метод IEnumerable<DdeTableColumn> QuikTrader.GetTableColumns(DdeTable), который бы возвращал реальные настройки в Квике. Метод вызывается один раз при старте и только для тех, кто его решил вызвать (тоесть не при каждом перезапуске ДДЕ и не для всех пользователей). Далее, нужно создать метод DdeTableColumnList.Sync(IEnumerable<DdeTableColumn>) который бы синхронизовывал бы колонки. В итоге выглядело бы так:

Код
var trader = new QuikTrader();
trader.SecuritiesTable.Columns.Sync(trader.Terminal.GetTableColumns(trader.SecuritiesTable));


Может быть имеет сделать еще метод DdeTable.Sync, который бы внутри себя убирал детали:

Код
var trader = new QuikTrader();
trader.SecuritiesTable.Sync();
trader.OrdersTable.Sync();


Теперь вопрос к Президенту. Прочитайте мою подпись и ответьте, вы готовы это сделать сами и нам потом уже дать готовый код для вставки в будущие версии?
Спасибо:

President

Фотография
Благотворитель
Дата: 29.07.2011
Ответить


Mikhail Sukhov Перейти

Теперь вопрос к Президенту. Прочитайте мою подпись и ответьте, вы готовы это сделать сами и нам потом уже дать готовый код для вставки в будущие версии?


в выходные гляну насколько мне это под силу.
Автор топика
Спасибо:

President

Фотография
Благотворитель
Дата: 31.07.2011
Ответить


President Перейти
Mikhail Sukhov Перейти

Теперь вопрос к Президенту. Прочитайте мою подпись и ответьте, вы готовы это сделать сами и нам потом уже дать готовый код для вставки в будущие версии?


в выходные гляну насколько мне это под силу.


глянул.
сходу не смог разобраться как это можно сделать, т.к. не нашел исходных кодов где идет работа с Квиком.
похоже, нужно в деталях разбираться как работает QuikTerminal.GetTableSettings()

под решарпером понял что в там идет работа на достаточно низком уровне - PostMessage/SystemWindow/AllChildWindow... а раз так то видимо квик через свой API не выдает информации о таблицах и типах данных в колонках?
т.е. можно только узнать все открытые окна и колонки а что это за окна и что это за колонки можно только догадываться - например по именам - это так?

также пока не понял как конфигурируются настройки для экспорта стаканов - у QuikTrader есть только одна QuotesTable - значит ли это что настройки всех стаканов обязаны совпадать?
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 31.07.2011
Ответить


President Перейти
глянул.
сходу не смог разобраться как это можно сделать, т.к. не нашел исходных кодов где идет работа с Квиком.


Сырцы QuikTerminal могу прислать + других классов.

Посмотрел на код GetTableSettings, там вообщем-то уже практически все сделано. Поэтому, предлагаю такое условие. Мы вам исходники QuikTerminal + другие необходимые классы, вы нам решение с настройками. А именно. Есть еще метод QuikTerminal.OpenTable, который пока NotImplementedException бросает. Смысл его в том, что, если в Квик не открыта необходимая таблица, он ее должен сам открывать (через пункты меню, что уже, в принципе, сделано с другими вещами). Плюс, думаю, имеет смысл сделать метод по настройке таблицы, добавляя в нее необходимые колонки (получается обратная задача от той, что вы в начале предложили). Тогда можно будет сделать настройку таблиц автоматически из робота или из Verifier. По окончанию можем отослать код самого Quik коннектора. По рукам?
Спасибо:

President

Фотография
Благотворитель
Дата: 31.07.2011
Ответить


Mikhail Sukhov Перейти
President Перейти
глянул.
сходу не смог разобраться как это можно сделать, т.к. не нашел исходных кодов где идет работа с Квиком.


Сырцы QuikTerminal могу прислать + других классов.

Посмотрел на код GetTableSettings, там вообщем-то уже практически все сделано. Поэтому, предлагаю такое условие. Мы вам исходники QuikTerminal + другие необходимые классы, вы нам решение с настройками. А именно. Есть еще метод QuikTerminal.OpenTable, который пока NotImplementedException бросает. Смысл его в том, что, если в Квик не открыта необходимая таблица, он ее должен сам открывать (через пункты меню, что уже, в принципе, сделано с другими вещами). Плюс, думаю, имеет смысл сделать метод по настройке таблицы, добавляя в нее необходимые колонки (получается обратная задача от той, что вы в начале предложили). Тогда можно будет сделать настройку таблиц автоматически из робота или из Verifier. По окончанию можем отослать код самого Quik коннектора. По рукам?


если без коммитмента по времени, то по-рукам. :) постораюсь в течении недели осилить, но может быть будет две недели или три - хз.
Автор топика
Спасибо:

Alexander

Фотография
Дата: 17.08.2011
Ответить


President Перейти
Mikhail Sukhov Перейти
President Перейти
глянул.
сходу не смог разобраться как это можно сделать, т.к. не нашел исходных кодов где идет работа с Квиком.


Сырцы QuikTerminal могу прислать + других классов.

Посмотрел на код GetTableSettings, там вообщем-то уже практически все сделано. Поэтому, предлагаю такое условие. Мы вам исходники QuikTerminal + другие необходимые классы, вы нам решение с настройками. А именно. Есть еще метод QuikTerminal.OpenTable, который пока NotImplementedException бросает. Смысл его в том, что, если в Квик не открыта необходимая таблица, он ее должен сам открывать (через пункты меню, что уже, в принципе, сделано с другими вещами). Плюс, думаю, имеет смысл сделать метод по настройке таблицы, добавляя в нее необходимые колонки (получается обратная задача от той, что вы в начале предложили). Тогда можно будет сделать настройку таблиц автоматически из робота или из Verifier. По окончанию можем отослать код самого Quik коннектора. По рукам?


если без коммитмента по времени, то по-рукам. :) постораюсь в течении недели осилить, но может быть будет две недели или три - хз.


продвигается?
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy