← Back

Не идет экспорт из QUIK'а

Здравствуйте! Заинтересовался Вашей программой и заодно начал изучение C#. Помогите, пожалуйста, решить такую проблему: все сделал по Вашей инструкции, настроил таблицы в QUIK'е, запускаю Sample, подключаюсь к Квику, нажимаю "экспорт DDE", в Квике соответственно, как и ожидалось, начинается экспорт таблиц DDE, но в программу Sample информация из Квика почему-то не поступает? В таблицу "Сделки", правда, какая-то информация загрузилась, но почему-то только до 12:50, хотя время уже перевалило за 18:00...

Comments (42)

Login or Create account, Log in or register to leave a comment

Mikhail Sukhov
Mikhail Sukhov

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

ddd888
ddd888 Author

Спасибо, попробовал и так и эдак, но экспорт вроде бы пошел. Правда, проблема, как я думаю, была в том, что в дереве процессов после выключения программы продолжал "висеть" sample.vshost.exe. Только после закрытия программы разработки этот thread исчезал и при повторном включении экспорт из Квика снова начинал работать. Еще заметил, что во "все сделки" информация поступает с задержкой в ~10 сек., это нормально? И есть ли возможность отсортировать данные экспортируемых таблиц?

Mikhail Sukhov
Mikhail Sukhov

vshost.exe - это специальный процесс VS. Там запущены служебные процессы, а не программа с роботом.

"все сделки" - первый раз, когда включается экспорт, в зависимости от объема сделок будет высокая загрузка процессора. Обычно, это прекращается через несколько секунд. У Вас так же? Загрузка процессора упала?

ddd888
ddd888 Author

Да, вроде бы так и есть. Спасибо. Самое для меня приятное, что в "стакан" данные поступают (или отображаются?) почти что мгновенно. А таблица "все сделки" пока для меня не очень актуальна.

Изучая пример с "Портфелем" правильно ли я понял, что таким образом можно создавать экспорт любых вновь создаваемых таблиц в Квике? Да, и как насчет функции сортировки в таблице?

Mikhail Sukhov
Mikhail Sukhov

Да, можно экспортировать любые. Посмотрите еще на Экспорт дополнительных параметров.

Сортировать так:

IEnumerable allTrades = ...; // по возрастанию allTrades = allTrades.OrderBy(t => t.Id); // по убыванию allTrades = allTrades.OrderByDescending(t => t.Id);

ddd888
ddd888 Author

Спасибо большое. Осталось только понять как работать с этим IEnumerable. :) Я так понимаю это компонент из .NET. Интересно а в самом шарпе разве нельзя создать аналогичные классы с аналогичными свойствами и методами? Или все специально "заточено" под .NET?

Еще вопрос немного другого характера. В вашей программе реализован экспорт из Кивка по DDE. Но похоже есть и другие способы получения информации? Недавно наткулся на распространяемый бесплатно привод:

http://ttools.ru/wp-content/plugins/DownloadCounter/download.php?id=3

(главная страница:http://ttools.ru/). Получает котировки из Квика без проблем и быстро, но при этом такое ощущение, что DDE абсолютно не используется. Кроме того программа сама каким-то образом "находит" открытые "стаканы" в Квике и предлагает их выбор уже в самой программе. Как это возможно и что Вы думаете по этому поводу?

Mikhail Sukhov
Mikhail Sukhov

Судя по документации, там нужно производить первоначальные настройки. А затем программа сама все влючает. Что собственно и у меня. Различий не увидел.

Только тут нужно принять во внимание следующий факт. Ттулз - это готовая программа для создания внутри нее роботов. У меня же АПИ. Тоесть, можно как раз такие программы создавать, можно просто роботов, можно свою аналитику делать, к Экселю подключать, к Велсу, к Ами.

Я своей библиотекой не ограничиваю программы, которые должен хочет трейдер. Вот и основное отличие.

Насчет экспорта, там, как мне писали, использует сканирование памяти. С учетом того, что у Квика синтетические задержки, никакого преимущества по скорости перед ДДЕ нет. Будут задержки, буду думать, и возможно переделывать. А пока все это бесполезно.

ddd888
ddd888 Author

Первоначальные настройки в ттулз сводятся только к настройке торгового счета и паре других параметров. И там тоже есть возможность подключать внешних роботов, как пишут, но я согласен, что полезность вашей библиотеки для программирующего трейдера гораздо выше. В частности, и для меня тоже. :) Правда, от шарпа голова уже немного кругом идет.. )

