Система принятия решений и/или Нечеткая логика(FuzzyLogic)

Страницы: Пред. 1 ... 15 16 17 18 19 След.
RSS
Система принятия решений и/или Нечеткая логика(FuzzyLogic), Нечеткая логика или Система принятия решений в трейдинге
 
Nikolay,  Именно так, как Вы описали, я начинаю рассуждать, когда сильно усердствовал над какой то идеей, а по результатам в системе принятия решений "пшик".

Эмоциональность моих высказываний не сколько не выше, допустим подобных высказываний: "Дайте прибыли течь ...". В приведённом Вами отрывке, хотя бы можно выделить алгоритм и даже запрограммировать его. Если кого то, смущает слово "ракета", так это просто наследство от автора подхода, который рассмотрен в посте. На мой взгляд даже подчеркивает авторство.

Но давайте по порядку. Определимся с рядом постулат для отражения общих смыслов и понятий.

Первое. Давайте на некоторое время отрекаемся от дисциплин: физики, химии, биологии и так далее и уж тем более от психологии. Что объединяет все эти дисциплины - математика. В нашем случае просто как единый язык междисциплинарного общения. Но не забываем про фундаментальный законы, которые на своем языке описывают эти дисциплины.

Второе. Нам нужно определить с понятием "Сигнал", отречься от аналогового сигнала и полей типа (E*H). Будем рассуждать о цифровом бинарном сигнале (0;1). Чтобы перейти к цифровой аналогии аналогового сигнала, нужно еще постараться с преобразованиями и не наделать в них ошибок. Тем немение, подобная азбука Морзе, позволила создать вычислительные машины, в том числе на которых общаемся.

В таком подходе, у нас остались фундаментальные законы (природные операционные закономерности) на чем собственно Мир держится, математика как язык общения и описания этих закономерностей.

Вспомним как поступали 150 лет назад, имея только карандаш и лит бумаги. Да технический анализ (1 - покупки; 0 - продажи), запись 111100 = тренд повышательный с коррекцией. С тех пор ничего не изменилось так как в самом движении есть фундаментальные вещи. Как работал волновой анализ Элиота так и продолжает работать. Как была фрактальность на рынках так и есть. Микро структуры вложены в более старшие (игрушка - Матрешка). Как читали ленту в поисках ввода/вывода крупных средств на/из рынка, так и читают.

Вы посмотрите на график акций месячного масштаба, когда деньги были в рынке и сегодня когда их нет. В пером случае тенденция продолжается годами и подчиняется законом технического анализа 150 летней давности. Почему месячный - просто там все крупные деньги, и логика и механика размещения не поменялась. Нужно накопить позицию двинуть и выйти.

Говоря о микро структурном анализе нужно говорить о периоде удержания позиции, стратегий в рамках которых он применяется, иначе все просто без с мысленно, тем более их применения в QUIK с его мили против нано (попалось в статье). Но если на старших устоявшийся тренд то и подход должен быть соответствующий горизонту планирования.

Касаемо подхода который описал, так его легко проверить, дописать счётчик, и проверить статистику. Попадаем в 5% все ОК. У нас нормальное распределение, нет на "помойку".

В мое описании только принципы, нет важных деталей, это должен сделать каждый сам. Например, у себя делаю компенсацию лага. Руководствуясь соображениями теории вероятностей, стандартное отклонение (StDev) отражает волатильность актива (ширину "шума"). По статистическому правилу нормального распределения (или правилу 68-95-99.7), около (68%) всех ценовых движений укладываются в пределы 1 стандартного отклонения от среднего. Около (68%) всех ценовых движений укладываются в пределы 1 стандартного отклонения от среднего. Умножая StDev на 0.5, вы получаете так называемое медианное ожидаемое значение шума (половина от стандартного диапазона). Но и этого не достаточно. Его нельзя на прямую применять, у себя я еще считаю градиент и использую как коэффициент.

Ведь вещь очевидная что результаты получим разные!
 
Да и торгуем пунктами в условиях вероятностного исхода. А для оценки системы нужны статистические метрики, такие как мат. ожидание, профит фактор, % прибыльных сделок как минимум.
 
Важно! Или просто о сложном, сложном (для меня), а для кого - то возможно просто. Почему градиент?

Для единого понимания смыслов, просто зафиксирую.
 * Градиент (grad) — операция, которая превращает скаляр (скорость) в вектор, появляется дополнительный параметр - направление. Показывает направление роста скалярной величины и скорость этого роста. Мгновенное значение векторного поля.
 * Обратная операция - Дивергенция (div), операция, которая превращает вектор в скаляр. Показывает, является ли точка "источником" или "стоком" векторного поля. Эти понятия из векторного анализа, составляет основу этого анализа.
 * Излагая концепцию, нужно сказать о третьей операции - Ротор (rot), операция, которая превращает вектор в другой вектор. Описывает вращательную способность поля вокруг точки. Направление вектора ротора определяет ось вращения по правилу правой руки, а длина — интенсивность завихрения.

Собираем все вместе. Задача, рассуждаем о движении цены, как результате некоторого взаимодействия. В рамках данной концепции, представляем цену как некое физическое тело (абстракция), движущееся под воздействием сил спроса и предложения. Это далеко не ново, например в квантитативных финансах (Quant Finance), графики часто анализируют через уравнения математической физики.
Наша задача сводится к проведению междисциплинарной аналогии, между физическими смыслами (природными операционными механизмами), понятиями из цифровой обработки сигналов (DSP) их переносе на финансовые графики. В этой модели движение цены рассматривается как сложный волновой сигнал, состоящий из наложения множества циклов разной природы. И введем сюда векторный анализ. Как? Выше есть в моих постах описание куба состояний (законченная модель цикла). Каждая вершина рассматривается, как начало координат векторов i,j,k, за которыми закрепляются понятия не только из трейдинга но и физические и всей данной концепции и даже метафизические. Такая модель легко расширяется, можно добавлять бесконечно параметры. Для этого куб вписывается в единичный шар, поверхность которого можно описывать бесконечным множеством векторов (параметров). Ну конечно в рамках смыслов!

Объединение векторного анализа, теории сигналов (DSP) и гидродинамики создает единую, строгую концепцию рынка. В этой концепции трейдинг — это не хаотичное блуждание цены, а процесс гидродинамического движения капитала в многомерном пространстве ликвидности. Сквозная математическая и физическая модель, связывающая все элементы в единую систему.
Остается лишь описать "Анатомию рыночного процесса", в рамках единой концепции, оперируя природными операционными механизмами, двойственностью как фундаментом этих механизмов.

Представление рынка как поля состояний. Тогда интерпретация рынка будет выглядеть так: "Рынок — это не «волны цены», а стохастическая адаптивная система потоков ликвидности с нелинейной обратной связью". Следовательно, FFT, векторный анализ, DSP, гидродинамика, двойственность, становятся не буквальной физикой рынка, а языком приближений для описания структуры потока ордеров. А ключевая идея всей модели и данной концепции: "рынок — это не объект, а поле состояний", которое мы можем оживлять, внося динамику процессов, ну и конечно смыслы.
И тогда:
цена — локальное состояние,
ликвидность — распределение потенциала,
ордер-флоу — поток,
моментум — локальная скорость поля,
волатильность — амплитуда колебаний,
тренд — устойчивое направление градиента.

А всего лишь ввели гдраиент, градиент здесь нужен не как математическая формула ради формулы, а как механизм рождения направленности из состояния!
 
Важное уточнение.
В этом подходе нужно четко понимать и определять двойственность, как фундаментальное отношение двух состояний системы, то есть - это уже абсолютно вычисляемая конструкция. Двойственность — не какая то абстрактная философия, а механизм возникновения структуры через различие. То есть двойственность — это фактически, примитив операционного различия.

Главное, для алготрейдинга в том что, двойственность:
* можно вычислять,
* можно кодировать,
* можно измерять,
* можно строить как ядро модели.

Если убрать вычислимую двойственность, то ломается вся архитектура концепции. Потому что именно отношения:
* создают напряжение,
* напряжение рождает градиент,
* градиент рождает поток,
* поток рождает структуру рынка.

В конечном итоге в концепции, появляется очень красивая структура.
# Скаляр. Абсолютное состояние.
# Двойственность. Отношение состояний.
# Градиент. Направление изменения отношений.
# Векторное. поле Организованная структура отношений.
# Дивергенция. Локальное усиление/затухание отношений.
# Ротор. Циклическое перераспределение отношений.

И более того, практически все современные теории, физика, DSP, экономика и трейдинг построены именно на отношениях. Вот и у нас.
 
Идея заменить разности цен их отношениями (перейти от арифметической шкалы к геометрической/логарифмической) — это шаг, который переводит расчет индикатор из абсолютных значений в относительные.

Что на практике дает подход для трейдинга.

1. Цены. Проблема абсолютных значений широко известна. Обычные индикаторы считают приращения в пунктах или рублях/долларах (Delta = Price1 - Price2), то есть Актив меняется в цене. Если акция выросла с 10 до 100 рублей, то колебание на 2 рубля в начале истории — это огромный сдвиг на 20%, а в конце истории — это незаметный шум в 2%. В результате, Классические индикаторы на больших исторических периодах "сходят с ума". Они недооценивают волатильность в прошлом (когда цена была низкой) и переоценивают её в настоящем (когда цена высока).

2. Разности цен vs Отношения цен. Переход на отношения (Ratio = Price1 / Price2) или логарифмы отношений (100 * ln(Price1 / Price2)) кардинально меняет свойства данных. Зафиксирую.
 * Разности цен - Арифметический подход (АП)
 * Отношения цен - Геометрический подход (ГП)
Зависимость от масштаба, АП - Высокая (искажает историю при росте актива);  ГП - Полностью отсутствует (масштабо независима).
АП - Нельзя сравнивать разные активы (например, Сбербанк по 260 руб. и Газпром по 130 руб.); ГП - Можно сравнивать любые активы между собой напрямую.
Природа рынка, АП - Не соответствует рыночной логике (рынок мыслит процентами доходности); ГП - Идеально соответствует (отражает процентное изменение капитала).

3. Математическое преимущество, непрерывная доходность (ln) В моем коде используется 100 * log( l0 / l1). В эконометрике это называется непрерывно начисляемой доходностью (log-returns). Это даже лучше, чем просто отношение, по трем причинам:
 а) Симметричность падения и роста, если цена выросла со 100 до 200 (+100%), а потом упала с 200 до 100 (-50%), обычные проценты не симметричны. Логарифм же даст, ln(200/100) = 0.693 и ln(100/200) = -0.693. Они равны по модулю. Для осцилляторов и индикаторов силы тренда (как ADX) это критически важно — сила движения вверх и сила движения вниз измеряются линейно одинаково.
  б) Аддитивность, сумма логарифмов приращений за 5 дней строго равна логарифму приращения за весь 5-дневный период. С обычными разностями или процентами это не работает.
  с) Нормализация, например True Range (TR), в ADX движение (+DM; -DM) делится на Истинный Диапазон (TR), если и числитель, и знаменатель переведены в логарифмы, то ADX становится абсолютно очищенным от цены "индексом чистого процента".

4. Переписал у себя классический ADX Уайлдера, реализовал с этим подходом. Не которые плюсы и минусы идеи, для индикатора ADX, вышли на поверхность.
 а) Плюсы. Идеальный бэктест, на исторических данных больших промежутках (за 5–10 лет) индикатор должен работать одинаково хорошо на всем промежутке. Его не придется пере оптимизировать из-за того, что цена акции выросла в 5 раз. Мультирыночность, один и тот же робот с одними настройками ADX сможет анализировать и фьючерс на индекс МосБиржи (десятки тысяч пунктов), и дешевую акцию (несколько рублей). Устойчивость к гэпам, на утренних гэпах логарифмический ADX не будет улетать в космос так сильно, как классический, поскольку он сглаживает экстремальные скачки.
 б) Но есть и Риски и подводные камни. Проблема околонулевых цен, если актив стоит копейки (например, фьючерс вблизи экспирации), деление на очень маленькое число или логарифм близких к нулю долей может вызвать резкие скачки - шум. Возможна потеря чувствительности на флэте. На низко волатильном рынке логарифмические приращения становятся очень маленькими, и скользящие средние внутри ADX могут начать "слипаться", выдавая ложные сигналы затухания тренда. Чтобы не возникало Искажение, нужно что бы функция (True Range) в расчетах тоже была переведена на логарифмы! Если pDM и mDM считаются через log(Ratio), а fTR считает классический (High - Low) в пунктах, то формула (100 * pDM / iTR) математически разрушится (будем делить проценты на рубли).

В Результате использование отношений и логарифмов вместо разностей — это идея, которая приближает технический анализ к законам количественного анализа (Quant Trading). Она полностью решает проблему старения исторических данных. А главное, за чем нужно следить при реализации в коде, должна соблюдаться абсолютная однородность данных. Все компоненты (High, Low, Close, TR) внутри этого расчетного ядра, должны быть переведены в логарифмические приращения.
 
Дирекционные Индексы (+DI и -DI), в место классического подхода, обработал фильтром ZLEMA (Zero Lag EMA). К самому ADX применил SuperSmoother фильтр из DSP. Теперь, когда линия ADX стала идеально гладкой за счет двухполюсного фильтра SuperSmoother, ее можно и нужно сравнивать со своим прошлым значением. В экономико-математическом смысле знак первой производной (ADX[t] - ADX[t-1]) теперь четко отделяет фазу тренда от фазы коррекции (флэта), без ложного шума - пилы. Поскольку лаг компенсирован, а линия гладкая, математическая логика определения Тренд / Коррекция, теперь сводится к простому правилу:
 Если (ADXcurrent > ADXprevious) — рынок находится в активной фазе тренда (неважно куда, вверх или вниз).
 Если (ADXcurrent <= ADXprevious) — тренд затухает, рынок перешел в фазу коррекции, консолидации или флэта.

Что касается компенсации лага самого ADX, мы можем применить к нему тот же математический подход, что и для DI, но адаптированный под специфику итоговой линии. Поскольку ADX сглажен с помощью SuperSmoother, у него уже очень низкий фазовый сдвиг по сравнению с классической EMA. Идеальное инженерное решение здесь — линейная экстраполяция Тейлора первого порядка, идея  ( 2 * Out - Out1), но примененная строго на выходе из фильтра SuperSmoother. Это подтолкнет линию вперед по вектору движения, сохранив ее гладкость. Связка ZLEMA + SuperSmoother + Линейный разгон полностью меняет поведение ADX.

Применение векторного анализа к индексу DX (Directional Trend Index) — это высший пилотаж в разработке и не только торговых систем. Переход от скалярных величин к векторным позволяет полностью переосмыслить природу тренда!

В классическом варианте DX — это скаляр (абсолютная величина, не имеющая направления). Посмотрим на его каноническую формулу, в числителе, DX всегда положителен (применен модуль). Он показывает только интенсивность разбалансировки рынка. Возникает некий инженерный тупик. Глядя на скалярную величину, например DX = 70, робот знает, что на рынке мощный тренд. Но он физически не знает, куда этот тренд направлен — вверх или вниз. Ему приходится делать второй логический шаг, запрашивать значения pDI и mDI и сравнивать их между собой. Это создает лишние ветвления в коде, увеличивает лаг принятия решения.

Зафиксирую. Вектор в двумерном пространстве определяется двумя характеристиками:
 * длиной (модулем)
 * и направлением (углом).
 
Мы можем представить состояние рынка на каждом баре как точку на координатной плоскости, где:
 * Ось X — это сила быков (pDI).
 * Ось Y — это сила медведей (mDI).
Следовательно, состояние рынка — это радиус-вектор vec{V} = (pDI; mDI). Здесь достигается и взаимно дополнительность этих двойственных отношений (ортогональность).

Но анализировать абсолютные координаты неудобно, так как они зависят от волатильности. Нам нужен вектор относительного импульса vec{DX}. Для этого, убираем модуль из формулы и получаем знаковый векторный дифференциал. Теперь наш вектор  живет в одномерном векторном пространстве на оси [-100; +100]. Получаем геометрический смысл вектора:
vec{DX} -> +100 Вектор силы рынка полностью развернут в сторону покупателей. Чистый, экспоненциальный бычий тренд.
vec{DX} ~= 0      Вектор находится в точке баланса. Силы равны, на рынке абсолютный флэт.
vec{DX} -> -100  Вектор силы полностью направлен в сторону продавцов. Чистый медвежий тренд.

Когда мы превратили DX в вектор, мы можем применять к нему операции математического анализа, недоступные для обычного ADX.  
Экономико-математические преимущества векторного анализа:
А. Скорость вектора (Первая производная dvec{DX}/dt ) В место того чтобы просто смотреть, растет ADX или падает, мы считаем разность векторов между текущим и прошлым баром: Velocity vec{DX}[t] - vec{DX}[t-1] Если Velocity > 0 при положительном vec{DX} — тренд вверх ускоряется. Если Velocity} < 0 при положительном vec{DX} — тренд вверх замедляется (сигнал на фиксацию прибыли, хотя цена еще может идти вверх).

Б. Ускорение вектора (Вторая производная d^2vec{DX}/dt^2) Acceleration = Velocity[t] - Velocity[t-1] Это чистый опережающий квантовый фильтр. Момент, когда Acceleration меняет знак с плюса на минус на вершине тренда, происходит за 2–3 бара до реального разворота цены. Это позволяет разгружать позицию прямо на "хаях"!!!

