Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
1

Оптимизация программы, работающей с QUIK: нужно ли менять язык программирования?

10.08.2014, 01:09. Показов 3537. Ответов 24
Метки нет (Все метки)

Привет всем!
Есть специалисты, кто знает C++, Java, C#, QUIK и QPILE?
После работы на QPILE столкнулся с проблемой, недостаточное быстродействие для задуманного. Нужно произвести расчёт минимум по 10 инструментам, по каждому инструменту около 100 параметров и всё это выполнить за 5-7 мс. Сейчас меньший объём выполняется за 3-4 секунды на уже устаревшем ноутбуке ACER ASPIRE 7720G (не думаю, что покупка нового компьютера решит проблему). Нужно правильно выбрать язык, чтобы программа позволяла отправлять и получать данные в QUIK через DDE-сервер, использование ODBC для экспорта информации, импорт транзакций через API (этого всего пока не умею)…
Что для этих целей будет лучшим? C++, Java, C#, или что-то другое…?
Только не надо советов от тех, кто знает что-то одно и совсем немного, а про остальное в курилках наслушался….
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2014, 01:09
Ответы с готовыми решениями:

Как называется движение программирования или теория программы считывающая др. язык программирования
Не знал, как по другому задать вопрос, и также назвать тему, но буду краток: Допустим я хочу...

Что мощнее язык программирования Perl или язык программирования PHP
Какой из них лучше

Нужно узнать ответы задачи и вывести в язык программирования С++
1.Масса одного спортсмена равна х кг, а другого у кг. Могул ли они (ЙЕС/НОУ) соревноваться если...

Перевод программы из языка программирования Perl в язык Python
Здраствуйте, имею код написанный на perl, нужно его перевести в python, может кто-то помочь? Буду...

24
Заблокирован
10.08.2014, 02:14 2
Цитата Сообщение от russian_pepper Посмотреть сообщение
100 параметров и всё это выполнить за 5-7 мс
Ищи специалиста пишушего на асемблере
1
призрак
3261 / 888 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
10.08.2014, 09:19 3
не совет.
просто замечание.
пропингуйте свои торговые сервера.
думаю, в лучшем случае это будет 100+ миллисекунд.
скорее всего - больше.

на этом фоне 5-7мс на "обработку" данных, полученных с задержкой в сотни миллисекунд (плюс не меньше на обратную отправку), выглядят полным абсурдом.
1
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
10.08.2014, 11:28  [ТС] 4
Спасибо, в рабочий день проверю, но думаю, язык однозначно мне придётся начать изучать какой-то новый. Сначала программа успевала всё рассчитывать за 1-2 секунды, когда добавил расчёт всех стаканов и ещё кое что по 10 инструментам, время увеличилось до 3-х иногда 5-и секунд, видимо из-за загрузки системы чем-то ещё... У меня опыт только QPILE и совсем немного VBA для анализа данных, чтобы программу на QPILE разгрузить максимально, еще basic 20 лет назад в институте, поэтому теперь трудно сделать выбор. Почитал обзоры, вроде как C++ самое быстрое, но что-то запугивают знатоки а возможно псевдознатоки, тем что сложное что-то...
Ну а Антихакер32 ассемблер советует, ну если не знает как это слово пишется, хоть и эксперт, значит пошутил наверное, если серьёзно начать писать на ассемблере, со всеми этими MOV и ADD, то, что я задумал и делаю уже два года, буду делать посмертно....
Какой всё-таки язык посоветуете..?
0
призрак
3261 / 888 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
10.08.2014, 13:00 5
безусловно, Вы правы - VBA не самый лучший выбор при необходимости оптимизировать работу программы по скорости.
в первую очередь из-за того, что он интерпретируемый.
однозначно - при использовании другого, компилируемого, языка, Вы должны будете получить выигрыш по скорости.
имхо (очень-очень имхо) - лучше выбирать что-то ближе к C или C++.
уж всяко - не скриптовые или работающие через промежуточный код на виртуальной машине.
кстати, в этих языках (как и в некоторых других) возможны и вставки фрагментов или отдельных функций на ассемблере. в принципе, VBA тоже может вызывать функции из DLL, написанные на чём угодно - но накладные расходы всё равно высоки.

а вот что делать с этим выбором дальше - нет, не подскажу, сорри.
не эксперт

пс. по поводу "загрузки системы чем-то ещё" - думаю, при такой постановке задачи Вам имеет смысл выделить для данной работы отдельную высокопроизводительную систему и отключить в ней (точнее - правильно настроить) все службы обновления, архивирования, дефрагментации и прочего.

