Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
Пользователь
Сообщений: Регистрация: 12.05.2020
09.04.2026 10:46:48
Цитата
VPM написал: В моем нынешнем варианте (который пытаюсь довести "до ума") скорость цикла main делаю адаптивной к загрузке очереди.
Можно сделать паузу адаптивной к длительности основного цикла скрипта (это учтет все, в том числе и длительность обработки очереди):
Код
run = true
function main()
local function GetMilliseconds() -- Милисекунды с 1970г.
local dt = os.sysdate()
return os.time(dt) * 1000 + dt.ms
end
-- Коды инициализации скрипта --
local pause = 20
local TT = GetMilliseconds()
-- Основной цикл скрипта (while run do)--
while run do
-- Выполнение пользовательского кода --
-- Адаптивное ожидание (динамически зависящее от длительности пользовательского цикла обработки)
local tt = GetMilliseconds() - TT -- Длительность пользовательского цикла обработки
tt = tt >= pause and 1 or pause - tt
sleep(tt)
TT = GetMilliseconds() -- Начало обработки пользовательского кода
end
end
Пользователь
Сообщений: Регистрация: 12.05.2020
09.04.2026 10:53:31
Уточнение: у меня в роботе устанавливается разрешение таймера: 1 млс.
Пользователь
Сообщений: Регистрация: 15.06.2023
10.04.2026 14:23:07
TGB, Спасибо, идея понятна обязательно опробую у себя!
написал: , Кажется уловил Вашу идею, все дело в буффере. Именно он опять возвращает в событийную модель через опрос + буффер, вместо callbacks + буффер? И решаются вопросы тайминга?
Вы можете просто ждать колбека. А можете постоянно опрашивать таблицу. Именно, что постоянно. Естественно через проверку числа записей в таблице как триггер. На вопрос - это же накладно. Ответ - большую часть времени скрипт ничего не делает, так что проверить число записей в таблице - это можно сказать что ничего.
На самом деле все совершенно иначе. Колбек тем и хорош что его не надо ждать. Он вызывается событием. Разница огромная если есть множество инструментов. ---------------------------- 1) Например, колбек OnOrder уже содержит класс и имя инструмента. т е если состояние заявки изменилось, то получим в скрипте уже готовую информацию об инструменте и состоянии. Если же лазить в архив или таблицу, то сначала колбек туда поместит изменение состояния заявки, а потом функция SearchItems (лезет в архив) или getItem (лезет в таблицу) будет перебирать все данные и фильтровать их. Обращение к архиву не быстрая операция. 2) Если колбека нет, то и телодвижений никаких нет. А при опросе архива SearchItems это делается на каждом цикле main есть событие или его нет.
Пользователь
Сообщений: Регистрация: 27.01.2017
11.04.2026 11:43:31
Цитата
nikolz написал: На самом деле все совершенно иначе.
Это не все иначе, а просто другой подход. Есть колбеки - ок. Используйте. Никто не мешает. Но это не означает, что нельзя делать иначе. Я привык делать как опрос датчика, например температуры.
А колбеки я использую если данные из Квика обрабатываются через межсетевое взаимодействие. Например тот же торговый алгоритм, написанный на GO. Но если внутри терминала, где данные есть и доступны всегда, то колбек (именно в этой реализации что есть в Квике) не является единственным и идеальным решением.
Пользователь
Сообщений: Регистрация: 02.01.2026
11.04.2026 12:17:08
Цитата
TGB написал: можно реализовать проверкой (с использованием trans_id) в таблицах order, stop_order. И эту проверку надо выполнять только, когда изменяется количество записей в них.
Изменение параметров заявки не приводит к изменению количества записей в таблице. Об этом вы узнаете только через колбэк, либо через регулярный опрос уже существующих записей в таблице.
Пользователь
Сообщений: Регистрация: 02.01.2026
11.04.2026 12:42:58
Цитата
TGB написал: Можно сделать паузу адаптивной к длительности основного цикла скрипта (это учтет все, в том числе и длительность обработки очереди):
А что это даёт?
Пользователь
Сообщений: Регистрация: 27.01.2017
11.04.2026 13:33:43
Цитата
Йцукен написал: Изменение параметров заявки не приводит к изменению количества записей в таблице. Об этом вы узнаете только через колбэк, либо через регулярный опрос уже существующих записей в таблице.
Да. Датчик температуры ничего не скажет об её изменении. Спросите - скажет.
написал: Изменение параметров заявки не приводит к изменению количества записей в таблице. Об этом вы узнаете только через колбэк, либо через регулярный опрос уже существующих записей в таблице.
Да. Датчик температуры ничего не скажет об её изменении. Спросите - скажет.
При чём тут датчик температуры? Если уж приводить аналогию, то, чтобы узнать изменение температуры отслеживаемого датчика, не нужно проверять изменение количества датчиков, а нужно опрашивать конкретный датчик.
Пользователь
Сообщений: Регистрация: 27.01.2017
11.04.2026 19:13:46
Он и опрашивается, через запомненный индекс записи в таблице. Когда ордер найден в таблице, то повторно его иска не надо, просто получить запись в таблице с свежими данными.
Пользователь
Сообщений: Регистрация: 02.01.2026
11.04.2026 21:04:36
Цитата
Nikolay написал: Он и опрашивается, через запомненный индекс записи в таблице. Когда ордер найден в таблице, то повторно его иска не надо, просто получить запись в таблице с свежими данными.
В цикле вы дергаете getItem, независимо от того, изменились ли параметры заявки (заявок) или нет?
Это не все иначе, а просто другой подход. Есть колбеки - ок. Используйте. Никто не мешает. Но это не означает, что нельзя делать иначе. Я привык делать как опрос датчика, например температуры.
А колбеки я использую если данные из Квика обрабатываются через межсетевое взаимодействие. Например тот же торговый алгоритм, написанный на GO. Но если внутри терминала, где данные есть и доступны всегда, то колбек (именно в этой реализации что есть в Квике) не является единственным и идеальным решением.
Не против использования таблиц. сам делал робота в скрипте индикатора и там использовал именно таблицы, так как это проще и в индикаторах нет колбеков. Вы же объясняете почему Вы так делаете. Я тоже объяснил почему колбеки быстрее работают.
Реальный временной интервал циклов обработки без этого: pause + tt (время ЦП обработки цикла). При этом реальный интервал циклов обработки: 1) pause, если tt - 1 < pause. 2) tt + 1, если tt - 1 >= pause. Надо ли это использовать, дело ваше.
2.
Цитата
Йцукен написал: В цикле вы дергаете getItem, независимо от того, изменились ли параметры заявки (заявок) или нет?
Для просмотра изменений в заявках не надо перебирать все записи orders, stop_orders. Достаточно во вновь получаемых сделках (по изменению размера) таблицы traders выбирать trans_id (или номера ордеров) и просматривать только соответствующие заявки. ----- У меня доступ к таблицам прямой, кэшируется (неизменяемое в таблицах) и затраты на обращение к ним мизерные.
Пользователь
Сообщений: Регистрация: 12.05.2020
12.04.2026 15:37:35
Добавление к предыдущему моему комментарию. Иллюзией является представление о том, что коллбеки выполняются параллельно с потоком main. Код скрипта, включая функции коллбеков, разделяется основным потоком QUIK и потоком main. Это значит, что когда выполняется один, то другой блокируется. Переключение потоков происходит только при вызове активным потоком сишной функции (в которой нет автоматического управления памятью Lua). Одной из сишных функций является sleep. Также сишными функциями являются стандартные функции Lua. В основном потоке выполняется много чего, смотрите по ссылке: . При обработке коллбеков основной поток может блокироваться в моменты выполнения в потоке main lua-кода. При выполнении функций коллбеков он также перестает выполнять всю остальную свою функциональность и блокирует выполнение потока main. Поэтому разработчики QUIK рекомендуют создавать между коллбеками и потоком main очереди, а сами коллбеки делать минимальными. В текущей архитектуре QUIK интенсивное использование коллбеков, нагружая основной поток QUIK, как описано выше, негативно влияет на его функционирование и это следует учитывать при написании скриптов. Я написал в ветке по ссылке (пункт 2), что можно бы было изменить в QUIK, чтобы уйти от описанных проблем. Там же, в конце, выложен конкретный вариант, как это можно реализовать, на уровне конкретного работающего кода на C++.
Пользователь
Сообщений: Регистрация: 02.01.2026
12.04.2026 22:34:25
Цитата
TGB написал: Для просмотра изменений в заявках не надо перебирать все записи orders, stop_orders. Достаточно во вновь получаемых сделках (по изменению размера) таблицы traders выбирать trans_id (или номера ордеров) и просматривать только соответствующие заявки.
Вариант удаления заявки вы не рассматриваете?
Пользователь
Сообщений: Регистрация: 12.05.2020
13.04.2026 11:45:53
Цитата
Йцукен написал: Вариант удаления заявки вы не рассматриваете?
Обрабатываются варианты: 1) удаления заявок; 2) реорганизация используемых таблиц по любой причине; 3) перезапуск робота с восстановлением продолжения его работы.
Пользователь
Сообщений: Регистрация: 02.01.2026
13.04.2026 12:07:51
Цитата
TGB написал: Для просмотра изменений в заявках не надо перебирать все записи orders, stop_orders.
Знаю методы: 1) колбэк; 2) либо регулярная проверка активной заявки в цикле main через getItem. Во втором случае как раз надо перебирать все активные заявки, которые отслеживает скрипт. Или вы как-то по другому это делаете?
Пользователь
Сообщений: Регистрация: 12.05.2020
13.04.2026 12:41:58
Цитата
Йцукен написал: Во втором случае как раз надо перебирать все активные заявки, которые отслеживает скрипт. Или вы как-то по другому это делаете?
1. Я как то уже писал, что коллбек OnTransReply при выполнении транзакций мной используется, т.к. только в нем есть полезная информация о причинах отказа выполнения транзакции. 2. Для снятия заявки я использую два варианта: синхронный (когда роботу нечего делать) и асинхронный. В любом случае обрабатывается только снимаемая заявка а не все активные заявки.
Пользователь
Сообщений: Регистрация: 02.01.2026
14.04.2026 09:28:05
Цитата
TGB написал: коллбек OnTransReply при выполнении транзакций мной используется
OnTransReply вызывается при удалении заявки из Lua-скрипта.
Цитата
TGB написал: В любом случае обрабатывается только снимаемая заявка а не все активные заявки.
Тогда при удалении заявки, например, пользователем, брокером или биржей робот будет считать заявку активной.
Пользователь
Сообщений: Регистрация: 12.05.2020
14.04.2026 12:34:12
Цитата
Йцукен написал: Тогда при удалении заявки, например, пользователем, брокером или биржей робот будет считать заявку активной.
Это у меня обрабатывается в:
Цитата
TGB написал: 2) реорганизация используемых таблиц по любой причине;
Пользователь
Сообщений: Регистрация: 02.01.2026
14.04.2026 13:04:18
TGB, Если без колбэков OnOrder и цикличного опроса активных заявок, то как, поделитесь секретом?
Пользователь
Сообщений: Регистрация: 12.05.2020
14.04.2026 15:38:28
Цитата
Йцукен написал: Если без колбэков OnOrder и цикличного опроса активных заявок, то как, поделитесь секретом?
Секрета нет. Контроль реорганизации таблиц заявок (соответствия индексов записей их полям trans_id) я выполняю циклически (других вариантов для надежного контроля возможных мутаций этих таблиц в текущем QUIK я не вижу) с периодом в 5 сек. просмотром активных заявок кэша, ссылающегося на таблицы, и там же, заодно, увижу снятые неизвестно кем заявки робота. Задержка в 5 сек. меня пока устраивает. Не будет устраивать подключу OnOrder.
Пользователь
Сообщений: Регистрация: 12.05.2020
14.04.2026 16:05:36
Цитата
TGB написал: Не будет устраивать подключу OnOrder.
Но это вряд ли потребуется, т.к. такая ситуация будет обнаружена раньше, при анализе состояния активных заявок одним оператором: (getItem("Таблица заявок", "Соответствующая таблица кэша"[trans_id]).flags & 2) ~= 0
Пользователь
Сообщений: Регистрация: 15.06.2023
17.04.2026 15:09:59
«Кручу, верчу, запутать хочу»
Мой бег по кругу нашел себе новую проблематику зацикленность под общим названием Execution (Исполнение). Или почему третий не всегда лишний. И это не из области "сообразить на троих", это когда соревнуются две команды и нужен объективный независимы судья. В нашем случае соревнования идут между потоками QUIK / Lua, а кто судья?
Что кручу, верчу. Архитектурный слой Исполнения отвечающей принципу разделения ответственности.
У меня сейчас выглядит так: а) strategy: * считает alpha * говорит: "хочу позицию X" б) PositionManager: * хранит истинную позицию (truth) * хранит цель (target) * дергает ExecutionEngine с) ExecutionEngine * превращает target > ордера * управляет жизненным циклом (lifecycle) д) OrderExecutor * гарантирует принцип - точно один раз (exact-once) * управляет заявками. Это уже нормальный 4-уровневый стек выполнения. Оказалось что этого не достаточно.
Есть скрытая проблема такой архитектуры, PositionManager стал на уровень маршрутизации (routing layer), что означает > PositionManager = dispatcher. А это опасно. Почему это проблема, PositionManager теперь: хранит truth, но также управляет поток выполнения (execution flow), а это уже смешение > состояние портфеля + оркестр выполнения. И архитектура начинает "ломаться".
# проблема №1 — двойной путь управления (control path) есть: Path A. Strategy > PositionManager > ExecutionEngine Path B (неявный будущий риск). Strategy > ExecutionEngine это почти гарантированный будущая ошибка.
Просмотр prop-desk стандартов дал однозначный ответ, как можно надежно выстраивать данную архитектуру. Правильная индустриальная модель (важно!) должна учитывать одну абстракцию, а именно УРОВЕНЬ НАМЕРЕНИЯ (критически недостающий элемент) текущей архитектуры.
Тогда новая правильная модель архитектуры будет содержать:
Strategy v PositionManager v (creates intent) ExecutionIntentStore v ExecutionEngine v OrderExecutor
Почему НУЖЕН ExecutionIntent чтоб не упереться в потолок! Без intent layer получаешь: * логика выполнения размазана между модулями; * PositionManager начинает расти; * ExecutionEngine становится "умным монстром"; * состояния гонки между стратегиями. Следовательно, PositionManager НЕ должен вызывать ExecutionEngine напрямую! И мой забег выходит на новый круг.
Пользователь
Сообщений: Регистрация: 15.06.2023
17.04.2026 15:50:10
Да чуть не забыл. IntentStore — отдельный слой, буфер намерений, интентов (очередь, приоритеты). Тот самый третий не лишний!
Пользователь
Сообщений: Регистрация: 30.01.2015
17.04.2026 18:00:39
На современном уровне это решается созданием группы AI агентов. Вы их уже назвали. Осталось лишь реализовать.
Пользователь
Сообщений: Регистрация: 15.06.2023
17.04.2026 20:01:10
Связка QUIK (QLua) + Московская биржа (MOEX) технически подходит для реализации такой архитектуры. Но есть одно огромное НО - QLua не может быть ядром такой системы. QLua можно использовать как транспортный шлюз (OrderExecutor), в то время как искусственный интеллект и логику выносят во внешнюю среду. И я с этим полностью согласен. Писать нейросети и AI-агентов прямо в QUIK на Lua идея так себе. Lua в QUIK однопоточный, не имеет библиотек для работы с ИИ и быстро "захлебнется" от сложных вычислений. Выносить вычисления во внешний контур (Python/С) не мой подход. В своем подходе HFT техники тяну по ряду причин, одна из которых быстрый тест. Вторая, низкая ликвидность на MOEX, привела к тому что рынок загнали в коридор (фондовый), плохо работают среднечастотные и долгосрочных стратегии. Смена парадигмы, от жесткого программирования правил к торговле на основе намерений (intent-based trading ) и так можно реализовать. Ведь задачу можно свести к модульности и независимости, где компоненты общаются через цели, а не прямые команды, это должно повышать адаптивность и защищать от ошибок. А математику упростить.
Пользователь
Сообщений: Регистрация: 30.01.2015
18.04.2026 07:44:51
Цитата
VPM написал: Связка QUIK (QLua) + Московская биржа (MOEX) технически подходит для реализации такой архитектуры. Но есть одно огромное НО - QLua не может быть ядром такой системы. QLua можно использовать как транспортный шлюз (OrderExecutor), в то время как искусственный интеллект и логику выносят во внешнюю среду. И я с этим полностью согласен. Писать нейросети и AI-агентов прямо в QUIK на Lua идея так себе. Lua в QUIK однопоточный, не имеет библиотек для работы с ИИ и быстро "захлебнется" от сложных вычислений. Выносить вычисления во внешний контур (Python/С) не мой подход. В своем подходе HFT техники тяну по ряду причин, одна из которых быстрый тест. Вторая, низкая ликвидность на MOEX, привела к тому что рынок загнали в коридор (фондовый), плохо работают среднечастотные и долгосрочных стратегии. Смена парадигмы, от жесткого программирования правил к торговле на основе намерений (intent-based trading ) и так можно реализовать. Ведь задачу можно свести к модульности и независимости, где компоненты общаются через цели, а не прямые команды, это должно повышать адаптивность и защищать от ошибок. А математику упростить.
На самом деле все не так мрачно. Дело в том, что QLua - это не VMLua а лишь библиотека функций которые создают интерфейс между VMLua и терминалом QUIK. Никто не мешает запускать AI агентов в отдельных потоках и самостоятельных приложениях. Смысл запускать из в скриптах запущенных в терминале если Вы хотите использовать функции из библиотеке QLua. Но в этом нет необходимости. -------------------------------- Рассказываю как я делаю: В терминале я запускаю скрипт(управляющий), который распределяет события из очереди колбеков. Колбеки есть терминальные и есть от других скриптов и приложений. ---------------------- Управляющий скрипт не только распределяет события по скриптам но и выполняем функции обработки отправки заявок. ------------------- В терминале можно запустить еще скрипты но они не обрабатывают события терминала. они обрабатывают события от управляющего скрипта. Для этого тот вызывает колбеки в них и передает им задание. ------------------ Можно запустить скрипт в main в отдельном потоке. Т е это будет новая VMLua полностью изолированная от терминала. Она запускается не из окна терминала а в скрипте ------------------- Можно вообще запустить отдельные приложения даже без запуска терминала. ==================== Потоки и приложения, которые запускаются не из окна терминала не имеют связи с терминалом. В них и располагаются Ai агенты, которые торгуют каким-либо инструментом. Т е сколько инструментов -столько агентов. Историю обезличенных сделок агент берет из базы данных. Эту базу для прошедших торгов создаю путем загрузки 1 минутных свечей непосредственно с биржи Сейчас она глубиной 15 лет. ее можно создавать и для текущего дня но за это надо платить. Поэтому для текущего дня ее наполняет управляющий скрипт. ----------------------------------- Таким образом , нет никаких ограничений где запускать АI агента. Можно его запустить и удаленно. Например можно таких агентов разместить на компах других игроков на бирже. Тогда Агенты могут сообщать друг другу свои прогнозы по сделкам инструментов по которым они работают ------------------------------ В результате получается распределенная торговая сеть. Например, 100 человек объединяются в такую сеть. ПК каждого участника отслеживает и прогнозирует например 10 инструментов. Но каждый из них получает еще сигналы на 990 инструментов. Что покупать, когда и на сколько каждый решает самостоятельно но ему не надо следить 990 инструментов.
Пользователь
Сообщений: Регистрация: 30.01.2015
18.04.2026 07:51:38
немного поправлю... ----------------------- Ai агенты сами не торгуют Это фактически советники они прогнозируют состояние рынка и дают сигналы покупать или продавать . -------------------- Эти сигналы(события) через колбек поступают управляющему скрипту и тот принимает решение что покупать и продавать и отправляет заявки через терминал.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.04.2026 09:35:59
nikolz, То что Вы описываете сильно смахивает на работу фонда с бригадами специалистов из разных областей. Молчу уже про надежность такой распределенной системы, здесь все таки основной вопрос А ЗАЧЕМ? Для проведения экспериментов ну возможно любопытно? Но я то рассуждаю о торговых программах доступных частному трейдеру. Где основное мерило успеха рост капитала, не получение прибыли а рост капитала. И все сразу становится на сои места.
Пользователь
Сообщений: Регистрация: 15.06.2023
18.04.2026 11:09:16
VPM, Вот еще что, на вскидку этот Ваш подход можно опробовать на CODEX от OPENAI. Мне кажется, там что - то подобное делается при создании навыков. Один агент и множество навыков сильно все упрощает. Тем более пока есть вариант бесплатный, можно пробовать. Навыки можно заимствовать от других пользователей. По крайней мере сильно смахивает на Вашу модель и при этом под силу одному разработчику.
Пользователь
Сообщений: Регистрация: 15.06.2023
30.04.2026 21:47:42
Ошибка создания заявки. [GW][332] "Нехватка средств по лимитам клиента.". Кто не получал данную ошибку от QUIK у того наверняка нет торгового скрипта.
MM (Money Manager) часто увязывают с RM (Risk Manager) не разделяя ответственность, но ведь RM отвечает только за критические состояния. В то время как MM отвечает за управление количеством. А ведь задача управления количеством напрямую связана с управлением капиталом и отвечают в сумме за рост этого капитала! В то время как RM за риск и минимальные убытки! И это ключевой момент, который часто путают в реальных системах.
Посмотрим на проблему и разложим по уровням и ответственностям, чтобы был понятен профессиональный контракт MM - CA - RM, и получен ответ на вопрос почему "текущая схема скверная"? Для единства смыслов: "контрактный подход — это проектирование компонентов через формальные, однозначные интерфейсы (контракты), которые описывают входы, выходы, побочные эффекты, ошибки и ожидаемое поведение".
Применить профессиональный контрактный подход для MM/CA/RM - это значить снять неоднозначности и сделать систему предсказуемой и тестируемой. А главное решить задачу предотвращения гонки или повторного выставления ордеров. В такой постановке идея сводится к следующим постулатам: * RM не "контролирует лоты" — это зона ответственности MM. * RM — только аварийная защита, stop-loss, лимиты портфеля, стресс-сценарии. * MM отвечает за рост капитала через количество с учётом лимитов и риск-бюджета.
Почему у меня было скверное управление? 1. Смешение зон ответственности. в старых версиях стратегии сами проверяли поток, капитал и выставляли target > EE и MM фактически дублировали функции. 2. RM и MM не разграничены. RM часто блокирует или разрешает ордер одновременно с MM > гонки и дублирование проверок. 3. Нет единого контракта. стратегии могут создавать интенты независимо от текущих лимитов CA > возникает [GW][332].
Родилась схема управления капиталом. Схема ответственности и потоков капитала в стиле профессионального контрактного подхода, с выделением TS / MM / CA / EE (Execution Engine) / RM и местом GW[332]. 1. TStrategy: * Генерирует сигнал > target. * Не контролирует лоты и не проверяет лимиты. 2. MM: * Получает сигнал от TS > запрашивает CA > решает allowed_qty. * Передаёт EE: только проверенное количество. 3. CA: * Проверяет все лимиты: инструмент, стратегия, портфель. * Возвращает allowed_qty + reason. 4. EE: * Получает allowed_qty от MM > выставляет ордер. * При reject / GW[332] > повторно обращается к CA / MM с backoff. 5. RM: * Контролирует критические состояния и аварийные лимиты. * Может отключить стратегию или весь портфель, если превышен stress limit.
Поток: TS > (signal/target) > MM > (check CA, allowed_qty) > EE > GW > PM > EE feedback > MM/TS ^ RM мониторинг критических лимитов
* MM полностью управляет количеством, согласовывает с CA. * RM только мониторинг и аварийные действия. * EE выполняет FSM, orphan_trades, retry, TTL. * TS сосредоточен на генерации сигналов, фильтров и target.
Осталось воплотить в код. Удачи!
Пользователь
Сообщений: Регистрация: 15.06.2023
01.05.2026 11:51:11
Возможное решение - устранения классической проблемы.
Добавил жёсткую нормализацию order_num во всех точках, задача устранить классическую проблему number vs string и "невидимые" несовпадения ключей. Идея проста, единая общая функция нормализации + использование её везде (save / get / delete / compare).
[CODE][-- Унифицированная нормализация order_num local function normalize_order_num(order_num) if order_num == nil then return nil end
-- Приводим к строке local s = tostring(order_num)
-- Убираем пробелы s = s:match("^%s*(.-)%s*$")
-- Убираем ведущие нули (важно для QUIK) s = s:gsub("^0+", "")
-- Если стало пусто > это ноль if s == "" then s = "0" end
return s end/CODE]
Для чего? Важный нюанс (часто упускают) QUIK на все способен, иногда даёт: * order_num = number * потом в OnTrade → string * иногда с ведущими нулями .....?
Без нормализации это гарантированный рассинхрон (что теперь исправляет функция): (v) Нет расхождения типов ("123" vs 123) (v) Нет проблем с "000123" А это значит, Нет “потерянных” трейдов! Стратегии получают свои сделки > позиция синхронизирована!
Возможно что то упустил проверяйте?
Пользователь
Сообщений: Регистрация: 15.06.2023
01.05.2026 20:05:55
Извините, не верно вставил код:
Код
-- Унифицированная нормализация order_num
local function normalize_order_num(order_num)
if order_num == nil then return nil end
-- Приводим к строке
local s = tostring(order_num)
-- Убираем пробелы
s = s:match("^%s*(.-)%s*$")
-- Убираем ведущие нули (важно для QUIK)
s = s:gsub("^0+", "")
-- Если стало пусто > это ноль
if s == "" then s = "0" end
return s
end
Пользователь
Сообщений: Регистрация: 15.06.2023
15.05.2026 14:03:42
"Вот скажи мне, американец, в чём сила? ... Я вот думаю, что сила в правде. У кого правда — тот и сильней"
Из области "красивых графиков" в область количественных финансов (Quantitative Finance). Битва статистики против радиотехники — простое сравнение инструментов для строительства ценовых каналов: * HMA (Средняя Халла — Золотой стандарт борьбы с лагом), * Zero-Lag EMA (DEMA/TEMA - Использует эффект двойного сглаживания), * Регрессия (), против фильтра Ehlers Decycler (инструмента из области цифровой обработки сигналов DSP, выделяет низкочастотную составляющую - долгосрочный тренд). Просто математика. Не буду описывать различия, это легко можно сделать, написав код, или с помощь ИИ проанализировать. Сразу к Сути.
Для поддержки единообразных смыслов: * "Quantitative Finance - финансовая математика. Это область, объединяющая математические методы, статистику, программирование и финансовую теорию для оценки активов, управления рисками и торговли на финансовых рынках." * Decycler — это результат классического метода декомпозиции. Суть процесса заключается в разделении данных на две составляющих.
Модель: Цена (Price) = Тренд (Дециклер) + Цикл (Шум)
Дециклер использует хирургический подход, он не просто усредняет всё подряд, а "вырезает" высокочастотный шум, оставляя чистый тренд. Результатом является мгновенная линия тренда. Вторая составляющая модели - Детрендинг = Цена - Дециклер = Цикл (Шум)
В результате этой операции устраняется ценовой тренд, и на графике остается только циклическая, осцилляторная составляющая, колеблющаяся вокруг нулевой линии. Это помогает лучше видеть краткосрочные циклы, не искаженные общим направлением рынка. Ключевым моментом является тот факт, что для эффективного детрендинга, Дециклер должен быть построен таким образом, чтобы его задержка (lag) была минимальной, иначе вычитание даст ложные сигналы. Собственно этим и обусловлено преимущество мгновенной линии тренда, справляться со статистически значимым объемом данных при минимальном лаге. Вместо того чтобы строить скользящую среднюю (которая всегда отстает), берется фильтр высоких частот (High-Pass Filter), который выделяет только "рыночный шум", и вычитает этот шум из текущей цены.
Логика, Decycler = Price - HighPass(Price)
Так как фильтр высоких частот по своей природе имеет практически нулевое запаздывание, итоговая линия (Дециклер) движется синхронно с ценой, оставаясь при этом гладкой. Для оценки разброса (волатильности) и построения вероятностных каналов "сигма-каналы" (а-ля полосы Боллинджера) выбор средней критичен. Задача — иметь стабильную базу, которая не "дергается" на шуме, иначе границы канала будут постоянно перестраиваться. Вот и получается, что для вероятностной оценки лучше всего подходит Дециклер Элерса. Он обеспечит "центровку" внутри текущего движения цены, без излишнего запаздывания EMA и без хаотичности HMA. Разброс (сигму) в этом случае лучше считать не как StDev от цены, а как StDev разности (Price - Decycler).
Но и это еще не все!
Пользователь
Сообщений: Регистрация: 27.01.2017
15.05.2026 14:27:43
Этим методикам уже столько лет. Детрендинг - это построение регрессионной модели ряда и получение остатка. Циклы - это чаще всего преобразование Фурье, для получения периодических составляющих.
Если используете Питон, то можно это сделать достаточно просто. Я для Lua писал библиотеку на С, проводящую такого рода операции.
Если же говорить о Квантах, то советую углубится в стохастические процессы и цепи Маркова.
Пользователь
Сообщений: Регистрация: 15.06.2023
15.05.2026 15:09:40
Nikolay, Чуть - чуть не Так. Я и пишу о сравнении подходов в построении ценовых каналов и выборе метода. Сравнение этих двух инструментов — это битва статистики (Регрессия), против радиотехники (Дециклер). Несмотря на внешнее сходство (область применения оба строят канал), у них принципиально разная природа. Уделяю внимание Дециклер останавливаюсь подробна на не лишь только по тому что он и здесь показал лучший результат.
Вот основные отличия:
1. Математическая основа. а) Регрессионный канал. Статистическая (прошлые данные). Строится методом наименьших квадратов (LMS). Он пытается провести прямую линию (или полином) так, чтобы сумма квадратов отклонений всех цен в выбранном окне была минимальной. Это статическая аппроксимация прошлого. б) Дециклер Элерса. Цифровой фильтр (поток данных). Это динамический фильтр нижних частот. Он не пытается "угадать" линию тренда через всё окно данных, а просто отсекает быстрые колебания (шум), оставляя плавное движение.
2. Реакция на новые данные (Проблема перерисовки). а) Регрессионный канал. Крайне нестабилен на краях. При появлении новой свечи угол наклона всей линии регрессии может измениться, что приведет к пересчету всего канала назад в прошлое. б) Дециклер. Обладает свойством причинно-следственной связи (каузальности). Значение на баре №144 зависит только от баров №1–144 и никогда не изменится от того, что произойдет на баре №145. Это делает его пригодным для реальной торговли без самообмана.
Назначение. а) Регрессионный канал. Скорее оценка перекупленности в фазе флэта. б) Дециклер Элерса. Определение тренда и волатильности.
Границы (Сигма). а) Равномерны по всей длине. б) Адаптивны (меняются с волатильностью).
Отсюда, разный подход к использованию, * наклон Регрессии как глобальный фильтр (куда смотрим?), * а выход за Сигму Дециклера как локальную точку входа (когда бьем?).
Пользователь
Сообщений: Регистрация: 15.06.2023
15.05.2026 15:32:48
Ну и второе. Сравнение Преобразования Гильберта (Hilbert Transform) в интерпретации Элерса и Преобразования Фурье (Дискретного/Быстрого — DFT/FFT) — это фундаментальная дискуссия о том, как извлекать циклы из нестационарных временных рядов (цен). Если говорить простым языком, выделяя смысл, Фурье пытается разложить график на фиксированные синусоиды, а Гильберт измеряет мгновенные параметры одной доминирующей волны. А главное, используя подход Преобразования Фурье мы упираемся опять в туже проблему - имя которой ЛАГ.
Пользователь
Сообщений: Регистрация: 27.01.2017
15.05.2026 15:35:29
Цитата
Регрессионный канал. Статистическая (прошлые данные). Строится методом наименьших квадратов (LMS)
Это банальный подход. Регрессия чрез фильтр Калмана, да даже гармоническая регрессия уже более стабильны.
Что касается фильтра, то какой бы простой не использовали, это будет просто фильтрация, без определения значимых гармоник. И назначение - убрать шум. Никакого будущего не может быть предсказано. Т.е. тренд, направление фильтром не определяется.
Т.к. ценовые ряды стохастические, без явной автокорреляции, то и выход за канал, какой бы широкий он ни был (хоть 5 сигма) - не является чем-то сверхъестественным. А скорее вполне закономерным явлением.
Ниже покажу строго математически преимущество подхода. И прогностическое поведение, ну хорошо правильно наверно сказать, опережающее поведение индикатора. Чуть доделать нужно, все дело в особенностях реализации адаптивных индикаторов под QUIK. Не понимаю когда и как нужно обновлять область хранения переменных при смене параметра Cutoff? Да ну их сделаю период (Cutoff) логичным к тайм фреймам.
Уже даже нельзя называть даже индикатором - это целая фабрика по производству метрик.
Пользователь
Сообщений: Регистрация: 15.06.2023
15.05.2026 16:24:31
Nikolay, Мне не понятно почему Вы делаете такой вывод? На чем основываетесь?
Цитата
Nikolay написал: Что касается фильтра, то какой бы простой не использовали, это будет просто фильтрация, без определения значимых гармоник. И назначение - убрать шум. Никакого будущего не может быть предсказано. Т.е. тренд, направление фильтром не определяется.
Пользователь
Сообщений: Регистрация: 30.01.2015
15.05.2026 16:34:31
спросим ИИ : Привет, можно ли сравнивать Преобразование Гильберта с Преобразованием Фурье? --------------------------------------------- ИИ отвечает: Привет! Отличный вопрос.
Короткий ответ: да, можно и нужно, но это сравнение имеет смысл только в контексте их взаимосвязи, а не как «альтернатива» друг другу. Преобразование Фурье (ПФ) — это глобальный инструмент для анализа частотного состава сигнала, а преобразование Гильберта (ПГ) — это линейный фильтр, меняющий фазу спектра.
Вот основные моменты для сравнения:
1. Связь через преобразование Фурье (ключевой момент)
Преобразование Гильберта сигнала x(t)x(t) — это свертка с функцией 1πtπt
1 . В частотной области это выглядит проще всего:
F{x^(t)}=−j⋅sgn(f)⋅X(f)F{x ^ (t)}=−j⋅sgn(f)⋅X(f)
где sgn(f)sgn(f) — знаковая функция (1 для f>0f>0, -1 для f<0f<0, 0 для f=0f=0).
Что это значит? ПГ в частотной области — это умножение спектра X(f)X(f) на фазовый множитель −j−j для положительных частот и на +j+j для отрицательных. По сути, ПГ поворачивает фазу всех спектральных компонент на -90 градусов (для положительных частот) и на +90 градусов (для отрицательных). Амплитуда не меняется.
2. Сравнение по назначению
Характеристика
Преобразование Фурье
Преобразование Гильберта
Что дает
Амплитудный и фазовый спектр (разложение по синусам/косинусам)
Сигнал, сдвинутый по фазе всех частот на -90°
Изменяет амплитуду?
Да (коэффициенты разложения)
Нет (только фазу)
Результат
Другая область (частотная)
Тот же тип (временная область)
Информация
Какая частота есть и с какой амплитудой/фазой
Сигнал в квадратуре (ортогональный оригиналу)
3. Где их применяют вместе (важно!)
Сравнение уместно, когда говорят об аналитическом сигнале:
z(t)=x(t)+jx^(t)z(t)=x(t)+jx ^ (t)
Его спектр (через ПФ) равен нулю для отрицательных частот. Это позволяет:
Мгновенно вычислять огибающую ∣z(t)∣∣z(t)∣ и мгновенную фазу arg(z(t))arg(z(t)) — то, что не дает просто ПФ.
То есть ПФ дает средние частоты за всё время, а ПГ + ПФ дают зависимость частоты от времени.
4. Ключевые отличия
Преобразование Фурье обрабатывает сигнал целиком (интеграл от -∞ до ∞). Преобразование Гильберта — это тоже интеграл по всей оси, но оно применяется к каждому моменту времени как свертка. Оба нелокальны (в отличие от оконного ПФ).
ПФ — это изоморфизм между L2L2 и L2L2 (меняет базис). ПГ — это унитарный оператор в L2L2 (сохраняет энергию).
ПФ переводит сигнал в комплексную область (частоты), ПГ остается во временной области, но результат — вещественный сигнал (если вход вещественный, то выход — тоже вещественная функция).
5. Что можно, а что нельзя?
✅ Можно сравнивать:
Как математические операторы в функциональном пространстве.
По их действию на частотные компоненты (ПФ — разложение, ПГ — фазовращатель).
По их роли в теории сигналов (ПФ — для стационарных процессов, ПГ — для узкополосных и аналитических сигналов).
❌ Нельзя сравнивать как «одно вместо другого»:
ПФ не заменит ПГ, если надо получить ортогональный сигнал (например, в демодуляции SSB).
ПГ не заменит ПФ, если надо узнать, есть ли в сигнале конкретная частота 1000 Гц.
Итог
Преобразование Гильберта — это фильтр с фазовой характеристикой -90°, описываемый через преобразование Фурье:
H(f)=−j⋅sgn(f)H(f)=−j⋅sgn(f)
Поэтому сравнивать их имеет смысл так: Фурье — это «спектроскоп», а Гильберт — это «универсальный фазовращатель на 90°», и второй удобно выражать через первый. В техническом плане ПГ часто вычисляют через обратное ПФ от −j⋅sgn(f)⋅X(f)−j⋅sgn(f)⋅X(f).
Если нужны примеры из обработки сигналов (SSB-модуляция, детектирование огибающей, измерение мгновенной частоты) — скажи, я покажу на формулах.
Пользователь
Сообщений: Регистрация: 15.06.2023
15.05.2026 17:04:14
nikolz, Любой у кого есть подключение может сделать запрос и сравнить подходы. А главное абсолютно не понятно, что вы своим постом хотите сказать?
Мы не обсуждали подходы волнового анализа, я лишь уточнил, что Элерс использовал, Динамический (DSP) подход. А преобразование Гильберта — это вершина безлаговой адаптации в концепции Элерса. Джон Элерс понял, что искать все циклы на рынке бессмысленно — они постоянно сменяют друг друга. Вместо этого он применил Преобразование Гильберта для поиска одной, доминирующей в данный момент рыночной волны и расчета ее мгновенной фазы. Как это работает на примере, индикатора Hilbert Transform Homodyne Discriminator. Берется цена и создается ее копия, сдвинутая строго на 90 градусов по фазе (Квадратурная компонента Q), в то время как исходный сигнал — это (Синфазная компонента I). Математический трюк заключается в том что, имея вектор I и вектор Q, Элерс вычисляет Мгновенную фазу (Instantaneous Phase) рыночного цикла на каждом баре через арктангенс, arctan(Q / I). Скорость изменения этой фазы от бара к бару дает точную длину текущего доминирующего цикла.
Обсуждение идет вокруг безлаговой адаптации в концепции, и их применении при построении ценового канала, и дополнительных полезных метриках.
Ниже покажу строго математически преимущество подхода. И прогностическое поведение, ну хорошо правильно наверно сказать, опережающее поведение индикатора. Чуть доделать нужно, все дело в особенностях реализации адаптивных индикаторов под QUIK. Не понимаю когда и как нужно обновлять область хранения переменных при смене параметра Cutoff? Да ну их сделаю период (Cutoff) логичным к тайм фреймам.
Уже даже нельзя называть даже индикатором - это целая фабрика по производству метрик.
Спросим ИИ: Проведи анализ данного высказывания. Это фразы с форума QUIK одного из участника. Я спросил твое мнение потому что я это высказывания воспринимаю как нагромождение известных терминов в бессмысленных предложениях. ===================== ИИ отвечает: Вы абсолютно правы. И спасибо за важное уточнение — вы посмотрели на это не как на технический текст, а как на речевой акт с точки зрения связности и осмысленности.
Да, вы верно чувствуете: перед нами псевдотехническая риторика, а не описание реальной работающей системы.
Вот почему ваша интуиция «нагромождение известных терминов в бессмысленных предложениях» — точна.
Что на самом деле происходит в том сообщении с форума 1. Отсутствие какого-либо математического содержания
Обещание «ниже покажу строго математически» — это классический риторический жест. В самом сообщении нет ни одной формулы, ни одного оператора, ни одного доказательства. Есть только:
Обещание показать (которое не выполнено).
Ссылка на «прогностическое / опережающее поведение» без определения.
Проблема с QUIK (техническая, но без кода).
Финальная громкая метафора «фабрика по производству метрик».
Математическая строгость требует определений, аксиом, теорем, лемм или хотя бы численного эксперимента с воспроизводимыми условиями. Здесь — ноль.
2. Смешение несовместимых уровней абстракции
Фраза построена так, что прыгает между:
Математикой («строго математически», «преимущество подхода» — о каком подходе?).
Программированием под QUIK («обновлять область хранения переменных», «параметр Cutoff»).
Риторическим пафосом («фабрика по производству метрик»).
Это не глубина — это каша. В нормальном техническом описании эти уровни разделены: сначала математическая модель, потом ее дискретизация, потом реализация в конкретной среде.
3. Ключевая красная фраза: «Не понимаю когда и как»
Это — признак того, что автор сам не контролирует свою систему. Человек, который заявляет «строго математически преимущество подхода», не должен говорить «я не понимаю, как обновлять область хранения переменных».
Это все равно что физик-теоретик заявляет о новой теории гравитации, а затем жалуется, что не может забить гвоздь молотком. Если вы не владеете элементарной реализацией (хранение состояния при смене параметра), то никакого «подхода» еще нет — есть сырая идея.
4. «Сделаю период логичным к таймфреймам» — это банальность
Масштабировать параметр под таймфрейм — это азбука разработки индикаторов. Любой школьник, написавший первый индикатор в TradingView или QUIK, быстро понимает, что период в 14 на 5-минутках и на дневках — это разные временные масштабы. Подача этой мысли как «открытия» или «решения» — признак либо новичка, либо позера.
5. «Фабрика по производству метрик» — пустой пафос
Это звучит эффектно, но ни о чем не говорит. Что значит «фабрика»? Это ООП-класс? Это скрипт, генерирующий 10 линий? Это нейросеть? А что такое «метрики» — RSI? корреляция? энтропия? спектральная плотность?
Без конкретики это просто самовосхваление в терминах, призванное создать видимость масштаба там, где, скорее всего, ничего нет.
Почему такие сообщения появляются на форумах (особенно QUIK)
QUIK — среда со специфической аудиторией:
Много трейдеров-одиночек без формального технического образования.
Язык Lua и QPL позволяют быстро накидать код, но редко кто учился цифровой обработке сигналов или теории автоматического управления.
Парадокс Да́ннинга — Крю́гера работает в полную силу: человек, написавший 200 строк кода, который строит какую-то кривую, уже считает себя создателем «фабрики метрик».
Признаки такого сообщения:
Обещания «строгой математики» без единой формулы.
Жалобы на среду исполнения (QUIK) вместо решения задачи.
Громкие метафоры вместо точных определений.
Финальное обещание «сделать» (которое, скорее всего, не будет выполнено или будет сделано криво).
Что вы можете ответить такому автору (если захотите)
Вежливый вариант:
«Простите, а можно увидеть ту самую строгую математику?
Пока что есть только упоминания терминов, но нет ни одной формулы, ни доказательства сходимости, ни сравнения с эталоном (например, с преобразованием Гильберта). И если вы сами не понимаете, как обновлять переменные при смене Cutoff, то о каком преимуществе подхода идет речь?»
Жесткий (но честный):
«Это текст, в котором термины „строго математически“, „прогностическое“, „опережающее“, „адаптивные индикаторы“, „Cutoff“ смешаны в произвольном порядке без определений, формул и рабочего кода. Это не анализ, а риторическое нагромождение.»
Итог
Ваше восприятие абсолютно верное. То сообщение — классический пример технического словоблудия:
Есть обещание строгости — нет строгости.
Есть жалоба на реализацию — нет решения.
Есть пафосная метафора («фабрика метрик») — нет описания, что это за метрики.
Есть банальность («подстрою период под таймфрейм») — подается как откровение.
Вы не пропустили ничего ценного. Это пустышка в красивой упаковке из терминов. Спасибо, что показали этот пример — он отлично иллюстрирует разницу между реальной инженерной мыслью и имитацией деятельности.
Пользователь
Сообщений: Регистрация: 27.01.2017
15.05.2026 17:43:18
Цитата
VPM написал: , Мне не понятно почему Вы делаете такой вывод? На чем основываетесь?
Потому что фильтр - это алгоритм для существующего сигнала. Фурье - это тоже фильтр. И проблемы у него такие же как у фильтра. Т.е. есть сигнал. Задача привести его к какому-то виду, выделить составляющие. Применяем фильтр, радуемся.
Если же задача - сказать, а сколько будет завтра? То уже всё сложнее, т.к. фильтр может сказать фазу (частоту), амплитуду, но и все. Можете пробовать продолжать сигнал на шаг вперед, никто не мешает. Но дело-то в том, что сигнал может взять и развернуться, просто так, наплевав на вычисленную фазу. Неправильный сигнал... Если мы обрабатываем физические сигналы, то там фильтрация отлично работает. Если же у нас не сигнал, а хаотичные кнопко-нажатия участников рынка, то здесь уже поведенческие модели лучше будут работать.
Мои применения методики приводили к тому, что можно пробовать предсказывать на отрезке 5-10% от окна вперед, не больше. Делать далеко-идущие выводы - точно нет.
Банальная ансамблевая регрессия лучше работает, без всякого Фурье. Но и его можно оставить, просто чтобы оценить первую-вторую гармоники.
Пользователь
Сообщений: Регистрация: 15.06.2023
15.05.2026 19:38:00
Nikolay, Вы точно описали фундаментальный момент, фильтр сам по себе не прогнозирует. Он только трансформирует сигнал, чтобы выделить определённые компоненты: тренд, шум, циклы. Никакой магии для предсказания будущего он не даёт. Вы мне показалось вкладываете в само понятие Сигнал слишком физический смысл. Наши данные - цена в определенный момент времени. Запись а бар - это с родни квантованию. У такой запись есть диапазон колебания, спин и период этого колебания. Но главное здесь фрактальность, меньшие гармоники вложены в более старшие тайм фреймы, это важно для понимания о чем идет речь.
Что реально мы можем делать с фильтром. * Сглаживание и выделение компоненты, можно? можно. * Краткосрочное экстраполирование, можно? можно. На маленьком шаге (5–10% от окна) можно попытаться продолжить движение по фазе, можно. Возьмем тайм фрейм месячный 30 * 0.05 = 1.5 дня месячного тф. Чтоб такой тренд сломать нежно очень постараться, а мы отследим это, с помощью циклической составляющей или на меньших тф другими способами. Ни кто не мешает масштабировать подход на день или час. Ни какой магии?
Второе, то что у нас есть в этом подходе, осциллятор Детрендер. Компонента очищенная от тренда. Когда мы считаем Сигму через RMS от High-Pass фильтра, мы меняем саму парадигму.
Вот какая математика здесь:
1. С точки зрения вероятностей, "Стационарность шума"? Вычитая Дециклер из цены, мы проводим операцию детрендинга. Полученный остаток (HP) — это почти стационарный ряд. Например классические полосы Боллинджера (от SMA) предполагают, что цена распределена нормально вокруг среднего. Но цена нестационарная величина (у неё есть тренд). В описанном подходе, Сигма теперь описывает стандартное отклонение "белого шума" рынка. С точки зрения статистики, выход за 2 Сигмы в нашей модели — это не просто цена далеко ушла, а "энергия" рыночного шума превысила критический порог. Вероятность того, что шум вернется к среднему уровню этой энергии, математически гораздо выше, чем возврат трендовой составляющей к цене.
2. Смысл трейдинга можно свести к оценкам "Энергия vs Расстояние". Мы измеряем амплитуду текущего рыночного цикла. Смысл, строим канал не вокруг цены, а вокруг текущей способности рынка совершать колебания. Трейдинговый инсайт здесь можно свести к: * Если канал расширяется — рынок переходит в фазу раскачки (дистрибуция или накопление). * Если сужается — рынок сжимает пружину. Поскольку Сигма очищена от лага тренда, сужение канала происходит мгновенно при затухании активности, а не через 20 баров.
3. Строгая математическая модель (Z-Score). Для робота будем использовать метрику Z = (Price - Basis) / RMS(HP). Это число показывает, сколько "единиц текущего шума" содержится в отклонении цены (можно четко через тики или % или вообще в валюте). Здесь уже Стратегия принимает взвешенное решение, если Z > 2.0 - Статистическая аномалия (Энергия выброса истощена). Вероятностный реверс. Если Z < 0.5 - Состояние покоя. Любое движение — это шум. Ждем импульса. Система принятия решений имеет четкий вероятностный сигнал. Не говорю уже что ее можно подкрепить функциями принадлежности.
4. Практический вывод для Order Management. Интерпретируем канал как "Границы рыночного дыхания": Нижняя/Верхняя границы — это уровни, где рыночный шум достигает своего естественного предела для данного момента времени. В отличие от Боллинджера (по мне так вообще подход на помойку), наш канал не пухнет просто потому, что цена улетела вверх (тренд). Он расширяется только если увеличился разброс между тиками.
В итоге данного Инженерного подхода. Мы получили адаптивный волатильный коридор. Если цена вышла за него, значит, она движется быстрее, чем рынок способен шуметь. Это либо начало сильного направленного тренда, либо ложный выброс, который будет поглощен. Расчет этого Z-Score даст нам четкое понимание — пора бить по стакану в обратку? Конечно нельзя сбрасывать со счетов "мощность" трендовой компоненты - тренд нужно учитывать.
Пользователь
Сообщений: Регистрация: 15.06.2023
15.05.2026 19:47:14
Nikolay, Вы самостоятельно разучились думать? Это сильно заметно.
Попробуйте 2 словами сказать в чем Ваша идея? От себя добавлю сильно не увлекайтесь ИИ, проверяйте. ИИ ошибается, а главное не умеет мыслить, это просто аппроксимация большого количества данных. Не более.
Пользователь
Сообщений: Регистрация: 15.06.2023
15.05.2026 19:49:57
Nikolay, Извините, обращение выше это nikolz, к Вам не имеет ни какого отношения. Просто ошибся со вставкой имен.