3Qu
3Qu личный блог
21 мая 2020, 12:16

Quik, DDE, Excel

Напомню, что обмен по DDE придуман в далеком 1995 году, еще для Windows 3.1.  DDE считается сильно устаревшим методом обмена данными и практически не поддерживается современными приложениями. Остался один Quik, который цепляется за DDE из последних сил.
Вывод по DDE в Excel еще и не удобен для обработки данных. Понадобилось мне, скажем, ввести дополнительно пару-тройку столбцов на опционную доску — в результате, в Excel все столбцы таблицы на листе сместятся, и всю адресацию ячеек листа Excel в программе надо будет переделывать заново.
В MS Access также имеется DDE-сервер, и есть возможность заполнять таблицы БД по DDE, однако Quik c Access по DDE работать не умеет.
В общем, решил, что экспорт таблицы из Quik по DDE надо запихнуть в таблицу базы данных (БД), и уже из БД программно работать с опционной доской. Что, кстати, гораздо удобней для любой таблицы Quik.
Хотел было через Lua — вроде все просто, Lua с таблицами работает. Ан нет, к доске опционов Lua доступа не имеет.
Наверное на С++ или C# связь по DDE надо делать.
И подумалось, а может у Смартлабовцев есть такие уже готовые рабочие решения, чего велосипеды изобретать? По крайней мере, для DDE (никогда программно с ним не работал), а в БД я и сам запихну, и если нужно поделюсь решением — здесь нет никаких ноу-хау.
Помогайте, граждане кто чем может.
61 Комментарий
  • SergeyJu
    21 мая 2020, 12:19
    Чем Вас не устраивает ODBC? 
      • SergeyJu
        21 мая 2020, 12:30
        3Qu, в эксель встроен VBA. С точки зрения работы с БД он отличается от С# только синтаксически. 
  • Андрей Иванов
    21 мая 2020, 12:23
    forum.quik.ru/forum10/topic4401/ техподдержка предлагает скрипт для греков
  • ch5oh
    21 мая 2020, 13:08

    Доска — банальная совокупность отдельных инструментов. Подписываетесь на обновления по опционам и на каждом апдейте вносите изменения в БД.

    Больше всего, кмк, Вам надо подумать над структурой таблички в самой базе. Наверное, Вы не можете упихать всю доску в одну строчку. Поэтому возникает вопрос что будет составным ключем и готовы ли Вы платить объёмом за удобство последующего использования?

  • ch5oh
    21 мая 2020, 13:56

    Вы мне напоминаете участника Dmitryy: принципиально упретесь рогом, убьётесь, несколько лет потратите на освоение основ опционов и программирование (DDE, C#, VBA, C++, Python, R, Excel, SQL, СУБД,… ) своего собственного костыля…. Вместо того, чтобы сосредоточиться на торговле и вытаскивании остатков неэффективностей.


    Работает или не работает — неважно. Зато всё своё!

     

    С уважением и успехов!

     

    ПС Сам такой был лет 10-15 назад. В своё «оправдание» могу привести только полное отсутствие хоть какого-то софта хотя бы отдаленно пригодного для алготорговли на ФОРТС. Тем более, для торговли опционами.

     

      • ch5oh
        21 мая 2020, 16:19
        3Qu, Очевидно, с помощью готового софта. А если уж меня посещает какая-то сверхгениальная внешаблонная идея, то под неё пишется один конкретный модуль, который её реализует и проверяет.
          • ch5oh
            21 мая 2020, 18:52

            3Qu, всё это — просто системы для быстрого прототипирования и неспешных размышлений о прекрасном.

             

            R с задачей расчета улыбки в реальном потоке данных у меня вообще не справился.

             

            Приятного кодирования,

    • Dmitryy
      21 мая 2020, 15:58
      ch5oh, я рогом не упирался, мне просто пока еще не хватает знаний, чтобы даже ваш софт использовать :)


      • ch5oh
        21 мая 2020, 16:16
        Dmitryy, =) ага, примерно так и написал. Осваивать R параллельно с сишарпом и самому копаться в алгоритмах расчета исторической волатильности, разумеется, намного проще интересней.
        • Dmitryy
          21 мая 2020, 16:22
          ch5oh, ну C# это моя жизненная рутина, я на нем уже более 10 лет, а R мне не труден после всего. Сложнее всего даются законы вероятности и статистики. Вот с ними пока затык, уперся в сложные темы, где скорость освоения резко упала. Нужен перерыв и дальше в бой )
  • FinSerfing
    21 мая 2020, 14:10

    Недавно обсуждал эту тему с Kvazar.

    https://smart-lab.ru/blog/622377.php#comment11221190

    Программно работаю и с DDE, и с Exсel.

    Вы в Excel выводите данные из отдельных таблиц ?

    Или обрабатываете таблицу всех сделок ?

      • FinSerfing
        21 мая 2020, 14:32

        3Qu, вашего проекта к сожалению не видел.

        У меня всё своё, сделанное на С#.

        С DDE работаю через NDde.

        Причём парсинг весь самописный.

        C excel взаимодействую посредством библиотеки Microsoft.Office.Interop.Excel.

          • FinSerfing
            21 мая 2020, 14:42

            3Qu, для этого нужно накидать какой-нибудь простой пример.

            Постараюсь сделать.

            Ближе к началу следующей недели.

            Сначала пособлю Kvazar, а потом сооружу вам.

            • kvazar
              21 мая 2020, 20:05
              FinSerfing, спасибо!
              • FinSerfing
                21 мая 2020, 21:42
                kvazar, пока не за что.
  • kvazar
    21 мая 2020, 14:21
    @В MS Access также имеется DDE-сервер, и есть возможность заполнять таблицы БД по DDE, однако Quik c Access по DDE работать не умеет.@
    Квик работает с ним по ODBC.
  • А. Г.
    21 мая 2020, 14:43
    На C# есть готовое решение от Морошкина.
    • _sg_
      21 мая 2020, 19:23
      3Qu,
      Если клиент забирает данные медленнее, чем отдает DDE — источник, то естественно он (DDE) будет переполнятся.
  • Aleksey Smirnoff
    21 мая 2020, 17:08
    Ещё большая проблема с ДДЕ — он работает только через главный поток формы, как следствие — Квик тормозит сильно если выводить что-нибудь динамическое
    • yurikon
      22 мая 2020, 12:31
      Aleksey Smirnoff, там же есть галочка в квике, чтобы в отдельном потоке вывод шел. Все нормально работает. При получении данных только сразу отпускайте квик.
      • _sg_
        22 мая 2020, 23:33
        yurikon,
        Не могли бы подробнее написать где такая галка есть в Квике или картинку запостить ?
        У меня Квик 7.27, но я что-то галки такой не вижу.
    • protorus
      22 мая 2020, 21:36
      3Qu, можно код посмотреть? тоже писал свой вариант и проблем с соединением и получением данных из таблицы quika не было.
        • protorus
          22 мая 2020, 22:25
          3Qu, а как понять?
          Квик его видит, но соединяться не хочет
          Если quik видит сервер, то шлёт ему три транзакции, которые нужно правильно обработать: XTYP_CONNECT (вернуть нужно true), XTYP_CONNECT_CONFIRM (не важное и его можно отключить) и периодически XTYP_POKE (тут уже сами данные из таблицы). Ещё есть XTYP_DISCONNECT (приходит после остановки вывода в quik). В каком месте затык?

            • protorus
              22 мая 2020, 22:40
              3Qu, вернуть нужно обязательно DDE_FACK
              • protorus
                22 мая 2020, 22:47
                protorus, да, еще забыл, такая же ошибка бывает, если долго обрабатывать транзакцию, quik не дожидается ее завершения.
                • protorus
                  22 мая 2020, 23:10
                  3Qu, значит нужно успеть забрать данные с помощью DdeGetData и вернуть скорее DDE_FACK для quika, а сами данные обрабатывать уже в другом потоке.
  • _sg_
    22 мая 2020, 23:56
    Может быть Вам это поможет
    smart-lab.ru/blog/205588.php
      • _sg_
        23 мая 2020, 00:08
        3Qu, Вы, кстати, разобрались с сокетами Lua?
        Не знаете, случайно, сокеты Lua совместимы с сокетами Python, C#, C++?

  • mail22
    29 мая 2020, 21:09
    подскажите плиз
    как получить таблицу всех сделок за год
    в удобном для анализа виде ?
    (может в экселе)
  • StockChart.ru
    21 июля 2020, 13:42
    у меня есть коннектор на c# к квику через dde.  напишете на почту ruticker@gmail.com

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн