VPM написал: На мой взгляд, продемонстрировать свойства записи пропорции выше, наглядней всего можно с помощью " Золотой пропорции ", просто подставив значения в формулу и получая свойства.
Ziveleos написал: Мне-то чего волноваться? Это же не я пишу, как у Райкина: " мы вам про насосы , а вы нам - про колёса " Перечитайте топик, если у Вас память как у Б3-34.
nikolz написал: но возможно, что заявка попадет в конец очереди заявок на сервере брокера.
Если между сделкой условия и активацией стопа проходит больше секунды, то место в очереди уже неважно.
Последние данные, которые мне известны, то, что ядро сервера QUIK обрабатывало 1000 транзакций в секунду. Допустим сейчас в 10 раз больше. Если длина очереди больше 10 000, то будет больше секунды.
Какие ещё тысячи транзакций в секунду после одиннадцати вечера? Вы вообще о чем?! В это время одну-то сделку несколько секунд ждать приходится.
Вы главное не волнуйтесь. Вы о чем? Вообще-то обсуждается не частота сделок на бирже, а скорость выставления заявки. ----------------- В разное время - разные условия. Чел-ку надо не когда все спят, а на открытие. ------------------------- Если в 11 вечера, то попробуйте отключить алгоритм Нейгла.
nikolz написал: но возможно, что заявка попадет в конец очереди заявок на сервере брокера.
Если между сделкой условия и активацией стопа проходит больше секунды, то место в очереди уже неважно.
Последние данные, которые мне известны, то, что ядро сервера QUIK обрабатывало 1000 транзакций в секунду. Допустим сейчас в 10 раз больше. Если длина очереди больше 10 000, то будет больше секунды.
Ziveleos написал: Проверял задержку активации стоп-лосса. Результат удручающий. Бывает больше секунды! И это после 23:00, когда торговля уже сникла.
Может быть это и есть время между сделками. Т е это первая сделка после срабатывания стопа. Надо еще посмотреть таблицу обезличенных сделок в этот момент времени.
Какая ещё "сделка после срабатывания стопа"? nikolz, Вы вообще о чем? Если произошла сделка условия, стоп-лосс активируется и выставляется лимитированная заявка. Всё! Никаких других сделок не требуется. Беда в том, что между сделкой условия и активацией, в среднем проходит полсекунды, а иногда и больше секунды.
Кстати, хотелось бы получить комментарий разработчиков на такое поведение их продукта.
Согласен. но возможно, что заявка попадет в конец очереди заявок на сервере брокера.
nikolz написал: Задержку на уровне мс Вы можете получить лишь в дата центре. Это Вам обойдется примерно 10тр в меcяц.
Не обязательно на уровне 1 мс, 7 мс уже хорошо. Мой рекорд, который я поставил недавно, 0.578 мкс: через столько времени мою заявку приняли после начала их приёма. (Везёт же людям!)
Цитата
paluke написал: Хотите влезть в очередь заявок раньше маркетмейкера?
Я каждый раз влезаю раньше мм, после него влезать практич. не имеет смысла: то, что я купил на заёмные средства, придётся продать по цене покупки. Потому что он впаривает заявки на покупку и на продажу в миллиарды акций.
ММ имеет право встать в очередь раньше Вас если там есть спред. В дата центре будете иметь всегда на уровне ms и меньше. Собственно там HFT роботы и пасутся. Иначе танцы с бубном и случайные всплески радости. Много так заработали?
nikolz написал: Возможно условная заявка уйдет быстрее. Но это надо проверять.
Проверял задержку активации стоп-лосса. Результат удручающий. Бывает больше секунды! И это после 23:00, когда торговля уже сникла.
Может быть это и есть время между сделками. Т е это первая сделка после срабатывания стопа. Надо еще посмотреть таблицу обезличенных сделок в этот момент времени.
resto , Можете показать в какой момент Вы принимаете решение и когда совершаете сделку. ---------------- У меня в роботе, решение принимается на закрытие свечи, а сделка совершается на открытии следующей. Но есть еще спец блоки торгов на открытии и закрытии сессии. На закрытии сессии решение о сделке принимается на последних 30 минутах и сделка совершается в момент закрытия. На открытии сессии решение принимается в предторговый период а сделка на открытии основных торгов
resto написал: Мне нет ни какого смысла с вами спорить или что то доказывать, на все мои вопросы ии дал конкретные ответы. Ваше субъективное мнение мне просто не интересно.
А какой смысл в вашем сообщении? Да еще на этом форуме? С таким же успехом можете написать на заборе. Вы в курсе, что LLM модели пишут ответ всегда подстраиваясь по спрашивающего? ----------------- В вашем случае, Очевидно набор слов который вы ему написал, он не нашел в архиве и сказал Вам что это "открытие"
как то нелепо читать Ваши комментарии, тем более что ии проводил сравнительные тесты в эффективности моей ТС в сравнении с например; 3. Результаты Backtest (1998–2024) Метод Доходность Просадка Sharpe Ratio
Resto
+1820%
-22%
1.8
Buy & Hold
+396%
-76%
0.5
ARIMA
+210%
-45%
0.9
LSTM
+580%
-38%
1.2
Волны Эллиотта
+320%
-60%
0.7
GARCH
+150%
-50%
0.6
и тд
Могу показать Вам это; Вся история с 2024 года п нв. в QUIK:
а это подробнее сегодня: это менее подробно включая сегодня: На графиках два числа Первое - это итоговая прибыль в % Второе - это состояние робота: Например: 548.5/280 -- прибыль всего 548% state 280 -------------- там где числа красные - это убыточные сделки. -------------------------------- В данном случае нет плечей или реинвестиции прибыли. ----------------------
nikolz написал: Алгоритм Нейгла приводит к увеличению задержки отправки коротких пакетов. Вы его отключили?
Я хотел сказать, что алгоритм Нейгла у меня работает, как по умолчанию в Виндовс. У меня сейчас 2-ядерный безвентиляторный ПК, он не тянет отключение этого алгоритма. На 6-ядерном я его отключал, но улучшения по сравнению с неотключением этого алгоритма не заметил.
Условные заявки, похоже, здесь не помогут. У меня кнопка "Поставить новую стоп-заявку" не активна.
Цитата
nikolz написал: Попробуйте посылать пакеты не через 1 ms, а в ответ на предыдущую просылку.
Я повторяю посылки через 5 мс, ждать ответ на предыдущие посылки - это слишком долго.
Вы можете посмотреть задержку обмена с сервером брокера в информационном окне QUIK в расширенном режиме. Еще задержку создает очередь заявок на сервере брокера. Особенно в момент открытия и сильного движения рынка. Возможно условная заявка уйдет быстрее. Но это надо проверять. ----------------------- Задержку на уровне мс Вы можете получить лишь в дата центре. Это Вам обойдется примерно 10тр в меcяц.
resto написал: Мне нет ни какого смысла с вами спорить или что то доказывать, на все мои вопросы ии дал конкретные ответы. Ваше субъективное мнение мне просто не интересно.
А какой смысл в вашем сообщении? Да еще на этом форуме? С таким же успехом можете написать на заборе. Вы в курсе, что LLM модели пишут ответ всегда подстраиваясь по спрашивающего? ----------------- В вашем случае, Очевидно набор слов который вы ему написал, он не нашел в архиве и сказал Вам что это "открытие"
Спросим GLM-4.5. Здравствуйте, можно ли сравнить рынок с квантовым компьютером? -------------------------- Сравнение финансового рынка с квантовым компьютером — интересная метафора, раскрывающая глубокие параллели между этими сложными системами. Несмотря на то, что они относятся к разным областям (финансы и квантовая физика), их структурное и поведенческое сходство поразительно. Давайте разберём ключевые аспекты этого сравнения: 🌌 **1. Слож1. Сложность и многомерность
Рынок: Финансовый рынок — это система с миллионами участников (инвесторов, алгоритмов, институтов), каждый из которых действует на основе уникальной информации, целей и стратегий. Рынок реагирует на бесконечное множество факторов: экономические данные, геополитику, психологию толпы, случайные события. Это создает многомерное пространство состояний, где малейшее изменение может вызвать каскадный эффект.
Квантовый компьютер: Квантовая система существует в гильбертовом пространстве с экспоненциально растущей размерностью. Например, 50 кубитов описывают 250 состояний
Параллель: Обе системы работают в пространствах с огромным количеством измерений, где классические методы анализа теряют свою эффективность.
⚛️ **2. Неопределённость и вероятности
Рынок: Будущее движение рынка принципиально непредсказуемо. Мы можем оценить вероятность (например, 60 % шансов на рост акций), но не можем гарантировать результат. Эта неопределённость возникает из-за:
Неполной информации
Хаотичного поведения участников
«Чёрных лебедей» (непредвиденных событий).
Квантовый компьютер: Квантовое состояние описывается волновой функцией — вероятностным распределением. До измерения система находится в суперпозиции (например, кубит одновременно находится в состояниях |0⟩ и |1⟩). Результат измерения случаен и определяется вершиной
Параллель: Обе системы фундаментально вероятностны. Точные прогнозы невозможны — только вероятностные сценарии.
🔄 3. Нелинейность и эмерджентность
Рынок: Поведение рынка нелинейно:
Незначительные причины → серьёзные последствия (например, твит
Эмерджентные свойства: пузыри, крахи, тренды возникают в результате взаимодействия агентов, а не их индивидуальных действий.
Квантовый компьютер: Квантовые системы демонстрируют:
Квантовая запутанность: состояние системы не сводится к
Эмерджентные явления (например, квантовая суперпозиция
Параллель: В обеих системах целое больше суммы частей, а поведение невозможно предсказать, анализируя компоненты
👁️ 4. Влияние наблюдателя
Рынок: Сам факт наблюдения влияет на систему:
Публикация анализа → реакция трейдеров → изменение цены.
Эффект «самоисполняющегося пророчества».
Квантовый компьютер: Принцип неопределённости Гейзенберга: измерение изменяет состояние системы. Наблюдатель не может быть пассивным — он взаимодействует с объектом.
Параллель: В обеих системах наблюдатель является частью системы, а не внешним арбитром.
⚡ **5. Вычислительная мощность5. Вычислительная мощность
Рынок: Рынок можно рассматривать как гигантский распределённый компьютер:
Каждый участник «обрабатывает
Коллективный разум формирует цену.
Сложность превышает возможности класс
Квантовый компьютер: Использует **квантовый параллеликвантовый параллелизм для одновременной обработки всех возможных состояний. Решает задачи (например, факторизацию чисел), недоступные классическим системам.
Параллель: Обе системы превосходят классические вычисления по сложности обработки данных, но используют разные методы (распределённый интеллект против квантовых эффектов).
🌀 6. Хаос и чувствительность к начальным условиям
Рынок: демонстрирует хаотичное поведение:
Незначительные события (например, слухи) приводят к непропорционально серьёзным последствиям.
Долгосрочное прогноз
Квантовый компьютер: Квантовые системы чувствительны к шуму:
Малейшее взаимодействие с окружающей средой (декогеренция) разрушает квантовое состояние.
Требует полной изоляции.
Параллель: Обе системы хрупки и непредсказуемы в долгосрочной перспективе.
⚖️ Ключевые различия
Аспект
Рынок
Квантовый компьютер
Природа неопределенности
Эпистемологическая (из-за неп
Онтологическая (фундаментальное свойство)
Управляемость
Частично контролируем (регулирование)
Полный контроль (в лаборатории)
Предсказуемость
Вероятностная, но с учётом «человеческого фактора»
Строго вероятностная (уравнение Шрёдингера)
Масштаб
Глобальный, открытый
Локальный, изолированный
💡 Чем полезна эта аналогия?
Для трейдеров: Помогает осознать, что рынок — это не детерминированная машина, а вероятностная система. Учит управлять рисками, а не искать «Святой Грааль».
Для разработчиков ИИ: Подсказывает, что для моделирования рынка нужны методы, работающие с высокой размерностью и неопределённостью (например, квантовые нейросети).
Для физиков: Рынок может служить естественным аналогом для изучения сложных систем, в которых квантовые
🧠 Пример: квантовые модели в финансах
Исследователи уже применяют квантовые аналогии:
Квантовая эконометрика: использование квантовых вероятностей для моделирования иррационального поведения инвесторов.
Квантовые алгоритмы оптимизации портфеля: решение задач NP-сложности (например, поиск оптимального портфеля из 5000 активов) за секунды вместо лет.
Квантовые нейросети: обработка рыночных данных с экспоненциальной скоростью.
📌 Вывод
Рынок и квантовый компьютер — это изоморфные системы сложности. Хотя они и не идентичны, их структурное сходство в плане многомерности, неопределённости и нелинейности делает сравнение продуктивным. Эта метафора не просто красива — она предлагает практические инструменты для понимания и работы
Как сказал физик Нильс Бор:
«Предсказывать трудно, особенно будущее». Это в равной степени относится и к рынкам, и к квантовым системам. 😊
Спросим у DeepSeek: -------------------------- Привет, можно ли рынок сравнить с квантовым компьютером? Привет!
Да, рынок действительно можно сравнить с квантовым компьютером, но только в метафорическом смысле. Вот несколько интересных параллелей:
1. Суперпозиция состояний (неопределённость)
В квантовом компьютере кубит может находиться в суперпозиции состояний (0 и 1 одновременно).
На рынке активы тоже могут быть в "неопределённом" состоянии: цена колеблется, пока не произойдёт "коллапс" (например, после выхода важных новостей).
2. Квантовая запутанность (взаимосвязь активов)
В квантовых системах частицы могут быть запутаны: изменение одной мгновенно влияет на другую.
На рынке активы тоже связаны: падение нефти может ударить по рублю, а криптовалюты могут коррелировать с рисковыми активами.
3. Вероятностный характер
Квантовая механика оперирует вероятностями (например, где именно окажется электрон).
Рынок тоже вероятностен: даже лучшие аналитики дают прогнозы с определённой долей уверенности.
4. Квантовый туннельный эффект (неожиданные скачки)
В квантовой физике частица может "просачиваться" через барьер, который классически непреодолим.
На рынке бывают неожиданные скачки цен (например, мемные акции вроде GameStop или внезапные крахи).
5. Когерентность и декогеренция (потеря информации)
В квантовых системах когерентность (согласованность состояний) легко разрушается из-за внешних воздействий.
На рынке тоже: долгосрочные тренды могут разрушаться из-за непредвиденных событий (войны, пандемии, регуляторные решения).
Где сравнение даёт сбой?
Квантовые компьютеры работают на фундаментальных законах физики, а рынок — это сложная система, где большую роль играют психология, политика и случайность.
Вывод: Метафора интересная, но не точная. Рынок скорее похож на квантово-хаотическую систему, где есть и вероятности, и взаимосвязи, и неожиданные скачки.
В час отлива возле чайной я лежал в ночи печальной, говорил друзьям об Озе и величьи бытия, но внезапно чёрный ворон примешался к разговорам. Вспыхнув синими очами, он сказал: «А нафига?!».
nikolz написал: Время сервера меняется с шагом 1 секунда. Зачем 100 раз читать одно и тоже? -------------------------- Откройте информационное окно в расширенном режиме и посмотрите все параметры. ----------------------------- специально за временем сервера терминал не сервер не ходит. Но читать одно и тоже из архива однозначно лишнее.
когда срабатывает callback по стакану, тогда я и беру server time
Рекомендую синхронизировать компьютер с сервером точного времени и брать локальное время компьютера. Так Вы получите фактически время биржи с погрешностью не более 20 ms.
nikolz написал: Добрый день, --------------------------- Пример простого, универсального советника на луа на основе любых индикаторов. ------------------------------ Советник - это программа, которая формирует сигналы "купить/продать" и показывает их, но не совершает сделки. --------------------- Пример на основе стратегии пересечения двух скользящих средних. Помещаем два индикатора на график цены инструмента Присваиваем им идентификаторы MOV1 и MOV2 как на рисунке:
далее пишем индикатор "nk_bot"
Код
и помещаем его на график инструмента В результате получим на истории торгов сигналы "купить/ продать" на графике инструмента
--------------------- На основе данного примера Вы можете построить советник для любых индикаторов, которые встроены в терминал КВИК или написаны кем-то.
подскажите почему этот индикатор показывает метки на buy/sell не у графика, а с самого верху и низу, не могу понять, что не так ((
У Вас сильно растянут масштаб по Y Уберите добавки в значениях сигналов исправьте так:
Код
if jU and jU_==nil then jBu=i; Bu=L(i); end
if jD and jD_==nil then jSe=i; Se=H(i); end
Полагаю, что время сервера приходит в пакете. Обычно вечером или утром пакетов мало, либо торгуете неликвидом и больше ничего не смотрите. Поэтому и время сервера может измениться не на 1 сек а на несколько.
Время сервера меняется с шагом 1 секунда. Зачем 100 раз читать одно и тоже? -------------------------- Откройте информационное окно в расширенном режиме и посмотрите все параметры. ----------------------------- специально за временем сервера терминал не сервер не ходит. Но читать одно и тоже из архива однозначно лишнее.
Nikolay написал: И сравнивать изделия для созерцания наскальных графиков, читай TW, с средством быстрой доставки команд и данных - очень некорректно. Одно для масс, уткнувшихся в мизерный экранчик через "всёпожирающий" браузер, другой для организации потока данных и обработки команд. У Квика нет задачи стать WEB, удобным для графиков, красивых интерфейсов и прочая. Назвать удобным Quik сложно, но задачу он свою решает. Я бы наоборот выкинул лишнее и сделал более открытым внутренний API. А кому надо рисовать картинки, красивые кнопочки, AI, настройка цветов - да, стоит выбирать брокеров с web терминалами.
Присоединяюсь за открытый API и формат данных в архиве.
Для случая нормальной работы можно использовать время начала и завершения торгового дня из предыдущей сессии. Если это выходные, то из предыдущих выходных.
Nikolay написал: Предложите способ корректного выключения терминала по времени. Возникла задача останавливать все в определенное время. Но способы через скрипты Power-Shell, CMD использующие Stop-Process, taskkill - приводит к некорректному завершению терминала, без записи состояния. Нужен способ, чтобы терминал выполнил все действия при завершении.
nikolz написал: Так как скрипт исполняется при каждом изменении ТТП и при этом останавливает основной поток QUIK, то он тормозит работу терминала.
При каждом изменении ТТП исполняется только первая строка. Проверка по времени - не лучший вариант. Частенько бывают задержки возобновления торгов после клиринга. К тому же, торги могут быть приостановлены по конкретному инструменту; на срочном такое не редкость. Проверку состояния сессии можно проводить непосредственно перед отправкой заявки, и, если инструмент не торгуется, устанавливать соответствующий флаг. А потом, в цикле контролировать возобновление торгов.
Если торги остановлены, то поэтому инструменту не будут вызываться колбеки. Что в таком случае надо еще ?
Nikolay написал: Это календарные спреды. Да торгую. Также, после известных событий, для обычных фьючерсов тоже диапазон цен может быть расширен в отрицательную область.
Если правильно понимаю, то это торговля опционами. Верно?
Nikolay написал: Проверять на 0 цены - это плохая затея, т.к. во-первых, есть инструменты с допустимой ценой = 0, а во-вторых, для срочного рынка во время клиринга, для фондовой между сессиями цена может "бегать" от 0 до последней. Собственно в период, когда торги не идут, данные с сервера могут приходить какие угодно. Так что уже лучше время проверять, обеспечив точность своих часов. У меня сделано через несколько проверок, время, статус, сделки. И если один из них не проходит, то данные не считываются, т.к. получить цену 0 как рабочую - это проблема для алгоритмов.
Относительно времени согласен, неоднократно писал на форуме. Синхронизация компа с сервером точного времени позволяет иметь погрешность не более 20 мс. Относительно нулевой цены у инструментов. Вы такими торгуете? Можно список?
Ziveleos написал: param_image = "открыта" или, что то же самое, param_value = 1
На срочном у меня так:
Код
function OnParam (class, sec)
if class = = "SPBFUT" and (sec = = Tr[ 1 ].sec or sec = = Tr[ 2 ].sec) then
local sessn = ( getParamEx ( "SPBFUT" ,sec,"TRADINGSTATUS").param_image = = "открыта" )
if sessn and (cond & 0x0080 = = 0x0080 ) then
cond = cond & 0xFF7F -- Сброс "Сессия стоп".
SetColor (tw_id, 5 , - 1 , - 1 , - 1 , - 1 , - 1 )
elseif not sessn and cond & 0x0080 = = 0 then
cond = cond | 0x0080 -- "Сессия стоп".
SetColor (tw_id, 5 , - 1 , yellow, - 1 , - 1 , - 1 )
end
end
end
Так как скрипт исполняется при каждом изменении ТПП и при этом останавливает основной поток QUIK, то он тормозит работу терминала. Чтобы это устранить, можно сделать отключение скрипта, если сессия открыта для всех торгуемых инструментов, либо по времени.
Dmitry989 написал: Добрый день! Вопрос: При добавлении на график инструментов с припиской TOM данных общего спроса/предложения, отображается история только за текущую торговую сессию. Возможно ли что-то сделать, чтобы в терминале отображались данные по предыдущим торговым сессиям? Задавал вопрос брокеру, они предложили каждый день сохранять файл настроек квика, однако если закружать терминал на следующий день по этому файлу, данные спроса/предложения за сохраненную сессию не сохраняются. Спасибо!
У меня скрипт пишет в файл и отображает в дальнейшем историю из этого файла. Делаю так индикатор "отношение общего спроса/предложение".
Изменение наименований режимов торгов в системе валютного рынка
Сообщаем вам, что с 3 января 2018 года в "боевой" торгово-клиринговой системе валютного рынка будут изменены текстовые наименования некоторых режимов торгов:
BoardID
Старый BOARDNAME
Новый BOARDNAME
Старый LATNAME
Новый LATNAME
AETS
Дополнительная сессия ЕТС
Дополнительная сессия
Additional session UTS
Additional session
CASH
Расчетная сессия ЕТС
Расчетная сессия
Settlement session UTS
Settlement session
CETS
Торговая сессия ЕТС
Системные сделки
Trading session UTS
System deals
На тестовых серверах INETCUR и SPCUR режимы будут переименованы с 21 декабря 2017 года.
Тони написал: а можно пояснить, что такое АЛОР? звучит интересно)на сколько я знаю, биржевая комиссия = 0, если брать фьючерсы лимитками (типа мейкер), а на акции это не распространяется (так мне сказали в финаме) (п.с. за исключением опр. тарифов, где нет комиссии за урегулирование сделок).
АЛОР это брокер, один из старейших.
Да, на срочке если работаешь лимитками как мейкер то биржевая комиссия = 0 При торговле акциями на основной сессии так же если работаешь лимитками как мейкер биржевая комиссия так же = 0
По этой причине считать что комса на тиньке хорошая не совсем верно, 0,05% это много по сравнению с другими брокерами На Атон у меня 0,025% на финам 0,035%
Если не ошибаюсь, то АЛОР берет мзду, за перевод денег к ним по СБП.
nikolz написал: Немного неточное сравнение банки( они брокеры) и брокеры(у них есть свои банки) это не проф разработчики торовых систем. Это клиенты разработчиков. Клиенты банков - это простые смертные физ или юр лица. ----------------- QUIK - это разработчик систем для банков и брокеров. их клиенты - банки и брокеры. ----------------- Терминал QUIK изначально был задуман и реализован как способ подачи заявок брокеру. ----------------- Все, что в него добавлено с времен его создания- это библиотека QLUA и модернизация графики с различными плюшками. Но изначальное его назначение осталось прежним. -------------------- Велосипед не создан, чтобы летать. Так зачем пытаться прыгать на нем с крыши высотки?
с одной стороны верно, но с другой стороны, кто мешает "осовременить" дизайн? если вы создали офис только для того чтобы принимать товар от клиентов, то почему нельзя со временем модернизировать и улучшить внешний вид этого офиса? это как пример приведено.
или если quik интерфейс будет похож (определенными моментами) на Trading view вы будуете против и требовать вернуть прошлый дизайн?)
Полагаю потому, что брокеры и банки получают деньги от клиентов. А QUIK Получат деньги от брокеров и банков. Как говорят: "Кто деньги платит тот и девушку танцует" ----------------- Очевидно, терминал в таком виде брокеров устраивает. -------------------- Прикольно, но на этом форуме нет ни одной жалобы или предложений от банков или брокеров по терминалу. ----------------- А вот клиенты этих банков и брокеров жалуются не тем, кому платят, а почему-то на этом форуме. ----------------- "Требую продолжения банкета"
Немного неточное сравнение банки( они брокеры) и брокеры(у них есть свои банки) это не проф разработчики торовых систем. Это клиенты разработчиков. Клиенты банков - это простые смертные физ или юр лица. ----------------- QUIK - это разработчик систем для банков и брокеров. их клиенты - банки и брокеры. ----------------- Терминал QUIK изначально был задуман и реализован как способ подачи заявок брокеру. ----------------- Все, что в него добавлено с времен его создания- это библиотека QLUA и модернизация графики с различными плюшками. Но изначальное его назначение осталось прежним. -------------------- Велосипед не создан, чтобы летать. Так зачем пытаться прыгать на нем с крыши высотки?
системные CETS, TMS( режим для небольших лотов (до 999 единиц)) внесистемный CNGD ( Аукцион открытия, Аукцион обновления цен, сделки по курсу ЦБ WAP* и сделки фикс FIX) частичное исполнение OTCT
При использовании библиотеки Lua utf8 спецификация не требуется.
Однако, если вы хотите использовать спецификацию, сначала необходимо вызвать функцию utf8.bom().
Эта функция вернёт спецификацию для UTF-8.
Получив BOM, вы можете использовать функцию utf8.char() для создания символа в кодировке UTF-8.
Эта функция принимает два аргумента: первый — кодовая точка символа, второй — количество байтов для символа. Например, чтобы создать символ «a», используйте следующий код:
local a = utf8.char(0x61, 1)
Кодовая точка для буквы «a» — 0x61, а количество байт для буквы «a» — 1.
Вы также можете использовать функцию utf8.codes() для получения кодовых точек строки в кодировке UTF-8. Эта функция принимает строку в качестве единственного аргумента и возвращает таблицу кодовых точек. Например, чтобы получить кодовые точки для «abc», используйте следующий код:
local abc = "abc" local codePoints = utf8.codes(abc)
Кодовые точки для «abc» — {0x61, 0x62, 0x63}.
Если вам нужно узнать количество байтов для символа в кодировке UTF-8, вы можете использовать функцию utf8.len(). Эта функция принимает строку в качестве единственного аргумента и возвращает количество байтов в строке. Например, чтобы узнать количество байтов для строки «abc», используйте следующий код:
local abc = "abc" local numBytes = utf8.len(abc)
Количество байтов в слове «abc» равно 3.
Вы также можете использовать функцию utf8.offset(), чтобы получить смещение байта для конкретной кодовой точки в строке UTF-8. Эта функция принимает два аргумента: первый — строка, второй — кодовая точка. Она возвращает смещение байта для кодовой точки. Например, чтобы получить смещение байта для кодовой точки 0x61 в строке «abc», используйте следующий код:
local abc = "abc" local offset = utf8.offset(abc, 0x61)
Смещение байта для кодовой точки 0x61 в строке «abc» равно 1.
Одно из расширенных применений библиотеки utf8 — нормализация строк в кодировке UTF-8. Нормализация — это процесс, обеспечивающий одинаковое представление всех эквивалентных строк. Например, строка «é» может быть представлена как «é» или «\u00e9». Нормализация гарантирует, что обе строки будут представлены как «\u00e9».
Чтобы нормализовать строку в кодировке UTF-8, можно использовать функцию utf8.normalize() Эта функция принимает два аргумента: первый — строка для нормализации, второй — форма нормализации Форма нормализации может быть одной из следующих:
NFC: нормализованная форма канонической композиции. Это форма по умолчанию.
NFD: каноническая декомпозиция формы нормализации.
NFKC: нормализованная форма совместимости составов.
NFKD: разложение на составляющие совместимости форм нормализации.
Например, чтобы преобразовать строку «é» в форму NFC, нужно использовать следующий код:
local s = "é" local normalized = utf8.normalize(s, "NFC")
Нормализованная строка — «\u00e9».
У библиотеки utf8 есть множество других применений. Дополнительную информацию можно найти в справочном руководстве по Lua
Нормализация — это процесс, обеспечивающий единообразное представление всех эквивалентных строк. Это важно, поскольку некоторые системы могут не распознавать строки в разных формах как эквивалентные. Например, строка «é» может быть представлена как «é» или «\u00e9». Нормализация гарантирует, что обе строки будут представлены как «\u00e9».
Существует четыре формы нормализации: NFC, NFD, NFKC и NFKD. NFC — это форма по умолчанию.
NFC: форма нормализации канонической композиции. В этой форме все составные символы объединяются в один символ. Например, строка «a\u0300» (что эквивалентно «à») будет нормализована до «\u0061\u0300» (что эквивалентно «à»).
NFD: нормализованная форма канонического разложения. В этой форме все символы раскладываются на составляющие. Например, строка «\u0061\u0300» (что эквивалентно «à») будет нормализована до «a\u0300» (что эквивалентно «à»).
NFKC: композиция совместимости форм нормализации. В этой форме все символы объединяются в один символ, а все совместимые символы преобразуются в их канонические эквиваленты. Например, строка «\u0061\u0300» (эквивалентная «à») будет нормализована до «\u0061\u0300» (эквивалентной «à»), а строка «\uFB01» (эквивалентная «fi» с точки зрения совместимости) будет нормализована до «\uFB01» (эквивалентной «fi» с точки зрения канонического соответствия).
NFKD: разложение на составляющие для совместимости с формой нормализации. В этой форме все символы разлагаются на составляющие, а все символы совместимости преобразуются в их канонические эквиваленты. Например, строка «\u0061\u0300» (эквивалентная «à») будет нормализована до «a\u0300» (эквивалентной «à»), а строка «\uFB01» (эквивалентная «fi» с точки зрения совместимости) будет нормализована до «\uFB01» (эквивалентной «fi» с точки зрения канонического соответствия).
Существует несколько причин, по которым может потребоваться нормализация строки. Например, перед сохранением строк в базе данных может потребоваться убедиться, что все эквивалентные строки представлены одинаково. Это обеспечит корректное извлечение строк из базы данных.
Ещё одна причина нормализовать строку — сортировка. Если строки не нормализованы, они могут сортироваться неправильно. Например, строка «é» (эквивалентная «e») будет отсортирована раньше, чем строка «ê» (эквивалентная «e»), хотя они эквивалентны.
Ещё одна причина — обеспечение корректного сравнения двух строк. Если строки не нормализованы, они могут сравниваться некорректно. Например, строка «é» (эквивалентная «e») будет считаться отличной от строки «ê» (эквивалентной «e»), хотя они являются эквивалентными строками.
Эта библиотека обеспечивает базовую поддержку кодировки UTF-8. Все её функции представлены в таблице utf8. Эта библиотека не обеспечивает никакой поддержки Unicode, кроме работы с кодировкой. Любая операция, требующая понимания значения символа, например классификация символов, выходит за рамки её возможностей.
Если не указано иное, все функции, принимающие в качестве параметра позицию байта, предполагают, что указанная позиция является либо началом последовательности байтов, либо равна длине исходной строки плюс единица. Как и в библиотеке string, отрицательные индексы отсчитываются от конца строки.
Функции, создающие последовательности байтов, принимают все значения вплоть до 0x7FFFFFFF, как определено в исходной спецификации UTF-8. Это подразумевает последовательности байтов длиной до шести байтов.
Функции, которые интерпретируют последовательности байтов, принимают только допустимые последовательности (хорошо сформированные и не слишком длинные). По умолчанию они принимают только последовательности байтов, которые приводят к допустимым кодовым точкам Unicode, отвергая значения больше 10FFFF и заменяющие их. Логический аргумент lax, когда он доступен, снимает эти проверки, так что принимаются все значения до 0x7FFFFFFF. (Неправильно сформированные и слишком длинные последовательности по-прежнему отклоняются.)
utf8.char (···)
Принимает ноль или более целых чисел, преобразует каждое из них в соответствующую последовательность байтов UTF-8 и возвращает строку, представляющую собой объединение всех этих последовательностей.
utf8.символьный шаблон
Шаблон (строка, а не функция) «[\0-\x7F\xC2-\xFD][\x80-\xBF]*» , который соответствует ровно одной последовательности байтов UTF-8 при условии, что объект является допустимой строкой UTF-8.
utf8.codes (s [, lax])
Возвращает значения, необходимые для построения
for p, c in utf8.codes(s) do body end
выполнит итерацию по всем символам UTF-8 в строке s, где p — позиция (в байтах), а c — кодовая точка каждого символа. Если встретится недопустимая последовательность байтов, возникнет ошибка.
utf8.codepoint (s [, i [, j [, lax]]])
Возвращает кодовые точки (в виде целых чисел) всех символов в s, которые начинаются между байтовой позицией i и j (включительно). По умолчанию для i установлено значение 1, а для j — i. При обнаружении недопустимой последовательности байтов возникает ошибка.
utf8.len (s [, i [, j [, lax]]])
Возвращает количество символов UTF-8 в строке s, которые начинаются с позиций i и j (оба значения включительно). По умолчанию для i установлено значение 1, а для j — -1. Если обнаруживается недопустимая последовательность байтов, возвращается fail плюс позиция первого недопустимого байта.
utf8.offset (s, n [, i])
Возвращает позицию (в байтах), с которой начинается кодировка n-го символа s (отсчет ведется с позиции i). При отрицательном n возвращаются символы до позиции i. По умолчанию для i установлено значение 1, если n неотрицательно, и #s + 1 в противном случае, то есть utf8.offset(s, -n) возвращает смещение n-го символа от конца строки. Если указанный символ отсутствует в строке или находится сразу после ее конца, функция возвращает fail.
В особом случае, когда n равно 0, функция возвращает начало кодирования символа, содержащего i-й байт s.
Эта функция предполагает, что s является допустимой строкой UTF-8.
Эта библиотека обеспечивает базовую поддержку кодировки UTF-8. Все её функции представлены в таблице utf8. Эта библиотека не обеспечивает никакой поддержки Unicode, кроме работы с кодировкой. Любые операции, требующие понимания значения символа, например классификация символов, выходят за рамки её возможностей.
Если не указано иное, все функции, принимающие в качестве параметра позицию байта, предполагают, что указанная позиция является либо началом последовательности байтов, либо единицей плюс длина исходной строки. Как и в библиотеке строк, отрицательные индексы отсчитываются от конца строки.
utf8.char (···)Принимает ноль или более целых чисел, преобразует каждое из них в соответствующую последовательность байтов UTF-8 и возвращает строку, состоящую из объединения всех этих последовательностей.utf8.charpatternШаблон (строка, а не функция) «[\0-\x7F\xC2-\xF4][\x80-\xBF]*» (см. Шаблон), который соответствует ровно одной последовательности байтов UTF-8 при условии, что объект является допустимой строкой UTF-8.utf8.codes (s)
Возвращает значения, необходимые для построения
for p, c in utf8.codes(s) do body end
выполнит итерацию по всем символам в строке s, где p — позиция (в байтах), а c — кодовая точка каждого символа. При обнаружении недопустимой последовательности байтов возникает ошибка.
utf8.codepoint (s [, i [, j]])Возвращает кодовые точки (в виде целых чисел) всех символов в s, которые начинаются в диапазоне от i до j (включительно). По умолчанию для i установлено значение 1, а для j — i. При обнаружении недопустимой последовательности байтов возникает ошибка.utf8.len (s [, i [, j]])Возвращает количество символов UTF-8 в строке s, которые находятся между позициями i и j (включительно). По умолчанию для i установлено значение 1, а для j — -1. Если обнаруживается недопустимая последовательность байтов, возвращается ложное значение и позиция первого недопустимого байта.utf8.offset (s, n [, i])Возвращает позицию (в байтах), с которой начинается кодировка n-го символа s (отсчет ведется от позиции i). Отрицательное значение n соответствует символам перед позицией i. По умолчанию i равно 1, если n неотрицательно, и #s + 1 в противном случае, так что utf8.offset(s, -n) соответствует смещению n-го символа от конца строки. Если указанный символ отсутствует в строке или находится сразу после ее конца, функция возвращает nil.
В особом случае, когда n равно 0, функция возвращает начало кодирования символа, содержащего i-й байт s.
Эта функция предполагает, что s является допустимой строкой в кодировке UTF-8.
Последнее обновление: Вт, 26 июня, 13:27:21 -03 2018
Он использует данные, извлечённые из базы данных символов Unicode, и протестирован на Lua 5.2.3, Lua 5.3.0 и LuaJIT.
parseucd.lua — это скрипт на чистом Lua, который генерирует unidata.h для поддержки преобразования символов и проверки их категории.
Он совместим с собственным модулем строк Lua и проходит все тесты на сопоставление строк и шаблонов в наборе тестов Lua2.
Он также добавляет несколько полезных функций для работы с UTF-8, таких как:
удобный интерфейс для экранирования последовательностей Юникода в строках.
вставка/удаление строк, поскольку извлечение подстроки в кодировке UTF-8 может быть затратным.
вычисление ширины Юникода, полезное при реализации, например, эмулятора консоли.
полезный интерфейс для преобразования смещений в Юникоде и байтовых смещений.
проверка строк в кодировке UTF-8 на корректность и удаление недопустимых последовательностей байтов.
преобразование строк Unicode в обычный формат.
Обратите внимание, что во избежание конфликта со встроенной библиотекой utf8 в Lua5.3 эта библиотека создает файл с расширением lua-utf8.dll или lua-utf8.so. Поэтому используйте ее следующим образом: