Генерируем синтетические цены

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

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

В англоязычном издании книги «Beyond Technical Analysis, second edition» (John Wiley & Sons, Inc., New York, 2001) её автор Tushar Chande приводит пример реализации описанной выше методики, называя её «data scrambling» (можно перевести как «перестановка данных»). Он производит случайную выборку цен из исходного ряда (причём одна и та же цена может выбираться несколько раз), получая таким образом синтетический ценовой ряд. С моей точки зрения, более интересной является модуляция не самих цен, а их изменений между последовательными барами. Вариант работы с изменениями цен так же описан автором ресурса www.breakoutfutures.com в одном из общедоступных бюллетеней.

Рассмотрим пример создания синтетических данных. В качестве базовых цен возьмём котировки обыкновенных акций Сбербанка за июль 2011 года, скачав их с одного из общедоступных ресурсов в русскоязычном сегменте Сети (например, с сайта компании БКС). Поместим полученные данные в таблицу Excel, получив такую исходную рабочую форму:

Важно: я использую стиль нумерации ячеек «R1C1», этот стиль выбирается в настройках Excel (File → Options → Formulas → R1C1 reference style).

Следующим шагом, выделим изменения цен на текущем баре относительно цены закрытия предыдущего бара в отдельный массив данных:

Для получения значений изменений цен используются следующие формулы:




Теперь, выделим ячейки под номерами 8, 9, 10 и 11 в пятой строке, скопируем их и вставим в строки с номерами 6 — 23:

Таким образом, исходные данные для модуляции (изменения текущих цен относительно предыдущего закрытия) сформированы.

Следующим этапом является перестановка вычисленных изменений цен случайным образом. Мы реализуем перестановку строк целиком, тем самым сохранив относительные величины изменений цен в рамках одного бара неизменными. Скопируем значения вычисленных изменений цен в отдельный блок данных, при этом используем копирование ЗНАЧЕНИЙ ячеек, а не содержащихся в них формул Excel:

Для того, чтобы случайным образом перетасовать строки с номерами 5 — 23, воспользуемся генератором случайных чисел. Excel предоставляет встроенную функцию Rand(), возвращающую случайное число в промежутке от нуля до единицы. Используем эту функцию в 13-й колонке следующим образом:

Теперь, для перестановки строк с изменениями цен случайным образом, выделим строки с 5-й по 23-ю, а так же столбцы с 13-го по 17-й и отсортируем данные по значениям 13-го столбца (функция сортировки доступна на закладке Data, команда Sort):

После нажатия клавиши «OK», строки в блоке данных с изменениями цен будут перемешаны случайным образом.

Создадим финальный блок данных, в котором мы будем получать значения синтетических цен, и начнём его заполнение с использования первой цены закрытия из реальных данных:

После этого, для получения первого набора синтетических цен Open, High, Low и Close, будем прибавлять к этой реальной цене закрытия соответствующие изменения цен из предыдущего блока данных:

Строки 6 — 23 в блоке синтетических данных получаем копированием пятой строки:

В итоге, вся рабочая форма Excel будет выглядеть следующим образом:

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

Поскольку пакет Excel позволяет отображать торговые данные в виде свечей, мы можем, для визуального сравнения, отрисовать в нём реальные и искусственные данные:

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

Таким образом, продемонстрирован достаточно простой способ генерации синтетических ценовых рядов, который может быть легко модифицирован под конкретные целевые характеристики. Работа с Excel может быть упрощена с помощью макросов (в основном, в части автоматизации пересчёта блока синтетических котировок), однако, созданная рабочая форма полнофункциональна уже сейчас. С её помощью, можно получить сколько угодно наборов искусственных данных для последующего тестирования на них Механических Торговых Систем. Возвращаясь к примеру с проверкой снайперской винтовки, это один из способов сделать множество «пробных выстрелов» в торговле.

Назад   На оглавление   Вперед

Написать администратору