Торговые роботы и фракталы
«Фрактальная геометрия, один из инструментов теории хаоса, используется для изучения феноменов, которые являются хаотическими только с точки зрения евклидовой геометрии и линейной математики. Фрактальный анализ произвел революцию в характере исследований, ведущихся в несметном количестве различных областей науки: метеорологии, медицине, геологии, экономике, метафизике. Эта новая перспективная стратегия обладает потенциалом глубокого воздействия на всех из нас, сильно изменив нашу жизнь. Фрактальный анализ — новая мощная парадигма. Вместе с квантовой механикой и теорией относительности, это новый научный мир, некогда приоткрывшийся Галилею.» Это цитата из, наверное, бессмертного труда Билла Вильямса «Торговый Хаос», одной из основных работ, ознакомление с которой начинают путь большинство трейдеров современного мира. Работают ли заложенные в нее принципы в современном рынке, когда большинство инструментов настолько коррелируют между нефтью, мировыми индексами и долларом, а также чувствительны к несдержанным репликам власть предержащих, мы обсуждать не будем. Но и бесполезными подобные инструменты тоже назвать нельзя. Это как презирать виолончель, лишь не умея извлекать из нее божественные мелодии. Последнему мы и будем учиться. Итак, фракталы в редакции QUIK:
Индикатор «Фракталы» включает в себя серию из нескольких последовательных свечей и имеет две разновидности:
- «Фрактал вверх» – это серия из минимум пяти последовательных свечей, в которой перед средней свечой и за ней находятся свечи, чьи максимумы не выше, чем у средней свечи.
- «Фрактал вниз» – это серия из минимум пяти последовательных свечей, в которой перед средней свечой и за ней находятся свечи, чьи минимумы не ниже, чем у средней свечи.
Зелеными стрелками показаны фракталы «Вверх», красными, соответственно, «Вниз». Замечу лишь, что период в настройках этого индикатора в QUIK может быть больше или равен «5».
Теперь перейдем к коду робота, который получает данные из этого индикатора, что позволяет строить торговый робот на его основе. Робот действует по принципу перебора дат и времени, в поиске бара (свечи) на которой стоит фрактал. Для этого мы используем уже знакомую функцию перебора темпоральных значений OHLC, немного переработав ее под текущие потребности:
Код доступен только зарегистрированным пользователям:
В итоге имеем таблицу, в которой робот пишет тип фрактала (вверх или вниз), время его позиционирования относительно интервала графика, и соответственно уровень. Остается лишь приписать этому роботу торговый модуль, и блоки логики.
Enjoy!
П.С. На картинке красная стрелка, а не мухомор

Что-то напутано в функции FUNC FRACTAL (NUMBER)
1. Параметр «NUMBER» в самой функции нигде не используется.
Непонятно само назначение функции.
Она возвращает первое попавшееся значение «фрактала» (мин/макс) и его тип?
Как это вообще можно использовать в роботе?
(поскольку мин/макс определяется с задержкой)
Евгений Reply:
марта 30, 2010 at 20:17
Не напутано, все работает.
параметр NUMBER вы правы, не используется, но без доппараметров функция выдаст ошибку. При исполнении функции назначаются две переменные:FRACTALHIGH и FRACTALLOW. и после возвращения из функции именно они несут свмысловую нагрузку.
фрактал формируется на 5-ти барах, естественно задержка будет.
Здравствуйте,
Может вопрос не в эту тему, но по данной программе.
Какие могут быть причины, того, что программа работает правильно(определяет фрактал)на реальном счёте (в квике версии 5.16.0.145), а на учебном счёте (в квике версии 5.15.0.69) всегда выдают максимум последней свечи?
Это дело в различных версиях квика или в реальном(учебном счёте) или в чём-то ещё?
Спасибо.
Евгений Reply:
марта 30, 2010 at 22:21
Для начала обновите квик учебного счета. Данные фракталов не транслируются с сервера, формируются непосредственно в квике.
Какую стратегию можно построить на фракталах?
Евгений Reply:
марта 31, 2010 at 19:09
Ну например покупать при фрактале «вниз» и продавать при фрактале «вверх». Поищите в сети, думаю вопросы снимутся сами по себе.
alegnom Reply:
марта 31, 2010 at 21:05
Наоборот. Я хорошо знаком с этой стратегией. Она очень интересная. Но одних фракталов мало. Нужно ещё использовать скользящие средние. В оригинальной теории (читайте Билла Вильямса «Торговый Хаос») их 3 штуки с разными периодами индигатор называется Аллегатор. Но можно использовать в упрощенной модели только 1 линию — которая средняя. Фракталы это часть трендовой системы — их используют чтобы ловить сильные движения рынка. Если говорить просто, то мы находим фрактал, запоминаем его и когда цена обновит максимум(минимум) фрактала, при условии что скользящая средняя будет ниже(выше) цены, мы пукупаем(продаём). Поддержкой в данном случае для нас выступает скользящая средняя. Как-то так=)
Евгений Reply:
марта 31, 2010 at 21:09
Ну поэтому я и сказал «например». Главное — уметь получить фракталы из квика, а уж как применять — масса способов.
alegnom Reply:
марта 31, 2010 at 21:13
С этим согласен) Спасибо вам! Давно хотел автоматизировать данную систему) И обновление учебного квика помогло, за это отдельное спасибо=)
//Ну например покупать при фрактале «вниз» и продавать при фрактале «вверх». //
поскольку индикатор запаздывающий (как минимум на 3 бара) — явно, что это не сработает
Евгений Reply:
апреля 1, 2010 at 22:41
Ну не на три бара. Фрактал уже доступен в квике на начале второго от фрактального бара. Откройте график в кивке, наложите фрактал и посмотрите.
Но я не защищаю «стратегию», я же сказал как например использовать можно.
День добрый! Подскажите как можно реализовать, к примеру возник сигнал, был выставлен ордер если через 2 бара ордер не был исполнен то снимаем его? Заранее брагодарю.
Евгений Reply:
апреля 15, 2010 at 17:45
Задаете интервал графика и проверяете время активного ордера. Если больше — снимаете.
доброго времени суток!
подскажите плиз , как видоизменить функцию чтобы получить значения двух последних разнонаправленных фракталов? В вышеуказанном примере цикл просмотра баров на предмет наличия фракталов останавливается когда находится первый ближайший фрактал. Никак не могу додумать условие остановки цикла при получении 2х фракталов.
пробовал
IF FRACTALHIGH>0 AND FRACTALLOW>0
I=N ' ВЫХОДИМ ИЗ ЦИКЛА
но это неверно, ведь на одном баре не может быть одновременно двух значений...
туплю...
Евгений Reply:
мая 24, 2010 at 18:56
Надо сделать счетчик при поиске значений. В начале программы обнулять переменную, например:
COUNTFRACTALS=0
и в функции поиска фракталов сделать так:
IF FRACTALHIGH>0 OR FRACTALLOW>0
COUNTFRACTALS=COUNTFRACTALS+1
END IF
IF COUNTFRACTALS=2
I=N ' ВЫХОДИМ ИЗ ЦИКЛА
END IF
Можно сделать хитрый и элегантный ход:
IF FRACTALHIGH>0 AND FRACTALLOW>0
I=N ' ВЫХОДИМ ИЗ ЦИКЛА
END IF
т.е. при нахождении фракталов и вверх и вниз — только тогда выходим из цикла. Единственно, надо учитывать что могут быть последовательные однонаправленные фракталы.
managa1009 Reply:
мая 24, 2010 at 23:36
Евгений, по поводу элегантного хода — это первое что мне пришло в голову вчера. однако у меня ничего не вышло. поля были пустыми.
прямо сейчас попробовал — работает! выходит зря маялся сегодня весь день с ручным расчетом фракталов:(
ну и ладно, одной затыкой меньше, большой пасиб, Евгений!
Все, разобрался...
полазил по форуму Квика, выяснил что встроенный в Квик индикатор фракталов — кривой, и решил что лучше считать самостоятельно.
Там же (sim-sochi.narod.ru/Fractals.rar) нашел пример расчета, после некоторой переделки работает.
Евгений Reply:
мая 24, 2010 at 18:48
Насколько я знаю, в последней версии Квика баг с фракталами исправлен.