Дествительно не подумал и повелся на маркетинговые мифы о "Си-скоростях". Любое значение Lua — это сложная структура TValue, и побитовые операторы в Lua 5.4 действительно не являются прямыми ассемблерными инструкциями ЦП.
nikolz, Спасибо за замечание и системное погружение в исходный Си-код языка. Это позволяет строить более осознанную архитектуру, понимая такт процессора.
Вывод Lua = Таблица, Lua ~= Ассемблер.
Несмотря на то, что на уровне исполнения это вызов функций ВМ, оператор & в Lua 5.4.1 работает быстрее, чем вызов старой внешней библиотеки bit.band(flags, 0x4). Следовательно вывод что встроенный оператор & всё же предпочтительнее для Квика сохраняется и это главное!
Описание полей в методе on_trans_reply
Пользователь
Сообщений: Регистрация: 15.06.2023
30.10.2026 09:17:35
Поскольку поддержка отмалчивается, проведу разбор самостоятельно, для себя и таких как я (хотя и слабо разбираюсь в этом), а что делать?
1. Опечатка в тексте руководства ARQA Technologies очевидна, авторы справки перепутали номера битов и шестнадцатеричные (HEX) маски. Авторы опечатались в HEX-записи. Они хотели написать бит 20 (маска 0x100000) и бит 21 (маска 0x200000). Но почему то написали 0x21 и 0x22? Видимо механически скопировали номера битов, забыв перевести их в степени двойки и ошибочно записав номера битов 20 и 21 как 0x20 / 0x21, а затем сдвинули индексы? Доверять HEX-значениям 0x21 и 0x22 из этой справки нельзя — они полностью неверны.
2. Ловушка Истины или почему 0 в Lua — это true? Это главная концептуальная ловушка для программистов, переходящих на Lua с языков Си, C++ или Python. В отличие от Си/Python, где 0 — это false, любое другое число — это true. В Lua (всех версий), логическим ложным значением (false) признаются исключительно два ключевых слова: false и nil. Всё остальное, включая число 0, пустую строку "" и пустую таблицу {}, интерпретатором Lua всегда признается истиной (true)!
Так как в терминал QUIK v11+ при работе на чистом Lua 5.4.1, встроенная библиотека bit (которая была внешней .dll в старых версиях) является устаревшей. Появилась возможность использовать родные поразрядные Си-операторы Lua 5.4.1, которые работают на уровне процессора и не тратят время на вызовы функций. Собствено на этом можно и закончить. Хотя про это много уже писалось повторюсь. Вот золотой стандарт проверки флагов, который гарантирует отсутствие ложных срабатываний (как памятка):
Вариант 1. Проверка через родной оператор Lua 5.4.1 (&) — Рекомендуемый HFT-выбор. Оператор & (побитовое И) возвращает значение маски (например, 4) или 0. Проверяем строго через ~= 0: -- Проверяем Бит №2 заявки/сделки (маска 2^2 = 4, то есть 0x4) -- На Мосбирже: flags & 0x4 ~= 0 означает "Сделка на ПРОДАЖУ" local is_sell = (flags & 0x4) ~= 0 if is_sell then -- Блок выполнится строго если бит присутствует (результат операции равен 4) end
Вариант 2. Проверка через встроенную функцию bit.test в старых скриптах. Если используете функцию bit.test, она сама под капотом делает сравнение и возвращает чистый булев тип (true или false). Здесь оператор ~= 0 не нужен: -- В функцию передается не маска, а чистый НОМЕР БИТА (начиная с 0) local is_sell = bit.test(flags, 2) -- Возвращает true или false if is_sell then -- Код безопасен, так как is_sell — это честный boolean end
Описание полей в методе on_trans_reply
Пользователь
Сообщений: Регистрация: 15.06.2023
27.10.2026 16:27:27
Похоже опять несоответствие в справке?
Для флагов транзакций напечатано "бит 20 (0x21) и бит 21 (0x22)".
Математические маски битов 20 и 21 — 0x100000 и 0x200000; по самой справке нельзя однозначно установить, где именно опечатка?
справка QLua - версия руководства 13.1;
И еще одно. Как проверять флаг? Для корректного целого flags заявки или собственной сделки:
Код
local is_sell = bit.test(flags, 2) -- 2: номер бита
local is_sell_54 = (flags & 0x4) ~= 0 -- 0x4: маска, Lua 5.4.1
bit.band(flags, 0x4) возвращает 0 или 4, а не 0 или 1. Проверять нужно через ~= 0. Кроме того, в Lua число 0 считается истинным, поэтому if bit.band(...) then — опасная проверка. Почему Так?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
23.10.2026 18:26:20
Демонстрация подхода (на реальном примере).
Портфель, как личная эко система. Задачей которого является ежемесячное финансирование расходов по счету в банке. Фактически это альтернатива банковскому депозиту. Отсюда задача, нужна не максимальная доходность, как у инвестиционного подхода, а постоянный надежный денежный поток. По факту собираем личный хедж - фонд (подобие эндаумента). Значит главный артефакт — календарь денежного потока, или сколько денег приходит в каждый месяц.
Хеджировать облигации которые держим к погашению - это лишние расходы. Совсем другое дело длинные ОФЗ и акции. Акции (~ +-10 - 20%) здесь - это составляющая роста (Инфляцию пока не кто не отменял), и их нужно обязательно хеджировать.
Пример отчета: === ContanGO! ОТЧЁТ 19:00 (23.10.2026 17:39) === Стоимость акций: 1 000 603 руб Хедж план (номинал): 991 805 руб Хедж факт (номинал): 244 403 руб ГО под хедж (план): 190 600 руб Покрытие факт: 24% --- РЫНОЧНЫЙ РИСК (плечо: руб на 1% IMOEX) --- Экспозиция акций: 10 155 Хедж снимает: -2 648 Чистая экспозиция: 7 507 руб на 1% Если IMOEX -10%: -75 068 руб Если IMOEX +10%: 75 068 руб --- ДЕНЕЖНЫЙ ПОТОК (ДДС, горизонт 55 дней) --- Кэрри по хеджу: 2 872 руб Дивиденды (из кривой): 12 344 руб Итого ДДС: 15 216 руб (10.1% годовых) Равновесие (полный хедж): 21 109 руб (14.0% = КС) --- ВЕРДИКТ --- Хедж выполнен на 24% - портфель ЧУВСТВИТЕЛЕН к IMOEX +10% индекса = 75 068 руб (7.5% капитала) Докинуть хедж - ДДС вырастет до точки опоры (21 109 руб)
Отчет по акциям показывает, фонд сейчас находится в агрессивной (направленной) позиции, а не в режиме защитного кэрри-трейда: 1. Недовыполнен план. Хедж выполнен всего на 24%. Из 1 млн рублей в акциях короткими позициями (фьючерсами) прикрыто только ~244 тыс. руб. 2. Рыночный риск (Бета-риск). Чистая экспозиция составляет 7 507 руб на 1% движения IMOEX. Поскольку хедж недозагружен, падение рынка на 10% лишит систему 75 068 руб бумажной стоимости. Для "альтернативы депозиту" это высокая волатильность капитала. 3. Эффект Контанго (Кэрри). Продавая фьючерсы (хеджируя), зарабатываем на временном распаде (контанго) — это мой Кэрри по хеджу (2 872 руб). При 100% покрытии этот поток (вместе с дивидендами) превращается в железобетонную альтернативу денежному рынку или КС (ключевой ставке).
Вывод по блоку акций. Чтобы портфель перестал зависеть от рыночных циклов и выдавал плановые 14% годовых (у меня заложено в расчете = КС, можно ставку депозита) (21 109 руб за 55 дней) без просадок по телу, хедж нужно доводить до 100%.
С Акциями разобрались?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
12.10.2026 20:57:06
В заключении. Что мы получаем в результате - "Отчёт 4:15" для частного инвестора. Представьте, что вы - Уэзерстоун своего портфеля.
Каждый вечер в 19:00 (после закрытия Московской биржи) вы хотите видеть одну строку: -------------------------------------------------------¬ ¦ ПОРТФЕЛЬ ОБЛИГАЦИЙ - ОТЧЁТ 19:00 ¦ ¦ ¦ ¦ Стоимость: 2 000 000 rub ¦ ¦ Совокупный DV01: 1 146 rub/bp ¦ ¦ ¦ ¦ Если ЦБ снизит ставку на 1%: +114 600 rub ¦ ¦ Если ЦБ повысит ставку на 1%: -114 600 rub ¦ ¦ Если ставка не изменится: +купонный доход ¦ ¦ ¦ ¦ Хедж (фьючерс RGBI short): ~600 rub/bp (4 контракта) ¦ ¦ Чистый DV01 после хеджа: +546 rub/bp ¦ ¦ ¦ ¦ Вердикт: портфель ЧУВСТВИТЕЛЕН к снижению ставок ¦ ¦ Риск роста ставок частично захеджирован ¦ L------------------------------------------------------- Одна страница. Конкретные рубли. Конкретный сценарий. Конкретное решение.
PS. В моих расчетах есть не точности, сути и смыслов это не меняет, но требуется уточнения. У меня же руки "чешутся" не терпится собрать код, проверить на практике. Удачи.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
12.10.2026 12:32:30
Nikolay, Вы сформулировали именно то, что нужно. Вывод безуловно правильный, дальние облигации — это ставка на макроэкономическую стабильность на 10+ лет. Не на "ставка снизится в следующем году", а на "в ближайшие 15 лет не будет киндер-сюрпризов?". Это не безопасный доход, это скорее ставка на сценарий. Длинные облигации дают премию за срок, но эта премия — не бесплатный доход, а плата за риск. Чтобы её получить, нужно, чтобы за 15 лет не случилось того, что обесценит рубль, обрушит рынок или заморозит активы. Иногда это оправдано, иногда — нет. С этим не поспоришь.
Я же в своем примере, показываю, что в теории используемой YTM есть "дырка от бублика". Я хочу сейчас знать что, с бумагами в портфеле (перекуплено либо перепродано ведь банки и фин. институты ведут свою игру), какая меньше несет риска, ради чего все это? Чем выгодней торговать? Почему лучше продать риск? А может посидеть еще? У меня больше вопросов чем ответов. К стати риск в моем рассмотрении за скобками (ОФЗ - ААА). Ведь все еще сложнее с корпоратами?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
12.10.2026 10:54:11
Расчеты не сложные просто подставьте данные в формулы. А вот вывод красота, судите сами!
DV01 как единая мера для сравнения. В исходной идее, говорил, что сравнение облигаций через YTM недостаточно. DV01 предлагает другой подход. Вместо вопроса "какая облигация доходнее?" нужно ответить на вопрос: "Сколько рублей я заработаю или потеряю при изменении доходности на 100 bp?"
| Облигация | Вложение | DV01 | Результат при ΔY = −100 bp | Результат при ΔY = +100 bp | |-----------------|---------------:|------------:|----------------------------------------:|---------------------------------------:| | 26238 | 951 653 ₽ | 591 ₽/bp | +59 100 ₽ | −59 100 ₽ | | 26254 | 930 259 ₽ | 489 ₽/bp | +48 900 ₽ | −48 900 ₽ |
Это уже не абстрактные проценты. Это конкретные рубли прибыли или убытка при конкретном сценарии. Разве не именно это нужно для принятия решения о хеджировании, ротации или увеличении позиции?
Если подвести итог всей дискуссии. DV01 — это и есть рычаг Архимеда: Номинал — единица будущих денег. Цена — сегодняшняя оценка этих денег. Количество — масштаб позиции на фиксированный капитал. Дюрация — абстрактное плечо чувствительности. DV01 — то же плечо, но переведённое в рубли. Фьючерс — противовес на другой чаше весов. Хедж — уравновешивание двух чаш через равенство DV01.
Получается законченная механическая система: > Точка опоры — текущая рыночная доходность. > > Сила — изменение ожиданий по ДКП. > > Плечо — DV01 позиции. > > Противовес — DV01 фьючерса. > > Равновесие — когда сумма DV01 всех позиций равна нулю.
И тогда задача управления облигационным портфелем сводится не к выбору "лучшей" бумаги по YTM, а к управлению совокупным DV01 портфеля в зависимости от вашего прогноза по ставкам. Хотите заработать на снижении ставок — наращиваете положительный DV01. Ожидаете роста ставок — сокращаете DV01 или делаете его отрицательным через фьючерсы. Ожидаете стабильности — стремитесь к нулевому DV01 и собираете купоны. Это уже не сравнение облигаций. Это управление риском.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
12.10.2026 10:37:01
Проверил DV01, но вначале аналогия (уж очень хороша):
Глава американского инвестиционного банка J.P. Morgan Деннис Уэзерстоун (Dennis Weatherstone). В конце 1980-х — начале 1990-х годов он потребовал от своей команды риск-менеджеров создать простой, понятный и консолидированный отчет, который бы умещался всего на одну страницу и лежал у него на столе каждый день ровно в 16:15 (через 15 минут после закрытия торговой сессии). Этот знаменитый запрос вошел в историю финансов как «Отчет 4:15» (4:15 Report). Уэзерстоун хотел видеть единую цифру совокупного риска по всем торговым подразделениям банка на случай "плохого дня" на рынке. Именно для выполнения этого требования команда J.P. Morgan разработала и внедрила систему Value at Risk (VaR), которая впоследствии стала общемировым стандартом оценки финансовых рисков. Уэзерстоуну требовался не ещё один аналитический показатель. Ему требовался инструмент, позволяющий руководителю увидеть риск всего банка и принять решение до того, как последствия рыночного движения станут фактом.
VaR стал показателем для управленческого контроля риска.
А что у нас? Что такое DV01 — Dollar Value of One Basis Point математически?
Показывает, на сколько рублей изменится стоимость позиции при изменении доходности на один базисный пункт (0,01%).
Формула: DV01 = Стоимость позиции × Модифицированная дюрация × 0,0001 Или развёрнуто: DV01 = N × P × Dmod × 0,0001 Где, - N — количество облигаций - P — цена одной облигации - Dmod — модифицированная дюрация
N × P — это и есть стоимость позиции. То есть количество и цена не работают по отдельности. Они объединяются в стоимость, а дюрация превращает эту стоимость в чувствительность.
DV01 превращает теоретическую конструкцию в работающий механизм. Это тот момент, где абстрактная дюрация, конкретные рубли и фьючерсный хедж соединяются в единую систему.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
11.10.2026 15:16:50
Nikolay,В вашем рассуждении есть ключевая идея, с которой не возможно спорить. Облигация — это не просто набор купонов и номинал к погашению. Это инструмент торговли будущей стоимостью денег. А ОФЗ, собственно и есть сами будущие деньги.
Цена же скорее реагирует не столько на событие, сколько на возможное изменение ожиданий относительно этого события. Ситуация с ОФЗ Очень показательна в настоящий момент, в моем портфеле есть значительные просадки в несколько %, руки "чешутся", но добирать еще рано. Мои рассуждения собственно вокруг этого строятся.
Но несколько утверждений требуют уточнения:
Вы пишете: "Покупая 238, вы ожидаете снижения ставки — рост тела. Но из-за длинной дюрации этот рост не будет столь сильным, как у более ближних выпусков". Наоборот. При одинаковом изменении рыночной доходности облигация с большей модифицированной дюрацией обычно изменяется в цене сильнее. Именно длинная дюрация усиливает ценовую реакцию, а не ослабляет её. Поэтому 26238 из моего примера, действительно интереснее как инструмент ставки на снижение рыночных доходностей, если остальные условия сопоставимы. Но этот рычаг работает в обе стороны.
"254 — это просто большой купон в моменте. Но рост тела будет ещё меньше, чем у 238, так как она без дисконта". Это не совсем так. Во-первых, 26254 тоже торгуется с дисконтом: 1000 − 822,51 = 177,49 ₽. Во-вторых, облигация дорожает при снижении рыночной доходности не потому, что куплена с дисконтом, а потому, что изменяется приведённая стоимость её будущих платежей. Ведь нельзя однозначно утверждать, что любой выпуск с большим дисконтом обязательно вырастет сильнее.
"Сравнение между разными сериями допустимо только в части расхождения по текущим параметрам, то есть арбитраж." Не соглашусь, Почему только арбитраж? Облигация и их относительная оценка. Вот где красота, здесь в полной мере проявляет себя мой структурно - монадный анализ. Да и просто, выбор процентного риска, который инвестор готов принять ради ожидаемого результата. Это не арбитраж.
с RGBI и хеджированием то же не все просто. RGBI представляет корзину государственных облигаций. ОФЗ 26238 и 26254 могут реагировать на изменение кривой доходности иначе, чем индекс. Поэтому возникает базисный риск. Кроме того, количество фьючерсных контрактов для хеджирования нужно рассчитывать скорее через чувствительность позиции к изменению доходности, а не просто через её стоимость. Для этого удобно использовать DV01. Так как показывает, на сколько рублей изменится стоимость позиции при изменении доходности на один базисный пункт. Это уже действительно механика рычагов и математических весов.
Первоначальная идея состояла в следующем: Есть фиксированный миллион рублей. Есть разные цены облигаций. Цена определяет количество. Количество умножает денежные потоки. Дюрация определяет чувствительность стоимости.
Но чего здесь не хватает? Ожидаемого изменения рыночной доходности. Оно превращает статическую модель в динамическую. Тогда можно записать результат вложения за выбранный горизонт (период владения) следующим образом:
Результат = Купонный доход + Изменение рыночной стоимости − Издержки и налоги.
Здесь появляется экономический смысл сравнения. Сравниваем не просто две облигации. Мы сравниваем две реакции капитала на один и тот же экономический сценарий. Именно так поступают в бизнесе. А главное, здесь появляется необходимость рассчитывать не только доходность, но и точку переключения между выпусками.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
10.10.2026 10:01:40
"Дайте мне точку опоры, и я переверну Землю" — высказывание принадлежит древнегреческому математику Архимеду.
Именно такой опоры не хватает в анализе эффективности, в классическом подходе. То есть, нет ответа на вопрос, а вокруг чего все вращается (крутится).
ПЕРЕОЦЕНКА ПО ДЕНЕЖНЫМ ПОТОКАМ ТКД, показывает что YTM не всегда прав, и полагаться только на него при выборе бумаг, не то чтоб опасно, скорее не оправдано. Все дело в том что здесь размер имеет значение.
Отвечая на первый вопрос инвестора из списка выше, задача сводится к расчету ДДС на вложенный капитал.
Пример. Допустим нужно разместить свободный 1 000 000 руб. посчитаем купонный ДЕНЕЖНЫЙ ПОТОК (ТДК).
Для простоты понимания возьмем две ОФЗ: 26238; 26254. Посмотрите на них, какая разница в оценках: купона, цены при близкой дюрации, обои относят к дальним.
Проблема классического подхода, YTM — это одно число, которое не с чем сравнить. Оно не говорит, перекуплена бумага или перепродана. YTM 16.5% — это много или мало? И ответ зависит от того, с чем сравнивать. Без точки опоры YTM — это просто число. Классический анализ говорит: "сравнивайте с другими бумагами". Но какие бумаги? С каким сроком? С каким рейтингом? Без ответа на эти вопросы — сравнение произвольно.
Нам нужен балансир, относительно которого всё измеряется, все проверяется.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
09.10.2026 09:35:46
Возникла необходимость, ребалансировки портфеля облигаций.
Основной вопрос любого инвестора, можно разбить на три ключевых: 1. Сколько получу на вложенный капитал? 2. На какой период? 3. Какой риск при этом возникает?
Облигация - это фиксированный поток денег. Это классические весы экономики, описывающие Законом Спроса / Предложения. Следовательно, облигации нужно рассматривать как механизм: весы, рычаги, шестерёнки. Здесь главные ВЕСЫ - Цена и Доходность. Главный закон механики облигаций, цена и доходность - на разных чашах весов. Если рыночные ставки растут, старый купон менее привлекателен, от сюда цена падает, чтобы компенсировать разницу. И наоборот.
Тогда, РЫЧАГ = Дюрация. Дюрация - это длина рычага, на котором сидит цена. Здесь интересно, Какая бывает? Виды дюрации: Тип Что измеряет Аналогия --------------------|-----------------------------------------------|------------------| Маколея Средневзвешенный срок получения денег Центр тяжести балки Модифицированная Чувствительность цены к изменению ставки на 1% Плечо рычага Эффективная То же, но для облигаций с опционами Рычаг с пружиной
Формулу рычага тогда запишем: ΔЦена ≈ −Мод. дюрация × ΔСтавка × Цена Линейный рычаг дюрации это лишь первое приближение. В реальность кривая - ПРУЖИНА — Выпуклость (Convexity). Почему Пружина? Функционально "подталкивает" цену вверх при падении ставок сильнее, чем дюрация предсказывает И "тормозит" падение при росте ставок.
Тогда можно записать первую - Шпаргалку по "настройке механизма" Хочу... Беру... Почему: Стабильность Короткая дюрация, высокий рейтинг Короткий рычаг, мало трения Макс. доход Длинная дюрация, высокий спред Длинный рычаг × обороты, но и риск Защиту от роста ставок Флоатеры, короткие ОФЗ Рычаг почти нулевой Защиту от инфляции Линкеры (ОФЗ-ИН) Номинал «раздувается» с CPI Баланс Лесенка погашений Распределяю нагрузку на разные опоры
Итого, три закона механики облигаций: Закон весов: Цена и доходность движутся в противофазе. Закон рычага: Дюрация умножает эффект изменения ставок. Закон пружины: Выпуклость нелинейно корректирует результат в нашу пользу.
Понимание этих трех элементов, дает понимание 90% механики облигационного рынка. А что же остальные 10% - это налоговые нюансы, опционы и кривая доходности, но это уже следующий уровень сборки.
Меня же интересовал несколько другой вопрос, а когда выгоднее (эффективней) продать, а когда докупить? На что опираться? Можно ли рассматривать облигацию как обычный торговый инструмент?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
05.10.2026 14:23:36
Цитата
Nikolay написал: Если речь про правую клавишу в окне, то да, это начиная с 8-ой версии так, если не путаю. Просьбы убрать - только регистрация пожеланий.
Благодарю, [QUOTE][Для тебя быть лишним третьим мне, Знать, навеки суждено/QUOTE]
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
05.10.2026 14:14:55
Nikolay, Если знакома и сталкивались, подскажите. Суть: Панель - окно робота есть активные ячейки (кнопки) для управления. При нажатии выскакивает подменю сортировка. Вопрос есть возможность отключить это подменю? Или это на всю жизнь?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
05.10.2026 14:14:11
VPM, Если знакома и сталкивались, подскажите. Суть: Панель - окно робота есть активные ячейки (кнопки) для управления. При нажатии выскакивает подменю сортировка. Вопрос есть возможность отключить это подменю? Или это на всю жизнь?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
03.10.2026 17:21:43
Nikolay, благодарю что заострили внимание, раньше даже не придавал внимания на сколько важена постановка учета.
Ошибка Multiple Lua VMs detected, Подключение программы OptionWorkshop к терминалу QUIK
Пользователь
Сообщений: Регистрация: 15.06.2023
03.10.2026 17:19:49
Зайдите в настройки пункт Основные Система / настройки / луа скрипты и зафиксируйте себе версию луа 3.3.5. Ни каких проблем.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
03.10.2026 09:33:44
Цитата
Nikolay написал: Я торгую уровни сетки. Последний открылся, первый закрылся. А что считает брокер меня не интересует, кроме его расчета налогов.
Все таки немного не понятно.
Позиция брокера и его расчет налогов — это FIFO, ваша внутренняя математика LIFO. Брокер обязан считать налоги и финансовый результат строго по методу FIFO, сталкиваясь с жесткой реальностью закона.
А вот как эта разница влияет на кошелек? И нужно ли расчет брокера все-таки учесть?
Попробую разобрать, в чем возникает конфликт (LIFO против брокерского FIFO)?
Когда торгуем сеткой на одном счете, для брокера все открытые лоты по одному инструменту — это одна общая позиция (или очередь из покупок). * логика (LIFO): купили по 100, потом по 90, потом по 80. Цена отросла до 90. закрываете сделку. считаете, что закрыли лот, купленный по 80, и забрали чистую прибыль (+10). * логика брокера для налогов (FIFO): При продаже в первую очередь спишется тот лот, который был куплен самым первым — то есть по 100. Брокер зафиксирует для налоговой убыток (-10), а не прибыль.
К чему это приводит на практике: 1. "Отложенный" налог. 2. Искажение финансового результата в моменте. Сверяя баланс в личном кабинете брокера и в своей торговой таблице, видим абсолютно разные цифры чистой прибыли и эквити (особенно на долгосрочных сетках).
Для сеточников, фьючерсы наверно гораздо удобнее, так как налог считается с общего итогового сальдо за день/год, и "зависших" старых цен покупки там просто нет.
Но если активно использовать этот подход на Акциях и Облигациях есть проблема?
Когда дело доходит до закрытия самых глубоких уровней, "себестоимость" оставшихся лотов в системе брокера, окажется очень низкой. В этот момент брокер посчитает огромную прибыль, и придется заплатить весь налог разом, в конце календарного года или при выводе средств.
Сюрпризики не из приятных?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Это зависит от алгоритма учета позиции. Я в основном торгую по LIFO, например. А брокер всегда считает по FIFO. Средняя - это для алгоритмов с единой ценой позиции, например чтобы стоп поставить от этого уровня. Но опять же она будет разная для разных режимов расчета по частичному закрытию.
Почему LIFO? не ну с брокером понятно. А LIFO почему пояснить можете. Ведь если много сделок может сильно расходится? Да и для расчета результатов, больше подходит средне взвешенная, ведь задача не склад контролировать. Или я чего то не до понимаю?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
02.10.2026 11:50:27
Цитата
Nikolay написал: Хотя, получать среднюю из терминала - это значит доверять расчетам по FIFO от брокера.Лучше рассчитывать среднюю по своим сделкам. Хранить эту информацию, чтобы всегда иметь возможность пересчитывать, рассчитывать прибыль и т.д.
Да, согласен. Это более правильная архитектура.
То, что я сделал с нормализацией 2994 -> 2.994, надо считать временной защитой/диагностикой, но не фундаментальным решением. Правильный вывод такой: скрипт не должен принимать временно кривые/неполные данные терминала как торговый сигнал и сразу переставлять заявки. Среднюю лучше считать самим, брать avrposnprice из getFuturesHolding() как основной источник средней — слабое место. Это удобно, но рискованно. То есть getFuturesHolding() должен быть не источником истины по средней, а проверкой.
Тогда встает вопрос, FIFO или средневзвешенная?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
02.10.2026 11:14:36
Nikolay, Согласен с Вами, все утро вспоминаю предупреждения поменьше связываться с колбэками терминальными.
Сама ситуация показывает, что во время обновления данных таблицы QUIK могут быть временно несогласованны: позиция есть; стоп уже исчез; обычные заявки уже появились; средняя цена может прийти в странном виде; класс может временно быть недоступен: Указанный класс не найден: "SPBFUT"
В такой момент скрипт должен не "героически восстанавливать", а уходить в защитное ожидание/паузу. Здесь как раз Ваш подход должен отрабатывать, использовать SearchItems как быстрый и безопасный способ искать в таблицах QUIK orders, stop_orders, trades свои заявки/стопы/сделки по нужным полям.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
02.10.2026 10:14:51
С утра веселюсь, "Ни когда не было, и вот опять".
Кто ни будь сталкивался с такой проблемой?
Проблема. QUIK утром отдал среднюю цену как 2994 вместо 2.994. Это опасно. В логе появилась ключевая строка. Средняя цена изменилась без изменения объема: 2.994 -> 2994 Скрипт решил, что средняя цена изменилась, и начал переставлять стоп. После этого пошли ошибки. ОШИБКА снятия стопа 1225338736: Указанный класс не найден "SPBFUT" Причина, sendTransaction() сразу возвращал ошибку, а StopManager не ставил паузу/backoff и пробовал снова каждые ~100 мс.
Как решил избавиться от проблемы, добавил нормализацию: 2994 -> 2.994 Теперь если avrposnprice приходит в масштабе без десятичной точки, скрипт сравнивает его с LAST/BID/ASK/старой средней и нормализует. Ожидаемый лог в такой ситуации, средняя цена QUIK нормализована: 2994 -> 2.994 И не должно быть ложного, Средняя цена изменилась без изменения объема: 2.994 -> 2994
Ничего лучшего не пришло в голову. Да и предположить такие ошибки сложно. Потеря разряда ( в моем случае одной точки) переводит цену в 1000 раз. Радует одно что размер позиции крошечный стоял.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
18.09.2026 16:16:09
Как всё на свете помнит друг друга, или Просто о сложном.
Вместо предисловия. Если когда-нибудь задумывались, Почему рынок иногда "чувствует" приближение кризиса? Почему дерево "помнит", как расти, даже если его никто не учил? почему пирог всегда вкуснее, если печь его по старому рецепту? Ответ прост, всё на свете обладает памятью. Не только люди и животные. Память есть у клеток, у рынков, у атомов и даже у чисел. Просто мы привыкли называть это по-разному: "опыт", "интуиция", "цикл", "закон природы".
Эта статья — о том, как устроена эта всеобщая память и как её можно измерять. Поытка объяснить всё простыми словами. Так, чтобы было понятно и школьнику, и бабушке.
Часть 1. Абсолютное и относительное: почему нельзя сравнивать яблоки с апельсинами Представьте, что у вас есть два рынка. На одном продают яблоки, на другом — апельсины. На первом за день продали 100 яблок, на втором — 1000 апельсинов. Что больше? Апельсинов, конечно. Но говорит ли это о том, что второй рынок "сильнее"? Не обязательно. Может, яблоки просто дороже, или их меньше выращивают. Вот в чём проблема: абсолютные числа обманчивы. 100 яблок и 1000 апельсинов — это как 100 рублей и 1000 долларов. Числа разные, а ценность может быть одинаковой. Поэтому умные люди давно придумали относительные величины. Вместо "сколько" они смотрят "какую долю составляет". Например, если на рынке 100 яблок и 50 апельсинов, то доля яблок — 100/(100+50) = 2/3. А доля апельсинов — 1/3. И неважно, 100 это или 1000. Соотношение остаётся тем же.
Но тут есть подвох. Если мы просто берём долю, мы теряем масштаб. Рынок на 100 яблок и рынок на 1000 яблок будут выглядеть одинаково, если соотношение яблок и апельсинов одно и то же. А это неправильно — большой рынок и маленький рынок ведут себя по-разному.
Поэтому нужно хранить две вещи одновременно: - положение (какую долю занимает каждая часть), - масштаб (насколько велик весь "пирог").
В математике это записывается просто. Если у нас есть две величины A и B, то: - положение: p = A / (A + B) - масштаб: s = A + B И тогда A = p * s, а B = (1 - p) * s. Всё сходится, ничего не потеряно.
Это как с пирогом: можно сказать, что одна часть пирога — вишнёвая, а другая — яблочная (положение). Но важно ещё, насколько велик сам пирог (масштаб). Маленький пирог на двоих и большой пирог на компанию — это разные вещи.
Часть 2. Волшебство логарифмов или почему рост лучше измерять "во сколько раз", а не "на сколько"
Теперь представьте, что у вас есть 100 рублей. Через год у вас 200. Это рост на 100 рублей. А если у вас было 1000 рублей и стало 1100? Тоже рост на 100 рублей. Но в первом случае вы удвоили капитал, а во втором — лишь немного увеличили.
Как это сравнить честно? Ответ, смотреть не на разницу, а на отношение. 200/100 = 2. 1100/1000 = 1.1. Вот это уже честное сравнение. Первый рост в 2 раза, второй — в 1.1 раза.
И вот он фокус. Если мы возьмём логарифм от отношения, произойдёт чудо. Логарифм превращает умножение в сложение. ln(2) = 0.69. ln(1.1) = 0.095. И если у вас несколько периодов роста, их логарифмы просто складываются.
Это как с процентами в банке. Если у вас вклад растёт на 10% в год, то за 10 лет он вырастет не на 100%, а в 1.1^10 ~ 2.59 раза. Логарифм помогает это считать удобно. Поэтому логарифмическая мера роста — это самый честный способ сравнивать, как меняются разные вещи. Не "на сколько", а "во сколько раз". И логарифм делает это "во сколько раз" удобным переводит мутипликативную операцию в аддитивную.
Часть 3. Круг времени или почему у всего есть фазы. Вы замечали, что всё в природе повторяется? Зима, весна, лето, осень — и снова зима. День, ночь, день, ночь. Приливы и отливы. Это называется цикличностью. И у каждого цикла есть фаза — то, в какой точке круга мы находимся. Если представить год как круг, то январь — это начало, апрель — четверть, июль — половина, октябрь — три четверти. И в декабре мы снова возвращаемся в начало. В математике это описывается просто, фаза измеряется в радианах, от 0 до 2pi. И 2pi — это тот же самый 0, только на новом витке. Теперь интересная мысль, память можно привязать не ко времени, а к фазе. Обычная память говорит: "Год назад в это время было то-то". А фазовая память говорит: "В прошлом году на этой же фазе цикла было то-то". Это разные вещи, и вторая часто полезнее. Представим, что мы печем пироги. Обычная память: "В прошлый вторник пирог подгорел". Фазовая память: "На стадии, когда тесто подходит, нужно убавить огонь". Второе важнее.
Часть 4. Зеркало или противоположная фаза. Если у нас есть круг, то у каждой точки есть противоположная. Если стоите на 3 часах, напротив — 9 часов. Если фаза пи/2, напротив — 3пи/2. В математике это называется зеркальным отражением: R(фи) = фи + пи. И вот что интересно, если применить зеркало дважды, мы вернёмся в исходную точку. R(R(фи)) = фи + 2пи -> фи. Это называется инволюцией — операция, которая сама себе обратна. Что это значит для памяти? Что у каждого состояния есть комплементарное состояние. И если мы помним одно, мы можем предсказать или востановить другое. Представим рычажные качели. Если одна сторона вверху, другая — внизу. Это не независимые состояния, а две стороны одного процесса. Память об одном положении автоматически даёт информацию о другом.
---
Часть 5. Память как последовательность изменений или соберём всё вместе. Обычная память хранит значения. "Вчера цена была 100, сегодня — 110". Умная память хранит отношения. "Цена выросла в 1.1 раза". И ещё умнее — хранит последовательность отношений. "Сначала выросла в 1.1 раза, потом упала в 0.95 раза, потом выросла в 1.2 раза". Это как генетический код. В ДНК записана не сама жизнь, а инструкция, как её строить. Так и здесь, в памяти хранится не состояние, а траектория — как мы пришли к этому состоянию. И когда мы хотим сравнить две разные ситуации, мы сравниваем не абсолютные значения, а относительные структуры. Траектория "1.2 > 0.8 > 1.4" и траектория "120 > 80 > 140" — это одна и та же структура, просто в разных масштабах.
Часть 6. Три вида меры, или нужно разделять: длину, ширину и площадь. Пожалуй подошли к главному. Когда что-то измеряем, мы должны понимать, что именно измеряем? Есть три разных типа меры, и их нельзя путать. Первый тип: абсолютная мера. Сколько? 100 рублей, 50 яблок, 3 метра. Второй тип: относительная мера. Какая доля? 2/3, 50%, 0.8. Третий тип: инвариантная мера. Что остаётся неизменным, если мы меняем точку зрения?
Третий тип — самый интересный. Представьте, что смотрите на картину. Можно отойти дальше, можно наклонить голову. Изображение меняется. Но есть вещи, которые не меняются — например, соотношение расстояний между персонажами. Это и есть инвариант. В математике самый известный инвариант — двойное отношение (cross-ratio). Если есть четыре точки на прямой, их двойное отношение остаётся одинаковым, как бы вы ни растягивали и ни сжимали прямую. Это как если бы был волшебный рецепт, сколько бы мы ни увеличивали порции, соотношение муки, воды, соли и сахара остаётся тем же. И это соотношение — самая важная информация о рецепте.
Часть 7. Почему нельзя просто всё сложить, в качестве предостережения. Когда у нас много разных измерений — цена, объём, волатильность, ликвидность — возникает соблазн просто сложить их в одну кучу. Но это ошибка. Нельзя складывать метры с килограммами. Нельзя складывать рубли с процентами. Правильный путь такой: 1. Сначала нормировать каждую величину — привести к безразмерному виду. 2. Потом учесть корреляции — если две величины всегда движутся вместе, это одна информация, а не две. 3. И только потом строить метрику — способ измерять расстояние между состояниями. Для этого есть специальный инструмент — расстояние Махаланобиса. Оно учитывает и масштаб, и корреляции. Это как если бы вы измеряли расстояние между городами не по прямой, а по дорогам, с учётом пробок и качества покрытия. И ещё одно - важно, сама мера может меняться со временем. Рынок сегодня не такой, как вчера. Поэтому и "линейка" должна адаптироваться. Но адаптироваться медленнее, чем меняются данные, иначе мы будем измерять шум, а не сигнал.
Часть 8. Вся картина целиком или алгоритм сборки. Соберём всё в одну простую схему. 1. Сырые данные — то, что мы наблюдаем: цены, объёмы, спрос, предложение. 2. Измерение — приводим к относительным величинам, считаем доли и масштабы. 3. Логарифмирование — превращаем умножение в сложение, чтобы сравнивать рост честно. 4. Фаза — определяем, где мы находимся на цикле. 5. Зеркало — смотрим на противоположную фазу, чтобы увидеть комплементарное состояние. 6. Память — храним последовательность отношений, а не абсолютных значений. 7. Метрика — измеряем расстояние между состояниями с учётом корреляций. 8. Инвариант — ищем то, что не меняется при преобразованиях. 9. Обратная связь — мера сама зависит от состояния, и это нужно учитывать.
И всё это вместе — не просто набор чисел, а живая геометрия, которая дышит, помнит и предсказывает! --- Заключение или ответ на вопрос, зачем всё это? Может возникнуть вопрос, зачем такие сложности? Не проще ли просто смотреть на графики и "чувствовать" рынок? Проще. Но неточно. Вся эта конструкция нужна для того, чтобы: - честно сравнивать разные рынки и разные периоды, - видеть циклы там, где раньше был хаос, - помнить структуру, а не только значения, - измерять расстояние между состояниями, - находить инварианты — то, что остаётся неизменным. Это как перейти от наблюдения за погодой к настоящей метеорологии. Можно всю жизнь смотреть в окно и говорить "кажется, будет дождь". А можно понимать, почему он будет, и предсказывать его заранее. А самое главное, эта наука — о памяти — применима не только к рынкам. Она применима к чему угодно. К лечению болезней, к обучению детей, к построению общества. Везде, где есть прошлое, настоящее и будущее, есть и память. И везде её можно измерять и понимать. Вот такая простая наука о сложных вещах. Надеюсь, что даже бабушка поняла. А если нет — пусть перечитает ещё раз, за чаем с пирогом. Пирог-то она помнит, как печь. А это и есть генная память в действии.
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
Пользователь
Сообщений: Регистрация: 15.06.2023
16.09.2026 18:40:47
Еще раз благодарю Вас за пример и просвещение. Меня собственно заинтересовало, возможность получить дополнительный вывод. Для не большого скрипта - стохастический генератор Monte Carlo generator (WinRate + ProfitFactor Lua 5.4). Используемый для проверки гипотезы. Но мне нужен переход от генератора результатов к симулятору позиции. Отличие принципиальное: Mодель генератора: Trade -> Result Новая: State(t) -> Price \ Path -> Position -> Exit -> Capital. То есть сделка становится процессом, а не точкой. Ну и соответственно вывод со сменой входящих параметров. Надеюсь не запутал? Подходит под подобную задачу?
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
Пользователь
Сообщений: Регистрация: 15.06.2023
16.09.2026 17:31:47
То есть если я правильно понимаю, контроль за роботом (Вашей самопиской) в окне МАХ? А во сколько можно оценить потерю во времени прохождения команды? Ну хотя бы примерно ведь наверно задавались данным вопросом. Если можно продемонстрируйте картинкой.
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
Пользователь
Сообщений: Регистрация: 15.06.2023
16.09.2026 16:52:24
Спасибо,Евгений, для тех кто не в теме и для меня лично, поясните, а зачем все эти премудрости? Что это дает? и А каком приводе идет речь, типа Бондаря для скальпинга?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
07.09.2026 17:06:30
Здесь появился очень глубокий слой, судите сами.
Связь точки бифуркации > постоянной Фейгенбаума > гармонических отношений > "окна порядка" естественно возникает в модели. Но нужно четко учитывать и разделять, где строгая математика, а где рабочая гипотеза для рыночной модели.
1. Бифуркация и постоянная Фейгенбаума. В классической теории нелинейной динамики рассматривается, логистическое отображение (x{n+1} = r * xn * (1-xn)) При увеличении параметра ® система проходит каскад удвоения периода (1 -> 2 -> 4 -> 8 -> 16...) Интервалы между бифуркациями, Delta_n уменьшаются. И отношение, Delta_n / Delta_{n+1}} стремится к delta = 4.669201609... Это означает, несмотря на хаотичность поведения, структура переходов имеет масштабную закономерность.
2. Перенос в модель. Теперь посмотрим на рынок. Есть состояния (S_0,S_1,S_2,...) и переходы( S_i-> S_j) Обычно рассматривают P(S_i -> S_j) как вероятность. Но теперь можно рассмотреть расстояние между переходами. Например: (tau_1, tau_2, tau_3...). То есть получить ответы на вопросы: не только "какое состояние?", а "через какой масштаб времени система переходит?" (Возможно это искали классики технического анализа, определяя время как параметр системы? Например квадрат Ганна?)
3. "Окно порядка". Вот здесь очень интересная идея. В теории сложных систем есть понятие, система может находиться между: * жёстким порядком; * полным хаосом. Это область - Edge of Chaos. Именно там часто возникает максимальная адаптивность. Состояние не полностью фиксировано, Entropy approx 0; но и не хаотично, Entropy approx 1; А, 0 < Entropy < 1.
Критическое масштабирование. Постоянная Фейгенбаума. Нам не нужно использовать число, 4.669 как прямой индикатор. Это было бы неправильно. Но можем использовать идею: "интервалы переходов могут иметь структуру масштабирования". Например: изменение состояния наблюдается: tau_1, затем tau_2, затем tau_3. И исследуем возьмем отношение (R_n=tau_n / tau_{n+1}). Если R_n стабилен, есть скрытая временная структура!
7. Возникает вопрос: возможны гармонические отношения? Расширяем понятие не только золотое сечение phi=1.618, а несколько типов масштабирования: а) Геометрическое: phi б) Критическое: delta=4.669 в) Двоичное: 2^n г) Временное: T_n / T_{n+1} В модели они должны отвечать за разные слои.
Предварительный вывод - гипотеза выглядит так:
> Рынок перед переходом может входить в окно порядка, где внутренние циклы разных масштабов начинают гармонизироваться. Бифуркация является не случайным скачком, а выходом накопленной структуры через критическое фазовое состояние.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
02.09.2026 22:04:15
Размышление дилетанта или мысли вслух, просто о сложном. Математика, Уравнение, которое меняет взгляд на мир - рекуррентные уравнения, бифуркации, множество Мандельброта, хаос и конечно гармония.
В плоскости рыночных отношений "уравнением, меняющим взгляд на мир", является логистическое отображение (уравнение Ферхюльста), перенесенное в экономику. Оно связывает простые правила спроса, предложения и конкуренции с фрактальной структурой рынков и непредсказуемым детерминированным хаосом. ------------------------------ От баланса к хаосу или Логистическое уравнение на рынке. В классической экономике считается, что рынок стремится к равновесию. Но если добавить в модель нелинейную обратную связь (когда текущие прибыли или цены жестко определяют объемы производства в следующем периоде), мы получаем динамическую систему:
X{t+1} = r * Xt * (1 - Xt) где, * Xt — текущая доля рынка компании (или уровень цен), от 0 до 1. * r — "темп роста" или коэффициент агрессивности рынка (скорость реакции инвесторов, маржинальность, доступность кредитного плеча). * (1 - Xt) ограничение. Если мы начнем менять параметр r, поведение рынка пройдет через те же стадии, что и популяции в биологии или турбулентность в физике или вообще где угодно что угодно. ------------------------------ Сценарий перехода к рыночному хаосу. При наращивании темпов автоматизации, скорости торгов (HFT) и кредитного плеча ® рынок претерпевает каскад удвоения периодов (сценарий Фейгенбаума Статья "Что скрывается за постоянной Фейгенбаума" 1. Стабильное равновесие (r < 3.0): Рынок предсказуем. Инновация или цена находит свою справедливую стоимость и замирает на ней. 2. Бифуркация и циклы (3.0 < r < 3.57): Происходит расщепление. Цена начинает колебаться между двумя значениями (сезонность, циклы "взлет-падение"). Затем между четырьмя, восьми и так далее. Появляется регулярная рыночная волатильность. 3. Точка хаоса (r > 3.57): Наступает детерминированный хаос. Динамика цен выглядит абсолютно случайной (белый шум), но она порождена строгим математическим правилом. Предсказать цену на долгий срок становится невозможно из-за "эффекта бабочки" (чувствительности к начальным условиям). Отношения между интервалами - Постоянная Фейгенбаума и равняется примерно 4,6692016... "И она с завидной периодичностью возникает в определённых видах математических – и физических – систем, способных демонстрировать хаотичное поведение". ------------------------------ Множество Мандельброта и фрактальные рынки. Бенуа Мандельброт — "отец" фрактальной геометрии — пришел к ней благодаря анализу рыночных цен на хлопок. Если классическая финансовая теория (модель Блэка-Шоулза) утверждает, что колебания цен распределены нормально ("колокол" Гаусса), то Мандельброт доказал обратное, рынки фрактальны, и им свойственны "толстые хвосты" распределения (крупные кризисы происходят в миллионы раз чаще, чем предсказывает классическая теория). * Графики цены Самоподобны, за интервал 5 минут, 1 день или 10 лет выглядит структурно одинаково. * Как во множестве Мандельброта есть зоны порядка среди хаотичных узоров Окно стабильности внутри хаоса. Так и на рынке периоды дикого хаоса (паника, обвалы) сменяются локальными трендами, которые подчиняются строгим рекуррентным законам. Математика роста цены - степенное уравнение, тогда о какой нормальности Гаусса, вообще может идти речь? Особенно нравится когда к самой цене применяется стандартное отклонение и утверждается обязательность установки стопов соразмерных Сигма. Верх современного финансового образования или маркетинг с родни обману? ------------------------------ Как это все меняет взгляд на экономику и трейдинг в частности: 1) Кризисы — это норма, а не аномалия. 2) Черные лебеди (по Нассиму Талебу) заложены в саму геометрию нелинейного рынка. 3) Оптимизировать систему впритык без резервов — математическое самоубийство (см. работы Ральфа Винса). 4) Иллюзия контроля. Усложнение торговых алгоритмов и повышение скорости обмена информацией не стабилизируют рынок, а повышают параметр r, толкая систему глубже в зону бифуркаций и непредсказуемых мгновенных обвалов.
------------------------------ В своей работе Анатолий Федорович Черняев "Золото Руси", посвященная золотым пропорциям в системе древнерусских измерительных инструментов, отражена концепция "Русских саженей" (древнерусской системы мер и соразмерностей), подход ложится в эту картину идеально. С точки зрения теории хаоса, Черняев нащупал тот же самый принцип, но подошел к нему не со стороны рыночного хаоса, а со стороны живой архитектурной гармонии. Если логистическое уравнение на рынке показывает, как нелинейность порождает разрушительный хаос, то система Черняева показывает, как та же нелинейность и фрактальность создают устойчивую, живую биосферу и архитектуру. Взгляд на систему Черняева через призму рекурсии, бифуркаций и фракталов раскрывает глубокие параллели. Древнерусская система, по Черняеву, основана на рекуррентных числовых рядах (включая ряды Фибоначчи и их модификации), где каждый следующий шаг соразмерен предыдущему через иррациональные коэффициенты (золотое сечение (phi = 1.618), золотой вурф и т.д.). В рынке рекурсия (X{t+1} = f(Xt)) связывает прошлое и будущее, создавая фрактал цены. В саженях Черняева рекурсия связывает малые размеры (вершок, пядь) с большими (сажень, поприще), создавая фрактал пространства. Черняев воссоздал матрицу саженей как "окно порядка" во множестве Мандельброта. Во множестве Мандельброта среди абсолютного хаоса внезапно возникают идеальные "островки порядка" — миниатюрные копии самого множества. Система Черняева — это и есть такой островок порядка. В логистическом уравнении рынка при росте параметра ® система идет вразнос (бифуркации ведут к хаосу). Живая природа решает эту проблему иначе, она использует точки бифуркации для разветвления и усложнения структуры, сохраняя внутреннюю гармонию. Черняев утверждает, что древнерусские зодчие интуитивно знали законы качественных переходов (бифуркаций). Переход от одной сажени к другой — это не просто увеличение размера, это переход на новый фрактальный уровень. В экономике такой переход без регулирования вызывает кризис, а в древнерусском зодчестве — порождал пропорции, в которых человеку комфортно (так как органы чувств и ритмы мозга сами фрактальны и работают на частотах золотого сечения).
Если рыночный хаос — это пример того, как нелинейность разрушает баланс, то "русская матрица саженей" Черняева — это пример того, как древняя инженерия использовала те же нелинейные законы Вселенной, чтобы укротить хаос и превратить его в гармонию. Прошу прощения за столь длинные изложения, но короче не скажешь, а уникальных идей озвучено в одном посте множество. Отсюда возникает новая запись волнового уравнения, и много еще всяких чудесных вещей.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
02.09.2026 13:47:20
Для типичного робота на QLua полноценный WAL почти наверняка избыточен. Наш случай — это, скорее всего, однопоточное приложение с низкой нагрузкой, где главное — простота и надежность, а не производительность на грани возможностей.
Почему WAL избыточен для QLua-робота? Давайте попробуем разобраться, почему это так, и что можно использовать вместо этого.
Среда выполнения, QLua-скрипт работает внутри процесса QUIK. Это не автономный высоконагруженный сервер баз данных, а, по сути, "макрос", который выполняется в одном потоке. Основная задача обычно заключается, Роботу нужно сохранять небольшой объем данных: историю сделок; текущую позицию; рассчитать эффективность системы; настройки. Для этого не требуется сложный протокол с LSN и восстановлением на момент времени (PITR). Реализация слишком накладная, была бы тяжеловесна для QLua.
Когда же WAL может быть оправдан? WAL полноценный имеет смысл рассматривать в исключительных случаях: а) Критичность данных. Торгуете огромными объемами, и потеря даже одной сделки или одного тика из-за сбоя QUIK недопустима. б) Аварийное восстановление. Нужно гарантированно восстановить состояние робота до последнего действия в случае внезапного выключения питания. с) Высокая нагрузка. Робот (или Роботы) обрабатывает тысячи событий в секунду, и стандартный подход с открытием/закрытием файла на каждое действие становится узким местом.
Если ни один из этих пунктов не про нашу задачу (а так оно, скорее всего, и есть), то WAL — это ненужное усложнение. Альтернативы проще, вместо изобретения WAL в QLua есть проверенные и более простые решения, которые отлично работают на практике. Для 99% задач QLua-робота хватит одного из этих подходов:
1. Самый распространенный способ. Стандартные Lua-файлы (io library): Можно открыть файл в режиме "a+" (дописывание) и добавлять в него новые строки. Это дает простой журнал событий. Сохранение настроек и состояния: Для хранения структурированных данных (например, текущей позиции или настроек) удобно использовать формат CSV или сериализовать таблицу Lua в текст и обратно.
2. Использование внешней БД: Если данных становится очень много и нужны сложные запросы, можно подключиться к внешней SQLite или MySQL базе. Это даст транзакционность и целостность данных, но потребует установки драйверов. Это не мой подход скорее управляющего большим количеством портфелей и рассмотрению в моем случае не подлежит.
Особый случай, хранение на случай восстановления системы, ведение своей "бухгалтерии Товарно - Денежных отношений"; И своем МЕО, склоняюсь к самостоятельному, независимому, универсальному сервису, на базе событийного логирования с элементами WAL?
Ошибка в официальном описании хелпа, «cbp_prev_limit NUMBER Предыдущий лимит открытых позиций на спот-рынке»
Пользователь
Сообщений: Регистрация: 15.06.2023
31.08.2026 13:08:45
Опять опечатка в документации. firmid NUMBER Код фирмы
getClassInfo Функция предназначена для получения информации о классе.
TABLE getClassInfo (STRING)
Возвращает таблицу Lua, содержащую описание класса:
Параметр Тип Описание firmid NUMBER Код фирмы name STRING Наименование класса code STRING Код класса npars NUMBER Количество параметров в классе nsecs NUMBER Количество инструментов в классе
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
31.08.2026 09:35:14
Учёт и Контроль.
"Решающим является организация строжайшего и всестороннего учёта и контроля за производством и распределением продуктов. ..." из работы "Очередные задачи советской власти" написана 1918 году Ленин Владимир Ильич.
Вновь и вновь встает этот вопрос Учёт и Контроль. Что уже только не делал. Писал собственный учет, брал сторонние разработки, а "Воз и ныне там" снова возвращаюсь к вопросу.
Все дело в том что учет сделок в QUIK, носит тактический характер, хранится в течении торгового дня (сессии). Стратегический учет отдан на уровень брокера, который по результатам определенного периода формирует отчеты. Но трейдеру необходим оперативный учет на обоих уровнях? Вот здесь и начинаются "пляски с бубнами"!
Посмотрел как это устроенно в профессиональных кругах. Основной подход Профи, используют архитектуру OMS/PMS (Order & Portfolio Management System) на базе событийного логирования WAL (Write-Ahead Logging).
В моей интерпретации получилось: Каждая сделка на бирже — это квант энергии. Изменение позиции — это изменение геометрии фазового пространства. Тогда TWR (Terminal Wealth Relative) — это главный маркер доминирования системы над рыночным хаосом. (Ральф Винс "Новый подход к управлению капиталом").
Как все устроено у профи, учет позиций, денег и TWR? Институциональный PMS-слой работает на трех связных инвариантах: При увеличении позиции (Набор лотов / Дозакупка сетки). Применяется метод VWAP (Volume-Weighted Average Price — средневзвешенная цена объема). Новая средняя цена позиции рассчитывается в деньгах, учитывая стоимость шага цены (srate) и уплаченную комиссию (FEE) или в пунктах по формуле:
Где Worst_Loss_Capital_Rub — это емкость залога ГО, выделенная под сделку для Фьючерсов.
Что получftv в финале:
Рост TWR выше 1.0 доказывает, что геометрия Октантов Куба Ли выбрана верно. Тотальный контроль эффективности, ушли от примитивного отслеживания баланса. Теперь в реальном времени рассчитывается чистый геометрический Рост TWR Винса. Если значение растет (1.0134 > 1.0250) — это математическое доказательство того, что робот эффективно забирает деньги с рынка. Автоматический WAL-журнал. Каждая фиксация лотов по Тралу или Тейку автоматически заносится в лог на жестком диске с точной фиксацией даты, времени, пунктов и полученных рублей.
То есть, полностью реализованный контур определения эффективности и перетока денег. Или?
Ошибка в официальном описании хелпа, «cbp_prev_limit NUMBER Предыдущий лимит открытых позиций на спот-рынке»
Пользователь
Сообщений: Регистрация: 15.06.2023
18.08.2026 16:33:23
Oleg Kuzembaev, Добрый день. Мое сообщение не про ошибку, ну была ошибка рано или поздно без меня исправили бы. Я описал почему нельзя пользоваться данным параметром. И интересует мнение разработчиков как им пользоваться, и скольких пользователей оно еще заведет в заблуждение. Можете прокомментировать?
Ошибка в официальном описании хелпа, «cbp_prev_limit NUMBER Предыдущий лимит открытых позиций на спот-рынке»
Пользователь
Сообщений: Регистрация: 15.06.2023
18.08.2026 16:15:58
Покажи, "разжуй в рот положи ": Руководство пользователя QLua Версия 12.8.
Код
Ограничения по клиентским счетам
Описание параметров фьючерсного лимита (таблица «Ограничения по клиентским счетам»):
Параметр Тип Описание
firmid STRING Идентификатор фирмы
trdaccid STRING Торговый счет
limit_type NUMBER Тип лимита. Возможные значения:
«0» – «Денежные средства»;
«1» – «Залоговые денежные средства»;
«2» – «По совокупным средствам»;
«3» – «Клиринговые денежные средства»;
«4» – «Клиринговые залоговые денежные средства»;
«5» – «Лимит открытых позиций на спот-рынке»;
«6» – «Суммарные залоговые средства в иностранной валюте (в рублях)»;
«7» – «Залоговые средства в иностранной валюте»
liquidity_coef NUMBER Коэффициент ликвидности
[B]cbp_prev_limit NUMBER Предыдущий лимит открытых позиций на спот-рынке» [/B]
Нужно просто проглотить. Это та часть которая в водит в заблуждение, но ни сколько не отменяет абсурдность самого поля (см. пост выше)?
Ошибка в официальном описании хелпа, «cbp_prev_limit NUMBER Предыдущий лимит открытых позиций на спот-рынке»
Пользователь
Сообщений: Регистрация: 15.06.2023
18.08.2026 12:47:28
Ошибка в официальном описании хелпа (Важнейший нюанс!) Обратите внимание на цитату из руководства: «cbp_prev_limit NUMBER Предыдущий лимит открытых позиций на спот-рынке»
В Си-структуре фьючерсов (getFuturesLimit) разработчики ARQA Technologies допустили текстовую опечатку в документации. Фьючерсы — это срочный рынок (FORTS), а не спот-рынок (рынок акций). Казалось бы ну есть опечатка и ладно, кто не ошибается. но дело обстоит куда более сложнее под лозунгом: "кому что в голову взбредет?". Судите сами. Это известная документационная и архитектурная нестыковка в API ARQA Technologies (QUIK), которая действительно вводит в заблуждение многих разработчиков и трейдеров.
Из-за архитектурных настроек некоторых брокеров в это поле для фьючерсов транслируются либо некорректные данные, либо лимиты единого денежного пула (если подключен ЕЛС — единый лимит брокера), которые учитывают купленные физические акции, что вообще не имеет отношения к гарантийному обеспечению торгуемого фьючерса.
1. Факт ошибки в документации, в help к структуре getFuturesLimit поле cbp_prev_limit описано как «Предыдущий лимит открытых позиций на спот-рынке». Это текстовая опечатка, оставшаяся с версий, когда структуру копировали из спотового API (getPortfolio)? По логике getFuturesLimit все поля относятся к срочному рынку (FORTS).
2. Почему туда попадают «неправильные» данные (ключевой нюанс) - архитектурная проблема? Значение в этом поле зависит не от логики QUIK, а от того, как брокер настроил транслирование лимитов через свой шлюз: Вариант А (классика FORTS): Поле должно содержать предыдущий лимит по фьючерсам (аналог cbp_prev_limit для спота). Но многие брокеры забивают его нулём или дублируют cbp_limit. Вариант Б (Единый Лицевой Счет — ЕЛС): Если у брокера включен ЕЛС (объединённая денежная позиция по споту и срочке), то в это поле может транслироваться остаток денежных средств с учетом проданных акций из спотового портфеля. Это делается для кросс-маржинга, но к ГО (гарантийному обеспечению) конкретного фьючерса это не имеет никакого отношения.
Вывод. Опираться на cbp_prev_limit для расчета маржи или доступного плеча по фьючерсам — категорически нельзя. Резюме. Обнаружена не просто опечатку, а индикатор того, что это поле ненадёжно. Для фьючерсов лучше брать cbp_limit и Реальный размер списанного гарантийного обеспечения по вашим фьючерсным позициям, а про cbp_prev_limit нужно вообще забыть — даже если брокер его заполнит, трактовать его как "предыдущий лимит именно по фьючам" нельзя.
Ну и конечно это - Сообщение в техподдержку ARQA, QUIK (13.0.2.20).
SearchItems, Вложенные таблицы
Пользователь
Сообщений: Регистрация: 15.06.2023
16.08.2026 15:14:59
Если правильно понял. Можно попробовать передачу через Замыкание Lua функции. Если объявить функцию обратного вызова fn прямо внутри кода, она автоматически видит и захватывает все локальные переменные, объявленные выше неё. Допустим стратегия календарного арбитража должна найти в системной таблице сделок QUIK ("trades") все записи, которые принадлежат конкретным кодам инструментов из вложенного массива legs.lua
Код
-- Исходная вложенная структура в ОЗУ робота
local my_portfolio = {
securities = {
legs = {
[1] = { sec_code = "SVU6" }, -- Ближний фьючерс
[2] = { sec_code = "SVZ6" } -- Дальний фьючерс
}
}
}
function FindArbitrageTrades()
-- 1. Вытаскиваем элементы в локальные переменные (создаем замыкание)
local code_leg1 = my_portfolio.securities.legs[1].sec_code
local code_leg2 = my_portfolio.securities.legs[2].sec_code
-- 2. Определяем функцию обратного вызова fn
-- QUIK будет передавать в неё каждую сделку из хранилища терминала
local function filter_callback(trade_item)
-- Функция видит переменные code_leg1 и code_leg2 из внешнего контекста!
if trade_item.sec_code == code_leg1 or trade_item.sec_code == code_leg2 then
return true -- Элемент удовлетворяет условию, сохраняем его индекс
end
return false
end
local total_items = getNumberOf("trades") or 0
if total_items == 0 then return nil end
-- 3. Вызываем SearchItems. Строку params не задаем, элемент передается полностью
local found_indices = SearchItems("trades", 0, total_items - 1, filter_callback)
return found_indices -- Возвращает таблицу с индексами найденных сделок арбитража
end
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
06.08.2026 17:21:38
Начну с конца, ответив, казалось бы на вечный философский вопрос, "Что первично? Курица или Яйцо?". Объективный ответ первичен - ЗАКОН СОХРАНЕНИЯ! Первичен не объект, а закон сохранения! Просто посмотрим на это с другой стороны, как на два взаимно дополнительных потока единой системы. Если это принимается, тогда все становится по своим местам. Сейчас покажу по чему это понимание не просто важно, а носит фундаментальный закон.
Как появляются события? Берём два состояния S(t) -> S(t+dt) => Разность Delta S Если изменение достаточно большое, рождается Событие (Event). Например Trend UP v DOWN рождает TREND_REVERSAL. Или Risk 0.42 v 0.91 рождает RISK_LIMIT_EXCEEDED. То есть Event становится не причиной, а именем перехода между двумя состояниями. Это гораздо ближе к теории автоматов.
С этой точки зрения, куб становится совершенно понятным. Теперь видно его место. Куб — это не пространство рынка. Куб — это дискретизация пространства состояний. То есть State -> Cube(State) Например непрерывное состояние Momentum = 0.83, Entropy = 0.28, Liquidity = 0.71 - после квантования 101. Именно поэтому куб не первичен. Он является измерительным прибором. Как АЦП (аналогово-цифровой преобразователь).
Но если посмотреть глубже, возникает вопрос: > А существует ли вообще Event как самостоятельная сущность? На мой взгляд — нет. В физике не существует "событий". Существует только непрерывная эволюция состояния. Событие появляется только тогда, когда наблюдатель говорит: > "Вот здесь произошло нечто существенное." То есть Event = Delta State или точнее Event = f(Delta S) где Delta S = S(t+Delta t) - S(t) Следовательно, Event — не первичный объект. Он производный. То есть событие рождается после построения состояния, а не до него. Event исчезает как фундаментальная сущность.
Принцип двойственного потока, то, что сформулировал про капитал: Д_0 -> Т -> Д_1 и Т_0 -> Д -> Т_1 оказалось не просто экономикой. Это универсальный закон управления. Любая система имеет два взаимосвязанных потока. Первый поток — информационный. Он отвечает на вопрос: > Что происходит? Второй поток — энергетический (ресурсный). Он отвечает: > Чем система может воздействовать? Получаем две ортогональные подсистемы. * Информационная Market Flow -> Market State -> Policy * Ресурсная Capital Flow -> Capital State -> Allocation Получается решение принимается не только относительно анализа рынка. Оно принимается совместно рынком и ресурсом.
Это можно выразить через декартово произведение автоматов. Теперь оно получает математический смысл. Если S_m — состояние рынка, а S_c — состояние капитала, то реальное управляющее состояние S = S_m х S_c. Но управляющее воздействие определяется не просто этим произведением. Появляется отображение A: S_m x S_c -> Intent Это и есть Allocation.
Но теперь видно, что одновременно существуют два независимых процесса. --Эволюция информации S_m(t) -> S_m(t+Delta t) --Эволюция ресурсов S_c(t) -> S_c(t+Delta t) Runtime должен синхронизировать их. То есть Runtime: (S_m,S_c) -> (S'_m,S'_c) при сохранении всех инвариантов. Теперь становится понятным Runtime. До этого утверждалось Runtime переводит State(t) -> State(t+dt)
И вот здесь появляется самый глубокий вывод. Мне кажется, всё это время искал минимальную архитектуру управляющей системы. А пришел к минимальной архитектуре "организованной материи". Потому что независимо от природы объекта всегда существуют четыре фундаментальные сущности: 1. "Поток вещества (или ресурса)" — что может быть преобразовано. 2. "Поток информации" — что описывает происходящее. 3. "Законы сохранения (инварианты)" — что нельзя нарушить. 4. "Оператор эволюции (Runtime)" — что синхронно изменяет оба потока во времени.
У себя сделал одно изменение по сравнению с тем, что строил раньше. Раньше рассматривали "Mission" как верхнюю сущность. Теперь можно утверждать, что выше Mission существует ещё более фундаментальное понятие. Закон сохранения. Именно он является первичным.
Миссия уже выбирается "внутри допустимого множества", определённого законами сохранения. В организме нельзя поставить миссию "жить без энергии". В автомобиле нельзя поставить миссию "ехать без топлива". В инвестиционной системе нельзя поставить миссию "удвоить капитал за секунду без принятия риска". То есть миссия не может противоречить фундаментальным ограничениям системы. Это очень хорошо согласуется исходной идеей: > "«Первичен не объект, а закон сохранения.»"
В торговой системе это означает принципиальный сдвиг, перестаём строить систему вокруг стратегии.
Стратегия становится лишь одной из реализаций миссии, миссия ограничивается инвариантами, а инварианты являются конкретным выражением фундаментальных законов сохранения капитала, риска, ликвидности и согласованности состояний.
На мой взгляд, именно здесь заканчивается этап поиска архитектуры и начинается этап построения "формальной аксиоматики MEO".
Если сформулировать 5–10 базовых аксиом (аналогично аксиомам механики или теории автоматов), то все остальные модули — Runtime, Observer, Policy, Allocation, OMS, RiskManager, EventStore — будут выводиться из них как теоремы, а не проектироваться независимо. Это и станет настоящим фундаментом не только всей системы, но и законом проектирования автоматических систем, отвечающих принципам живого организма. Это тот момент, где архитектура может стать значительно проще и математически красивее, а главное проектируемой сверху вниз.
Работа колбеков
Пользователь
Сообщений: Регистрация: 15.06.2023
31.07.2026 21:58:48
Nikolay, Так ведь и я про это. Есть круг задач решение которых, ну если не оптимальны то хотя бы лучший способ использовать OnParam. Просто потому что лучше ни чего нет. Вы подняли на само деле очень важную проблему. Возраст которой можно уже исчислять десятками лет. Я с Вами целиком согласен. Полное безобразие!
Но торгуем сегодня, и решения нужны сегодня они есть? Пусть не оптимальное. Обсуждение очень важное, у себя даже усложняю структуру у меня вообще срез по рынку (фаза), задумался дописал модули, посчитал лаги на стратегию на принятие решения на исполнение суммарный. Усложнил изохронность, разделил на 3 контура. Встал вопрос а какой ценой лимитный ордер заполнять? Ну точно не из ТТТ.
Работа колбеков
Пользователь
Сообщений: Регистрация: 15.06.2023
31.07.2026 18:28:53
Ну прямо какие то "Страсти Мордастей" написали. Обматываю не большую таблицу, первоначально задав ее: -- Реестр параметров MEO_Config.REQ_PARAMS_REGISTRY = {
Ничего страшного, все на хорошей скорости проходит если понимать с каким лагом обновляется сама таблица. Ведь дело не в оптимальности самой функции и использовании калбэка, А в архитектуре вашей программы и круге решаемых задач.
А зачем он нужен, я специально разделил таблицу на группы параметров. Просто посмотрите. Ну ведь понятно что для высоколиквидных инструментов метрики сделок из ТТТ не годятся, для этого есть тиковые колбэки. А как отследить если изменились параметры "PRICEMAX", "PRICEMIN" в течении сессии? А где взять "BIDDEPTH", "OFFERDEPTH", "NUMBIDS", "NUMOFFERS"? Опять опрос? А посчитайте лаги?
Работа колбеков
Пользователь
Сообщений: Регистрация: 15.06.2023
29.07.2026 16:44:54
Вы абсолютно правы в своих рассуждениях, и Ваш анализ обнажает главные "болевые точки" архитектуры QUIK и его связки с Lua. Разработчики терминала создали механизм, который при определённых условиях начинает работать против стабильности всей системы. Ваше наблюдение за поведением после OnCleanUp (или при обрыве связи у ВТБ) абсолютно точно описывает проблему архитектуры QUIK. Вы в этом лучше меня разбираетесь. Я лишь хочу сказать о срытой проблеме выделение памяти (Garbage Collection). Каждый вызов getParamEx возвращает Lua-таблицу с полями param_value, param_image, param_type и result.На миллионах вызовов в секунду (при подгрузке истории) создаются миллионы временных таблиц и строк. Встроенный в QUIK сборщик мусора Lua не успевает их утилизировать. Происходит микро - зависание потока, обрабатывающего скрипт. Я не давно вывел т. обезличенных сделок, волосы дыбом, что сделали из ленты! Выведите посмотрите ради интереса. Думаю тут таже история. Можно бесконечно возмущаться, а воз и ныне там. Я о другом как быть в этой ситуации? Разберу мой код выше. Посмотрите в примере именно на этот момент:
Код
while c.is_run do
local cur_size = _G.Robot.ds:Size()
if cur_size > last_known_size then
last_known_size = cur_size
c.BAR_CACHE_IDX = cur_size
_G.Robot:ExecuteQuantumClosure(
_G.Robot.ds,
cur_size
)
end
if _G.Robot.ProcessLearningQueue then
_G.Robot:ProcessLearningQueue()
end
if _G.Robot.TriggerUIRender then
_G.Robot:TriggerUIRender()
end
local current_work_time = GetMilliseconds() - TT
c.LAST_EXECUTION_LAG = current_work_time
local calculated_sleep = 200 - current_work_time
if calculated_sleep <= 0 then
calculated_sleep = 1
end
sleep(calculated_sleep)
TT = GetMilliseconds()
end
Это не просто цикл. Это планировщик (scheduler).Что здесь уже правильно: 1. Баровый контур отделён от событий QUIK. Это главное. сейчас: QUIK callbacks | v накопление состояния | v main() | v ExecuteQuantumClosure()
То есть: * OnQuote() не запускает принятие решений; * OnAllTrade() не запускает MDP; * OnParam() не вызывает расчёты S/D. * DS не вызывает расчёт индикаторов. И это уже правильно, у всех разные периоды тик, сеунда, минута.
2. Изохронность. задан период: sleep(200) То есть: 5 Hz scheduler А внутри: баровая фиксация; очередь обучения; рендеринг пользовательского интерфейса; пульс. Это паттерн. Не, тик -> торговое решение -> ордер а, накопление событий + обработка, управляемая тактовым сигналом.
3. Выполнение квантового замыкания. Вот это фактически граница транзакции в MEO. Сейчас: new bar v ExecuteQuantumClosure() v DSP v State Encoder v MDP v Decision v Execution Именно здесь должен жить: НАЧАТЬ ТРАНЗАКЦИЮ; вычислить; подтвердить; совершить; хэш, а не в QUIK CALLBACK. Ну по крайней мере сейчас так представляется.
Работа колбеков
Пользователь
Сообщений: Регистрация: 15.06.2023
29.07.2026 13:50:03
В моем примере выше, архитектура устроена так что, все колбэки ни чего не делают, они "ТУПЫЕ", их задача сводится просигнализировать "Терминал сообщает, что параметры инструмента изменились". Это другой уровень абстракции. В этой архитектуре главное: QUIK callbacks нельзя превращать в бизнес-события напрямую
Код
function OnParam(class_code, sec_code)
if not Robot or not c.is_run or not c.IS_WARMED_UP or Robot.Is_Inside_HotPath then return end
if Robot.ProcessParamEvent and type(Robot.ProcessParamEvent) == "function" then
Robot:ProcessParamEvent(class_code, sec_code)
end
end
У Вас же идет вызов тяжеловеса, еще нужно понять где фильтруется:
Код
function _G.OnParam(class_code, sec_code)
local last_price = tonumber((getParamEx(class_code, sec_code, 'LAST') or {}).param_value) or nil
-- if rev_lis[sec_code] then
-- GetPrice(class_code, sec_code)
-- end
end
Работа колбеков
Пользователь
Сообщений: Регистрация: 15.06.2023
27.07.2026 13:19:16
Просто мысли вслух. Таблицы обезличенных сделок и левел2 это тиковые данные, в то время как OnParam приходит пакетами примерно раз в секунду. Я кто тому что и очереди и буфер и тайм фреймы у них ме могут быть одинаковы. OnParam требует индивидуального подхода и подписок на параметры. Может собака в сомой обработке зарыта?
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
26.07.2026 18:51:04
Фантастика, как математически точно, топология куба состояний 2^3 накладывается на экономический цикл капитала и физику комплементарного переключения, описывая канонический гамильтонов цикл (или цикл Грея) по ребрам трехмерного куба (6 переходов), который идеально соответствует 6-фазной метаморфозе капитала Маркса или полному 6-тактному циклу трехфазного мостового инвертора в электротехнике. Препарируя вершины куба, определив их координаты и физико-экономическую суть фазового перехода, получаем.
А. Топология Куба Состояний 2^3 Каждое состояние системы описывается вектором из 3 бинарных координат: 1. Координата X (Товарная форма — T). Есть вещественный субстрат (1) или нет (0). 2. Координата Y (Денежная форма — Д). Есть ликвидная абстрактная ценность (1) или нет (0). 3. Координата Z (Производительная форма / Силовой потенциал — P). Запущена ли скрытая внутренняя работа/энергия (1) или система пассивна (0). Каждая вершина куба — это состояние триплета [X, Y, Z]. Всего их 2^3 = 8.
Разберу этот 6-шаговый цикл с предельной точностью, проследив за тем, как на каждом ребре куба меняется ровно один бит, одно физическое или экономическое состояние. Это классическое свойство кода Грея и Гамильтонова пути, система не может менять две сущности одновременно, метаморфоза всегда последовательна. Наши координаты в пространстве 2^3: [Товар (T), Деньги (Д), Производство/Потенциал (P)].
Шаг 1: [0, 1, 0] -> [1, 1, 0] — Акт инвестирования (Рыночная сделка) * Экономический смысл (Д -> Д + T): У инвестора были чистые деньги. Он выходит на рынок и покупает средства производства (станки, сырье) и нанимает рабочих. В момент заключения контрактов деньги еще не ушли полностью (авансированы), но товарные обязательства уже на балансе. * Электротехнический смысл: Это подача управляющего сигнала (напряжения) на затвор верхнего транзистора (N-канал). Ток в нагрузку еще не потек (пассивное состояние), но емкость затвора начинает заряжаться. Появляется "потенциал для обмена". * Изменение бита: Первый бит (Товар) переключается из 0 в 1. Вещество/субстрат вошло в систему.
Шаг 2: [1, 1, 0] -> [1, 0, 0] — Абсорбция капитала (Склад) * Экономический смысл (Д + T -> T): Расчеты завершены. Деньги полностью выплачены продавцам сырья и ушли из оборотного капитала предприятия. На балансе — чистый Товар (T=1), запертый на складе. Система пассивна (P=0), фабрика еще не работает, прибыли нет. Капитал временно "омертвлен" в веществе. * Электротехнический смысл: Затвор полностью заряжен, входные "деньги" (напряжение управления) зафиксированы. Транзистор перешел в проводящее состояние, его сопротивление упало до нуля. Но так как силовой контур питания еще закрыт внешним ключом, реального движения зарядов нет. Есть только готовый "канал проводимости" (T=1). * Изменение бита: Второй бит (Деньги) падает из 1 в 0. Ликвидность полностью исчезла, превратившись в физическую структуру.
Шаг 3: [1, 0, 0] -> [1, 0, 1] — Фаза производства (Накачка энергией) * Экономический смысл (T -> [T + P]): Директор нажимает на кнопку — фабрика запускается. Включаются станки, рабочие начинают тратить мускульную и интеллектуальную энергию. К пассивному товару (сырью) прикладывается живой труд (P=1). Начинается нелинейный процесс создания прибавочной стоимости. * Электротехнический смысл: Открывается главный силовой ключ (подается внешнее напряжение питания на сток/коллектор транзистора). Через уже подготовленный на Шаге 2 канал (T=1) устремляется мощный силовой ток. Кристалл транзистора переходит в режим активного насыщения. Происходит колоссальная перекачка энергии из внешнего источника питания в магнитное или электрическое поле нагрузки (например, индуктивности мотора). * Изменение бита: Третий бит (Производство/Потенциал) переключается из 0 в 1. Система приведена в движение, идет генерация избыточной энергии.
Шаг 4: [1, 0, 1] -> [0, 0, 1] — Финализация продукта (Консервация энергии) * Экономический смысл ([T + P] -> T'): Процесс производства завершен. Рабочие ушли домой, станки выключены. Исходное сырье уничтожено (T из 1 стало 0). Вместо него на складе лежит абсолютно новый товар (T'), обладающий более высокой стоимостью. Живой труд (P=1) прекратился как процесс, но он "вморожен", овеществлен в этом новом продукте. * Электротехнический смысл: Внешний силовой импульс прекращается. Ток через транзистор падает. Но накопленная в нагрузке (индуктивности) энергия не может исчезнуть в никуда. Она трансформируется. Наш транзистор закрывается, а накопленная энергия переходит в форму ЭДС самоиндукции (высокого напряжения на выходе). Ток "заперт" в поле нагрузки. * Изменение бита: Первый бит (Исходный товар) падает из 1 в 0. Старая форма вещества уничтожена ради рождения новой.
Шаг 5: [0, 0, 1] -> [0, 1, 1] — Выход на рынок (Реализация) * Экономический смысл (T' -> [T' + Д']): Предприятие везет готовый продукт на рынок для продажи. Появляются покупатели. Товар начинает обмениваться на золото/валюту. На этом коротком отрезке у нас одновременно есть и остатки высоколиквидного товара на складе, и приток новой, возросшей денежной массы (Д'=1). Система все еще находится под давлением рыночного цикла (P=1). * Электротехнический смысл: Открывается нижнее (комплементарное) плечо схемы — P-канальный транзистор. Накопленная на Шаге 4 энергия самоиндукции через этот открывшийся шлюз устремляется обратно в систему (или в цепь рекуперации). Энергия поля снова превращается в мощный электрический ток обратной полярности. * Изменение бита: Второй бит (Деньги) возвращается из 0 в 1. Система снова обретает ликвидность и денежную форму, но уже на более высоком энергетическом уровне.
Шаг 6: [0, 1, 1] -> [0, 1, 0] — Сброс прибыли и возврат в интервал * Экономический смысл ([T' + Д'] -> Д_{старт}): Товар полностью распродан (T'=0). Капиталист фиксирует прибыль (Д'). Чтобы запустить новый цикл, он забирает чистый избыток (прибавочную стоимость \Delta Д) себе на личное потребление (или выводит в резервный фонд). В оборотном капитале предприятия остается ровно та сумма первоначальных "чистых денег", которая необходима для повторения цикла. Завод засыпает (P=0) до следующего утра. Мы вернулись в точку [0, 1, 0]. * Электротехнический смысл: Энергия, запасенная в нагрузке, полностью отдана в цепь (потребителю). Ток упал до нуля. P-канальный транзистор закрывается. Схема полностью обесточена, потенциалы выровнены (P=0). На выходе — чистый ноль, система готова принять следующий управляющий импульс. * Изменение бита: Третий бит (Производство/Потенциал) падает из 1 в 0. Энергетический всплеск утилизирован, система вернулась в состояние покоя.
------------------------------ Анализ запрещенных вершин под углом этого цикла. Теперь, когда детально видим шаги, становится кристально ясно, почему система панически избегает двух точек: 1. [0, 0, 0] (Абсолютный ноль / Смерть системы): Чтобы попасть сюда, например, из Шага 3 [1, 0, 0], система должна мгновенно потерять Товар, не родив ни денег, ни энергии производства. Это эквивалентно физическому уничтожению завода (пожар, бомбежка) или мгновенной конфискации всех активов без компенсации. 2. [1, 1, 1] (Синхронный коллапс / Короткое замыкание): Посмотрите, как близко система подходит к этой опасной точке. На Шаге 1 [1, 1, 0] (Товар и Деньги уже есть) достаточно случайно подать потенциал производства (P -> 1), не дождавшись закрытия предыдущих шлюзов — и мы влетаем в [1, 1, 1]. Оба плеча открыты, деньги и товар горят одновременно в огне сквозного тока.
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 15.06.2023
26.07.2026 14:12:45
К дню Энергетика, посвящается электротехнике и инвестициям.
В электротехнике и электронике есть понятие комплементарные пары — это два элемента, которые имеют абсолютно идентичные электрические параметры, но противоположную полярность (тип проводимости). Главный физический смысл комплементарности — создание симметричных схем. Что в свою очередь, позволяет эффективно управлять как положительной, так и отрицательной полуволной сигнала.
Мне стало интересно, как комплементарные пары, используемые в инженерной практике. И почему это на прямую связано с инвестициями. Обо всем и по порядку.
1. Биполярные транзисторы, NPN и PNP. Это самый классический пример, они имеют одинаковые вольт-амперные характеристики, предельные токи и коэффициенты усиления, но противоположное направление токов и управляющих напряжений. Принцип работы, NPN-транзистор открывается положительным напряжением на базе, а PNP — отрицательным.
2. Полевые транзисторы, N-канальные и P-канальные. Аналог биполярной пары, но управляемый напряжением (электрическим полем), а не током. Здесь принцип работы, N-канальный открывается плюсом, P-канальный — минусом. На этой паре построена вся современная цифровая микроэлектроника (процессоры, память). Логический каскад этой пары: когда один транзистор открыт, комплементарный ему закрыт. Важно, схема потребляет энергию только в момент переключения. Энергетики поправят если что не так. Зон применения огромное количество есть и силовые установки, системы управления, собственно проявленный интерес вызван другим, принципом построения логических каскадов комплементарных пар (NPN и PNP - "идеальной пары").
Мне все это на помнило экономическую теорию Карла Маркса, где формулы кругооборота TДT и ДTД (напомню, Прибавочная стоимость приводит к кризисам), чем не комплементарные пары? Решил провести полную аналогии между комплементарными парами в электротехнике и капиталом. В обеих системах мы видим циклическое движение сущностей, имеющих противоположную полярность, но идентичную "стоимостную" или "энергетическую" ценность.
Аналогия I. Формула (Товар — Деньги — Товар). В экономике этот цикл описывает простое товарное обращение (например, ремесленник продает свой стул, чтобы купить хлеб). Цель цикла - потребление, качественное изменение потребительной стоимости. Сущность меняет форму, но общая ценность остается неизменной. Электротехнический изоморфизм - Конденсаторный фильтр. Это аналог пассивного переноса заряда или работы симметричного каскада в линейном режиме, где форма сигнала меняется с напряжения на ток и обратно, но никакой новой энергии (прибыли) не создается. * Товар0 - Первичный физический носитель (в электронике — физическое смещение, например, дырочная проводимость p-типа). * переход Деньги - Всеобщий эквивалент, среда обмена. Электронный аналог — электрический потенциал (напряжение). переход Товар1 (заряд) конвертируется в общее поле давления (деньги), чтобы затем снова превратиться в движение зарядов. Товар1 - Новый физический объект, конечная точка потребления (электронная проводимость n-типа). Суть аналогии сводится к следующему. Трансформация формы ради полезного действия. Как деньги здесь выступают лишь мимолетным посредником для обмена стула на хлеб, так и потенциал на затворе является лишь посредником для перетекания энергии из одного плеча схемы в другое.
Аналогия II. Формула (Деньги — Товар — Деньги с приростом). Это формула капитала. Деньги запускаются в оборот не ради потребления, а ради возвращения с приращением (Delta Д = Д1 - Д0, прибавочная стоимость). Это активный, самовозрастающий процесс (Инвестирование). Здесь электротехнический изоморфизм (Двухтактный активный каскад класса B/D), то есть полная аналогия работы комплементарного выходного каскада на транзисторах NPN (Д) и PNP (T), подключенных к внешнему источнику питания.
* Первичные Деньги - Входной слаботочный управляющий сигнал. Это инвестиционный капитал, который запускается в схему. * Переход в Товар - Процесс производства. Управляющий сигнал открывает транзистор противоположной полярности. Внутри кристалла (T, товарная фабрика) происходит физическая работа, под воздействием внешнего источника питания (аналог эксплуатации рабочей силы) лавинообразно генерируются новые носители заряда. * переход в (Деньги с приращением) - Выходной мощный сигнал. Мы получаем те же самые деньги (электрический сигнал той же формы), но их энергетическая масса (ток и мощность) колоссально возросла благодаря внешней накачке.
Прибавочная стоимость в электронике (Delta Д) - Это коэффициент усиления каскада (beta или h_{FE}). Мы вложили 1 мА тока (Д0), прогнали через транзисторную структуру (T) и получили на выходе 100 мА тока (Д1). Прирост взят из внешнего блока питания (окружающей среды / живого труда).
3. Комплементарность как Макроэкономический Баланс, в современных микросхемах построенных на парах из N-канальных и P-канальных полевых транзисторов. * Когда N-ключ открыт и тянет линию к "земле (0)", комплементарный P-ключ строго закрыт и изолирует "питание (+V)". Ток через схему в статике равен нулю. Энергия потребляется только в момент переключения (динамический сдвиг). * В экономике Маркса. Это идеальный баланс спроса и предложения в условиях равновесного рынка. Когда Денежный капитал (Д, N-канал) абсорбирует Товарную массу (T, P-канал), система находится в квазистационарном состоянии. Энергия (кризис или сверхприбыль) выделяется только в моменты тектонических переключений технологических укладов (фазовых переходов макроцикла).
------------------------------ Делаем вывод аналогии. В экономике, если нарушить баланс фаз T и Д, наступит кризис перепроизводства (схема захлебнется товаром, который нельзя конвертировать в деньги) или гиперинфляция (деньги потеряют связь с товарным субстратом). В электротехнике, если нарушить комплементарность пары (например, поставить мощный NPN-транзистор с высоким коэффициентом усиления и слабый PNP-транзистор с низким), наступит асимметрия полуволн сигнала (жесткие нелинейные искажения), постоянный ток потечет в нагрузку, и схема сгорит от перегрева.
"На фига козе баян ..."? У меня остались внутренние сомнения в правильности спроектированной логике в модулях: 1) Спроецировать эту аналогию на уравнение Беллмана в MDP, где Деньги — это Reward (награда), а Товар — State (состояние) 2) Математически точно наложить топологию компьютерного куба состояний 2^3 на экономический цикл капитала и физику комплементарного переключения.
И еще масса всякого интересного вскрывается, в прикладном прямом использовании природных операционных механизмов.
Работа колбеков
Пользователь
Сообщений: Регистрация: 15.06.2023
24.07.2026 16:50:31
Сильное заметное наблюдаемое влияние было после перехода на * брокер Сбер. Пришлось бросить терминал. Интересно было бы сравнить терминал до перехода на * и последние навороченные версии?
Но в любом случае метрики: время выполнения, нагрузку, а сейчас добавил еще и лаг лучше держать перед глазами, кроме логирования.
Работа колбеков
Пользователь
Сообщений: Регистрация: 15.06.2023
24.07.2026 16:14:22
Цитата
nikolz написал: Относительно индикатора регрессии считаю в скользящем окне. Этот индикатор лучше чем мувинги.
Так ведь и задачи стоят передними разные. 1. Лучшее описание данных 2. Элементарное усреднение и сглаживание данных. От сюда и применение разное. Их нельзя просто сравнивать, кто лучше кто хуже. Вопрос стоит под какую задачу сто применяется.
Работа колбеков
Пользователь
Сообщений: Регистрация: 15.06.2023
24.07.2026 15:49:18
Nikolay, Если правильно понял то проблемы уже заметны на 7 инструментах? Так? ВТБ у меня очень не охотно отдает данные по отклику сервера, экспериментировать не хочу, как брокер настойки предложил, так и оставил. Торговля не активная робот упрощённый вариант, перевел его со Сбера там практически терминал встал. На Сбере скачал новый и оставил облигационный портфель и несколько самописных индикаторов с настройками как есть боюсь руками трогать все опять развалится. Робот событийный (оставил 3 инструмента для арбитража, 2 стратегии), в таком виде все крутится с неплохо скоростью и нормальное исполнение стоит на фьючерсе на серебро. Архитектура не большие модули и ОПП колбэки. В расчеты наворочены есть MDP, но это больше сложная математика чем вычисления. Основные задержки это конечно тоже связаны c API QUIK. Все метрики технологические наблюдаемы в живую вывожу в заголовок окна робота для контроля пульса. Окно не сложное. В таком варианте работает нормально. Накручивать инструменты побаиваюсь все обрушить, задача стоит в начале в таком виде довести до промышленного или близкого к нему уровню. Ниже колбэки которые обрабатываю + история для нескольких индикаторов.
Код
-- ====================================================================
-- ИСПРАВЛЕНО (ИЗЛОМ 2): ЧИСТЫЙ НАЛИВ ИЗ МОДУЛЯ БЕЗ ДУБЛИРОВАНИЯ ПОЛЕЙ
-- Все флаги, заголовки и REQ_PARAMS_REGISTRY уже запечатаны в MEO_Config.lua!
-- ====================================================================
_G.MEO_Config = require("MEO_Config").init()
local c = _G.MEO_Config
-- Прописываем только динамический маркер старта
c.PLATFORM_START_TIMESTAMP = os.time()
-- ====================================================================
-- ГЛOБAЛЬНЫE КOЛЛБЭКИ ТEРМИНAЛA QUIK API С МЬЮТЕКС-ЭКРАНИРОВАНИЕМ
-- ====================================================================
function OnAllTrade(trade)
if not Robot or not c.is_run or not c.IS_WARMED_UP or Robot.Is_Inside_HotPath then return end
if type(Robot.ProcessAllTradeEvent) == "function" then Robot:ProcessAllTradeEvent(trade) end
end
function OnQuote(class_code, sec_code)
if not Robot or not c.is_run or not c.IS_WARMED_UP or Robot.Is_Inside_HotPath then return end
if Robot.BookBridge and type(Robot.BookBridge.ProcessQuoteEvent) == "function" then
Robot.BookBridge:ProcessQuoteEvent(class_code, sec_code)
end
end
function OnParam(class_code, sec_code)
if not Robot or not c.is_run or not c.IS_WARMED_UP or Robot.Is_Inside_HotPath then return end
if Robot.ProcessParamEvent and type(Robot.ProcessParamEvent) == "function" then
Robot:ProcessParamEvent(class_code, sec_code)
end
end
function OnFuturesClientHolding(fut_pos)
if not Robot or not c.is_run or not c.IS_WARMED_UP or Robot.Is_Inside_HotPath then return end
if Robot.Ledger and type(Robot.Ledger.IncorporateExchangeHolding) == "function" then
Robot.Ledger:IncorporateExchangeHolding(fut_pos)
end
end
function OnFuturesLimitChange(fut_limit)
if not Robot or not c.is_run or not c.IS_WARMED_UP or Robot.Is_Inside_HotPath then return end
if Robot.ProcessFuturesLimitChangeEvent and type(Robot.ProcessFuturesLimitChangeEvent) == "function" then
Robot:ProcessFuturesLimitChangeEvent(fut_limit)
end
end
function OnTrade(trade)
if not Robot or not c.is_run or not c.IS_WARMED_UP or Robot.Is_Inside_HotPath then return end
if Robot.Tracker and type(Robot.Tracker.ProcessTradeEvent) == "function" then
Robot.Tracker:ProcessTradeEvent(trade)
end
end
function OnTransReply(reply)
if not Robot or not c.is_run or not c.IS_WARMED_UP then return end
if Robot.Tracker and type(Robot.Tracker.RegisterTransReply) == "function" then
Robot.Tracker:RegisterTransReply(reply)
end
end
function OnOrder(order)
if not Robot or not c.is_run or not c.IS_WARMED_UP then return end
if Robot.Tracker and type(Robot.Tracker.RegisterOrderEvent) == "function" then
Robot.Tracker:RegisterOrderEvent(order)
end
end
function OnStop()
c.is_run = false
if Robot and type(Robot.DestroyAndUnsubscribe) == "function" then Robot:DestroyAndUnsubscribe() end
message("MEO OS: Core supervisor engine terminated securely. All local subscriptions cleared.", 1)
return 1000
end
-- ====================================================================
-- ГЛАВНАЯ ТОЧКА ВХОДА ИЗОХРОННОГО РАНТАЙМА (КОНТУР А)
-- ====================================================================
function main()
if not c.ACCOUNT or c.ACCOUNT == "" or not c.CLIENT_CODE or c.CLIENT_CODE == "" then
c.is_run = false
message("MEO SUPERVISOR FATAL: Ключи счета не обнаружены в ОЗУ таблицы MEO_Config.lua!", 3)
return
end
package.loaded["MEO_PreFlight_Validator"] = nil
local PreFlightLauncher = require("MEO_PreFlight_Validator")
-- Аппаратный Handshake поднимает, прогревает и возвращает готовый объект Robot
_G.Robot = PreFlightLauncher.ExecuteFullHandshake(c)
if not _G.Robot then
message("MEO SUPERVISOR FATAL: Предполётная подготовка прервана отказом шлюзов!", 3)
return
end
local last_known_size = c.BAR_CACHE_IDX
local TT = GetMilliseconds()
while c.is_run do
local cur_size = _G.Robot.ds:Size()
if cur_size > 0 then
if cur_size > last_known_size then
last_known_size = cur_size
c.BAR_CACHE_IDX = cur_size
_G.Robot:ExecuteQuantumClosure(_G.Robot.ds, cur_size)
end
end
if _G.Robot.ProcessLearningQueue then _G.Robot:ProcessLearningQueue() end
if _G.Robot.TriggerUIRender then _G.Robot:TriggerUIRender() end
local current_work_time = GetMilliseconds() - TT
c.LAST_EXECUTION_LAG = current_work_time
local calculated_sleep = 200 - current_work_time
if calculated_sleep <= 0 then calculated_sleep = 1 end
sleep(calculated_sleep)
TT = GetMilliseconds()
end
end
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
Пользователь
Сообщений: Регистрация: 15.06.2023
18.07.2026 20:12:29
TGB, Ну просто не могу ни промолчать. Вы это серьёзно? Ну в какие это времена, "Черный ящик" кому то помог? Не примите за навязчивость, но очень Вам советую прочесть книгу доктора технических наук И.Н. Острецова. Учёный, физик-ядерщик, доктор технических наук, профессор, специалист по ядерной физике и атомной энергетике, ликвидатор Чернобыля в своих выводах и доказательствах, приходит к выводу единого начала. Думаю хватит Вам компетенций по достоинству ее осмыслить. От себя лишь добавлю, у любой системы есть начало и ее конец, и ее главное звено (Идея).
А Каму? Если nikolz, то он сам ничего не понимает в этом. В старорусской азбуке была буква «Херъ» (или «херь») — это название буквы «Х» в старославянской и церковнославянской азбуке. По мне так последнее что не высказывание у данного автора так с этой буквы все начинается и не имеет ни какого продолжения. Если это для
То это просто среднестатистическое мнение в лучшем случае из 10 сайтов, если не специализированный ИИ. Не упрощаете, а главное не перекладывайте ответственность. Разобраться должны Вы и ни кто другой. Удачи.
При размещении заявки на продажу ошибка "Вам запрещена работа по данному торговому счету"
Vitalii Savinov написал: И получаю ошибку "Вам запрещена работа по данному торговому счету"
["CLIENT_CODE"] = "XXXXXX", ["ACCOUNT"] = "B00BYYYYYYYYY", Нужно проверить эти поля. Почему? Точно такую ошибку получаю при торговле из стакана руками. При обновлениях либо по другим причинам слетает счет. Проверьте также что у Вас в фильтре глобальных настроек. Возможно он делает подмену. Ну точно ошибка в этих полях. Удачи.
Состояние счета, Таблица Состояние счета
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2026 18:14:58
Vitalii Savinov, Вы напрасно ко мне апеллируете, я не явлюсь специалистов в области API QUIK. Раньше мне помогали разобраться, теперь отдаю долг. Сужу со своей колокольни, обычно с тем что у самого стоит на повестке или знакомо (сам спотыкался и пришлось детальней разбираться). Пишу в основном о своей системе о ее взрослении.
То что Вы привели мою ссылку так это авторство документации QUIK?, ссылка именно от туда. Я не понял Ваше затруднение в чем оно? Но на в скидку посмотрите расширение данной функции (QUIK развивается API расширяется). 1) getPortfolioInfoEx - Функция предназначена для получения значений параметров таблицы «Клиентский портфель», соответствующих идентификатору участника торгов «firmid», коду клиента «client_code» и сроку расчетов «limit_kind» со значением, заданным пользователем . Необязательные аргументы код позиции «board_tag» и валюта «currency» задают параметры расчета таблицы «Клиентский портфель», при их отсутствии используются код позиции и валюта по умолчанию для указанного участника торгов («firmid»). При этом в таблице с результатом в поле «curr_tag» заполняются параметры, для которых был выполнен расчет в формате «<Валюта> - <Код позиции>.» Формат вызова: TABLE getPortfolioInfoEx (STRING firm_id, STRING client_code, NUMBER limit_kind, [STRING board_tag, STRING currency]) Для получения значений параметров таблицы «Клиентский портфель» для клиентов срочного рынка без единой денежной позиции необходимо указать в качестве «client_code» – торговый счет на срочном рынке, а в качестве «limit_kind» – 0. Функция возвращает таблицу Lua с параметрами таблицы «Клиентский портфель».
2) Загляните в файл справки info там есть формулы описания данной таблицы. Ни каких сложностей написать код нет. Удачи!
Как получить дату экспирации?
Пользователь
Сообщений: Регистрация: 15.06.2023
14.07.2026 10:32:50
Так просто выведите и возьмите что нужно. Попробуйте так.
Код
local CLASS_CODE, SEC_CODE = "SPBFUT", "SRU6"
local class_code, sec_code = "TQCB","RU000A10F7R7" -- Инструмент Сбербанк ПАО 001Р-SBER56
local is_run = false
function OnStop()
is_run = false
return
end
function main()
if not SEC_CODE or SEC_CODE == "" or not CLASS_CODE or CLASS_CODE == "" then
is_run = false
message("FATAL: Ключи не обнаружены в ОЗУ таблицы!", 3)
return
end
local tSPBFUT = getSecurityInfo( CLASS_CODE, SEC_CODE )
for name, p in pairs(tSPBFUT) do
message( CLASS_CODE ..'; '.. SEC_CODE .. ': ' .. tostring(name) ..' = '.. tostring(p) ..'; '.. type(p))
end
local tTQCB = getSecurityInfo( class_code, sec_code )
for name, p in pairs(tTQCB) do
message( class_code ..'; '.. sec_code .. ': '.. tostring(name) ..' = '.. tostring(p) ..'; '.. type(p))
end
while is_run do
sleep(1000)
end
end