Для интеграция вектора в алгоритм, нужно модифицировать финальную часть нашей функции ADX.Log_v4. Вместо того чтобы отдавать классический ADX (сглаженный скаляр) и две линии DI,
мы заставим ядро вычислять вектор vec{DX}, сглаживать его через SuperSmoother и отдавать три чистые векторные величины:
 * V_ADX — Векторный ADX (направление и сила тренда в одной линии от -100 до +100.
 * V_Velocity — Скорость изменения вектора (импульс).
 * V_Acceleration — Ускорение (опережающий триггер).
 
Теперь трейдер или робот читает векторный анализ примерно так:
 Вход в Лонг (Идеальная точка). V_ADX выше нуля, V_Velocity > 0 и V_Acceleration только что пересекло ноль снизу вверх.
 Выход из Лонга (Опережающий). V_ADX все еще высоко в положительной зоне (например, +65), но V_Acceleration уже упало ниже нуля, а V_Velocity развернулось вниз. Цена еще растет на инерции, но векторное поле рынка сигнализирует -> топливо у покупателей закончилось.

Переход на векторный анализ DX убирает из кода робота, громоздкие конструкции сравнения линий и сводит весь анализ тренда к знакам трех чисел. У себя я ни чего не убираю, просто собираю все в таблицу и распаковываю уже в OnCalculate или роботе тот формат который требуется.
По аналогии переписал и RSI.

И все это красиво, математически строго, вписывается в единую концепцию приведенную выше! Этот подробный разбор того, как с помощью универсального языка математики, возвращаем междисциплинарные смыслы, собирая разные конструкции. А добавьте еще смыслы разговорного языка, например русского (строится от корня элегантно создавая и меняя Смыслы), но это уже совсем другая тема.

На самом деле кому покажется сложно или не очень понятно изложение, на ютуб можно поискать видео, векторного анализа, мат. анализа, DSP и прочие темы с визуализацией.
"Вот и сказочки конец, а кто слушал молодец".  Удачи.
 
Если с вычислительной математикой индикатора разобрались, то возникает следящая проблема - интеграции индикаторов в терминал QUIK.
 Проблема А - нулевого (текущего) бара ("Дерганья");
 Проблема Б - утечки памяти при некорректном кэшировании.

Вот и у меня. Поскольку индикатор ADX_v4 использует рекурсивные фильтры (ZLEMA, SuperSmoother) и исторические лаг-компенсаторы, каждый тик на текущей (незакрытой) свече будет необратимо перезаписывать историю, если не изолировать расчеты.

Памятка. "Строгая техническая спецификация оптимизации под архитектуру QUIK".

1. Проблема А. Дерганье и Накопления Ошибок на Последнем Баре.
Терминал QUIK вызывает функцию индикатора на каждом входящем тике (сделке) для текущего индекса свечи I == Size().
 * Опасность для рекурсии: В строке zlema[I] = current_zlema на незакрытом баре записываем промежуточное тиковое значение в массив по индексу I. На следующем тике (внутри той же секунды/минуты) функция вызывается снова. Но в ячейке zlema[I-1] всё еще лежит значение прошлого закрытого бара, а вот в zlema[I] уже сидит искаженное значение от предыдущего тика. Происходит "эффект бабочки", рекуррентные коэффициенты накапливают ошибку внутри одной свечи. Когда свеча закроется, её историческое значение окажется полностью искаженным.
 * Техническое решение проблемы заключается, запретить на незакрытом баре изменять постоянные исторические массивы. Расчет текущего тика должен производиться во временных (фиктивных) переменных, а запись в историю — происходить строго в момент фиксации (закрытия) бара.

2. Проблема Б. Оптимизация Хранения и Очистка Буферов (Память).
 * Если робот работает на мелком таймфрейме (M1) или собирает историю за несколько месяцев, стандартные таблицы Lua (DX = {}) раздуваются до десятков тысяч элементов. Это приводит к деградации кэша процессора и тормозам QUIK при вызове table[I-1].
 * Техническое решение (Кольцевой буфер). Нашему безлаговому ADX для расчета не нужна вся история от сотворения мира. Ему нужен хвост глубиной в P * 3 баров. Будем использовать метод ограничения глубины буфера. При превышении максимального индекса принудительно удаляем самый старый элемент из таблиц с помощью table.remove(t, 1) или прямой очистки индексов t[I - max_depth] = nil. Здесь очень важный момент не наделать в таблице "дыр".

Финальный боевой код с аппаратной защитой под QUIK, в сборку нужно интегрировать:
а) защитный механизм проверка фиксации бара;
б) кольцевая очистка кэша, предотвращающая утечки памяти.
 
Казалось бы, на этом можно и закончить обсуждение подхода, понятно что двойственность при создании индикатора, проявляется на этапе выбора длины окна необходимого для анализа (Периода) и это всегда есть дилемма лага и шума.

Но не все так просто!

"Эффект бабочки" объясняет, почему микроскопическая погрешность или шум в начале математических расчетов полностью искажает итоговый результат. И не учитывать этот фак при создании алгоритмов просто нельзя. Суть проблемы, в контексте трейдинга и анализа временных рядов (биржевых графиков) в следующим, когда для построения индикатора или прогноза используются рекуррентные формулы (текущее значение зависит от предыдущего рассчитанного значения, например EMA или как у меня SuperSmoother), математическая погрешность начинает лавинообразно нарастать прямо внутри одной свечи. Есть несколько решений ухода от проблемы. Можно по экспериментировать с FIR-фильтрами (например, smooth = (4*p0 + 3*p1 + 2*p2 + p3) / 10) или внести жесткие ограничения или коэффициент затухания в расчеты.

У себя выбрал наиболее простой - "Отказ от тиков в пользу баров". Внутри свечи определенного тайм фрейма, цена совершает хаотичные колебания, их невозможно просто индифицировать в рамках текущего тайм фрейма, (нужно менять масштаб). Здесь правило вычисления заключается, выполнять пересчет исключительно на этапе закрытия свечи (Close[i] ~= Close[i-1]), это позволяет избежать данного эффекта. При этом исключается из рассчета текущий бар, и тем самым вносим в алгоритм расчета Лаг. Для полноты картины можно представить, расчеты проводятся на месячном тайм фрейме (потеряли текущий месяц). А для HFT и 1 минута сравнима с месяцом на месячном тайм фрейме. Согласитьсь для принятия торговых решений, картина не приглядная, вывод, не позволитильная роскошь игнорировать "настоящее", оперируя только прошлым?

Возникает задача масштаба.
Вспоминаем что данные (свечи) это фрактальная запись "квантованных" данных (свечи имеют вложенную, само подобную структуру).  
Одно из решений (вариант А) - многомасштабный (мульти фрактальный) анализ. Вместо игнорирования текущего бара, расчет ведется одновременно на нескольких вложенных тайм фреймах.
 * Старший тайм фрейм задает глобальный тренд (фильтрует шум). У себя часто для этого использую мгновенный тренд (Decycler 2013г John F. Ehlers).
 * Младший таймфрейм используется как "микроскоп", внутри текущей незакрытой свечи торгового тайм фрейма. Это позволяет видеть структуру движения "здесь и сейчас", не дожидаясь закрытия старшего бара.
 * На среднем, торговом - система принятия решений.

Другое решение (вариант Б), пользуемся структурой записи данных в баре (свече). Квант - Векторный анализ - это по сути, перенос математического аппарата квантовой механики на анализ временных рядов в трейдинге, где ценовые бары рассматриваются не как статические точки, а как векторы состояния с собственным спином (направлением и моментом вращения). Этот подход попытка, решить туже самую проблему масштаба и "настоящего времени", путем замены жестких рекуррентных формул на вероятностные матрицы.

Если не уходить в тяжелую теоретическую физику, элементы этого анализа на практике можно свести к, и внедрению через:
1) Квантование по объему (Volume Delta Vectors), анализ направления и силы рыночных ордеров (Ask/Bid) внутри свечи как векторов.
2) Фазовые портреты, то есть построение графиков в осях "Цена — Скорость изменения цены" (P и dP/dt). Это убирает фактор времени и показывает циклы системы.

Здесь важно, помним! Рынок — это не замкнутая квантовая система. Шум здесь не всегда случаен, и внешние шоки (новости), мгновенно разрушают построенные волновые функции (происходит коллапс волнового пакета). И еще одно, легко нарваться на проблему "переподгонки", из-за обилия параметров (фазовые пространства, волновые функции, матрицы перехода) очень легко создать модель, которая идеально объясняет прошлое, но абсалютно бесполезна в реальном времени.
 
"Тополиный пух жара июнь ..." (Не очень люблю кондиционеры и включаю их по необходимости, видимо еще от этого ощущения "расплавленных мозгов", и желание перейти от строгой вычислительно алгебры и по рассуждать на не мение важные, фундаментальные вещи).
Но прежде, чем переходить к микроанализу, должен сказать о примере выше: VADX (V - сигнатура векторный) с его производными. Просто важно, нужно обратить внимание на мое предположение об ортогональности Векторов, конечно здесь утверждение сильно натянуто, так как производные всегда будут коррелированы с объектом от которого взяты, но это ни сколько не отменяет сам подход (ИИ ошибается, а уж что говорить обо мне).  :wink:

Прежде чем, продолжить логику анализа, зафиксируем смыслы. Понадобятся фундаментальные понятия.

1. В философии Лейбница монада — это неделимая, фундаментальная основа реальности. В геометрии Евклида монада — это единица, то, через что всё существующее считается единым. В моей концепции еще строже структурная взаимодополнительность (не проявится белое без черного, нет мужского без женского, а уж тем более товара без денег).

2. Рычажные весы (Математически - Логический весовой контроль), не буду повторяться, лишь добавлю МЕРА здесь ключевой параметр, образующий триады или триединство.

Ну и конечно - это книга, производящая гениев, ну или как минимум не ординарных мыслителей. "Начала" Евклида — это величайший математический труд античности. В котором геометрия впервые была построена как строгая система на основе аксиом. А метод доказательства от противного (доведения до абсурда) стал одним из главных инструментов обоснования теорем и доказательства истины. Метод "доведения до абсурда" (лат. ReductioAd Absurdum) основывает современные математические подходы без вычислений. В современной математике и информатике есть целые разделы, где вычисления (в привычном смысле сложения и умножения чисел) отсутствуют. Там работают со структурами, множествами и графами. Доказательство от противного там незаменимо.

Позволю себе в "двух словах" проиллюстрировать подход.
В обычных весах мы кладем груз на чаши, чтобы найти баланс. В логике "от противного" весы работают в режиме крушения системы. Принцип следующий, мы ставим на одну чашу весов нашу базовую "монаду" (аксиому, нерушимый факт). На вторую чашу мы кладем допущение, "Предположим, наша теорема неверна". Действие от противного означает, переворачивает ли это допущение весы до состояния полного абсурда. Если допущение ломает саму конструкцию весов (например, приводит к тому, "часть больше целого", весы опрокидываются. Результат. Сломанные весы (противоречие) доказывают, что допущение невозможно. Единственный способ вернуть весы в идеальное равновесие — признать исходную теорему истинной.

Если объединить понятие "монады" (как неделимой единицы - целого), принцип "рычажных весов" и логику доказательства "от противного" (от обратного), мы получаем мощную технику для тестирования истинности и поиска баланса, где вычисления полностью заменяются чистой логической структурой!  :smile:

В финансовом анализе, бухгалтерском учете и трейдинге метод доведения до абсурда (reductio ad absurdum) выполняет роль главного детективного и аудиторского инструмента. Здесь "рычажными весами" выступает жесткий баланс системы, а главной "монадой" является классическая триада Карла Маркса  "Товар — Деньги — Товар" и/или "Деньги — Товар — Деньги".

Монада "Товар / Деньги" как неразрывная единица (целое Капитал). В экономике монада — это транзакция. Она неделима. Не существует продажи без покупки, и не существует товара без эквивалента его стоимости. Полноценный экономический цикл — это замкнутая монада: Товар -> Деньги -> Товар (с прибавочной стоимостью). Деньги здесь выступают как МЕРА, его "жидкая" форма.
 
Нам понадобится и Бухгалтерский учет (с большой буквы), как наглядный пример подхода, а Двойная запись как проявленные рычажные весы.
Бухгалтерский баланс (Актив = Пассив) — это идеальные рычажные весы. Двойная запись (дебет и кредит) гарантирует, что любое действие на одной чаше мгновенно отражается на другой.

Например, аудиторы используют доведение до абсурда для выявления мошенничества и скрытых убытков.
 * Гипотеза от противного: "Предположим, отчетность компании абсолютно честная и верная".
 * Тест весов (Поиск абсурда). Аудитор смотрит на монаду транзакции.
   Компания показывает резкий рост прибыли (бумажный товар продан).
Если прибыль реальна, на другой чаше весов должен вырасти денежный поток (Cash Flow) или реальная  *  задолженность, подтвержденная независимыми контрагентами.
 * Приведение к абсурду. Анализ показывает, что прибыль выросла на 100 млн, но реальных денег на счетах нет, а "покупатели" — это фирмы-однодневки, зарегистрированные вчера.
   Логический абсурд - компания "успешно продает товар", но при этом у нее нет денег даже на оплату аренды.
 * Вывод. Исходная гипотеза о честности неверна. В отчетности присутствует "рисованная" выручка.
          Весы баланса сошлись искусственно.

А что же в трейдинге или эквилибриум цен и арбитраж "от обратного". В трейдинге рычажные весы — это справедливая стоимость актива, на которую давят спрос и предложение. Доведение до абсурда здесь лежит в основе арбитража и поиска рыночных неэффективностей.
 * Теория эффективного рынка отражает, цена одного и того же актива на разных биржах должна быть одинаковой.
 * Допущение от противного (в алгоритмическом трейдинге). Предположим, акция на бирже в Нью-Йорке стоит 200, а в Лондоне (в пересчете) — 195. Робот мгновенно видит этот дисбаланс весов.
 * Приведение к абсурду. Если бы эта неэффективность существовала долго, можно было бы бесконечно покупать в Лондоне и продавать в Нью-Йорке, генерируя "деньги из воздуха" без риска. В экономике вечный двигатель — это абсурд.
 * Действие. Роботы-арбитражеры мгновенно совершают сделки, скупая дешевое и продавая дорогое. Своими действиями они давят на чаши весов, моментально возвращая цену к балансу. Они устраняют абсурд до того, как он станет явным.

Или инвестициях, метод Чарли Мангера, Инверсия в трейдинге (Invert, always invert). Инвестор Чарли Мангер (партнер Уоррена Баффетта) использовал подход "от обратного": "Я не пытаюсь вычислить, как сделать компанию богатой. Я пытаюсь доказать, что может её гарантированно разрушить, а затем избегаю этого".
Вместо поиска причин для покупки акций, профессиональный инвестор доводит до абсурда риски: "Что полностью уничтожит этот бизнес? Появление дешевого аналога? Изменение законов?". Если этот деструктивный сценарий логически легко реализуем, актив выбрасывается из портфеля.
 
Нет все таки интуиция не подвела. Мучал меня вопрос ортогональности и производных. Я про это:
Цитата
VPM написал:
Но прежде, чем переходить к микроанализу, должен сказать о примере выше: VADX (V - сигнатура векторный) с его производными. Просто важно, нужно обратить внимание на мое предположение об ортогональности Векторов, конечно здесь утверждение сильно натянуто, так как производные всегда будут коррелированы с объектом от которого взяты, но это ни сколько не отменяет сам подход (ИИ ошибается, а уж что говорить обо мне).
Нашел пример в физике, попутно заглянул в теорию автоматического управления (ТАУ) ну и конечно механика подтверждает. Для описания любой движущейся системы используется не координатное пространство, а Фазовое пространство (Phase Space). В фазовом пространстве координатами являются переменные состояния. По канонам динамики, для системы N-го порядка независимыми переменными состояния, определяющими её энергетический статус в данный микро-момент времени (t), являются именно функция и её последовательные производные.
Примером из классической физики, может служить описание маятника. Осями фазового пространства являются Координата (X) и Скорость (V).
Где, скорость — это производная координаты. Коррелируют ли они? В динамике — да. Но в фиксированный квант времени t они ортогональны и независимы как степени свободы.
Маятник может находиться
 в точке равновесия (X=0), но иметь максимальную скорость (V=max),
 либо замереть в крайней точке (V=0), имея максимальное отклонение (X=max).
 
Мы не можете предсказать скорость системы, зная только её положение в данный момент, нам нужна предыстория. В моем случае Цена, Скорость и Ускорение — это независимые координаты энергетического состояния рынка в фиксированный квант времени.
Делаю вывод утверждение: "использование производных в качестве осей фазового пространства не просто правомерно, это единственный математически строгий способ описать динамическую систему"!   (ИИ ошибается, я нет)  :smile:
 
Если всё было так просто, то физики уже давно бы захватили рынок. Но нет, как раз наоборот.
В отличие от механистических систем, у "рынка" нет инерции. Может показаться что есть, и на этом и построены большинство стратегий, но цена никому ничего не обязана. Она может мгновенно изменить вектор движения, скорость и ускорение. И уже через мгновение - опять. Физический, наблюдаемый мир так не устроен.

Аналитической формулы для силы, движущей цену, нет. Вы можете только построить некую стохастическую модель, которая будет работать в некой узкой области и она действительно будет учитывать прошлое, но это всё равно модель, например модель Геометрического броуновского движения (GBM) позволяет рассчитать конус вероятностей (Volatility Cone). Т.е. у Вас есть вероятности - не более.
 
Nikolay,  Вы абсолютно правы, и Ваше возражение — это фундаментальная истина. У рынка действительно нет физической инерции. Цена — это не материальный объект, это информационный протокол последней сделки, соглашение между двумя людьми в конкретную миллисекунду. Именно поэтому она способна мгновенно менять вектор, скорость и ускорение без какого-либо тормозного пути.

Координаты куба (гиперкуба состояний 2^n) — это не классические Ньютоновские производные.
Скорее в моей ситеме - это коэффициенты плотности вероятности.
Скорость в этой системе — это не скорость движения тела цены, это скорость направленного искушения (истощения) ликвидности.
Ускорение — это скорость изменения этого искушения.

Когда фиксируем переход из одного Октант в другой, папример, Октант 5 (+, +, -) (затухание роста), это означает совсем не то, что цена обязана остановиться, потому что у нее кончилось ускорение, а лишь то, что математическое ожидание продолжения роста в эту миллисекунду резко упало, так как плотность встречных лимитных ордеров (в моей системе Инь) стала критически выше, чем поток рыночной агрессии (Ян). И здесь нет никакой мистики или изотерики.
Модель Гиперкуба — это не попытка отменить GBM, это попытка заглянуть внутрь его параметров в реальном времени, а цена здесь один из параметров (след на снегу для охотника).

Конус Волатильности (Volatility Cone) строит границы распределения на основе прошлой исторической волатильности (sigma), и говорит: "С вероятностью 68% цена через час будет внутри этого конуса".
Энтропия Шеннона (Current_Bar.Entropy), которую внедрил в систему (на мой взгляд недоцененый параметр в анализе), — это динамический измеритель текущей ширины этого конуса.
Когда Энтропия взлетает, конус вероятностей GBM мгновенно раскрывается, как раструб, превращая рынок в чистый хаос. Именно поэтому алгоритм - термодинамический регулятор риска при высокой энтропии сжимает лот до нуля. Понимая, что в этой зоне конус распределения настолько широк, что математическое ожидание любой сделки неотличимо от подбрасывания монеты.

Рынок не обязан двигаться плавно. Но он обязан подчиняться закону баланса спроса и предложения в микро-момент времени. Моя модель:
  Это не предсказатель будущего направления цены.
  Это карта текущего перекоса вероятностей смены фазы (то есть динамика всей системы, а не отдельного параметра).

Например, когда система фиксирует левый Спин и падение Открытого Интереса на вершине, она не утверждает: "Цена физически обязана упасть".
А предупреждает "Текущая структура рынка такова, что конус вероятностей GBM деформирован. Вероятность движения вниз сейчас составляет 65%, а вверх — 35% (согласно принципу взаимодополнительности). При этом логический стоп-лосс (точка, где эта деформация исчезнет) находится всего в 2-х тиках".

В этой модели:
 Рынок — это стохастический океан хаоса.
 Куб Октантов (состояний) — это классификатор текущей фазы стохастического процесса, самой системы)
 Энтропия Шеннона — это измеритель плотности шума.
 Открытый Интерес — это индикатор притока внешнего топлива.
