Vladimir Diaditchev
Vladimir Diaditchev личный блог
12 мая 2022, 10:46

Квик DDE, таблицы Экселя, Пайтон

Чтобы не свихнуться от захлестнувшего мир сумасшествия. Решил освоить модный нонче Пайтон.
До этого был небольшой опыт программирования на языке R. Столкнулся с одной проблемой. Пайтон прекрасно читает данные из таблиц Эксель. Например, копирую таблицу текущих параметров Квика. Сохраняю в Эксель, все читается, можно обрабатывать данные. Вывожу эту же таблицу по DDE в Эксель, данные выводятся. Если не сохранять эту таблицу, то Пайтон ничего не видит. Если же ее сохранить, то видит только последние сохраненные данные. Причина, скорее всего, не в Пайтоне, а Экселе. Собственно вопрос: как прочитать Пайтоном таблицу Эксель, с данными, получаемыми по DDE от Квика?

21 Комментарий
  • Счастливый Конец
    12 мая 2022, 11:04
    Рекомендовал бы не связываться с DDE. Так себе решение, проходили. Попробуйте написать скрипт qlua, где в цикле каждые N секунд сбрасывайте таблицу в файл. Сбрасывать можно на диск в памяти.
    Ну а потом этот файл читать из питона.
    Рекомендую в конце файла ставить какой нибудь индикатор конца файла, а то квик еще не записал файл до конца, а питон уже начал читать и закончил, хотя данные еще не записались.
      • Счастливый Конец
        12 мая 2022, 11:31
        Vladimir Diaditchev, конечно позволяет. Найдите в папке квика файл QLUA.chm и там перечислены таблицы и их поля. Читаете строка за строкой нужные поля, сбрасываете в файл и дальше делайте что хотите. А так вам выше написали, в экселе есть VBA, прямо в нем можно анализировать. VBA это visual basic for application, встроенный в эксель (и в ворд тоже) язык программирования. Можете повесить событие на изменение чего либо и выводить результат куда либо.
  • Serj90
    12 мая 2022, 11:15
    нафига накручивать всякую всячину в виде питон-скриптов поверх excel если в том же VBA можно запилить любой код при изменении книги/листа/ячейки. Через DDE обновляется таблица в excel, это обновление обрабатывает vba на лету

    Вот это вообще не понял:
    Если не сохранять эту таблицу, то Пайтон ничего не видит. Если же ее сохранить, то видит только последние сохраненные данные.

    скрин таблицы квика, которую пытаетесь влить в excel прикрепите. Если котировки, то для интрадей DDE при большой частоте тиков отвратителен.

    копирую таблицу текущих параметров Квика. Сохраняю в Эксель

    Что вы вкладываете в понятие «копировать таблицу в excel» и «сохранить в excel»? У вас питон-скрипт к чему обращается к текущим данным в книге «на лету» или к сохраненному файлу excel на диске?
    • Счастливый Конец
      12 мая 2022, 11:27
      Serj90,  чего тут непонятного, квик через DDE посылает данные в открытую таблицу Excel (сам эксель тоже запущен) и все работает. Но питон открывает таблицу как файл, а в файл после DDE никто не сохраняет и питон изменений не видит.
        • Счастливый Конец
          12 мая 2022, 11:53
          Vladimir Diaditchev, Попробуйте в VBA сделать сохранение документа после изменения листа экселя. Как это сделать уже не могу сказать, лет 20 уже этот VBA не трогаю. Зайдите в редактор макросов и посмотрите события листа на которые можно повесить созхранение.
      • Serj90
        12 мая 2022, 16:50
        Vladimir Diaditchev, тогда решение: автосохранение по изменению значения в ячейке. Но представьте к вам валится 100 тиков в секунду… Повторюсь у меня i5, 8gb ram, ssd. Первые 30 минут начала торгов и я выгружаю только цену последней сделки — дикие просадки в произволительности, а вам еще и сохранение требуется.
  • T-800
    12 мая 2022, 12:49
    Выгружайте через ODBC в MsAccess, а оттуда забирайте в Питон, например через SQL запросы 
    • kvazar
      14 мая 2022, 14:16
      T-800, если необходимо использовать  обезличенннеы слелки, ордера и стопы — access не тройгате. от него сам уходил на MS SQL+VB NET. Почему? потому что необходимо использовать bigint -19-значные номера сделок. Это при условии что робот полноценный. ODBC--MS SQL(здесь на вкус цвет)-- ЯП (на вкус и цвет). 
  • Serj90
    12 мая 2022, 16:45
    Счастливый Конец, ну перечитай мой коммент и поймешь что было из топика не понятно
  • Алексей Манин
    24 октября 2022, 17:05

    Два варианта автосохранения файла Excel используя VBA.

    Вариант 1:
    Модуль ЭтаКнига:Private Sub Workbook_Open()      Call save20  End Sub   Модуль Модуле1:Sub save20()      thisWorkbook.Save      Application.OnTime Now + TimeValue(«00:00:20»), «save20»  End Sub

    Вариант 2:
    Module1 :Public TimerFlag As BooleanPublic MyEarliestTime As Variant Sub Timer_Tick()    If TimerFlag Then        ThisWorkbook.Save        MyEarliestTime = Now + TimeValue(«00:00:20»)        Application.OnTime EarliestTime:=MyEarliestTime, Procedure:=«Timer_Tick»    End IfEnd Sub Модуль ЭтаКнига:Private Sub Workbook_Open()    TimerFlag = True    Call Timer_TickEnd Sub Private Sub Workbook_BeforeClose(Cancel As Boolean)    TimerFlag = False    Application.OnTime EarliestTime:=MyEarliestTime, Procedure:=«Timer_Tick», Schedule:=False    ThisWorkbook.SaveEnd Sub
    Сам пробовал вариант 2, он немного глючит при закрытии Excel. Вариант 1, не пробовал.



    • MrD
      07 февраля 2023, 15:24
      Vladimir Diaditchev, здравствуйте! Столкнулся с аналогичными проблемами. Подскажите, получилось ли у вас решить их?

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

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