Блог им. 3Qu

Quik, DDE, Excel

    • 21 мая 2020, 12:16
    • |
    • 3Qu
  • Еще
Напомню, что обмен по 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 (никогда программно с ним не работал), а в БД я и сам запихну, и если нужно поделюсь решением — здесь нет никаких ноу-хау.
Помогайте, граждане кто чем может.
  • обсудить на форуме:
  • Quik Lua
★8
61 комментарий
Чем Вас не устраивает ODBC? 
avatar
SergeyJu, по ODBC доска опционов не экспортируется.
avatar
3Qu, в эксель встроен VBA. С точки зрения работы с БД он отличается от С# только синтаксически. 
avatar
SergeyJu, работа с БД не вопрос. Вопрос, перенаправить таблицу Квик (доску опционов) в БД, а не штатно — на лист Ексель.
avatar
forum.quik.ru/forum10/topic4401/ техподдержка предлагает скрипт для греков
Андрей Иванов, видел, типичное не то. Там получают отдельные инструменты, а нужна доска целиком.
Скрипты для греков неинтересны, у меня свои есть.
avatar
Пока вижу единственное решение: Доска опционов — DDE — С++/С# — БД. Дальше просто.
avatar

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

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

avatar
ch5oh, таблица в БД в виде самой доски опционов мне видится оч неплохой и простой идеей. Потому, думаю, экспорт непосредственно доски по DDE в БД — самое оно.Но это вопрос лишь организации и вторичный.
Найти бы где готовый Excel совместимый DDE-сервер на С++ или лучше на C#.
Уже нашел здесь на C# — с исходниками и даже скомпилированный, но он оч. древний, и, видимо, работать не будет. Экзешник уже не запускается. Ну, это еще разбираться с исходниками буду.
avatar

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


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

 

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

 

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

 

avatar
ch5oh, у нас все есть.) Для любых инструментов.
Но лучшее — враг хорошему.) А сделать можно между делом. Не ах какая сложная задача. А если здесь никто не сталкивался, так в инете рыба найдется.
ЗЫ Кстати, как вы остатки неэффективности вылавливать собираетесь без своего собственного софта? Питон, R или, хотя бы, Ексель.
avatar
3Qu, Очевидно, с помощью готового софта. А если уж меня посещает какая-то сверхгениальная внешаблонная идея, то под неё пишется один конкретный модуль, который её реализует и проверяет.
avatar
ch5oh, дык, готовый софт и есть R, Питон или МатЛаб. Они специально для подобных целей и предназначены.
avatar

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

 

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

 

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

avatar
ch5oh, R, это тягомотина жуткая, и не только тягомотина, а еще и полный бардак в пакетах. С ним давно завязал. Но некоторым нравится.
avatar
ch5oh, я рогом не упирался, мне просто пока еще не хватает знаний, чтобы даже ваш софт использовать :)


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

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

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

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

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

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

avatar
FinSerfing, В DDE — Excel я работаю только с доской опционов. Все прочие данные экспортируются через Lua -> C++ DLL.
Какой-то простенький проект С++ DLL для этого я публиковал здесь ранее, и еще Бегемот, кажется.
Возможно, то, что вы написали в https://smart-lab.ru/blog/622377.php#comment11221190 оно и есть. Если это не прямой экспорт в Ексель.
avatar

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

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

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

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

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

avatar
FinSerfing, а исходники рабочего экземпла можно глянуть на C#?
avatar

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

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

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

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

avatar
FinSerfing, мне бы только коннект с Екселем, и DDE-данные в какой-нибудь буфер или на консоль. Дальше я уже сам под свои нужды.
Пока поищу этот Ndde.
avatar
FinSerfing, спасибо!
avatar
kvazar, пока не за что.
avatar
@В MS Access также имеется DDE-сервер, и есть возможность заполнять таблицы БД по DDE, однако Quik c Access по DDE работать не умеет.@
Квик работает с ним по ODBC.
avatar
kvazar, да, я знаю, уже пробовал. В топике об этом написано.
avatar
kvazar, еще раз, каким образом? Доска не поддерживает экспорт по ODBC.
C Lua она тоже работать не умеет.
Иначе вопросов вообще не было.)
avatar
3Qu, увидел после, ну раз не поддерживает, значит…
avatar
На C# есть готовое решение от Морошкина.
avatar
А. Г., Спасибо, решение Морошкина нашел, буду смотреть.
avatar
Нашел несколько проектов. Ни один из них не рабочий, на Винде 10, по крайней мере. Все проекты компилируются, запускаются и через ~5 с падают по переполнению...
NDDE.dll, вообще-то 2006 года. Старовата, конечно, но и старше работают.
avatar
3Qu,
Если клиент забирает данные медленнее, чем отдает DDE — источник, то естественно он (DDE) будет переполнятся.
avatar
_sg_, особенно, если еще источник данных не подключен, а сервер еще и включиться не успел.)
Не надо думать, что все кругом идиоты.)
avatar
Ещё большая проблема с ДДЕ — он работает только через главный поток формы, как следствие — Квик тормозит сильно если выводить что-нибудь динамическое
Aleksey Smirnoff, там же есть галочка в квике, чтобы в отдельном потоке вывод шел. Все нормально работает. При получении данных только сразу отпускайте квик.
avatar
yurikon,
Не могли бы подробнее написать где такая галка есть в Квике или картинку запостить ?
У меня Квик 7.27, но я что-то галки такой не вижу.
avatar
Нашел в инете несколько проектов ДДЕ-серверов под Ексель. Много битых ссылок. То, что не битое, либо не компилируется, либо не запускается, либо падает при запуске по непонятным причинам. Целого проекта ни одного.
PS В общем, разобрался. Везде используются древние НЕТ фреймвоки. Ставить себе это не буду. М.б. что посвежее найду.
avatar
В качестве записи из дневника.
Сделал ДДЕ сервер на С++. Все оказалось достаточно просто, без всяких НЕТ-библиотек. Штатная DLL в Виндах. Работает, только Квик никак не хочет с ним соединяться.( А больше и не с чем и попробовать.
avatar
3Qu, можно код посмотреть? тоже писал свой вариант и проблем с соединением и получением данных из таблицы quika не было.
avatar
protorus, можно, но сюда файлы не загрузишь. Брал какой-то из готовых, который изначально не работал и падал при запуске. Сам сервер уже со вчера работает, Квик его видит, но соединяться не хочет. Коллбэк починяю, кажется в нем дело. Наверно, и не только.
avatar
3Qu, а как понять?
Квик его видит, но соединяться не хочет
Если quik видит сервер, то шлёт ему три транзакции, которые нужно правильно обработать: XTYP_CONNECT (вернуть нужно true), XTYP_CONNECT_CONFIRM (не важное и его можно отключить) и периодически XTYP_POKE (тут уже сами данные из таблицы). Ещё есть XTYP_DISCONNECT (приходит после остановки вывода в quik). В каком месте затык?

avatar
protorus, похоже с XTYP_POKE какие-то проблемы.
avatar
3Qu, вернуть нужно обязательно DDE_FACK
avatar
protorus, да, еще забыл, такая же ошибка бывает, если долго обрабатывать транзакцию, quik не дожидается ее завершения.
avatar
protorus, да, сейчас закомментировал все, и по простотому

case XTYP_POKE:
    return (HDDEDATA)DDE_FACK;
Все соединилось.

Толку от этого, правда никакого.)) Но как-то определились.

avatar
3Qu, значит нужно успеть забрать данные с помощью DdeGetData и вернуть скорее DDE_FACK для quika, а сами данные обрабатывать уже в другом потоке.
avatar
protorus, пока не до этого. Там просто что-то не работает. Я же это делал из вообще нерабочего приложения (вообще-то из нескольких))). Использовал как рыбу.
В case там уже вызовы функций из других листов.срр, а там уже malloc и пр. — хрен разберешь, кода много. Но, вообще, там интересно сделано. Пока разобрался поверхностно.
Да, спасибо за помощь! Оч вовремя.
avatar
Может быть Вам это поможет
smart-lab.ru/blog/205588.php
avatar
_sg_, спасибо, но это не поможет. Это Net, все оч. старое и не рабочее. Я на С++, без всяких лишних надстроек.
avatar
3Qu, Вы, кстати, разобрались с сокетами Lua?
Не знаете, случайно, сокеты Lua совместимы с сокетами Python, C#, C++?

avatar
_sg_, нет, даже не пытался. Если мне нужны сокеты, я из Луа ухожу в С++ ДЛЛ, и там делаю сокеты. Сейчас я их не использую, но старый простенький экземпл где-то на старом диске валяется.
avatar
Запись из дневника.
Пока получаю из Квик по DDE вот такую лабуду:
10 0 4 0 29 0 a 0 2 0 8d 0 7 ca ee e4 20 50 55 54 15 d6 e5 ed e0 20 ef ee f1 eb 2e 20 f1 e4 e5 eb ea e8 20 50 55 54 e d2 e5 ee f0 2e 20 f6 e5 ed e0 20 50 55 54 6 d1 f2 f0 e0 e9 ea f d2 e5 ee f0 2e 20 f6 e5 ed e0 20 43 41 4c 4c 16 d6 e5 ed e0 20 ef ee f1 eb 2e 20 f1 e4 e5 eb ea e8 20 43 41 4c 4c d c2 ee eb e0 f2 e8 eb fc ed ee f1 f2 fc 8 ca ee e4 20 43 41 4c 4c 10 d6 e5 ed e0 20 e1 e0 e7 2e 20 e0 ea f2 e8 e2 e0 9 d2 fd f2 и т.д.
Как строка  char* она не печатается. Что с ней делать, пока понятия не имею.) Это я еще не проходил.)
avatar
подскажите плиз
как получить таблицу всех сделок за год
в удобном для анализа виде ?
(может в экселе)
avatar
mail-22, можно скачать тут http://stockchart.ru/ServiceNews/Details/8
avatar
у меня есть коннектор на c# к квику через dde.  напишете на почту ruticker@gmail.com
avatar

теги блога 3Qu

....все тэги



UPDONW
Новый дизайн