Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
komposter, вы можете использовать в своём советнике DLL?
Если, да, то можно сделать следующее:
запаковать данные в файл с заголовочной таблицей, используя ZLIB
(http://www.zlib.net/)
Будет работать очень быстро(вы просто удивитесь на сколько быстро.
Готовность к работе DLL - 3 мс. Всё будет работать в "реальном времени").
Данные сократятся в 5-8 раз и в конце этого же файла(запакованного)
будет храниться таблица с ID, оффсетами и длиной данных.
Если у вас очень большое кол-во записей в исходном файле, то нужно составлять
подтаблицу( несколько подтаблиц), с указанем оффсетов в основную таблицу, чтобы
не перебирать всю таблицу, а только её небольшую часть.
Например: Данные о USD храняться с 0 оффсета по 1023,
Данные по EU с 1024 по 2047 и т.д
Если данные не запакуются в один файл(будет большим), то будет
ещё одна (малюсенькая) подтаблица, в которой запаковщик укажет номер файла.
А когда DLL загрузит файлы, она создаст общую подтаблицу из подтаблиц
всех файлов. А ещё лучше все оффсеты хранить в первом файле, и если
мы "выходим" за прелелы 1 файла, то данные берутся из второго и т.д
Забыл..
Если вы воспользуетесь моим советом, то рекомендую запаковывать ваши
текстовые данные с помощью Zlib функции запаковки строк(не бинарных данных, так быстрее работает).
Кажется эта функция называется ZCompressString...
Зиповать, как и шифровать можно уже штатно:
Методы шифрования данных
Для указания метода преобразования данных (шифрование и расчет хешей) в функциях CryptEncode() и CryptDecode() используется перечисление ENUM_CRYPT_METHOD.
ENUM_CRYPT_METHOD
Константа
Описание
CRYPT_BASE64
Шифрование BASE64 (перекодировка)
CRYPT_AES128
Шифрование AES с ключом 128 бит (16 байт)
CRYPT_AES256
Шифрование AES с ключом 256 бит (32 байта)
CRYPT_DES
Шифрование DES с ключом 56 бит (7 байт)
CRYPT_HASH_SHA1
Расчёт HASH SHA1
CRYPT_HASH_SHA256
Расчёт HASH SHA256
CRYPT_HASH_MD5
Расчёт HASH MD5
CRYPT_ARCH_ZIP
ZIP архивирование
Зиповать, как и шифровать можно уже штатно:
Методы шифрования данных
Для указания метода преобразования данных (шифрование и расчет хешей) в функциях CryptEncode() и CryptDecode() используется перечисление ENUM_CRYPT_METHOD.
ENUM_CRYPT_METHOD
Константа
Описание
CRYPT_BASE64
Шифрование BASE64 (перекодировка)
CRYPT_AES128
Шифрование AES с ключом 128 бит (16 байт)
CRYPT_AES256
Шифрование AES с ключом 256 бит (32 байта)
CRYPT_DES
Шифрование DES с ключом 56 бит (7 байт)
CRYPT_HASH_SHA1
Расчёт HASH SHA1
CRYPT_HASH_SHA256
Расчёт HASH SHA256
CRYPT_HASH_MD5
Расчёт HASH MD5
CRYPT_ARCH_ZIP
ZIP архивирование
Вопрос у топикстартера не о шифровании, а о способе быстрого доступа к данным.
Запаковка служит для сокращения объёма данных и быстрого перемещения по оффсетам
не основного (20Гб) файла, а в 5-8 раз сокращённого.
Только запаковать мало, нужно ещё иметь механизм быстрого доступа к данным.
P/S В Zlib есть функции быстрой компресии и декомпресии строк.
Я указал, что больше не нужно иметь сторонние длл для упаковки или шифрации данных. В противовес вашему способу с DLL.
О решении проблемы топикстартера не говорил.
Я указал, что больше не нужно иметь сторонние длл для упаковки или шифрации данных. В противовес вашему способу с DLL.
О решении проблемы топикстартера не говорил.
DLL не запаковшик - распаковщик данных, а механизм быстрого извлечения данных из
файла, запакованного по определённой схеме.
Так вот все это теперь легко делается средствами языка. Сжатие штатно доступно.
Отлично, теперь топикстартер, наверное, решит свою проблему.
Я никогда не работал с файлами в MQL5, щас почитаю, возможно ли открыть
файл как поток, чтобы можно было использовать оффсеты.
Да, получится :)
Все работает и быстро. Я выше описал методы повышения эффективности файловых операций в нашей реализации.
Я не занижаю способности и возможности терминала, но
когда пару лет назад мне понадобилось извлекать данные из файла 1,21Гб, с 21 345 728(!) строк,
http://ftp.micex.com/pub/info/historical_data/Securities_market/OrderBook20130206.rar
данные вида:
NO,SECCODE,BUYSELL,TIME,ORDERNO,ACTION,PRICE,VOLUME,TRADENO,TRADEPRICE
21345728,USD000UTSTOM,B,235000002,3568,0,29.6095,300000,,
То по указанному мной методу, время поиска составляло 35-45 МИКРОСЕКУНД,
правда сказать, что подготавливался файл более 2 суток :(
P/S Дело не в том, что использовать (терминал или DLL), а в том, как подготовить данные.
А то, что появились новые возможности в терминале, - это очень приветствуется!
Я не занижаю способности терминала, но
когда пару лет назад мне понадобилось извлекать данные из файла 1,21Гб, с 21 345 728(!) строк,
http://ftp.micex.com/pub/info/historical_data/Securities_market/OrderBook20130206.rar
данные вида:
NO,SECCODE,BUYSELL,TIME,ORDERNO,ACTION,PRICE,VOLUME,TRADENO,TRADEPRICE
21345728,USD000UTSTOM,B,235000002,3568,0,29.6095,300000,,
То по указанному мной методу, время поиска составляло 35-45 МИКРОСЕКУНД,
правда сказать, что подготавливался файл более 2 суток :(