И это не полное описания модели 2^n, это гипотезы для проверки.

А технология доведения до абсурда, введена для проверки состояния во время новостей, когда маркет мейкер за миллисекунду убирает из стакана заявки и цена улетает (стадия не возможности вычисления и слом предыдущей парадигмы).

Строю систему, которая не пытается "предсказать" траекторию цены, а ищет микро-секундные зоны, где конус вероятностей сужается и перекашивается в одну из сторон, давая нам математическое преимущество. Это чистая квантовая механика, перенесенная на язык биржевых тиков, или мой микроскоп. Что не так?
 
VPM,

Указывайте, что Вы копируете сообщения от ИИ.

Иначе можно подумать , что Вы сами придумали такую чушь:

"Цена — это не материальный объект,
это информационный протокол последней сделки,
соглашение между двумя людьми в конкретную миллисекунду"

Все смешалось -кони,люди..
 
nikolz,  Не очень понимаю что  Вас смущает (смешалось ) в этом высказывании?
Если слово "протокол"? То что такое по Вашему "таблица обезличенных сделок", как не протоколирование этих сделок, а цена один из параметров взаимодействий, покупателей и продавцов, с занесенное (записанное) в данный протокол.

Здесь важней совсем другое. Вот сейчас я скажу вещь, которая, как мне кажется, окончательно соберет всю систему. Почему меня постоянно тянет к бухгалтерии, двойной записи, Марксу, Евклиду, И-Цзину, физике, Байесу и Шеннону и еще много к чему, одновременно. Это попытка смотреть на рынок не на объекты, а на отношения между ними. Это очень важное отличие.

Здесь закладывается идея структурного анализа рынка через пространство состояний, а не через цену. То есть цена становится не объектом прогнозирования, а наблюдаемым следствием состояния системы. Тогда ядром модели становится не вопрос: "Куда пойдёт цена?", а вопрос: "В каком состоянии сейчас находится механизм формирования цены и какова условная вероятность его перехода в следующее состояние?" Это гораздо более фундаментальная постановка задачи. Она хорошо согласуется анализом потоков ордеров. И, что особенно важно, она допускает строгую проверку на исторических и потоковых данных.

Тогда появляется пространство (State Space). Не цена. Не время. А именно пространство состояний. И тогда рынок движется не по графику цены. Он движется по графу состояний.
Цена — лишь проекция этого движения в этом подходе. Вот это, на мой взгляд, главное открытие идея подхода. Тогда оператор эволюции становится естественным.
"И тогда наверняка вдруг запляшут облака ..."   :smile:
 
Вы просто повторяете давно пройденный путь квантами. Проблема только в одном - окно прогнозирования мало и размер движения мал. Поэтому необходимы объёмы и индивидуальные договора с биржей по комиссиям.

Физ. лицам уже сложнее, т.к., как минимум, не у всех в подвале установлена ферма серверов.
 
Nikolay,  Не могу с Вами согласиться, здесь слово (определение) прогнозирование не на своем месте. Не отвечает поставленной задаче. Уместно определение оператор состояния, а рынок как прикладная дисциплина одно из не многих. Чтобы не путаться даже дал имя (название), "Market Evolution Operator" (MEO) - это оператор, который переводит систему из одного состояния в другое. Для решения Задачи общей оценки состояния рынка, через различные взаимодополнительные инварианты. Ответ, в какой фазе рынок и возможный переход. Тогда оператор эволюции становится естественным. Он уже не прогнозирует цену. Он вычисляет S1 -> S2, а цена здесь становится лишь следствием.

Да и мощностей вычислительных особых не нужно, а за чем? Для наглядности (для человека) вывожу квант (+++-+-), для вычислений пишу бит (111010), для анализа пока использую числовое значение бита. Мой микроскоп, это не только обработка потока данных (alltrade), но и по барный анализ (как описывал). Большинство моделей рынка описывают объекты (Цена, Объем, OI, Delta).
А MEO начинает описывать отношения. Например
 Delta относительно OI
 POC относительно Median
 Close относительно POC
 Entropy относительно Liquidity
То есть рынок — это не набор величин. Это система отношений. Главное в этом подходе у всего есть своя мера. А Инварианты есть настоящее главное звено.

Приведу два простых примера для более наглядного отражения смыслов.

1) Например возьмем бухгалтерию. Есть тысячи счетов. Но бухгалтер не думает терминами объектов (касса, банк, товар, налоги). Он думает как свести баланс Актив = Пассив.
А это уже инвариант. А какие инварианты есть у рынка? Я думаю, их не очень много.

2) Теперь вспомним Smart Money. Почему они зарабатывают? Потому что они замечают нарушение инвариантов раньше остальных. Не потому что знают будущее. А потому что видят что система стала внутренне противоречивой. Это очень близко подходу с "доведением до абсурда". мы не доказываем, что рынок обязан развернуться, а ищем внутренние противоречия, при которых текущая конфигурация становится маловероятной. Smart Money интуитивно ищут: не "куда пойдет цена", а "насколько текущая структура отличается от состояния, которое должно быть при данных потоках капитала и ликвидности". Можно так сказать Smart Money = детектор нарушения инвариантов, интерпретация, они не предсказывают цену они обнаруживают -> нарушение сохранения структуры системы?

Собственная теория MEO, начинаем сама строить математическую операционную систему рынка. И это не одно и тоже что предсказать поведение цены.
Да и кванты тут не причем, вернее так сформулировать нужно Кванты, Карл Маркс и прочее, прочее это элементы структуры. Нет "букваря" по этому предмету, собираю по крупицам идеи проверяю. Как выражается один из пользователей "Украли все до нас". Вот и побираюсь по всем теориям в посках подходящих аналогий.
Что не так?
 
Так у них подход такой же, только набор параметров другой. Работает простая статистика - если есть набор данных за года, который кластеризуется по параметрам. При этом данные - это текущие показатели датчиков: скорость сделок, показатели сделок, скорость установки снятия заявок в стакане, скорость движения цены - читай реакция и т.д. Также и внешние данные - новости, арбитраж...

Т.о. задача не сказать куда, а сказать как. Нет попытки предсказать цену, а просто анализ реакций на огромной базе статистических данных. Поэтому и необходимы мощности, т.к. как текущие данные большие, так и набор базы весов модели большой, а решение необходимо принимать за единицы млс.

Вы же пробуете использовать набор показателей, который "как бы" описывает состояние, но по факту показывает уже прошедшую реакцию на состояние. Т.к. рынок все же содержит некий лаг, то да, возможно поймать конец движения.
Но всё же физ. лицам гораздо проще работать с рисками используя достаточно простые модели, а не пробовать обогнать тех, кто будет заведомо быстрее в принятии решений.
 
Цитата
VPM написал:
Что не так?
  Вы пытаетесь модель рынка "слепить", используя модели физики, которые к тому же, похоже, плохо представляете.
     Фондовый биржевой, краткосрочный (с периодом до полгода) рынок — это, во многом, рефлексивная игра с локально псевдо-нулевой суммой. Во-первых, он существенно зависит от действий его участников, а во-вторых, на нем деньги не создаются, а, в основном, перераспределяются между его участниками. Прибыль любого его участника — это, в конце концов, в значительной части, чьи-то убытки. Если предположить, что все участники такого рынка, используют некоторую общую прибыльную стратегию торгов, то, понятно, что все они, одновременно, в прибыли не окажутся. Таким образом, не существует общей прибыльной стратегии торгов для приблизительно описанной реальности, в которой есть еще и приток/отток финансовых средств в рынок из вне. Рефлективность фондового рынка порождает возможность манипуляции рынком крупными его участниками. Причем, не только своими действиями на нем, но информационными вбросами, влияющими на поведение его участников. Кроме того, этот рынок является инсайдерским, так как среди его участников всегда присутствуют те, которым раньше других доступна информация, влияющая на его поведение. Надо понимать, что использование вероятностных моделей поведения рынка, во многих случаях это сильное допущение из-за отсутствия более адекватных моделей.
  В каком-то смысле, фондовый рынок подобен локально неустойчивой, но, до поры до времени, самовосстанавливающейся финансовой пирамиде.
 
Давайте по порядку.
Цитата
Nikolay написал:
Так у них подход такой же, только набор параметров другой.
У меня же инвариантные преобразования взаимодействия, а их по определению не может быть много.  Принцип взаимодополнительности отсекает не допустимые переходы. Если позиция накоплена ее будут защищать, а "след на снегу" будет отражать вектор этих устремлений. Да  статистика не которая нужна ни куда не деться, но все здесь зависит от масштаба, и торгового ТФ периода планируемого удержания позиции. Используя принципы фрактальной записи в этом подходе не нужны огромные массивы данных.
Цитата
Nikolay написал:
Т.о. задача не сказать куда, а сказать как.
Да здесь в цель, от количественного анализа к качественному со своим инвариантом и оценкой. Квант по периоду оценки вывод -> действие. За чем на с ними соревноваться, важно чтобы на нашу заявку была встречная (ликвидность так ее считаем).

Цитата
Nikolay написал:
Вы же пробуете использовать набор показателей, который "как бы" описывает состояние, но по факту показывает уже прошедшую реакцию на состояние. Т.к. рынок все же содержит некий лаг, то да, возможно поймать конец движения.
Лаг, про лаг я много раз уже формулировал свой подход, здесь лишь добавлю, что в MEO он минимален (это не индикатор с заданным периодом окна). А так как вычисляется вторая производная (ускорение), то есть и некий опережающий фактор, здесь всегда чуть - чуть впереди. Пока все еще входят по тренду, MEO сообщает о замедлении тенденции давая время на принятие решения.
 
Nikolay,
 
Nikolay,  Возможно сможете что то подсказать. Я знаю что Вы используете обработку таблиц в место калбеков. Но тем не менее, возможно сможете что то подсказать. Мой экзекутор постоянно ловит маппинг, внутренняя книга учета расходится с сервером. Я пытаюсь собрать в одной системе учет сделок и ордеров по разным стратегиям. То есть каждая стратегия должна знать свою позицию на выделенный торговый капитал.
То есть нужен какой то уникальный ключ для таблицы луа. Проблемы возникают когда что то слетает и нужна проверка с квик и восстановление системы. У меня возникает вообще сомнение, что событийную модульную систему можно сделать надежной?
Возможно что порекомендуете как правильно создать ключи идентификаторы а главное как их передавать через квик?
Голову уже сломал.
 
TGB,  Ну Вы повторяетесь, и что отсюда следует, разве то что я физику плохо знаю. Да в такой системе мы работаем, а что это отменяет из выше перечисленного. Тот факт что  система открыта ни сколько ни от меняет факт иерархичность, фрактальность кванта записи. Или Вы отменяете взаимодействие спроса и предложения. Может и сам Капитал. Да система такая и что?
 
"Хочешь спрятать — положи на самое видное место."

Почти все фундаментальные науки начинали с объектов, а потом переходили к отношениям.
 Евклид начал с точки. Потом оказалось, что геометрию определяют отношения между точками.
 Ньютон начал с тел. Потом оказалось, что физику определяют силы взаимодействия.
 Максвелл убрал частицы. Оставил поля. То есть отношения.
 Эйнштейн вообще сказал не существует силы. Есть геометрия отношений пространства-времени.
 Квантовая механика ещё дальше. Состояние системы определяется не частицами, а отношениями амплитуд.
 Шеннон не изучал сообщения. Он изучал отношения вероятностей.
 Байес не изучал события. Он изучал отношения между гипотезой и наблюдением.
 И бухгалтерия... Вот здесь я, наверное, был больше всего удивлён. Потому что двойная запись — это вообще не про деньги.
 Это машина сохранения инварианта. Каждая запись автоматически сохраняет целостность системы.
 То есть бухгалтерия уже несколько столетий использует то, что сейчас называем оператором нормировки.

Мы настолько привыкли смотреть на цену, что перестали замечать, что цена — это последняя строка протокола, а не сама система.

И вот что, на мой взгляд, оказалось идеально спрятано. Так это единица.
Мы всю жизнь воспринимаем 1 как число. А в MEO модели это не число. Это Монада (M) целостность. Это совершенно другой объект. Тогда всё начинает выглядеть несколько иначе.
Не 1 = число, а 1 = сохранённая монада.
Не 0.5, а идеальный структурный баланс.
Не 0.618, а устойчивая асимметрия отношений.
Не Цена, а протокол наблюдения.

И тогда свои достойные места занимают теории:
 * Маркса;
 * двойной записи;
 * русской мере;
 * И-Цзину;
 * проективной геометрии;
 * Шеннону;
 * Байесу;
 * рынку;
 и конечно СМЫСЛЫ.
А мы получаем ответ, почему они одновременно могут объяснить практически все.
На первый взгляд это совершенно разные дисциплины. Но если убрать терминологию, почти везде повторяется одна и та же схема:

                             {Целое} > {Отношения} > {Преобразование} > {Инвариант}

Именно эта схема, а не конкретные символы, объединяет их.

Поэтому сформулирую то, что сейчас нашли, как первую инженерную гипотезу MEO OS.

  > Любая открытая динамическая система может быть описана как эволюция взаимодополнительных отношений при сохранении фундаментальных инвариантов.

Тогда:
* Монада задаёт целостность.
* Нормировка сохраняет целостность (аддитивно и мультипликативно).
* Мера количественно выражает структуру отношений.
* Оператор эволюции изменяет отношения.
* Наблюдение формирует протокол состояния (на рынке — сделки, стакан, цена, объём, открытый интерес).

Именно слово "протокол", теперь приобретает особый смысл. Цена — это не сущность и не причина. Это запись в протоколе взаимодействий. Аналогично тому, как бухгалтерская проводка не создаёт хозяйственную операцию, а фиксирует её в согласованной системе учёта.

Всем удачи. Ну я пошел собирать MEO-000. Аксиоматика алгебры отношений. Не "рынка". Не "трейдинга". Именно алгебры отношений. И писать под них модули.
Потому что если этот уровень окажется внутренне непротиворечивым и экспериментально подтверждаемым, то рынок действительно станет лишь первой, а не единственной областью её применения.
 
Цитата
VPM написал:
То есть нужен какой то уникальный ключ для таблицы луа. Проблемы возникают когда что то слетает и нужна проверка с квик и восстановление системы. У меня возникает вообще сомнение, что событийную модульную систему можно сделать надежной?
Вопрос не очень понятен. Колбеки можно использовать только для обработки событий в процессе работы алгоритма. Если же событие случилось когда скрипт не работал, то только данные таблиц.
Поэтому, даже если используете колбеки, то необходимо запоминать состояние. Для скрипта - это некий идентификатор, который будет добавляться к транзакции (правда если брокер это поддерживает). Для установленных ордеров - это его номер, что позволит проверить состояние этого ордера после рестарта скрипта.

Что касается позиции, то необходимо сканировать прошедшие сделки при старте - и здесь тоже идентификатор, который тоже будет добавлен к сделке по ордеру. Можно также учитывать только сделки по запомненным ордерам, но это если алгоритм запрещает чужие операции.

Так что ничего сложного. Просто эти методы необходимы в любом случае. Колбеки же просто облегчают код в части проверок в процессе работы алгоритма скрипта. Я просто очень давно поймал ситуации когда колбека не было и поэтому не использую их, даже если сейчас говорят, что всё надежно. При работе с деньгами я предпочитаю простые, надежные методы.
 
Может так  прояснит. Из лога:
SVM6 book=-2, exchange=-1 (drift=1)
HALTING TRADING due to position drift

Причина: виртуальная позиция (book) расходится с реальной позицией на бирже (exchange).
Это происходит потому, что один из ордеров был исполнен, но система его
  либо не зафиксировали,
 либо зафиксировали дважды (из-за повторной отправки после таймаута).

Я пытаюсь учет вести по стратегиям. Торговый капитал -> Позиция/Ордера -> Результат стратегии.
По постоянно получаю расхождение с внутренней книгой учета  виртуальная позиция (book) расходится с реальной позицией на бирже (exchange).

Я виню во всем ключ. Идентификаторы?
 
Цитата
VPM написал:
либо не зафиксировали
Если это произошло во время простоя скрипта, то после запуска, и если сделки ещё есть в данных терминала, то легко просканировать сделки в таблицах. Если же очень вероятна ситуация, что перезапуск случится уже на следующую торговую сессию и сделок уже в терминале нет, то необходимо организовывать запись сделок в файлы отдельным независимым скриптов - журнал. И при старте проверять и там.

Цитата
VPM написал:
либо зафиксировали дважды (из-за повторной отправки после таймаута)
Даже при использовании колбека, точно обязательно, необходимо фиксировать какие сделки уже были учтены. И это необходимо хранить в хранимом состоянии. Чистить данные можно на следующую сессию, т.к в Квике они удаляются и уже не могут появится заново.

Т.о. подходы одинаковые.
 
Цитата
VPM написал:
виртуальная позиция (book) расходится с реальной позицией на бирже (exchange).
Обычно информация о лимитах поступает позже информации по сделкам.
Если считать виртуальную позицию по сделкам, то может быть расхождение с реальной, пока с биржи не поступит информация об изменении лимитов.
 
1. QUIK не хранит информации о принадлежности сделки к стратегии? А мне требуется при восстановлении.

2. Да верно у колбеков нет определенного последовательного прихода, срабатывают как хотят, многое отдано в настойках этого регламента брокеру (спасибо разработчикам), а там свои чудеса.

Так собственно в этом и вопрос. Как исполнитель сделать надежным? Здесь главную роль играют ключи? Их передача.
Пока не получена полная информация о сделке / ордере / лимитах ВСЕ блокировать? Или есть варианты?
Ну так можно все заблокировать система повиснет?

В общем мой исполнитель творит чудеса. А как сделать надежно не понимаю?
 
Для этого и есть идентификатор, задаваемый в комментарии к ордеру, сделке. поле brokerref. По номеру ордера, если эта информация запомнена, тоже можно фильтровать сделки.

В любом подходе необходимо хранить информацию о учтенных сделках, ордерах. Если позиция - это результат сделок скрипта, то значит они и не должна сходиться с балансом. Её необходимо рассчитывать по сделкам.
Сумма всех позиций, разных скриптов, стратегий - это уже ближе к балансу, но тоже не обязательно должна сходится, т.к. могут быть и ручные сделки вне стратегий.
 
Я просто подумал что должен быть универсальный надежный алгоритм ИСПОЛНИТЕЛЬ, который можно "заморозить", а через 300 лет вскрыть и он отработает?

А что brokerref он в одном колбеке приходит в другом нет? Возможно в таблицах, как закон - конституция присутствует? Но после всех моих мытарств сильно сомневаюсь.
 
Цитата
VPM написал:
А что brokerref он в одном колбеке приходит в другом нет
Такого не замечал. Впрочем, т.к. я их не использую, то мог и не видеть такого.

Для меня универсальный механизм - это "опрос датчика в реальном времени". Аргумент против: это же постоянно делать запросы. Для меня не аргумент. Надежность важнее.
 
Цитата
Nikolay написал:
[QUOTE]VPM написал:
А что brokerref он в одном колбеке приходит в другом нет
Такого не замечал.
brokerref - ненадёжный параметр. У меня он только в OnTransReply транслируется. В других колбэках его нет.
 
Не много "покумекаем".

Вскрываем фундаментальную прикладную проблему архитектуры шлюзов QUIK:
а) параметр BROKER_REF (комментарий) ведет себя крайне нестабильно на некоторых брокерских конфигурациях. Он часто стирается или подменяется внутренними системами учета брокера при прохождении через клиринг и / или полностью отсутствует в таблицах или в срезах позиций, что делает его непригодным для сквозного восстановления контекста стратегии. И вообще не понятно тогда зачем нужен, запутать и засорять трафик?

б) Остается использовать TRANS_ID как единственный, сквозной цифровой токен идентификации. Используя как паттерн проектирования высоконадежных HFT-систем. Числовой TRANS_ID является жестким сквозным ключом. Он гарантированно и без изменений проносится биржевым ядром Spectra через всю цепочку событий:
                                             Транзакция -> Заявка (OnOrder) -> Сделка (OnTrade).  / OnAllTrade
Но имеет ограничения по количеству знаков от 10 до 14 из разных источников, более надежной информации не нашел, проверяйте.

Архитектура Нового Числового Токена для идентификации Стратегий (TRANS_ID), заключается в присвоении каждой стратегии числового id.  Введение некоего внутреннего стандарта структуры TRANS_ID при его генерации.  

Чтобы упаковать время с точностью до микросекунд (QUIK меряет мили) и уникальный код стратегии в жесткий 12-значный лимит QUIK шлюза (до 14 знаков),
применил метод конвейерного арифметического сдвига разрядов. Выделил для нашей стратегии (SMC) жесткий глобальный числовой идентификатор:
STRATEGY_CODE = 44 (его можно менять от 10 до 99 для других стратегий).

Структура конвейерного хэширования TRANS_ID (Строго 12 знаков): TRANS_ID = Внутри часовые Микросекунды + STRATEGY_CODE + level_index
Математический разбор разрядов (Позиционный вид числа) структура:

[ 0 0 0 0 0 0 0 0 ] [ 0 0 ] [ 0 ]
------------------   ------   ----
  Микросекунды        Код      Ярус
    (8 знаков)     Стратегии  сетки
                   (0..99)    (1..9)

* Пример расчета: Время внутри часа равно 3599 секунд, 999 мс и 999 mcs.
 total_mcs = 3599999999 (9 знаков). Отрезаем старший разряд через % 100000000, получая строго 8-значное число времени: 99999999.
* Умножаем на 1000: 99999999000 (11 знаков).
* Прибавляем код стратегии 44 * 10: 99999999440.
* Прибавляем индекс линии сетки level_index = 3: -> 99999999443 (Строго 11 знаков цифр!).

Как это решает проблему идентификации при восстановлении: Когда робот перезапускается после сбоя, он считывает список своих сделок/заявок. Получив число 99999999443, система выполняет обратное арифметическое декодирование:

  1. Номер яруса сетки: 12399999443 % 10 3-й ярус сетки.
  2. Код стратегии: math.floor(12399999443 / 10) % 100 44 (SMC_MODULE).
  Робот мгновенно понимает: эта сделка на бирже принадлежит нашей стратегии и закрывает именно 3-ю линию сетки, полностью восстанавливая логику траления.

Архитектурный итог модернизации:
  1. 100% защита идентификации. Ушли от нестабильного BROKER_REF. Теперь токен STRATEGY_CODE = 44 намертво "вплавлен" внутрь структуры TRANS_ID.
  Он гарантированно вернется в систему через коллбэки OnOrder и OnTrade.
  2. Лимиты шлюза соблюдены, длина строки TRANS_ID составляет ровно 11 символов, что исключает аппаратное обрезание строк шлюзом Московской Биржи.

Надеюсь ни кого не запутал, все просто пока на уровне идеи, не пробовал но код накидал.
 
/ OnAllTrade проверил не приходит. Открыл таблицу со всеми возможными параметрами, что там на ТВОРИЛИ  :unamused: , а главное зачем дублирование? Ну дело не наше что есть с тем и работаем.
 
Врёт ваша нейронка.

Цитата
О  trans_id торговая система ничего не знает, это внутренняя сущность сервера QUIK.
https://forum.quik.ru/messages/forum10/message30420/topic3525/#message30420
 
Йцукен,  На самом деле это и не важно. Я конечно не специалист, так и не нужно быть главным инженером проекта, что бы понять TRANS_ID НЕ является биржевым key и не используется как внутренний торговый ключ, если Вы про это. Но и очевидно другое, Spectra знает TRANS_ID как client request identifier, хотя бы на уровне метаданных, это просто очевидно, по другому быть не может и не важно что на столбе написано.

Дело в другом это просто наиболее простой подход, чтоб не держать маппинг на своей стороне. Проблема подхода в другом, сам параметр отдан на откуп брокеру. И каждый по своему чудит с ним. А нам нужен стандарт. Ни каких гарантий нет. То что у одного может работать у другого выдаст ошибку. А я лишь предложил присвоить код стратегии и зашивать его в TRANS_ID, для обратной идентификации уже стратегии.
 
Цитата
VPM написал:
Не много "покумекаем".
.........
.........
Надеюсь ни кого не запутал, все просто пока на уровне идеи, не пробовал но код накидал.
  Легких путей вы не ищете :smile:. Зачем так сложно?
Вы храните информацию о заявках ваших стратегий? Есть в этой информации TRANS_ID заявки (если нет, то добавьте)?
Ну и, какие проблемы найти по TRANS_ID номер стратегии?
 
Действительно, некоторые брокеры, например АЛОР, не записывают brokerref в таблицу ордеров, а значит и в таблицу сделок. В таблице  обезличенных сделок их не может быть, т.к. они обезличены. Не для этого эти данные.

Поэтому остаётся использовать номер транзакции+номер ордера как ключ. При этом недопустимы операции по сдвигу ордера на графике, вводу ордера руками с тем же комментарием. Т.е. скрипту допустимо только оперировать своими ордерами, запомненными в состоянии.

Т.о. при перезапуске скрипта просто сканируете таблицы и находите свои ордера. Если их там нет, значит они были сняты в клиринг, т.е. это уже следующая торговая сессия (теперь так после 23.03.2026).
Т.е. если пропустили сделки, то уже их нет, если только, как говорил выше, нет своего независимого журнала сделок, в котором можно их найти.

Поэтому кроме ограничения на некоторые действия особой разницы нет как фильтровать таблицы. Просто по brokerref  это позволяет более гибко работать с ордерами. А без оного, уже только по ключу запомненного ордера.

Я советую Вам почитать про хэш функции, чтобы потом не оказалось, что получены дубли, особенно если работают параллельно несколько скриптов.
При этом намного проще помнить свои ордера и проверять сделки именно по ним. Зачем создавать хэш, при этом не криптографически уникальный - не ясно.
 
Цитата
Nikolay написал:

При этом недопустимы операции по сдвигу ордера на графике, вводу ордера руками с тем же комментарием. Т.е. скрипту допустимо только оперировать своими ордерами, запомненными в состоянии.
Тоже использую TRANS_ID.  
Когда-то давно пользовал BROKER_REF, но потом отказался.  это излишнее усложнение.
----------------------------
Относительно ввода заявок руками
Решал эту проблему так:
флаг - разрешить роботу управлять заявками человека  
Если его установить, то робот переустанавливает заявки человека и указывает в них TRANS_ID.
иначе он их игнорирует.
-----------------------------  
Относительно сделок , которые были по выставленным заявкам в то время ,
когда терминал отключен замечу следующее
Эти сделки не следует считать достижением какого-либо алгоритма,
так как во время их совершения алгоритм не работал.
-----------------
 
Цитата
Йцукен написал:
Не много "покумекаем".
 Для меня мои комментарии в этой ветке - некоторое развлечение :smile: . И все таки ваши теоретические изыски меня пугают :smile: . Не знаю как на самом деле, но, ощущение, что вы пользователям хотите "свихнуть" мозги (или это ваша цель?).
  Если вы соберете все комментарии Nikolay в один файл, то это готовая отличная методичка по тому, как надо создавать роботы в QUIK. В своих комментариях Nikolay проявляет "ангельское" терпение, пытаясь образумить вас. Используйте его рекомендации и будет вам будет счастье.
Зачем вы так измываетесь над собой и пользователями?
 
"Йцукен написал:"  Моя ошибка при копировании текста: извиняюсь. Читать: "VPM написал:" .
 
TGB,  Ну вот можете, когда хотите! А то я забеспокоился, уж подумал не в найм подались? Как же мы тут без Вашего огнеметного сарказма? Да Что там мы разработчики пропадут без сногсшибательных алгоритмов. Вы уж не бросайте нас.  :smile:  А проблем нет есть ситуации которые требуют своего решения. Кстати собрал робота реализующего выше описанные идеи в том числе и ключ транзакций. Выводы конечно рано делать идет работа над ошибками. Но идея стратегии заложена как описал. По шести параметрам, мой микроскоп, определяет фазу, и наиболее вероятный переход, либо подтверждает сигнал радара, либо отвергает. Все по плану. И вам удачи.
 
Цитата
nikolz написал:
Тоже использую TRANS_ID.  Когда-то давно пользовал BROKER_REF, но потом отказался.  это излишнее усложнение.---------------------------- Относительно ввода заявок рукамиРешал эту проблему так:флаг - разрешить роботу управлять заявками человека  Если его установить, то робот переустанавливает заявки человека и указывает в них TRANS_ID.иначе он их игнорирует.-----------------------------  Относительно сделок , которые были по выставленным заявкам в то время , когда терминал отключен замечу следующееЭти сделки не следует считать достижением какого-либо алгоритма, так как во время их совершения алгоритм не работал.-----------------

nikolz, вы описали золотой стандарт промышленного HFT-клиринга и риск-менеджмента (принцип Sovereign Order-Flow Isolation).То, что вы сформулировали — это критически необходимый контур разделения ответственности, отделяющий алгоритмическую торговлю от человеческого фактора и системных форс-мажоров. В десках Tier-1 без такого разделения робот вообще не допускается к торгам на SPECTRA. Благодарю!
 
Встала задача, как превратит наш логгер из простого регистратора в автоматического блок-аналитика или высшая точка в архитектуре HFT-протоколирования (стандарт Audit Trail).

Внедрение такого сквозного диагностического штампа — единственный способ, перестать гадать по сырым логам и получить мгновенный, математически неопровержимый ответ, на каком именно из барьеров конвейера споткнулся или, наоборот, пробил шлюз торговый приказ.

В моем случае, это решение - Пятиступенчатый Конвейер Допуска (Логика Аудита). Торговый сигнал рождается в виртуальном пространстве Марковских цепей и, чтобы превратиться в физическую сделку на SPECTRA МосБиржи, обязан поочередно пробить 5 изолированных шлюзов (структурно можно показать так):  

[ МАРКОВСКОЕ ЯДРО ] --> Сигнал (BUY/SELL) + Полезность (расчет max_u)
           ¦
           v
------------------------¬
¦ 1. ШЛЮЗ ПОЛЕЗНОСТИ    ¦ --> Проверка: max_u >= MIN_UTILITY_GATE
L------------------------
           ¦
           v
------------------------¬
¦ 2. ТРЕНДОВЫЙ ЗАМОК    ¦ --> Проверка: Совпадение знаков Микроскопа и Радара (старшего ТФ)
L------------------------
           ¦
           v
------------------------¬
¦ 3. ФАБРИКА КАПИТАЛА   ¦ --> Проверка: Наличие ГО под Актив + лоты под сетку (CalcBuySell)
L------------------------
           ¦
           v
------------------------¬
¦ 4. РИСК-ФИЛЬТР ПОЛЯ   ¦ --> Проверка: Спред стакана <= MAX_SPREAD и Ротор < TURBULENCE
L------------------------
           ¦
           v
------------------------¬
¦ 5. БИРЖЕВОЙ ШЛЮЗ      ¦ --> Отправка TRANS_ID. Результат: EXEC_OK (Сделка) или REJECT
L------------------------

Схема первоначальная, зашита в текущий код, скорее всего претерпит изменения, но для понимания вопроса и настойки системы вполне себе.
 
VPM,
Ваш робот акциями не торгует, только фьючерсы?
 
Цитата
nikolz написал:
VPM ,
Ваш робот акциями не торгует, только фьючерсы?

В дальнейшем планирую расширить, а пока только фьючерсы. Позволяют и Шорт и Лонг. Да и задача пока отработать подходы. Стратегию и Исполнителя.
 
VPM,
А как Вы тестируете алгоритмы? Можете показать результаты тестов?
 
VPM,
Можете объяснить как вы обучаете цепи Маркова на фьючерсах?
На них же нет длительной истории.
 
Теперь когда, Первый эшелон MEO OS v15.0 успешно переведен в режим автономного дежурства и непрерывного накопления Марковской статистики в файл.

Можно перейти к проектированию запланированного Второго Эшелона - Спот-Деривативного Арбитражного контура. В моем случае — это торговля меж рыночной неэффективностью между физическим Серебром на товарной секции Московской биржи (инструмент SILV) и нашим расчетным фьючерсом SVU6 на срочном рынке SPECTRA.

Откровенно сказать опыта здесь абсолютно нет, но "руки чешутся". Для начала, детально разберем, как этот контур устроен у институциональных HFT-профи, что из их практики мы внедрим в архитектуру, а что обязаны до осмыслить с учетом специфики терминала QUIK.

ЧТО У ПРОФИ? или Институциональный Tier-1 стандарт.  У крупных маркет-мейкеров и арбитражных фондов (уровня Jane Street или Тройка) этот контур называется "Basis Trading Engine". Они никогда не смотрят на графики. Для них рынок — это система сообщающихся сосудов, где разница цен описывается строгой формулой стоимости удержания позиции (Cost of Carry).  Где,
       F — фьючерс,
       S — спот,
r — безрисковая процентная ставка (индикатор стоимости денег),
а T-t — количество дней до экспирации.

Главный принцип профи, торговля Чистого Базиса (Basis Spread), заключается в вычислении величины B = F - S.
В нормальных условиях этот базис находится в состоянии Контанго (фьючерс дороже спота на величину ставки r).  Арбитраж при деформации, выглядит следующим образом. Если на срочном рынке SPECTRA крупный игрок начинает агрессивно выкупать фьючерс SVU6, базис аномально расширяется. Профи мгновенно делают две противоположные наносекундные транзакции:
       1) Продают дорогой фьючерс и
2) Покупают дешевый спот.
Они фиксируют чистую безрисковую доходность, которая гарантированно упадет им в карман в день экспирации, когда цены фьючерса и спота физически схлопнутся в одну точку.
Для проведения таких операций, Профи сидят на прямых FIX/FAST протоколах непосредственно в ЦОД биржи, минуя промежуточные терминалы.

Конечно мы не можем конкурировать с ними в наносекундной скорости шлюзов, но мы можем попытаться полностью переиграть их на фрактальных интервалах за счет синергии со Смарт-Мани и нашим Марковским кубом.

Вперед за дело.
Страницы: Пред. 1 ... 15 16 17 18 19 След.
Читают тему
Наверх