
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А может MQ и статью захотят.
Получилось у кого-то сделать распаковщик GZIP, если да - поделитесь пожалуйста. Можно даже через кодобазу.
А может MQ и статью захотят.
Спасение утопающих - дело рук самих утопающих, а на статью тут вряд ли материал наберется, т.к. чисто технически все уже заложено внутри CryptDecode, но с нами не поделились сакральными знаниями, как согласовать режим сжатия между сервером и клиентом, чтобы получился совместимый формат "deflate".
Предлагаю 2 пункта для метода тыка:
Спасение утопающих - дело рук самих утопающих, а на статью тут вряд ли материал наберется, т.к. чисто технически все уже заложено внутри CryptDecode, но с нами не поделились сакральными знаниями, как согласовать режим сжатия между сервером и клиентом, чтобы получился совместимый формат "deflate".
Предлагаю 2 пункта для метода тыка:
У меня сейчас задача распаковывать архивы с файлом. И уже решил ее вчера. Распаковывает и созданные мной файлы gz и с сервера с которого буду брать нужные файлы.
Кстати - тут писали про то, что архив внутри содержит чанки (блоки) раздленные через последовательность 0x1f 0x8b 0x08.
Написал такой поиск, но ни в моих файлах, ни в файле поставщика (100+мб архива и 500мб данных) таких блоков так и не встретилось. 0x1f 0x8b 0x08 встречается только в начале файла. Упростил функцию, сделал без поиска стало на 10-20% быстрее, чем с поиском.
Ну а сжатые GZIP данные с веб серверов я и не пробовал. Такой задачи нет пока что. Насколько помню, что сервер реагирует на заголовок в запросе
Accept-Encoding: gzip, deflate, br
Если есть gzip, то может вернуть данные в архиве.
Но может и в текстовом виде:
- если сервер не умеет сжимать или оно отключено админом
- если сочтет что затраты на сжатие выше, чем экономия от трафика. Данные меньше 1000 байт может и не сжать, а отправить как есть. Проверять, что пришло можно как раз по первым 3м символам: если 0x1f 0x8b 0x08 - то это GZIP.
Чуть позже (когда у себя доделаю этот модуль и протестирую получше) выложу в кодобазу то, что получилось. Не все варианты возможно будет обрабатывать, но код открытый и любой сможет доработать, если что-то не учтено.
есть ссылка на данные передаваемые в GZ? Протестирую. А то у меня только файлы.
Уже не нужно.
Проверил с архивом сгенерированным таким PHP кодом:
<?
$t='{"retCode":0,"retMsg":"OK","result":{"category":"linear","list":[... Юя';
echo gzencode($t, 9);
?>
Распаковал успешно. Даже кириллицу понял.
В контексте работы с WebSocket-ами все-таки важнее работа с фреймами/сообщениями непосредственно в формате deflate, а не файлами GZIP, которые, как видим, не составляет проблемы распознать и обработать средствами MQL5.
Провел эксперимент. Отправляю из MQL5 на эхо-сервер node.js сообщение: "My outbound message".
Из функции CryptEncode уходит бинарный массив:
Он нормально распознается сервером как исходная строка, но от сервера бинарный массив возвращается как:
Видим изменение в первом байте заголовка. И вот эти данные CryptDecode уже не может разжать.
В контексте работы с WebSocket-ами все-таки важнее работа с фреймами/сообщениями непосредственно в формате deflate, а не файлами GZIP, которые, как видим, не составляет проблемы распознать и обработать средствами MQL5.
Провел эксперимент. Отправляю из MQL5 на эхо-сервер node.js сообщение: "My outbound message".
Из функции CryptEncode уходит бинарный массив:
Он нормально распознается сервером как исходная строка, но от сервера бинарный массив возвращается как:
Видим изменение в первом байте заголовка. И вот эти данные CryptDecode уже не может разжать.
На PHP у функции сжатия https://www.php.net/manual/ru/function.gzencode.php по умолчанию стоит
Режим сжатия, может быть FORCE_GZIP (по умолчанию) или FORCE_DEFLATE.
Вот FORCE_GZIP https://datatracker.ietf.org/doc/html/rfc1952.html моя функция распознала, а FORCE_DEFLATE - нет, т.к. там другая спецификация https://datatracker.ietf.org/doc/html/rfc1951.html
Есть вероятность, что вебсерверы чаще будут использовать то, что по умолчанию.
Через Python как-то проще выполнить нужную задачу оч много времени уходит что другими путями выстроить код
Как проще получать данные с помощью Python?
Если ваша цель — получать данные (например, котировки, тики, исторические данные) и обрабатывать их, Python действительно может быть проще, особенно если вы уже знакомы с языком. Вот несколько способов организовать получение данных:
Способ 1: Использование библиотеки MetaTrader5
Библиотека MetaTrader5 (доступна через pip install MetaTrader5) позволяет напрямую подключаться к MetaTrader 5, получать котировки, тики, ордера и управлять торговлей.
Пример: Получение котировок и сохранение в ZIP
Через Python как-то проще выполнить нужную задачу оч много времени уходит что другими путями выстроить код
Как проще получать данные с помощью Python?
Если ваша цель — получать данные (например, котировки, тики, исторические данные) и обрабатывать их, Python действительно может быть проще, особенно если вы уже знакомы с языком. Вот несколько способов организовать получение данных:
Как это относится к теме топика - WebSocket-ы и GZIP(deflate)?
Задача получать данные извне, а не по известной связке MT5 и его же питонского модуля.