Mikhail Sukhov
Mikhail Sukhov

Мой видение развития торговых роботов - это свести к минимуму промежуточные программы. Квик и так не единственный в цепочке. А эта прога предлагает еще и себя =) Нет, никаких нареканий к нет. Она очень интересна. Видно, что не просто еще одна прога под Квик. В ней даже, насколько я понял, есть свой внутренний язык. Но я ее пользовать не стал бы, вне зависимости от наличия S#. Поторговать с помощью нее - да. Прогать под нее - нет. Мой вердикт по ней - она то, что отсутсвует в Квике для пользователей, а не для программеров.

ddd888
ddd888 Author

С вердиктом согласен. К тому же сама по себе прога еще весьма сырая и не вполне надежная, а за т.н. полную версию денег ужЕ просят.

Вот у меня, правда, опять появилась та же проблема, что и вначале. При этом никаких нововведений в код не вносил (потому как нахожусь пока еще в процессе изучения :)). И при этом сейчас поочередный ручной запуск таблиц тоже ничего не дает. Судя по частичной загрузке таблицы "все сделки" (опять до какой-то точки времени дня в прошлом) что-то начинает грузится, а потом вдруг по какой-то причине перестает. При этом в Квике все таблицы исправно показывают "экспорт по DDE". Перезагрузка VS к исправлению ситуации не приводит. Что можно было бы еще проверить?

Mikhail Sukhov
Mikhail Sukhov

Загрузка проца бывает только в первые моменты - когда объем тиков большой экспортируется. Потом все до нуля должно упасть... Так, давайте первый шаг выполним. Вы, когда запускаете экспорт по инструментам, они выводятся?

ddd888
ddd888 Author

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

Mikhail Sukhov
Mikhail Sukhov

Посмотрите в Task Manager - не висит ли программа запущенной.

ddd888
ddd888 Author

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

Mikhail Sukhov
Mikhail Sukhov

Что за программа? Мой пример?

ddd888
ddd888 Author

Да, Sample

Mikhail Sukhov
Mikhail Sukhov

Давайте пойдем по шагам. Вы запустили приложение, нажали экспорт дде, данные не появились. Вы зашли в Квик. Первый вопрос. В какой состоянии сейчас экспорт в Квике? Вы нажимаете в ручную экспорт ДДЕ на Инструменты (давайте на них и остановимся). Второй вопрос. Экспорт в Квика начался (окно стало серым)? Третие вопрос. Sample Инструменты отобразил? Выключите пример. Четвертый вопрос. Экспорт в Квике продолджает работать? Выключите и включите заново. Пятый вопрос. Включается?

ddd888
ddd888 Author

Значит, по шагам все идет так:

  1. После первоначальной перезагрузки компа в 1-й раз все включается нормально из самого Сампла. В Квике, соответственно, экспорт отображается - окна все серые.
  2. Выключаю Сампл, в квике экспорт тоже выключается - окна не серые.
  3. Снова пытаюсь запустить Сампл. Вот здесь все и прерывается. Хотя в Квике экспорт "ИДЕТ" - все окна для экспорта по DDE в Квике - серые.
  4. Выключаю сампл и снова запускаю и пытаюсь сделать эскпорт из Квика вручную - экспорт "идет", т.е. все окна серые, но данные в Сампл по - прежнему не идут...

Что интересно - в окне "Сделки" - какие-то данные все-таки поступают, но почему-то только до 12 часов с минутами.

ddd888
ddd888 Author

Еще такой вопрос, не совсем по теме. Какие классы - методы управляют формой и содержимым стакана? Например, я добавляю кнопку типа BUY в окно стакана и хочу чтобы при нажатии на нее сформировалась заявка по цене выбранной в окне стакана. Как примерно это можно сделать?

Mikhail Sukhov
Mikhail Sukhov

Я в примере Sample как раз и показал, как создавать заявки. Там есть нужна кнопка - Создать Заявку (форма SecuritiesWindow), по ней заявка создается.

Изучение самого языка C# занимает примерно неделю. Это не так сложно, как кажется. Потому что профессионально программировать все равно не надо, библиотеки изучать не нужно. Достаточно научиться оперировать созданием объектов и вызовом методов. И я думаю, после этой недели Sample начнет работать правильно, без перезагрузок компьютера ;-)

ddd888
ddd888 Author

Надеюсь, что так будет. :) Сложностей в изучении самого языка я вроде пока не нашел после изучения нескольких учебников и пособий. :) Как мне кажется, основной сложностью здесь является знание кучи встроенных NET классов и методов, которые уже создали до тебя. Ведь без них ничего сделать в шарпе, как я понял, не получится. Вот только не совсем понял - что значит "библиотеки изучать не нужно"? Как без знания библиотеки использовать методы применяемых библиотек?

ddd888
ddd888 Author

Ваш прогноз пока не совсем оправдался. :) Попытался влезть в самые дебри DDE, получилось освоить стабильный побайтовый экспорт из квика с помощью методов DDEML. Нот вот в Сампла данные по-прежнему полностью не идут. То ли другие методы у Вас используются, то ли я чего-то недоучитываю. Не могли бы Вы подробнее рассказать как работает метод StartDDE из класса QuikTrader или привести его код? Хочется уже дальше идти, а экспорт все не дает. :)

ddd888
ddd888 Author

Ваш прогноз пока не совсем оправдался. :) Попытался влезть в самые дебри DDE, получилось освоить стабильный побайтовый экспорт из квика с помощью методов DDEML. Нот вот в Сампла данные по-прежнему полностью не идут. То ли другие методы у Вас используются, то ли я чего-то недоучитываю. Не могли бы Вы подробнее рассказать как работает метод StartDDE из класса QuikTrader или привести его код? Хочется уже дальше идти, а экспорт все не дает. :)

AndreiFX
AndreiFX

Есть привод, работает нормально. Сегодня запускаю и получаю такую же ситуацию как описано выше: после дде вывода все окна с дде как бы активны, однако данные оттуда не поступают. Все перепробовал, подписался на ошибки дде this.Trader.DdeError += error => this.Sync(() => MessageBox.Show(this, error.ToString())); В итоге получаю мессадж бокс следующего содержания: "System.FormatException: Строка не распознана как действительное значение DateTime."

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

ddd888
ddd888 Author

После сообщения AndreiFX у меня возникла догадка. Проверил прилагаемую инструкцию и - действительно - у Вас, Михаил, в настройках таблиц время показано в формате "hh:mm:ss", а у меня в квике везде идет - "hh:mm:ssAM". Правда теперь странно, что иногда экспорт вообще идет, если данные из таблиц настроены на "hh:mm:ss"... При побайтовом считывании это регулировать, конечно, можно, а как в случае с Sample действовать?

Mikhail Sukhov
Mikhail Sukhov

Интересно. А как Вы настроили квик на данные формат?

Вопрос к Андрею. У Вас тоже самое?

ddd888
ddd888 Author

В том-то и дело, что никак особо не настраивал. Обратился к службе поддержки брокера, там сейчас пытаются понять, как это так получается. А программно изменить экспорт этого столбца данных через метод StartDDE нельзя? Так чтобы убрать "AM"?

Mikhail Sukhov
Mikhail Sukhov

Изменить то все можно, но в начале лучше узнать, как такое настраивать... Как вариант, можно изменить текущие настройки региона через Контроль управления в Windows. Написать, что дата имеет такой же формат, как выводит Квик. У Вас сейчас часы в каком формате выводят данные?

ddd888
ddd888 Author

Да, оказалось, что дело в региональных настройках. :) Если не знать, то никогда и не найдешь где запрятаны эти настройки.. Теперь "все сделки" идут. Почти отлично, если не считать что за Квиком, кажется, все-таки не поспевают до конца. Кстати, как сделать, чтобы "все сделки" по мере обновления сдвигались на последнюю самую актуальную строку данных, как в Квике, например, это происходит? Другие таблицы пока "молчат". Но теперь я думаю, что "собака порылась" где-то тут же. Опять сравниваю настройки таблиц. У меня все таблицы настроены как у Вас сказано в инструкции. Но в Sампле вид таблиц совсем другой. Например, по инструкции "Заявки" должны содержать след. колонки: 1.Номер 2.Код бумаги 3.Цена 4.Кол-во 5.Остаток 6.Операция 7.Состояние 8.Выставлена (время) 9.Снята (время) 10.Счет 11.Тип 12.Комментарий На деле открываемая одноименная таблица в Sампле содержит:

  1. Номер
  2. Время
  3. Цена 4.Кол-во
  4. Остаток
  5. Операция
  6. Состояние
  7. Время снятия То же с "инструментами". Версия S# 1.7.
Mikhail Sukhov
Mikhail Sukhov

Sample сделан естественно не по инструкции (слишком много колонок), там порядок свой. Сделки появляются практически мгновенно, другое дело что GUI может тормозить.

ddd888
ddd888 Author

Если колонки в сампле настроены по-другому, то тогда ведь и экспорт не должен идти, разве не так? А вообще не лучше было бы делегировать настройку таблиц в библиотеке пользователю?

Mikhail Sukhov
Mikhail Sukhov

Не так. Визуальный ряд, что я сделал для примеров - это для демонстрации возможностей. Сама торговая логика пишется не на основе визуальных данных. А на основе бизнес сущноствей, такие как Security, Order и т.д. Вот их то и отображает пример. Сами же данные заполняются независимо, через QuikTrader. Тоесть, есть четкое разделением - торговая логика и отображением. Второе может и отсутствовать, и нужно, на мой взгляд, только для первоначального "въезжания".

Насчет настройки таблиц. Каких именно? Если квиковских - то оно есть. Например, для инструментов - QuikTrader.SecuritiesTable. Такая настройка нужна, если пользователь сконфигурировал таблицы по своему. Пример я показал, SampleMetadata. В доке так же описал.

Если Вы имеете ввиду таблицы из примера, то этого вообще не нужно. Есть исходники - переделывайте как душе угодно.

AndreiFX
AndreiFX

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

ddd888
ddd888 Author

Насчет торговой логики мне понятно. Но посольку в данный момент я как раз на стадии "въезжания" :), я хочу понять логику поступления данных.

Правильно ли я понял, что если в примере Sample Ваша таблица "Инструменты" имеет другой порядок и/или количество стобцов нежели у меня в Квике, то данные из Квика в таблицу "Инструменты" в Sample поступать не будут?

Исходя из свойств класса DdeTable, там можно лишь поменять "шапку" и добавить или поменять местами колонки, которые перечислены в свойствах класса Security. Это так?

denis
denis
Mikhail Sukhov
Mikhail Sukhov

Нет. Должен быть строгий порядок в самом квике. В Sample сделать можно как угодно. Визуальный ряд никоим образом не влияет на S#. Запомнить легко. Sample - это не часть S#. Это лишь демострация возможностей.

Так. Только не в свойствах Security, а в DdeSecurityColumns.

ddd888
ddd888 Author

Вот я и хочу узнать, что значит "строгий порядок" - как написано в инструкции?

ddd888
ddd888 Author

Другими словами: будут ли поступать данные в Сапмл, если в Квике таблица "инструменты" имеет такой порядок (составлено пон инструкции):

Полное название бумаги Короткое название бумаги Код бумаги Код класса Статус Лучшая цена спроса Спрос по лучшей цене Лучшая цена предложения Предложение по лучшей цене Время последнего изменения Время последней сделки Цена последней сделки Количество в последней сделке Цена открытия Максимальная цена сделки Минимальная цена сделки Цена закрытия Размер лота Точность цены Минимальный шаг цены

а в сампле такой:

Название Код Класс Bid Ask Послед. сделка Послед. цена Послед. кол-во Лот Точность Шаг ?

denis
denis

Для чего необходимо понимание "строгого порядка"? Будет ли поступать данные и при каких условиях, можно проверить самому.

ddd888
ddd888 Author

Чтобы понять что от чего зависит. Если есть "строгий порядок", то он для чего-то нужен и на что-то влияет?

denis
denis

из документации: "Колонки должны идти строго в том порядке, в котором показаны на рисунках. Это сделано из-за того, что QuikTrader в целях оптимизации не обрабатывает заголовки колонок в таблицах, а основывается только на порядковом номере." Да еще и не экспортируются эти заголовки. Поэтому, при ином порядке экспорта, будет невозможно определить что же на самом деле пришло по ДДЕ. Когда пришедшие данные обработаны, то они становятся доступными для пользователя и можно будет их выводить в любом порядке, например, как в симплах или как у меня - ничего не выводится, ибо не нужно.

И еще: заголовки не экспортируются для уменьшения объема данных. Так что все сделано по теме и для перфоманса :)

ddd888
ddd888 Author

Спасибо, теперь дошло. :) Экспорт, наконец, налажен! :)