ппс.
Цитата Сообщение от russian_pepper Посмотреть сообщение
не знает как это слово пишется
да, у Антихакер32,
чудовищно много опечаток и орфографических ошибок.
но человек всё равно хороший
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
30636 / 16865 / 3474
Регистрация: 12.02.2012
Сообщений: 28,261
Записей в блоге: 5
10.08.2014, 13:03 6
Цитата Сообщение от russian_pepper Посмотреть сообщение
Какой всё-таки язык посоветуете..?
- из перечисленных, самый быстрый - это C++. Выучи его - будешь нормально зарабатывать. А на QUIK забей!
1
SoftIce
10.08.2014, 13:48
  #7

Не по теме:

Упс... Случайно нажал спасибку во 2-м сообщении.

0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
10.08.2014, 14:58  [ТС] 8
На QUIK забить не получится наверное, всё равно через него всё идёт с биржи, или я ошибаюсь? Если забить на него, то как это сделать? Подскажите что прочитать, чтобы у меня в голове ясность какая-то появилась? На QUIK овских форумах, спецы всё что-то просят какой-то код и что-то открыть и сделать для доступа, но мене пока далеко до полного понимания...

Добавлено через 46 минут
А что ближе к С++? C# ИЛИ Java?
Про С++ пишут что там сборщика мусора нет, типа это плохо... Но мне то это ни о чём не говорит пока, только в самых общих чертах что-то понял, что если переменная не используется дальше в программе то типа как-то это надо обозначить... Ну есть у меня несколько десятков переменных в программе, столько же коллекций, массивов и порядка 2000 строк программы и никакая отладка Qpile овская, в которой полностью иногда значения массивов не помещаются и окна не регулируются, будет для моих задач отсутствие сборщика мусора проблемой или нет?
Вот что ещё в справке по QUIK прочитал:
Импорт транзакций через API

меню Торговля / Внешние транзакции...
Назначение
Настройки
Назначение
Данный функционал предназначен для отправки транзакций, подготовленных программой клиента. Функционал реализован в виде библиотеки Trans2QUIK.dll. Библиотека содержит в себе функции, описание которых приводится ниже, при вызове которых можно:

Установить или разорвать связь между терминалом QUIK и библиотекой Trans2QUIK.dll.
Проверить наличие соединения между терминалом QUIK и библиотекой Trans2QUIK.dll и между терминалом QUIK и сервером QUIK.
Отправить транзакцию.
Получить информацию по заявкам и сделкам.
Существует два способа передачи транзакций – синхронный и асинхронный, которые реализуются отдельными функциями:

При синхронной передаче транзакций выход из функции осуществляется только после получения ответа от сервера QUIK. Следовательно, отправлять синхронные транзакции можно только последовательно, дожидаясь ответа о каждой отправленной транзакции – этот способ проще и более подходит для программистов с небольшим опытом разработки программ.
При асинхронной передаче транзакций выход из функции осуществляется сразу же. Для получения ответа об отправленных асинхронных транзакциях используется функция обратного вызова (callback). Функция вызывается при каждом получении ответа об исполненной или отвергнутой транзакции. Значения статусов исполнения транзакции, которые возвращаются в функции обратного вызова, приведены в описании к тем же статусам, которые используются при отправке транзакций через файл. Подробнее см. Импорт транзакций.
Также предусмотрена функция обратного вызова для контроля за соединениями между терминалом QUIK и библиотекой Trans2QUIK.dll и между Рабочим местом QUIK и сервером QUIK.

Описание транзакций при импорте через API аналогично описанию транзакций при импорте через файл. Подробнее см. Импорт транзакций. Исключением являются следующие типы транзакций, которые не поддерживаются библиотекой Trans2QUIK.dll

К этим всем делам что ближе C++, С#, JAVA?

Добавлено через 16 минут
Еще иногда пишут что Visual Basic .NET, что-то тоже очень хорошее и мощное... Но мне пока тоже незнакомое...
0
Ушел с форума
Эксперт С++
16434 / 7398 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.08.2014, 15:08 9
russian_pepper, Вам в первую очередь необходимо установить,
где в программе те узкие места, которые замедляют скорость работы, и
есть ли возможность их оптимизировать.

