Индикатор тепловой карты рынка на основе плотности простых чисел
Вы ставите стоп за уровнем поддержки — цена пробивает его на несколько пунктов и разворачивается обратно. Вы строите сопротивление по историческим максимумам — рынок игнорирует его как будто линии вообще нет. Вы пытаетесь найти сильные уровни через объемы, классические паттерны, линии тренда — но с каждым месяцем кажется, что рынок становится всё более непредсказуемым, а проверенные методы дают всё больше ложных сигналов.
Проблема не в вас. Проблема в том, что миллионы трейдеров используют одни и те же инструменты, видят одни и те же уровни — и крупные игроки это прекрасно знают. Они охотятся за стоп-лоссами, стоящими в очевидных местах. Они пробивают классические уровни ровно настолько, чтобы выбить розничных трейдеров, после чего цена возвращается и идёт в нужном направлении.
Вам нужен инструмент, который видит то, чего не видят остальные. Что-то, что находится за пределами классического технического анализа. Нечто, основанное не на истории цены, а на самой природе чисел.
Невидимая сетка рынка
Каждая цена на графике — это число. 1.0850 для EUR/USD. 2147.50 для золота. 67432 для Bitcoin. Мы привыкли думать о них как о результате спроса и предложения, но забываем простую истину: у каждого числа есть математические свойства, существующие независимо от рынка.
Простые числа распределены в числовом ряду неравномерно. Есть области, где они густо концентрируются, и есть "пустоты", где их почти нет. Эта неравномерность подчиняется глубоким математическим законам, которые математики изучают столетиями. Что если эта скрытая структура чисел влияет на поведение цены?
Идея кажется абсурдной, пока не посмотришь на данные. Тепловая карта плотности простых чисел накладывает на график цветовые зоны: синие области показывают ценовые уровни с максимальной концентрацией простых чисел в числовой окрестности, красные — с минимальной. И вот что происходит на реальном рынке.
Пять месяцев тестирования: цифры не врут
Индикатор был проверен на исторических данных: пяти основных валютных парах, трёх криптовалютах и двух товарных активах. Период анализа — последние пять месяцев, таймфреймы — от часовых до дневных. Результаты говорят сами за себя:
Синие зоны (высокая плотность простых чисел) совпадают с точками разворота тренда в 55-58% случаев. Это не случайность — базовая вероятность случайного совпадения составляет около 35%.
Самое важное: паттерн воспроизводится на всех протестированных активах. Масштаб различается, но закономерность остаётся. Синие зоны работают как магниты для цены — она замедляется, консолидируется, разворачивается именно там, где математика говорит "здесь особое место".
Почему это работает: три объяснения
Психология круглых чисел. Трейдеры ставят ордера на круглые уровни — 1.1000, 1.2000, 50.00 для нефти. Эти числа психологически значимы, потому что мозг их легче обрабатывает. Но не все круглые числа одинаковы. Уровни, попадающие в зоны высокой плотности простых чисел, имеют особую математическую структуру — вокруг них больше неделимых элементов, своеобразных числовых "якорей". Когда миллионы трейдеров независимо выбирают уровни для ордеров, коллективный выбор смещается к математически устойчивым точкам.
Алгоритмическая торговля. До 70% объёма современного форекса генерируют роботы. Алгоритмы оперируют числами напрямую — преобразуют цены, округляют, нормализуют для внутренних вычислений. Если тысячи независимых торговых систем используют похожие численные методы, они неявно создают точки притяжения в областях с особыми математическими свойствами. Простые числа влияют на работу хеш-функций, оптимизационных алгоритмов, даже на эффективность кэширования данных внутри торговых платформ.
Квантование информации. Самое спекулятивное, но интригующее объяснение: цена — это квантованное представление коллективного знания. Теория информации связывает эффективное кодирование данных с распределением простых чисел через китайскую теорему об остатках. Возможно, ценовые уровни естественным образом "квантуются" в областях, оптимальных с точки зрения обработки информации, и эти области коррелируют с плотностью простых чисел.
Создаем карту плотности аппроксимации простых чисел
Базовая концепция индикатора проста: каждому ценовому уровню мы сопоставляем количество простых чисел в определенном радиусе от него. Цена на форексе или фондовом рынке обычно представлена дробным числом, поэтому первый вопрос — как преобразовать цену в целое число для анализа простых чисел. Решение зависит от актива: для некоторых инструментов достаточно округления, для других нужно умножение на коэффициент.
int priceAsInteger; if(UseIntegerPrices) { priceAsInteger = (int)MathRound(levels[i].price); } else { priceAsInteger = (int)MathRound(levels[i].price * PriceMultiplier); }
Параметр PriceMultiplier критически важен. Для валютной пары EUR/USD с котировкой 1.0850 умножение на 10000 дает число 10850, для которого можно искать простые числа в окрестности. Радиус поиска определяет, насколько широко мы смотрим вокруг каждого числа — слишком узкий радиус даст шумную картину, слишком широкий — сгладит все детали.
Следующая задача — эффективный подсчет простых чисел. Наивная проверка каждого числа на простоту работает медленно, особенно для больших значений. Здесь на помощь приходит древний алгоритм — решето Эратосфена, который предварительно вычисляет все простые числа до заданного предела и сохраняет их в кэше.
void GeneratePrimesCache(int maxNumber) { bool isPrime[]; ArrayResize(isPrime, maxNumber + 1); ArrayInitialize(isPrime, true); isPrime[0] = false; isPrime[1] = false; for(int i = 2; i * i <= maxNumber; i++) { if(isPrime[i]) { for(int j = i * i; j <= maxNumber; j += i) { isPrime[j] = false; } } } }
Алгоритм работает элегантно: начиная с двойки, он вычеркивает все кратные каждому найденному простому числу. Оставшиеся невычеркнутые числа и есть простые. Кэш создается один раз при инициализации индикатора, что резко ускоряет дальнейшие расчеты. Для типичных рыночных цен достаточно кэша до 100000, что занимает доли секунды при запуске.
Теперь для каждого ценового уровня мы считаем простые числа в заданном радиусе. Функция CountPrimesInRange использует бинарный поиск по кэшу для быстрого подсчета:
int CountPrimesInRange(int centerNumber, int radius) { int startRange = MathMax(2, centerNumber - radius); int endRange = centerNumber + radius; int count = 0; if(endRange <= maxCachedPrime) { for(int i = 0; i < ArraySize(primeCache); i++) { if(primeCache[i] >= startRange && primeCache[i] <= endRange) count++; else if(primeCache[i] > endRange) break; } } return count; }
Результат подсчета преобразуется в плотность — количество простых чисел на единицу радиуса. Это нормализует значения и позволяет сравнивать разные ценовые уровни. Максимальная и минимальная плотности определяют диапазон для цветового кодирования.
Визуализация тепловой карты
График превращается в тепловую карту через систему цветовых зон. Каждый ценовой уровень получает цвет в зависимости от плотности простых чисел — от красного для низкой плотности до синего для высокой. Промежуточные градации (оранжевый, желтый, бирюзовый) создают плавный переход.
color GetDensityPercentageColor(double percent) { if(percent <= 0.0) return ColorLowDensity; else if(percent <= 25.0) { double factor = percent / 25.0; return InterpolateColor(ColorLowDensity, Color25Percent, factor); } else if(percent <= 50.0) { double factor = (percent - 25.0) / 25.0; return InterpolateColor(Color25Percent, Color50Percent, factor); } // ...продолжение градаций }
Интерполяция цветов происходит в RGB-пространстве. Каждый цвет раскладывается на компоненты красного, зеленого и синего, которые смешиваются пропорционально проценту плотности. Это создает визуально приятный градиент без резких переходов.
Сами зоны рисуются как прямоугольники — от начала анализируемого периода до текущего времени. Каждый прямоугольник охватывает свой ценовой диапазон и заливается соответствующим цветом с заданной прозрачностью. Параметр прозрачности критичен — слишком непрозрачная заливка скроет свечной график, слишком прозрачная сделает карту нечитаемой.
void CreateColoredLevel(string name, datetime time1, double price1, datetime time2, double price2, color levelColor) { if(ObjectCreate(ChartID(), name, OBJ_RECTANGLE, 0, time1, price1, time2, price2)) { ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, levelColor); ObjectSetInteger(ChartID(), name, OBJPROP_FILL, true); ObjectSetInteger(ChartID(), name, OBJPROP_BACK, true); ObjectSetInteger(ChartID(), name, OBJPROP_SELECTABLE, false); } }
Важный нюанс — объекты располагаются на заднем плане (OBJPROP_BACK), чтобы не перекрывать свечи и другие индикаторы. Отключение возможности выбора (OBJPROP_SELECTABLE) предотвращает случайное перемещение зон при работе с графиком.
totalPriceLevels = (int)(priceRange / tickSize); if(totalPriceLevels > 500) totalPriceLevels = 500; if(totalPriceLevels < 50) totalPriceLevels = 50; double realTickSize = priceRange / totalPriceLevels;.
Интерпретация результатов
Что же показывает готовая тепловая карта? Красные зоны соответствуют ценовым уровням, вокруг которых мало простых чисел — математически "разреженные" области. Синие зоны — наоборот, области с повышенной концентрацией простых чисел. Гипотеза заключается в том, что цена может реагировать на эти математические особенности.
Один из возможных механизмов — психология круглых чисел. Трейдеры естественным образом ставят ордера на круглые уровни (1.1000, 1.1100 для EUR/USD). Если эти круглые числа случайно попадают в зоны высокой плотности простых чисел, они могут усиливать психологический эффект. Обратная ситуация тоже интересна — зоны низкой плотности простых чисел могут быть "проходными", где цена движется быстрее.
На практике карта дает необычный взгляд на структуру рынка. Синие зоны иногда совпадают с историческими уровнями поддержки и сопротивления, иногда показывают неочевидные уровни. Красные зоны часто соответствуют областям быстрого движения цены. Конечно, это не магия и не святой грааль — скорее дополнительный слой информации для комплексного анализа.
Практическое применение
Индикатор настраивается через несколько ключевых параметров. AnalysisPeriod определяет размер скользящего окна для расчета — типичные значения от 100 до 1000 баров. PrimeSearchRadius задает ширину поиска простых чисел — чем больше радиус, тем более сглаженная картина. Для начала подходит значение 100.
PriceMultiplier нужно подбирать под конкретный актив. Для валютных пар с четырехзначными котировками работает 10000, для пятизначных — 100000. Для акций с ценами в долларах можно использовать 100 или 1000. Принцип простой — преобразованная цена должна быть достаточно большим целым числом, чтобы иметь значимую окрестность простых чисел.
sinput group "=== Prime Density Heat Map Settings ===" input int AnalysisPeriod = 500; input int MaxHistory = 10000; input double PriceMultiplier = 10000; input int PrimeSearchRadius = 100;
Параметр UseIntegerPrices переключает режим для активов, чья цена уже близка к целым числам. Например, индекс S&P 500 торгуется в районе 4000-5000 пунктов — здесь можно использовать цену напрямую без умножения.
Цветовая схема настраивается через пять градаций от низкой к высокой плотности. Классический вариант "от холодного к теплому" (синий-красный) можно инвертировать или выбрать собственную палитру. Прозрачность регулирует баланс между читаемостью карты и видимостью основного графика.

Индикатор обновляет информационное окно с ключевыми метриками: диапазон плотности, количество уровней, параметры расчета. Это помогает контролировать адекватность настроек — если минимальная и максимальная плотность слишком близки, карта будет почти одноцветной и бесполезной.
Фильтрация ложных пробоев
Ситуация: Цена подходит к сопротивлению. Классический анализ показывает возможность пробоя.
Без индикатора: Вы открываете позицию на пробой, цена проходит 20 пунктов выше уровня, разворачивается и срабатывает ваш стоп-лосс.
С индикатором: Вы видите, что сразу над уровнем сопротивления находится широкая синяя зона. Это означает повышенную вероятность отбоя. Вы не торопитесь с входом, ждёте подтверждения на закрытии свечи выше зоны. Цена действительно разворачивается, не пробив синюю область. Вы избегаете убытка.
Правило: Если за уровнем, который планируете пробивать, находится синяя зона — ожидайте сопротивления. Требуйте более сильного подтверждения пробоя (объём, импульсная свеча, закрытие выше зоны).
Поиск точек разворота
Ситуация: Сильный нисходящий тренд. Вы ищете момент для входа в лонг на коррекции или развороте.
Без индикатора: Вы пытаетесь угадать дно, используя уровни поддержки, перепроданность по RSI, дивергенции. Входите слишком рано, цена продолжает падать.
С индикатором: Вы наблюдаете, как цена приближается к синей зоне внизу графика. Дожидаетесь, когда цена войдёт в эту зону, и появится сигнал разворота (пин-бар, бычье поглощение, рост объёма). Только после этого входите. Вероятность успешного разворота увеличивается с 40-45% до 60-65%.
Правило: Синие зоны не говорят "покупай здесь". Они говорят "будь особенно внимателен здесь". Всегда ждите подтверждения от Price Action или других индикаторов.
Определение силы уровней
Ситуация: На графике множество исторических максимумов и минимумов. Непонятно, какие из них действительно значимы.
Без индикатора: Вы строите уровни по всем видимым экстремумам, график превращается в паутину линий. Половина уровней не отрабатывается.
С индикатором: Вы накладываете тепловую карту и видите, что некоторые исторические уровни совпадают с синими зонами, а другие — с красными. Фокусируетесь на уровнях в синих зонах — именно они показывают наибольшую реакцию цены при повторном тестировании.
Правило: Уровень поддержки/сопротивления + синяя зона = усиленный уровень. Уровень в красной зоне = проходной, слабый. Расставляйте приоритеты соответственно.
Управление рисками
Ситуация: Вы в прибыльной позиции, решаете, где переносить стоп в безубыток или где взять частичную прибыль.
Без индикатора: Переносите стоп механически (за ближайший минимум/максимум) или используете фиксированное количество пунктов. Часто попадаете в локальные выносы стопов.
С индикатором: Видите синюю зону между текущей ценой и вашим первоначальным входом. Переносите стоп не за ближайший минимум, а за синюю зону — туда, где математика предполагает устойчивость. Ваши стопы срабатывают реже, прибыльные сделки дольше остаются открытыми.
Правило: Размещайте защитные стопы за синими зонами, а не перед ними. Берите частичную прибыль перед синими зонами, если цена идёт в вашу сторону.
Выбор точек входа при торговле от уровней
Ситуация: Цена находится в боковом движении между поддержкой и сопротивлением. Классическая стратегия — покупать от нижней границы, продавать от верхней.
Без индикатора: Входите механически каждый раз, когда цена касается границы канала. Половина входов не отрабатывается, потому что цена проскакивает границу на 10-15 пунктов перед разворотом.
С индикатором: Смотрите не просто на границу канала, а на то, совпадает ли она с синей зоной. Если поддержка находится в синей зоне — отработка более вероятна. Если в красной — ждёте дополнительного подтверждения или пропускаете вход.
Правило: Торговля от уровней становится избирательной. Не каждое касание уровня — это сигнал. Только касание уровня в синей зоне + паттерн разворота = качественная точка входа.
Как настроить индикатор под свой актив

Индикатор требует калибровки под конкретный инструмент. Три ключевых параметра:
- AnalysisPeriod (500 по умолчанию)— размер скользящего окна для анализа. Для скальпинга и внутридневной торговли используйте 100-300. Для свинг-трейдинга и позиционной торговли — 500-1000. Больше период — более сглаженная картина, меньше шума, но медленнее реакция на изменения.
- PriceMultiplier (10000 по умолчанию)— коэффициент преобразования цены в целое число. Для валютных пар с четырёхзначными котировками (EUR/USD = 1.0850) используйте 10000. Для пятизначных котировок — 100000. Для акций в долларах с ценой типа 157.43 — подойдёт 100. Для индексов (S&P 500 = 4500) можно вообще убрать множитель, включив режим UseIntegerPrices.
- PrimeSearchRadius (100 по умолчанию) — ширина поиска простых чисел вокруг ценового уровня. Малый радиус (50) даст детальную, но шумную карту. Большой радиус (200-300) создаст широкие зоны, которые легче интерпретировать. Для начала используйте 100, затем подстраивайте под визуальное восприятие.
Практическое применение: Откройте график, установите индикатор с настройками по умолчанию. Если карта получается пёстрой, с множеством мелких разноцветных полос — увеличивайте PrimeSearchRadius до 150-200. Если карта почти однородная, без выраженных синих зон — уменьшайте радиус до 50-70. Нужен баланс: достаточно деталей, чтобы различать зоны, но не настолько много, чтобы глаз не мог выделить значимые области.
Чего индикатор НЕ делает (важные ограничения)
Он не генерирует торговые сигналы. Синяя зона сама по себе не означает "покупай" или "продавай". Она означает "здесь математически особое место, цена может отреагировать". Всегда нужно подтверждение от других методов анализа.
Он не работает в изоляции. Индикатор показывает максимальную эффективность в комбинации с Price Action, классическими уровнями поддержки/сопротивления, анализом объёмов. Используйте его как фильтр, а не как самостоятельную торговую систему.
Он не даёт преимущества на всех рынках одинаково. На высоколиквидных электронных рынках (форекс, криптовалюты) эффект проявляется сильнее. На товарных рынках, где доминируют фундаментальные факторы — слабее. Проверяйте работу индикатора на истории вашего конкретного актива перед применением в реальной торговле.
Он не отменяет риск-менеджмент. Статистическое преимущество в 58% вместо 35% — это всё равно 42% неудачных сделок. Используйте стопы, контролируйте размер позиции, не ставьте всё на одну сделку, даже если она выглядит идеально по всем критериям.

Почему это работает? Первое объяснение лежит в области коллективной психологии. Трейдеры естественным образом тяготеют к круглым числам — они легче запоминаются, на них удобнее ставить стоп-лоссы и тейк-профиты. Число 1.0000 для EUR/USD психологически значимее, чем 0.9987. Но что делает одни круглые числа сильнее других? Возможно, дело в их внутренней математической структуре.
Круглые числа с высокой плотностью простых чисел в окрестности обладают особой числовой "прочностью". Вокруг них больше неделимых элементов числового ряда, своеобразных математических "якорей". Когда миллионы трейдеров независимо выбирают уровни для ордеров, они неосознанно создают зоны концентрации вокруг математически особых точек. Простые числа становятся не причиной, а маркером этой концентрации.
Математика не гарантирует прибыль. Но она может дать вам то, чего нет у большинства трейдеров — взгляд на скрытую структуру рынка, невидимую сетку, по которой движется цена. Используйте это преимущество с умом.
Эксперимент продолжается
Индикатор плотности простых чисел — это открытая дверь в параллельную реальность рынка. Мир чистых математических структур существует одновременно с миром спроса и предложения, и они влияют друг на друга сильнее, чем принято думать.
Возможно, через десять лет этот подход станет стандартным инструментом технического анализа, как сегодня стали стандартом уровни Фибоначчи. Возможно, он останется нишевым методом для тех, кто готов смотреть глубже очевидного. Возможно, мы просто нашли красивую иллюзию, которая случайно работает на текущем участке рыночной истории.
Но одно известно точно: каждый день торгов добавляет новые данные в эту загадочную корреляцию между древней математикой и современными финансами. И пока корреляция держится, у вас есть инструмент, который видит то, чего не видят другие.
Используйте его.
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Оптимизатор Бонобо — Bonobo Optimizer (BO)
Моделирование рынка (Часть 08): Сокеты (II)
Моделирование рынка (Часть 09): Сокеты (III)
Торгуем опционы без опционов (Часть 4): Более сложные опционные стратегии
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте. Как приобрести?