В этом посте:
- вводная часть
- понятие «сигнал»
- примеры классических сигналов
- мой подход к определению сигналов
- как использовать подход
- оценка качества сигналов
- пример стратегии, основанной на сигналах
- заключение
Введение
У нас обещанного три года ждут, но я справился быстрее.
Начинал я, как и многие другие, не скажу, что с анализа, но с просмотра свечных графиков и графиков индикаторов. Думаю, что точно так же, как и другие, на их основании строил свои торговые системы. Знакомился с торговыми системами других. Обнаруживал, что они тоже работают по сигналам. По сигналам индикаторов, чего сами люди иногда, порой, даже и не понимали и не были способны формализовать. Еще самом начале процессе знакомства с биржей и торгами в голову пришла идея о том, что хорошо бы использовать сигналы разных индикаторов, комбинируя их между собой, чтобы найти оптимальные точки входа и выхода. Значительно позже в голову пришла идея о том, что те сигналы, которые мы видим на стандартных графиках — это лишь верхушка айсберга тех данных, которые мы можем использовать для статистического анализа и что на самом деле их гораздо больше.
Родилась гипотеза о том, что их тоже можно и нужно использовать для торгов. Поскольку, скорее всего, ими никто другой не пользуется, поскольку их не видят, они должны быть эффективнее, чем те стандартные сигналы, которые описаны в методиках использования индикаторов их авторами. Концентратом этой идеи является данный пост.
Что такое «сигнал»
Итак, что же такое сигнал? Я несколько примитивизирую это понятие, сказав, что сигнал либо есть, либо его нет. Соответственно, мы видим сигнал, как «истину» или «ложь». Или как «да» или «нет». Обычно, как я писал ранее, под сигналом понимают принятие решения о входе или выходе из позиции. Например, по любому индикатору в интернете можно найти много руководств о том, как их использовать. И в этих руководствах, как правило, сигнал состоит из нескольких условий. С моей точки зрения, каждое такое условие есть отдельный атомарный сигнал. Решение на вход или выход, а равно на открытие или закрытие позиции мы принимаем на основании комплекса таких атомарных сигналов. Поэтому далее под понятием сигнала я буду понимать некоторую величину, которая может принимать два значения: истина или ложь, и специально акцентирую внимание на том, что сигнал не может быть составным. Сигнал всегда атомарный, неделимый, не состоящий из других сигналов. А комбинация сигналов даёт нам решение на сделку.
Примеры классических сигналов
Для пояснения понятия ниже привожу примеры сигналов.
Свечные сигналы
На данной формации виден сигнал «три белых солдата». Это три подряд следующих растущих свечи. Соответственно, на каждой свече мы можем посчитать этот сигнал относительно предыдущих и определить его значение — истина или ложь (есть он или его нет). Для трендовых стратегий на этом сигнале мы покупаем, для контртрендовых — продаём.
Сигналы индикаторов
Здесь мы видим среднюю скользящую на свечном графике. Сигналом тут является пересечение ценой этой скользящей вниз. В случае трендовой стратегии, по этому сигналу мы должны продать (закрыть длинную или открыть короткую позицию).
Сигналы осцилляторов

Посмотрим на моментум. Для него есть нормативное значение — 100. Один из сигналов — когда моментум выше 100. Это означает, что следует быть готовым к продаже.
Мой подход к определению сигнала
Во-первых, из примеров, которые изложены выше, следует, что есть и обратные сигналы. Во-вторых, большую часть сигналов мы, к сожалению, не используем. А потому что всего лишь люди — переходное звено к более высокой ступени эволюции. Не видим ли мы их, или нас так научили и теперь мы не способны посмотреть на картинку свежим взглядом (
об этом я писал здесь) — суть от этого не меняется. С целью устранить этот пробел я решил посмотреть на сигналы по-другому. И вот как это выглядит.
Типы сигналов: статические
Во-первых, я разделяю сигналы на статические и динамические. Что это означает? Статический сигнал — это такой сигнал, для вычисления которого достаточно данных только текущей свечи. Например, чтобы вычислить сигнал по индикатору «Моментум» из примера выше, нам нужно знать только константу 100 и значение Моментума. Это можно сделать в границах одной свечи, не заглядывая в прошлое, на момент её завершения, разумеется.
Типы сигналов: динамические
Кроме того, есть динамические сигналы, и для их вычисления необходимо смотреть на определенную глубину в прошлое. Примером этого является сигнал 3 белых солдата. Чтобы его вычислить, я должен посмотреть на несколько свечей прошлое. Эту типизацию я ввёл для упрощения понимания концепции. Кроме того, с её помощью можно разбить сигналы на группы в целях поиска более эффективного подмножества сигналов.
Категории сигналов
Для упрощения понимания идеи делю сигналы на категории. Они такие:
- пересечения
- продолжения
- области значений
- нуль-центрированные и значение-центрированные
- взаимные
- схождения-расхождения
- направления
- прохождения экстремума
Давайте посмотрим на конкретные примеры. Пересечения возникают, когда мы имеем на одном графике несколько временных рядов. Соответственно, когда один временной ряд пересекает другой — мы получаем сигнал. Их будет два: в моей концепции пересечение одним рядом другого вверх или вниз — это два разных сигнала. Они взаимоисключающие: когда есть один, другой отсутствует. В качестве конкретного примера можно привести пересечение ценой скользящей (см. пример выше), или пересечение одной скользящей другой скользящей.
Чуть сложнее выглядит идея сигналов категории продолжения. Это означает, что мы получаем этот сигнал с момента его возникновения и до момента появления зеркального сигнала. Для примера давайте посмотрим на осциллятор Стохастик. Когда быстрый Стохастик пересекает медленный сверху вниз — это сигнал на продажу. Сигнал продолжения будет работать с момента такого пересечения и до тех пор, пока быстрый Стохастик не пересечет медленный в обратном направлении. Эта категория является зависимой и её можно посчитать от некоторых других сигналов, например, пересечения или прохождения экстремума. Таких сигналов тоже будет два и они тоже взаимоисключающие.

Сигналы категории области значений также удобно продемонстрировать на примере Стохастика. По классике работы с осциллятором есть предопределенные диапазоны от 0 до 20, от 20 до 80, и от 80 до 100. Соответственно, областей значения Стохастика будет 3 для каждого временного ряда. Таким образом, для двух временных рядов (быстрого и медленного Стохастика) мы получаем 6 сигналов категории области значений, которые будут нам говорить, в какой области и какой временной ряд находится на текущей свече.
Нуль-центрированные и значение-центрированные сигналы похожи, за той разницей, что нуль-центрированные сигналы в качестве константы используют нуль, а значение-центрированные — конкретное значение. Их суть — показать, является ли значение временного ряда выше, равным или ниже нуля или определённой константы. Работу этих сигналов удобно продемонстрировать на примере Моментума, который был показан в примере выше. Для Моментума значением является константа 100, и значение Моментума выше этой константы будет включать один сигнал, а ниже — зеркальный.
Осциллятор MACD колеблется вокруг нуля, и потому для него можно рассчитать нуль-центрированные сигналы по тому же принципу, что и с Моментумом. Однако, в MACD три временных ряда, а не один, как в Моментуме, поэтому сигналов для MACD будет 6, а не два.
Почему два и шесть, а не 3 и 9? Статистическая значимость сигнала, когда временной ряд равен нулю или константе, почти отсутствует, поэтому этот сигнал я исключил. Но можете проверить самостоятельно.
Пояснение: осцилляторами я называю такие индикаторы, которые не находятся в диапазоне цены инструмента. Поэтому, например, средняя скользящая или Боллинджер — это индикатор, а Стохастик, Моментум и MACD — осцилляторы.
Категория взаимных сигналов применима к нескольким временным рядам. Например, если у нас на графике есть две скользящие средние (А и Б) с разными периодами усреднения, мы можем сказать на каждой свече, что одна скользящая выше другой или ниже. В этом суть взаимных сигналов. Соответственно, их тоже будет два — сигнал «А выше Б» и сигнал «А ниже Б».
Как и для категории взаимных сигналов, для категории схождения-расхождения (или конвергенции-дивергенции) необходимо как минимум два временных ряда. В данном случае сигналы будут определять, приближаются ли кривые друг к другу или отдаляются. Таких сигналов тоже будет пара.
Значение сигналов направления очень простое. Сигналы говорят нам, что происходит с современным рядом: его значения растут, не меняются или уменьшаются. Соответственно, на каждый временной ряд получаем 3 сигнала.
Сигналы прохождения экстремумов возникают тот момент, когда производная становится равной нулю. То есть, они возникают в моменты разворотов временного ряда. Тут будет тоже 2 сигнала: разворот вниз и разворот вверх, безотносительно зоны разворота.
Производные сигналов
Помимо всех этих сигналов, мы можем также посчитать производные для временных рядов: первую и вторую.
Первая производная будет нам говорить о скорости изменения временного ряда, а вторая — о темпах изменения этой скорости. Таким образом, мы можем добавить ещё 2 категории сигналов к тем, что приведены выше:
- скорость изменения
- темп изменения скорости
Поскольку временной ряд может двигаться как вверх, так и вниз, то и значения производных могут быть положительными или отрицательными. Поэтому, дополнительно, мы можем посчитать абсолютные значения и рассчитать сигналы на их основании:
- абсолютная скорость изменения
- абсолютный темп изменения
Значений по каждому кортежу будет так же три: растёт, не меняется, уменьшается. Отмечу, что с помощью производных я детектирую импульс.
Видимые и невидимые сигналы
Поразмышляв над изложенным выше, можно прийти к выводу, что все сигналы мы можем разделить на 3 группы. Первую группу человек глазами на графике может легко увидеть, идентифицировать и принять решение. Со второй группой может быть посложнее, а уж торговать на ее основе — точно затруднительно. Третью группу человек не увидит вообще, поскольку эти данные являются производными от того, что видно на графике. По этим причинам много информации остается вне зоны нашего внимания и осознания и не участвует в принятии торговых решений. Между тем, я уверен, что некоторые отдельные трейдеры эти данные тоже используют, но используют интуитивно, ориентируясь на некую свою внутреннюю чуйку и не смогут даже объяснить, почему приняли такое решение — оно просто сработало. Делов том, что они годами смотрели на графики и совершали сделки, и отдельные зоны в мозге научились видеть эти закономерности в картинках и связали их с успешными сделками. Но объяснять они, конечно, не учились и не умеют — даже не способны. Я же хочу вывести это в рациональную плоскость, с целью понять и объяснить механику процесса.
Короче говоря, просто глядя на график, многое теряешь.
Список сигналов
Как вы поняли, для каждого индикатора будет своё число сигналов, в зависимости от того, что он из себя представляет — будут рассчитываться только релевантные. Как краткое резюме, привожу список сигналов, которые я использую для торговли:
- AboveArea
- AboveIndicator
- AboveValue
- AbsSpeedFall
- AbsSpeedGrows
- BelowArea
- BelowIndicator
- BelowValue
- Convergence
- CrossDown
- CrossDownContinues
- CrossUp
- CrossUpContinues
- DirectionDown
- DirectionUp
- Divergence
- EqualValue
- ExtremumHigh
- ExtremumHighContinues
- ExtremumLow
- ExtremumLowContinues
- InArea
- SpeedFall
- SpeedGrows
- ZeroAbove
- ZeroBelow
Как использовать подход
Уфф! Ну вот, получил целую кучу сигналов. Что теперь с ними делать? Сразу оговорюсь, что часть из них — шлак, а потому надо понять, какие из них рабочие, а какие — нет, какие применять для входа в длинные сделки, а какие в короткие, и какие сигналы эффективнее прочих. Ну а дальше использовать для торговли. Такую оценку можно провести несколькими способами, о чём рассказываю ниже.
Разметка лучших баров
Как следует из всего, что было изложено выше, для каждого бара по данной методике рассчитывается сонм сигналов. В частности, у меня их сейчас 348. Как я объяснил в этом моем посте, мы можем разметить ценовой ряд, маркировав лучшие свечи для покупок и лучшие свечи для продаж.
Так выглядит процесс в моей реализации:

Ну а далее просто провожу статистические расчёты:
- как часто каждый конкретный сигнал появляется на свечах покупки или продажи — это определит, является ли этот сигнал сигналом на покупку или на продажу
- и после этого как часто сигнал срабатывает правильно / не правильно — на той свече, к классу которой он отнесён (покупка или продажа) — точность сигнала
Рандомный поиск
Это вариант для продвинутых, в некотором смысле. Может быть, он даже лучше, чем то, что изложено выше. Во всяком случае, я перешёл к нему. Смысл заключается в том, что я рандомно, случайным образом выбираю сигналы для входа и для выхода (конечно, не вручную), а затем проторговываю их на истории цен, с верификацией — такой, какая нравится, например, walk forward.
Отмечу, что по сути, в принципе, этот вариант ничем не отличается от того, что использует большинство алгоритмических трейдеров, за исключением того, что сигналы выбираются случайным образом, а не зашиты в код. Используя классические техники и классические терминалы, эта задача может показаться неразрешимой из-за большого числа сигналов (348!) и огромного времени на перебор всех возможных комбинаций. По этой причине нужно использовать другие подходы, оптимизационные, которые позволят массово исключать подмножества априори неработающих комбинаций сигналов на вход и выход, и сосредоточиться и развивать те комбинации, которые работают и дают нужный мне результат. Понятно, их число огромно.
Я рассчитал 348 флагов на 15 индикаторах для каждой свечи. Пара индикаторов — моей собственной разработки. А есть ещё свечные формации вроде трёх солдат. Сами по себе они черта не работают, но в комбинации с другими сигналами дают хорошие результаты — они повышают вероятность точности определения точки разворота тренда, например. Но, подчеркиваю, еще раз — в совокупности с другими сигналами. При этом ничего не мешает посчитать сигналы и по другим индикаторам, которые я в свой пакет не включил. Может быть, даже вы увидите что-то, что я упустил на графике и какие-то еще сигналы, которые можно посчитать на основе той информации, которая представлена в графиках, — делитесь идеями об этом в комментариях.
Что тут важно? Нужно понимать, что чем больше поляна, тем больше вы соберете ягод и грибов. Пресекая на корню дискуссии о переподгонке и переоптимизации из-за большого числа сигналов, хочу сказать следующее. Во-первых, число сигналов на вход и число сигналов на выход выбираете вы. Хотите, используйте 2 штучки на вход, 2 штучки на выход. Из опыта, похоже, что большинство стратегий по такому принципу и работают. Вы можете использовать и 5, и 7 сигналов на вход и столько же на выход. Число сигналов на вход не обязано совпадать с числом сигналов на выход, между прочим. Если вы, конечно, найдете хоть какие-то комбинации сделок с таким числом сигналов.
В том огромном наборе сигналов, который у вас получится в результате реализации этой концепции, вы наверняка сможете найти и построить такие стратегии, которых еще на рынке ни у кого не было. Которые будут работать лучше, чем то, что есть у вас сейчас. Поскольку я это уже сделал, я могу говорить об этом со уверенностью. Причин этому я вижу две: комбинация сигналов разных индикаторов и использование скрытых сигналов, которых большинство просто не видит и/или не использует.
Финализируя этот раздел, замечу, что можно добавить больше нелинейности в торговый алгоритм, используя фиксированные, безубыточные или скользящие стопы по разным техникам.
Оценка качества сигналов
В таблице на рисунке ниже приведена статистическая оценка сигналов и их качества, основанная на методике из раздела «Разметка лучших баров», который вы прочитали выше. Для примера я взял сигналы, которые использованы в примере стратегии, описанном ниже.
В таблице приведено наименование сигнала, временной ряд, к которому он относится и веса принадлежности сигнала к направлению «покупка» или «продажа», а так же его точность. Видно, что в строках 1-3 сигналы классифицированы, как сигналы, на которые следует опираться при принятии решения о покупке (% buy weight > 50). В строке 4 и 6, напротив, сигналы следует использовать при принятии решения о продаже (% buy weight < 50).
Отдельно хочу обратить внимание на строку 5. По сути, сигнал выглядит, как мусорный и на совершение сделок вроде бы как не влияющий, однако это может быть и не так. Поясню: дело в том, что комплексный сигнал является логическим произведением всех сигналов на сделку (в данном случае — логическое И всех сигналов в строках 4-6). А в таблице, что выше, приведены сепарированные расчёты для каждого сигнала без учёта влияния на него других, так как комбинации сигналов могут быть любыми, как вы понимаете. Поэтому здесь нельзя сказать, что этот сигнал мусорный или не значим и его можно исключить. Нужно провести исследование, и если после исключения этого сигнала результат не изменится — то в реальной торговле, конечно, его можно исключить, ещё больше упростив алгоритм. Лично я в таком упражнении смысла не вижу.
Пример стратегии, основанной на сигналах
Ниже на диаграмме изображена кривая доходности по криптовалютному фьючерсу XMRUSDT. Период виден внизу диаграммы. На оси слева мы можем видеть доходность в процентах. Чёрная линия — это, собственно, рост капитала, а так же на диаграмме видно, как менялась рыночная цена в привязке к точкам роста — сделкам (Market Price). Кроме того, на графике нарисована линия максимальных достигнутых значений в ходе торгов (MaxSTD), кривая идеального роста (EtalonSTD), а так же усреднённая кривая по методу наименьших квадратов, которая практически совпадает с идеальным ростом (rsquare_RevenueSTD), но это частный случай — обычно они не совпадают.
Сигналы входа и выхода представлены такой строкой:
B:AMA/Close_AboveIndicator;B:ThreeBlackSoldersC_SpeedGrows;B:ThreeBlackSoldersL_AbsSpeedGrows;S:RSI_ExtremumLow;S:SMA/HMA_Divergence;S:SMA/HMA_BelowIndicator;M:ShortAllowed;
Давайте я её расшифрую. Начну с конца:
M:ShortAllowed;
Означает, что данной стратегии разрешены только короткие сделки. Соответственно, входом будет продажа (S), а выходом — покупка (B).
Вход осуществляется, когда все три сигнала истинны:
S:RSI_ExtremumLow; — кривая осциллятора RSI достигла минимального значения и начался её рост.
S:SMA/HMA_Divergence; — кривые SMA и HMA расходятся.
S:SMA/HMA_BelowIndicator; — HMA ниже (меньше), чем SMA.
Выход осуществляется, когда все три сигнала истинны:
B:AMA/Close_AboveIndicator; — Close текущей свечи выше AMA.
B:ThreeBlackSoldersC_SpeedGrows; — скорость «трёх белых солдат растёт»
B:ThreeBlackSoldersL_AbsSpeedGrows; — абсолютная скорость «трёх чёрных солдат» растёт.
По поводу двух последних строк требуется пояснение. Дело в том, что эти солдаты — это не временной ряд, сами по себе, а комплекс из трёх свечей — пресловутый паттерн. И здесь имеются ввиду не они, а их сигналы. То есть, пять восходящих свечей дадут нам 3 сигнала ThreeBlackSoldersC — на 4-й, 5-й и 6-й свече. Соответственно, значение сигнала ThreeBlackSoldersC_SpeedGrows изменится с 0 (ложь) на 1 (истина) на той свече, где первый раз увидим формацию «три белых солдата» — четвёртой.
Аналогично для ThreeBlackSoldersL_AbsSpeedGrows.
Буквы C и L в конце названия определяют методику определения трёх солдат — по Close или по High/Low.
Эта специфичная ситуация касается только свечных паттернов, так как сами по себе они не являются временным рядом, поэтому мы обращаемся к временному ряду производного от них сигнала. Впрочем, свечные паттерны можно и вовсе не использовать, если у вас имеется к ним негативное предубеждение. И без них сигналов более, чем достаточно. Я встроил их в свой алгоритм потому, что хотел проверить, как они будут работать в комбинации с другими сигналами, и из картинки ниже видно, что получилось очень хорошо.
И короткая ремарка относительно того, как была получена эта стратегия. Исследования (то есть, рандомный поиск стратегий, как он описан выше — а картинка работы механизма приведена в конце поста) осуществлялись на интервале 01.05.2022 — 31.05.2023. В данном случае взята одна из полученных стратегий, которой скормлен ценовой ряд за июль и небольшую часть августа. Никакой подстройки стратегии не осуществлялось — в моей концепции «подстройки параметров», чем заняты большинство алготрейдеров, не предусмотрено.

Заключение
Как уже говорилось ранее, можно использовать массу различных индикаторов, чтобы сгенерировать сигналы на их основании. Также можно создать сигналы на основании данных стакана, на основании тиков или на основании других данных технического анализа — горизонтальных и обычных объёмов, уровней, открытого интереса и так далее. Единственное требование — сигналы должны выдавать на выходе ИСТИНУ или ЛОЖЬ.
Проще не значит лучше?
По моему мнению, сложность описываемой идеи заключается только в её комплексности. На атомарном же уровне, на уровне простого кирпичика, понятно, что все очень просто, если не сказать — примитивно. Никакой высшей математики здесь нет, только статистика. А потому ее может использовать любой трейдер. Хотя, думаю, этот подход всё же ближе к алгоритмическому трейдингу по понятным причинам — нужно много посчитать и много протестировать, чтобы получить готовую стратегию. Но это этап исследования. Что же касается самой торговли — видно, что стратегии получаются весьма простыми, поэтому, думаю, и для ручной торговли они вполне могут сгодиться. В этом контексте их очевидным плюсом является ещё и жёсткая, абсолютная формализация правил входа и выхода. Никаких ощущений, никакой интуиции, сколько вешать в граммах — указано абсолютно точно и без разночтений.
Движение в сторону нейронных сетей
Я думаю, что тот, кто раньше уже имел дело с нейросетями, уже понял, что такой набор бинарных флагов, которые нам дают сигналы по этой методике, является наиболее желанным кормом для любой нейросети. По сути, это будет вектор из нулей и единиц, в моём случае длиной 348. Тут даже не будут нужны слои нормализации или защиты от переобучения, да и вообще сеть будет, похоже, линейной, небольшой. Можно сделать один выход — в случае регрессии и предсказывать вероятность от 0 до1, где стремление к 0 — это будет, например, покупка, а к 1 — продажа. Но ещё лучше сделать сеть с вектором на выходе, содержащим три значения, которые будут соответствовать трём действиям — купить, держать, продать, а каждый из них — вероятность от 0 до 1 соответствующего действия. Учиться такая сеть тоже будет очень, очень быстро. А потому, если у нас есть размеченные покупкой или продажей свечи и посчитанные сигналы для каждой свечи, мы можем скормить все эти данные нейросети и использовать ее для определения вероятности успешности входа и выхода на конкретной свече. И, оценивая эту вероятность, принимать решение.
Тут важно отметить только то, что такие сети должны быть регрессионными или классифицирующими, поскольку они не будут предсказывать будущее. Они будут говорить, что при определённой комбинации сигналов В ПРОШЛОМ вероятность успеха больше, если купить. Или продать. Ну и, поскольку никакая нейросеть не может быть точной на 100%, следует использовать механизмы защиты при такой торговле.
Кроме того, нужно будет как-то решать вопросы балансировки сети, поскольку свечей покупки и продажи по отношению к общему количеству свечей будет крайне мало, а те техники, которые обычно применяются для балансировки нейронных сетей в данном случае только ухудшат результат. Можно и не балансировать сеть, и она будет тоже отлично предсказывать точки сделок, но будет давать и много ложных сигналов, которые необходимо будет дополнительно фильтровать.
Поиск стратегий (торговых алгоритмов)
Если использовать подход, базирующийся на определении сигналов, как описано в данном посте, то для исследования необходимо создать отдельную подсистему, которая быстро и эффективно будет находить такие комбинации сигналов входа и выхода из 348!, которые будут являться профитными на желаемом отрезке времени. Кто-то ищет стратегии, которые будут работать годами, я сконцентрирован на более коротких стратегиях. В любом случае, описанный тут подход применим и там, и там. На самом деле, этот подход даёт десятки тысяч годных стратегий, и высока вероятность, что если вы опишите сигналами свои стратегии, то описанными механизмами найдёте и свою, и усовершенствованную версию своей, и стратегии, базированные на вашей или с элементами вашей. Наконец, прикреплю картинку, на которой видно, как работает алгоритм поиска профитных стратегий среди всего многообразия сигналов и на этом, пожалуй, закончу. Спасибо тем, у кого хватило терпения прочитать весь этот текст до конца :)

Измените его и показатели резко поменяются. Какой смысл в таких стратегиях, если от главного параметра зависит их результативность?
Блеванет она с такого корма...
PS. Не является инвестиционной рекомендацией.