Я трейдер с 15 летнем стажем и 8 летнем стажем программирования, 5 лет торговли на tslab… В общем за 3 года работы в TSlab и его аналогах и даже зарубежный алгопрограмм поймал себя на мысли того, что мне не нравится = под каждую стратегию, а вернее под каждый фильтр/правило/индикатор даже для одной стратегии и разные варианты управления позиции например — трэйлинг по ATR, трэйлинг по ATR c тэйком ATR, трейлинг ATR процентный тэйк, параболический стоп лосс и так далее по всем вариантам которые только может позволить фантазия, нужно создавать отдельные скрипты да еще, и каждое правило/группы параметров оптимизировать отдельно сохранять результаты — вести эксцель таблицы метрики… в целом я этим занимался на протяжении нескольких лет, но самым главным камнем послужила скорость оптимизации параметров в TSlab и я решил что буду строить свой оптимайзер и свою торговую программу, даже не подозревая куда меня это заведет ....
Предлагаю сначала разобраться в цифрах на банальной логике, что бы говорить предметно и по делу что за вычислитель/программу я создал как работает и какой результат, цифры все равно не обманут…
Я взял банально простую стратегию ложный пробой дневного минимума на таймфрейме 1 час =
Open>Close && Close>DayLow && Low<DayLow
далее разделил фильтр по минимумам — один фильтр это повышающиеся дневные минимумы а другой понижающиеся… таким образом:
Фильтр№1 = DayLow[-1]<DayLow
Фильтр№2 = DayLow[-1]>DayLow
Уже на этом этапе с любым вариантом PM нужно провести 2-е оптимизации, что бы выявить какой фильтр будет лучше...
Я напоминаю, что описываю пример банальной стратегии, так как на ее примере будут производиться расчеты и последующие результаты и рассуждения моей вычислительной программы
Следующим образом я добавил aEMA и от нее два правила:
Правило№1= aEMA<Close
Правило№2= aEMA>Close
как итог на одну стратегию у нас получается 4 варианта где алгоритм допускается для вычислений и потенциального открытия позиция ...
ЕСли бы все роботы выглядели так просто и примитивно, то проблем бы не было — прокатывай себе EMA и правила отдельно и не будет тебе проблем… но так как хорошие торговые системы являются много уровневыми и имеют более серьезные логические цепочки и закономерности используя например обновляемые значения и поверхностный набор правил если/да/нет поэтому оптимизация параметров фильтров/правил без вариантов управления позиций уже становится сложной ...
немного визуала для не математиков:
К этой стратегии я взял Тслабовский кубик трейлинг стопа(%) и выставил на нем вот такой диапазон:
Стоп_лосс { мин: 3.0, мак: 5.0, шаг: 0.2 }
Вкл. трейл { мин: 0.6, мак: 4.2, шаг: 0.2 }
Подтя.стоп { мин: 0.4, мак: 4.0, шаг: 0.2 }
=3971 вычислений = 1 PM
и как писал ранее у меня два правила EMA c набором:
Правило №1:
от 10 до 100 с шагом 10 = 10 вариантов
Правило№2
от 100 до 200 с шагом 10 = 11 вариантов
Получается для каждого правила +фильтр = +-39710… в итоге 4*39710 = 158 840 вычислений = Tslab справится на ура, но мы же с Вами понимаем что такая стратегия с таким PM просто сольет деньги, а если заработает то это будет банальная случайность из выбранного актива...
имея этот базовый набор я начал переносить свои стратегии/индикаторы/правила/метрики в вычислительный движок… по ходу изучал строение процессоров/видеокарт и диссертации молодых математиков, которые помешаны на скорости вычислений на всю сборку у меня ушло +- два года...
Теперь давай те начнем с расширенной версии правил и вариантов PM объем вычислений которых не ограничится триллионами а конкретное число = 7 248 183 997 248… ранее в оптимизации TSLAB и включал сотни миллионов на сутки и двое и забывал про сервер но теперь мне хватает нескольких часов что бы прокатать 10 миллиардов вычислений ...
Предлагаю по порядку как получилось число 7 248 183 997 248 и как пойдет процесс оптимизации...
я расширил правила для EMA, теперь их 4:
Правило№1= aEMA<Close
Правило№2= aEMA>Close
Правило№3= aEMA<bEMA
Правило№4= aEMA>bEMA но вместе с этим и выросла сетка оптимизации и итоговое количество кратно:
| Правила расчет | Итоговое число вычислений EMA правил = | 527 | |||
| 4 | min | max | шаг | итог колл.во | итог для Rule |
| Правило_№1 | 10 | 100 | 10 | 10 | 10 |
| Правило_№2 | 100 | 200 | 10 | 11 | 11 |
| Пр.№3 _aEMA | 20 | 120 | 10 | 11 | 253 |
| Пр.№3 _bEMA | 80 | 300 | 10 | 23 | |
| Пр.№4 _aEMA | 20 | 120 | 10 | 11 | 253 |
| Пр.№4 _bEMA | 80 | 300 | 10 | 23 | |
еще добавил дополнительно как пример банальное % отклонение цены от самой aEMA «Изменение_EMA»= ((a_EMA-a_EMA[-1])/a_EMA[-1])*100 и добавил Константу(«Уровень») — так как добавил еще дополнительных два правила которые можно проверять как вместе с правилами EMA так и проверить отдельно:
Доп_фильтр№1: Изменение_EMA<Уровень
Доп_фильтр№1: Изменение_EMA>Уровень
так как у «Изменения_EMA» 0 является метос пересечение close==aEMA, то сетку по правилам я не стал раскидывать на два диапазона — отрицательный/положительный а сделал единый параметр оптимизации, мне показалось так проще и вот что получилось:
| Изменение_EMA | min | max | шаг | итог колл.во |
| Константа_% | -0,4 | 0,4 | 0,001 | 801 |
Что бы далее говорить о конкретных цифрах и приводить примеры предлагаю ввести 5 разных правил PM:
1.Trailing_Only — трэйлинговый стоп лосс по ATR, расписывать формулы не буду, так как их в интернете полно, но в целом получается вот такая сетка для этого PM:
| набор для PM | min | max | шаг | Итог |
| ATR_Stop_loss | 2 | 20 | 2 | 10 |
| base_x | 1 | 4 | 0,2 | 16 |
| trail_X | 1 | 4 | 0,2 | 16 |
| final_x | 1 | 4 | 0,2 | 16 |
что равно 40 960 вариантов
2. Trail+ATRtake - трэйлинговый стоп лосс по ATR и тэйк по ATR:
| ATR_Stop_loss | 2 | 20 | 2 | 10 |
| ATR_take | 2 | 10 | 2 | 5 |
| base_x | 1 | 4 | 0,2 | 16 |
| trail_X | 1 | 4 | 0,2 | 16 |
| final_x | 1 | 4 | 0,2 | 16 |
3 276 800 кратно больше из за тэйка и дополнительного ATR, в TSlab я такой PM даже не оптимизировал так как нормальных фильтров/правил/индикаторов это миллиардные вычисления результат которых нужно ждать недели и месяцы
Я хотел бы тут забежать сразу вперед — параметры PM/фильтры/правила оптимизируются не для того что бы получить набор который получит лучший показатель PNL хотя и это важно, а получить набор параметров под каждый PM и каждый PM по определенную метрику, так как именно показатели метрики определяют живучесть и устойчивость набора стратегия+PM, такие как :
1)Profit Factor — Отношение прибыли к убыткам. Используется как фильтр качества PnL.
2)Recovery Factor — Способность профиля восстанавливаться после просадок.
3)Expectancy — Среднее математическое ожидание сделки.
4)PnL / Peak Load — Прибыль на пиковую нагрузку профиля.
5)Trade CVaR95 — Хвостовой риск по сделкам. Для риска используется минимизация абсолютного ухудшения.
ит ак далее и так далее — вариантов масса определить как отдельную стратегию так и сделки внутри нее… Но я так в tslab ине научился оптимизировать параметры под конкретный показатель который мне нужен и я говорю не про сортировку итоговых данных отображения в блоке оптимизация а про конкретную метрику или набор метрик который я хочу увидеть в итоговых данных оптимизации стратегии+правила+фильтры+доп.фильтры и сравнить с стратегии+правила+фильтры а может даже с стратегии+правила да еще и по каждому PM ...
Далее Trail+Perake — трэйлинговый стоп лосс с ATR + процентный тэйк
| ATR_Stop_loss | 2 | 20 | 2 | 10 |
| base_x | 1 | 4 | 0,2 | 16 |
| trail_X | 1 | 4 | 0,2 | 16 |
| final_x | 1 | 4 | 0,2 | 16 |
| prexetn_take | 1 | 4 | 0,2 | 16 |
= 655 360
и PercSL+PeTake процентнй трейлинг стоп лосс с процентным тейком
| prexetn_take | 1 | 4 | 0,2 | 16 |
| percetn_stop_loss | ||||
| start | 3 | 5 | 0,2 | 11 |
| trail | 0,6 | 4,2 | 0,2 | 19 |
| final | 0,4 | 4 | 0,2 | 19 |
=63 536
давай те начнем складывать и мягко говоря удивлять тому сколько нужно посчитать компьютеру что бы мы получили нужные нам циферки в итоговых данных и смогли выбрать понравившейся нам вариант:
давайте начнем с простого :
| Базовый набор 1 стратегия 1 PM(стандартные) | PM | ||||
| стратегия | фильтр уровней | EMA(rule) | EMA (Пр.№3) | Константа_% | Trailing_only |
| 1 | 1 | 1 | 253 | 801 | 40 960 |
| 1 | 1 | 253 | 202 653 | 8 300 666 880 | |
8 миллиардов ....
я специально взял стареньким компьютер что бы замеры были честные и разница вычислений была видна по сложности стратегии и диапазону и не зависела от мощностей процессора и видеокарты
на Tslab я взял в процесс вычислений базовый первый набор о котором писал в самом начале и вот что получилось:

1:43 запомним этот показатель так как от него и будем отталкиваться переведу в секунды так мой вычислитель делает в секундах из за того что паралельно в моем проекте можно оптимизировать :
1) одновременно несколько стратегий
2) одновременно несколько правил
3) одновременно несколько индикаторов
4) одновременно несколько PM
в той же статье речь пойдет конкретно об одной стратегии — ложный пробой минимума дня на часовом таймфрейме! ВАЖНО еще отметить что стратегия подразумевает 1 сигнал = 1 открытие позиции и пока эта позиция открыта другие сделки не открываются
даже при таких скудных параметрах PM и самой логики торговли Tslab выдал вот такие результаты для стратегии


теперь еще раз освежим память и вспомним что я расширил правила EMA до 4 и добавил доп_фильтр и добавил 5 PM и вот что вышли в итоговых числах:
| Базовый набор 1 стратегия 5 PM (стандартные) | PM | ||||||||||
| стратегия | фильтр уровней | EMA(rule) | колл.во EMA | Константа_% | Trailing_only | Parabolic | Trail+ATRtake | Trail+Perake | PercSL+PeTake | итоговое количество вычислений | |
| 1 | 1 | 4 | 527 | 801 | 40 960 | 256 000 | 3 276 800 | 655 360 | 63 536 | 7 248 183 997 248 |
|
| 1 | 4 | 2 108 | 1 688 508 | 69 161 287 680 | 432 258 048 000 | 5 532 903 014 400 | 1 106 580 602 880 | 107 281 044 288 | |||
вот эта заветная цифра 7 248 183 997 248 в TSlab можно давить все это дело что бы оценить предварительно время расчетов… оставлю это для энтузиастов исследователей, а в следующем посте поговорим о конкретных решениях вычислениях и как я решил эту задачу и что получилось
продолжение в второй части вычислений smart-lab.ru/blog/1314182.php
Все же повторю вопрос, что такое у Вас «вычисление». Элементарный пример привести можете?
взятие значения из массива по индексу не мгновенное. Оно тоже занимает время, как и умножение, сравнение или ветвление.
Просто в статье я считаю не машинные инструкции и не обращения к памяти. В моем прикладном смысле одно “вычисление” = одна оценка функции качества на одной точке пространства параметров.
Математически:
M = F(X, θ),
где X - исторический ряд свечей, θ - конкретный набор параметров стратегии/фильтров/выхода, а M - результат: сделки, PnL, просадка, PF и другие метрики.
То есть это не FLOPS и не “одно умножение”, а одна прикладная оценка торговой гипотезы. Внутри нее, конечно, есть и чтения памяти, и арифметика, и сравнения.
Высокая скорость достигнута за счет архитектурных и математических решений в организации расчетов, но детали реализации я раскрывать не могу. Надеюсь, понимаете.