И только после этого можно бросаться с обрыва в бурлящие воды C++...
0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
10.08.2014, 15:44  [ТС] 10
Узкое место это вычисление массы параметров по разным инструментам и это важно сделать как можно быстрее, в реальном времени. Важно чтоб в единицу времени всё было обсчитано, иначе порция следующих данных будет пропущена. Я энергетик по образованию. Ситуацию можно сравнить со снятием данных с электрических счётчиков. Например, нужно снять показания со 100 счётчиков и оного контрольного, на котором фиксируется потреблённая энергия всеми 100 потребителям. Пока электрик списывает показания последних счётчиков, на первых увеличиваются показания, следовательно, сколько бы человек не проверял и не переписывал данные, сумма показаний ста счётчиков никогда не будет равна показаниям контрольного счётчика… Ошибка будет минимальной, если фиксировать данные бесконечно быстро... Примерно тоже самое и у меня, пока Qpile всё обсчитывает, поступают данные, ситуация меняется, когда расчёт закончен, часть данных с биржи пропущена, новый цикл начинается с расчёта поступающих в настоящий момент данных и возможно, что-то очень важное пропущено….

Добавлено через 5 минут
С++ это действительно так страшно и ужасно как некоторые пишут, после Basica ?
0
Ушел с форума
Эксперт С++
16434 / 7398 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.08.2014, 15:48 11
Цитата Сообщение от russian_pepper Посмотреть сообщение
Узкое место это вычисление массы параметров по разным инструментам
Уверены на 100% ?
Делали замеры (вручную/специальным софтом типа профилировщиком) ?

Цитата Сообщение от russian_pepper Посмотреть сообщение
С++ это действительно так страшно и ужасно как некоторые пишут, после Basica
Вовсе нет.
Просто любой инструмент/язык/технология/etc требует уделить ему
некоторое время на изучение.
0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
10.08.2014, 16:36  [ТС] 12
Замеров не делал. Но уверен. Сначала написал простейшую программу, которая просто отслеживала цену по десятку бумаг, всё работало нормально, потом по каждой бумаге добавилось по одному вложенному циклу и программа иногда начала пропускать данные за одну секунду. Потом по мере добавления разных переменных (во вложенных циклах по каждому инструменту), стала пропускать по две, дальше по три и более секунд, понятно, что если я ничего не запускал во время работы, что-то делал Windows, конечно когда к завершению ближе будет, всё что можно в нём по отключаю, но когда смотрю на загрузку процессора более 30 % никогда не видел, так что это не Windows а интерпретатор медленный, уверен...
0
Ушел с форума
Эксперт С++
16434 / 7398 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.08.2014, 16:43 13
Цитата Сообщение от russian_pepper Посмотреть сообщение
Замеров не делал.
В таком случае Вы рискуете попасть в такую ситуацию:
сначала угрохать кучу времени, сил и нервов на переписывание кода под
другой язык/технологию/компоненты, а затем узреть, что производительность
осталась на прежнем уровне. Любая оптимизация, любая, должна начинаться с
поиска и анализа узких мест. Просто "уверенности" недостаточно, большой риск.

Для начала можно просто понаставить вывод отладочных сообщений с отметками
времени в разных местах программы, и посмотреть, где сидит главный "поедатель"
ресурсов.
0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
10.08.2014, 16:54  [ТС] 14
Я когда-то сравнивал быстродействие Basica и Quik Basic, давно в институте, переходный процесс в электроприводе, дифференциальные уравнения решались, эффект был более чем заметный, ещё на 386-м процессоре, тогда первые только появились... Опыт небольшой, у меня, точнее сказать нет опыта, но различия между компилятором и интерпретатором наблюдать довелось... Тормозят всё вложенные циклы, проверял, убирал, без них быстрее, но тогда всё что надо не рассчитывается...
0
Ушел с форума
Эксперт С++
16434 / 7398 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.08.2014, 17:01 15
Цитата Сообщение от russian_pepper Посмотреть сообщение
различия между компилятором и интерпретатором наблюдать довелось.
Ну это понятно, что интерпретируемый код априори будет медленнее машинного.
Но ведь речь идет про частный случай. Вот, например, bat тоже интерпретируемый.
Но если вы напишете на bat и на C код поиска файлов на всех дисках, работать
они будут с одинаковой скоростью. Потому что все упрется в скорость головок HDD.
Я пытаюсь уберечь от подобной ошибки. Используя C или C++, вы можете достичь
заметного выигрыша некоторых участков кода, иногда на несколько порядков, но
если они не являются узкими местами проблемы, общий выигрыш может оказаться
вообще незаметным. Откуда знать, что именно является узким местом в конкретно
Вашей задаче ? Вдруг прав окажется ikki и причина - в пропускной
способности сети ?
0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
10.08.2014, 17:23  [ТС] 16
Спасибо конечно за совет, тут не всё так однозначно, по каждому инструменту в секунду происходит от нуля до 200 сделок и больше, в каждом цикле загрузка очень неравномерная и в зависимости от загрузки я вижу как увеличивается количество пропущенных секунд (расчётов за пропущенные секунды). Из всего что я прочитал, сейчас нужно только выбрать, С++, С#, Java, или есть решение лучше?
Вот ссылка на руководство пользователя
http://www.quik.ru/depot/quikref.zip
Раздел 6. Работа с др приложениями.pdf
Мне там пока мало что понятно, если у Вас есть опыт, подскажите мне оптимальный путь что луше для интеграции с этим Quik ом? Язык, Qpile как я понял очень ограничивает пользователей, нельзя чаще чем 1 раз в секунду послать транзакцию и прочее, при том, что пишут, бывают внешние приложения которые могут по нескольку тысяч транзакций в секунду посылать

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

Добавлено через 6 минут
Подумал, с пропускной способностью проблем нет, потому, что данные получаю всегда одни и те же, настроен фильтр, чтоб не получать всё подряд с биржи, а вот по мере добавления расчётов с использованием полученных данных во вложенных циклах скорость снижается...
Не программист я конечно профессиональный, может и ошибаюсь, но эксперименты по добавлению и удалению этих расчётов во вложенных циклах делал много раз и пришёл к такому выводу...
0
Ушел с форума
Эксперт С++
16434 / 7398 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.08.2014, 17:27 17
Цитата Сообщение от russian_pepper Посмотреть сообщение
подскажите мне оптимальный путь что луше для интеграции с этим Quik ом?
Можно поискать что-то типа "quik api" или "quik api xxx" (вместо xxx поставить
предпочтительный язык программирования, например C++ или C#).
Скорее всего, найдутся подходящие библиотеки.
Для начала можно попробовать C#. Если ограничения действительно лежат в
"природе" QPILE, т.е. в его интерпретируемости, то уже должен быть заметный
прирост в скорости.
0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
10.08.2014, 17:36  [ТС] 18
Т. е. я могу разобраться с C++ или C# и потом вероятность есть, что я не смогу связать свою программу с этим Quikом? Я никогда не использовал экспорт импорт данных из одного приложения в другое поэтому понимания полного нет, того, что я прочитал. Что нужно поискать? Если не найду эту библиотеку, для языка то и связь эту организовать не получится? Пробовал только экспорт данных из QUIKа по DDE в Excel ну и наблюдал как данные из одной таблицы попадают в другую меняются и сразу пересчитывается всё, вот и все познания в этом вопросе...
0
Ушел с форума
Эксперт С++
16434 / 7398 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.08.2014, 17:49 19
Насколько я понял, QUIK - это программный комплекс для доступа к биржевым
торговым операциям. У Вас общение с QUIK-сервером происходит через язык
QPILE, и все упирается в его быстродействие. Я предлагаю поискать (в Google)
библиотеки, напрямую работающие с сервером QUIK. На C#, C++ или других
языках - не важно.

Вот, например, куда меня привел блиц-поиск в Гугле:

Импорт транзакций в системе QUIK
http://www.quik.ru/user/client... es/import/

Пишем торгового робота на C#. Часть 1. Основы языка программирования и связь с терминалом
http://robostroy.ru/community/article.aspx?id=683

Будете искать дальше - обязательно найдете то, что лучше всего подходит.
0
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
10.08.2014, 17:51  [ТС] 20
Решил записаться в школу программирования на виртуальное обучение. Перед этим было бесплатное обучение по Javascript, бесплатно рассказали самые основы, циклы, условия, объявление переменных, ну всё что можно чтоб среднестатистический человек понял за четыре занятия (8 часов). Объясняли понятно, на вопросы отвечали, понравилась форма обучения, осталось заплатить и выбрать какой язык дальше серьёзно учить за деньги, я уже заплатил, осталось выбрать... Вы рекомендуете C# как я понял, или всё-таки С++?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2014, 17:51

Перевод программы из языка программирования Perl в язык Python
Здраствуйте, имею код написанный на perl, нужно его перевести в python, может кто-то помочь? Буду...

Упражнение для программы калькулятор из книги Язык программирования С++
Здравствуйте. Вот упражнение и калькулятор из книги Страуструпа. Не могли бы вы объяснить мне, как...

Перевод программы из языка программирования Perl в язык Python
Здраствуйте, имею код написанный на perl, нужно его перевести в python, может кто-то помочь? Буду...

Нужно написать алгоритмы действий решения задач , используя язык программирования
Часть 2: 19,2 Часть 3: 19,2,27,32,39,49


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru