О поддержках, сопротивлениях и каналах (ч.5)

22 ноября, 2011

Я не буду рассказывать Вам теорию фракталов Мандельброта, хотя при обосновании фильтра FRAMA с помощью этой теории все выглядит очень таинственно и экзотично.

Но я считаю, что все объясняется гораздо прозаичнее и не надо городить сложное там, где все достаточно просто.

В фильтре KAMA(адаптивный фильтр Кауфмана) и фильтре FRAMA ( Fractal Adaptive Moving Average By John Ehlers) суть управления коэффициентом ”K” сводится к следующему.

Сначала вспомним, что такое тренд.

В номере «Уолл Стрит Джорнал» от 3 июля 1984 года была опубликована статья под заголовком «Столетие Индекса Чарльза Доу». Через неделю в «Баррон» эта тема была продолжена материалом, озаглавленным: «В течение ста лет Теория Доу верой и правдой служит инвесторам».

Обе статьи вышли в свет, чтобы отметить сотую годовщину со дня первой публикации Чарльзом Доу среднего рыночного курса акций.  Это произошло 3 июля 1884 года.

Определение тренда или тенденции , которое дает Доу, выглядит следующим образом:

При восходящем тренде каждый последующий пик и каждый последующий спад выше предыдущего.

При нисходящем тренде каждый последующий пик и спад будет ниже, чем предыдущий.

Такое определение тренда до сих пор является основополагающим и служит отправной точкой в анализе рынков.

Для решения задачи обнаружения тренда, построим следующие графические модели тренда (рис.1) и его отсутствия – боковое движение (рис.2).

Математически такая модель представлена в виде суммы линии p2=A0+B0*t – модель линии тренда и синусоиды p1=A1*sin(2*Pi*t/Ts)– модель волнового движения цены . В МАТЛАБ это можно смоделировать следующим образом:

time=0:1999;

p1=0.25*sin(pi*time/200);

B=0.25;

p2=B*(time/200);

p3=p1+p2;

plot(time,p3,time,p2);

Рис 1. модель трендового движения рынка

Рис 2. модель ”боковое движение” флетового движения (flat-плоский)

Колебания цены относительно средней линии характеризуются максимальным Max и минимальными значениями Мin.

Если бы волновая составляющая отсутствовала, то наличие тренда можно было бы определить по углу наклона лини тренда, т.е. по коэффициенту B0,который определяет скорость нарастания тренда.

Чем больше коэффициент (скорость) отличается от нуля, тем сильнее тренд.

При этом , практическое вычисление данного коэффициента запишется в виде:

B0=(P2-P1)/(T2-T1),

где P1,P2 – значения цены в моменты времени T1,T2 соответственно.

При наличии волновой составляющей , данная формула может быть применена,

но для этого необходимо сначала выделить на графике максимумы двух волн Max1 и Max2 в моменты T1 и T2 и вычислить B0=(Max2-Max1)/(T2-T1). Аналогично можно записать для минимальных значений волн Min1 и Min2.

При этом, моменты времени T1 и T2 связаны с моментом появления экстремумов.

Так как в реальности имеем множество волн, то оценка величины B0 содержит случайную составляющую, поэтому применяется усреднение полученных оценок, т.е. используется сглаживание оценки коэффициента B0 .

Для упрощения процедуры обнаружения тренда предлагается следующий алгоритм.

Выбираем интервал наблюдения Tн.

Делим его на две части Tн1 и Tн2.

Вычисляем параметры:  A3=Max-Min – размах цены на интервале Tн

Вычисляем параметры:  A1=Max1-Min1 – размах цены на интервале Tн1

Вычисляем параметры:  A2=Max2-Min2 – размах цены на интервале Tн1

Вычисляем среднее значение размаха цены A=(A1+A2)/2;

Полученное значение нормируем к A3 и получаем:

Z=A/A3, или Z=(A1+A2)/(2*A3)

Если тренд отсутствует, то согласно модели, получим A1=A2=A3=A и Z=1.

Чем сильнее тренд, тем ближе коэффициент Z приближается к 0.5, при условии, что волны имеют примерно равный размах.

Так для данной модели A1=A2; A3=2*A1, A=1,  Z=0.5.

Таким образом, мы получили безразмерную величину Z, которая изменяется от 1 – для флета(боковика),   до 0.5 — при линейном тренде.

Величина Z может быть применена как управляющий параметр в AMA.

Для целей применения величины Z как управляющего сигнала индикатора, мы можем смещать, сужать и расширять диапазон изменения Z путем прибавления констант, умножением и делением Z на константы.

В фильтре FRAMA в качестве управляющего коэффициента предлагается использовать так называемую фрактальную размерность:

D=1+(Ln(A1+A2)-Ln(A3))/Ln(2);  где Ln(X) – натуральный логарифм X.

Величину D для нашей модели можно вычислить следующим образом:

D=1+Ln(Z).

Немного другая модель расчета коэффициента управления фильтром использована в фильтре Кауфмана.

Но об этом в следующий раз.

Способ построения роботов на торговом терминале QUIK(ч.2)

17 ноября, 2011

Автор: Николай Камынин

Продолжаем рассматривать возможности построения торговых роботов на основе QUIK без какого-либо  экспорта  данных по DDE или ODBC.

После того, как разработчики КВИКА обеспечили доступ на QPILE непосредственно к содержимому таблиц, появилась возможность строить полноценные и скоростные роботы по изложенной ранее технологии.

При этом скорость выставления заявок не уступает скорости работы с использованием различных пристроек на основе DDE или ODBC.

Короче, я заявляю, что все эти причуды с различными библиотеками и серверами SQL на самом деле ископаемые динозавры.

В качестве информации для размышления привожу результаты тестирования скорости выставления и снятия различных типов заявок исключительно на QPILE.

Получились следующие цифры:

Время выставления стоп-заявки типа «cтоп-лимит и тейк профит» составляет 0.2 секунды.

Это же время уходит на снятие заявки.

При этом вся информация о действиях наглядно отображается на графике и в таблице стоп-заявок.

Время выставления заявки типа «купить/продать по лимитированной цене» составляет 0.3 секунды.

Это же время уходит на снятие заявки.

При этом вся информация о действиях наглядно отображается на графике и в таблице заявок.

Согласно документации разработчиков TRANSAQ при обращении к серверу TRANSAQ через интерфейс TConnector, время реакции сервера составляет 0.3 секунды.

Таким образом, полученные результаты на QPILE свидетельствуют, что мы получили практически максимальное быстродействие, которое доступно без использования протоколов FIX и PLAZA2.

Теперь немного о быстродействии QPILE  при поиске записей в таблицах.

Так в эксперименте по поиску строки в таблице сделок при числе записей 400 и 5 ключевых параметрах, при полном переборе всех строк таблицы, время поиска составило 0.4 секунды.

Хотя этот результат и не АХ, но при организации надлежащим образом программы, время поиска в таблице можно уменьшить в 10 раз.

Таким образом, предложенная ранее схема реализации роботов позволяет обеспечить быстродействие менее 1 секунды  и практически не уступает схемам на основе DDE и ODBC, существенно превосходя их по простоте решения и надежности работы.