ИДЕНТИФИКАЦИЯ ФИГУР ГРАФИЧЕСКОГО АНАЛИЗА И ПРОГРАММНОЕ ВЫДЕЛЕНИЕ ТРЕНДОВ ФИНАНСОВЫХ РЫНКОВ НА ОСНОВЕ СХЕМ СОРТИРОВКИ - Студенческий научный форум

V Международная студенческая научная конференция Студенческий научный форум - 2013

ИДЕНТИФИКАЦИЯ ФИГУР ГРАФИЧЕСКОГО АНАЛИЗА И ПРОГРАММНОЕ ВЫДЕЛЕНИЕ ТРЕНДОВ ФИНАНСОВЫХ РЫНКОВ НА ОСНОВЕ СХЕМ СОРТИРОВКИ

Ромм Я.Е. 1, Тренкеншу А.И. 1
1ФГБОУ ВПО «Таганрогский государственный педагогический институт имени А.П. Чехова»
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

1. Постановка задачи.

Выявление различных фигур и трендов на графиках инструментов финансовых рынков (валютных пар, акций, фьючерсов и т.п.) является составной частью графического анализа, позволяющего иногда достаточно точно предсказать движение цены. В [1] было показано, что применение локализации экстремумов на основе сортировки с сохранением обратной индексации [3,4] к оцифрованным данным значений цен закрытия валютных пар рынка FOREX позволяет выделять на ценовых графиках основные модели графического анализа при вариации радиусов окрестностей точек экстремумов.

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

Предложенные алгоритмы реализованы в среде программирования Microsoft Visual Studio 2008 professional edition на языке C#.

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

2. Фигуры графического анализа.

Фигуры графического анализа - это типовые сочетания двух и более экстремумов. Под экстремумом будем понимать элемент числовой последовательности данных, для которого в рассматриваемой его окрестности не найдется значения больше него (в случае максимумов) или меньше него ( в случае минимумов). Классическое деление графических фигур включает две группы [5,6]:

  • фигуры разворота предыдущей тенденции;
  • фигуры продолжения предыдущей тенденции.

В работе рассматриваются четыре типа фигур разворота тенденции: «Удавшийся размах», «Неудавшийся размах», «Двойная вершина»/ «Двойное основание», «Голова и плечи». Рассматриваются также фигуры «Симметричный треугольник», «Восходящий треугольник» и «Нисходящий треугольник», которые в одних случаях являются фигурами перелома тенденции, в других - фигурами продолжения тенденции. Все множество обозначенных выше фигур в деталях рассматривалось в [1,2], где даны их изображения и формальные описания. Ниже на рис. 1 приводится описание одной из фигур - «Удавшийся размах», на рис. 2 фигура иллюстрируется на реальном графике. Описание фигуры приводится с целью проиллюстрировать работу предложенного метода идентификации фигур графического анализа.

Фигура «Удавшийся размах» на вершине (УРВ) и на дне (УРД) рынка (рис. 1) формируется пятью последовательно идущими экстремумами , такими, что

Рис. 1 Формирование фигуры «Удавшийся размах» на вершине и на дне рынка

Рис. 2 Фигура «Удавшийся размах» на графике Фунт стерлинг/Доллар США

На рис. 2 изображен график Фунт стерлинг/Доллар США за период с 01.07.2009 по 07.12.2011. Кружочками выделены экстремумы, составляющие фигуру «Удавшийся размах»

3. Алгоритм выделения и идентификации фигур графического анализа.

С учетом формального описания фигур графического анализа построен алгоритм их автоматического выделения и идентификации. Работа алгоритма иллюстрируется на примере идентификации фигуры «Удавшийся размах» (рис. 2), затем дается его формальное описание. В исходной последовательности цен локализуются максимумы и минимумы с определенными радиусами окрестности, которые подбираются программно. Так, в частности, максимумы и минимумы на рис. 2 локализуются при радиусах 15 и 16 соответственно. Далее, последовательность экстремумов прореживается с помощью процедуры, которая отсекает те группы экстремумов, которые заведомо, исходя из формального описания, не могут содержать никакой фигуры. Внутри оставшейся подпоследовательности экстремумов выполняется дальнейший поиск и идентификация фигур на основе их формального описания. Так, фигура, изображенная на рис. 2, идентифицируется внутри группы экстремумов, содержащих пять выделенных экстремумов, плюс два ближайших экстремума слева и справа от выделенных. Затем из этой группы будет выделена и идентифицирована искомая фигура. Вопрос о выборе числа экстремумов при формировании групп, включающих искомые фигуры, подробно рассматривается в [2]. С помощью рассматриваемого алгоритма удается практически идентифицировать все фигуры на графике, отмеченные выше, а также другие изображения, имеющие аналогичные формальные описания.

Рассматриваемый алгоритм для фиксированных в качестве параметров радиусов окрестностей точек минимумов  и радиусов окрестностей точек максимумов  можно представить следующим образом:

Шаг 1. На вход сортировки подаётся массив вещественных чисел, элементами которого являются цены закрытия финансового инструмента за выбранный временной период. Локализуются и идентифицируются по входным индексам все максимумы в -окрестности и все минимумы в -окрестности. В массив целый чисел  записываются адреса (индексы) локальных максимумов в исходном ценовом массиве. В массив целых чисел  записываются адреса локальных минимумов в исходном ценовом массиве.

Шаг 2. На вход сортировки подается массив . Отсортированные значения записываются в целочисленный массив , а их обратные индексы - в целочисленный массив .

Шаг 3. На вход сортировки подается массив . Отсортированные значения записываются в целочисленный массив , а их обратные адреса (входные индексы) - в целочисленный массив .

Шаг 4. Из массивов ,  и ,  выделяются наборы значений, представляющие собой адреса экстремумов в исходном ценовом массиве и эти же адреса в отсортированном порядке для сравнения значений экстремумов между собой; согласно результатам сравнения составляются подмножества последовательных экстремумов и их адресов, включающие фигуру графического анализа. Каждое такое подмножество ниже называется выделенной областью.

Шаг 5. Выполняется окончательная идентификация фигур внутри выделенных областей.

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

Для иллюстрации непосредственно ниже приведем фрагмент программной реализации шагов 4 и 5.

///

 

/// Функция сканирующая график на поиск фигур методом разбиения на сегменты

///

 

///

Выбор режима работы (поиск всех фигур или последних пяти)

 

/// Возвращается контейнер, содержащий идентифицированные фигуры

public ArrayList RecognizeUsingSegmentsPartition(Regime regime)

{

PreviousMin = -1;

PreviousMax = -1;

PreviousMinAdress = -1;

PreviousMaxAdress = -1;

int[] TestMins = new int[3];

int[] TestMaxs = new int[3];

int[] TestIndexMins = new int[3];

int[] TestIndexMaxs = new int[3];

ArrayList FigureList = new ArrayList();

Segmentation SegmentPartition = new Segmentation(LocalMinAdressInCurrentData, LocalMaxAdressInCurrentData, LocalMinIndex, LocalMaxIndex);

ArrayList SegmentsList = SegmentPartition.GetTrueSegments();

foreach (Segment CurrSegment in SegmentsList)

{

for (int i = 1; i <= 2; i++)

{

switch (i)

{

case 1:

PreviousMin = -1;

PreviousMax = -1;

PreviousMaxAdress = -1;

PreviousMinAdress = -1;

if (CurrSegment.FirstExtremumDescription == ExtremumDescription.MIN)

Type = PatternType.BOTTOM;

else

Type = PatternType.TOP;

CurrSegment.GetMaximumsForFirstCollection(ref TestMaxs, ref TestIndexMaxs);

CurrSegment.GetMinimumsForFirstCollection(ref TestMins, ref TestIndexMins);

break;

case 2:

if (CurrSegment.IsCanOnlyTriangle)

continue;

if (CurrSegment.FirstExtremumDescription == ExtremumDescription.MIN)

{

Type = PatternType.TOP;

PreviousMaxAdress = -1;

PreviousMax = -1;

PreviousMin = CurrSegment.FirstExtremum.Index;

PreviousMinAdress = CurrSegment.FirstExtremum.Adress;

CurrSegment.GetMaximumsForSecondCollection(ref TestMaxs, ref TestIndexMaxs);

CurrSegment.GetMinimumsForSecondCollection(ref TestMins, ref TestIndexMins);

}

else

{

Type = PatternType.BOTTOM;

PreviousMaxAdress=CurrSegment.FirstExtremum.Adress;

PreviousMax = CurrSegment.FirstExtremum.Index;

PreviousMin = -1;

PreviousMinAdress = -1;

CurrSegment.GetMaximumsForSecondCollection(ref TestMaxs, ref TestIndexMaxs);

CurrSegment.GetMinimumsForSecondCollection(ref TestMins, ref TestIndexMins);

}

break;

}

ResultFigure ResFigure = null;

if (IsRecognized(TestMins, TestMaxs, TestIndexMins, TestIndexMaxs, ref ResFigure,CurrSegment.IsCanOnlyTriangle))

{

 

if ((!IsFiguresExist(ResFigure, AllFigureList)) && (!IsFiguresExist(ResFigure, FigureList)))

{

FigureList.Add(ResFigure);

}

}

 

}

 

}

return FigureList;

}

В приведенном коде параметры LocalMinAdressInCurrentData, LocalMaxAdressInCurrentData, LocalMinIndex, LocalMaxIndex соответствуют параметрам, обозначенным выше как , , ,  соответственно, SegmentPartition - класс, разбивающий исходную последовательность экстремумов на группы (сегменты), в соответствии с количеством, определяемым в [2]. Каждый из сегментов описывается классом Segment, содержащим всю информацию о сегменте, в частности, информацию о том, может ли он содержать какую-либо из фигур или нет. Свойство GetTrueSegments класса SegmentPartition возвращает контейнер, содержащий сегменты, внутри которых ищутся и идентифицируются фигуры. За идентификацию фигуры внутри сегмента отвечает функция IsRecognized.

4. Результаты программного эксперимента.

Разработанный алгоритм был применен к графикам валютного рынка FOREX, рынка ценных бумаг компаний Apple, Google, Nike, фондовых индексов CAC 40, Nikkei, а также золота и нефти марки Brent. Приведем пример идентификации фигур на графиках из числа примеров, приведенных в [2].

Рис. 3 Выделение и идентификация фигуры «Удавшийся размах» в октябре - декабре 2009 года

На данном рисунке и ниже каждый максимум обведен квадратиком, а каждый минимум обведен кружочком.

На рис. 3а) показан результат программной идентификации фигуры «Удавшийся размах» на графике Евро/Доллар за период с 01.01.2009 по 15.05.2011. При этом ожидаемое движение цены, определенное программой, - падение. Как видно из графика, прогноз оказался верным, и цена начала падать. Этот момент, по сути, стал переломом тенденции восстановления Евро после кризиса 2008 года, связанным с долговыми проблемами в Еврозоне.

На рис. 3б) показана еще одна программная идентификация аналогичной фигуры «Удавшийся размах» на графике Доллар/Франк за такой же период времени. Как и на предыдущем рисунке, ожидаемое движение цены, определенное программой, - радение. Согласно графику прогноз, как и предыдущий, оказался верным, и восходящий тренд, длившийся с середины 2009 года, сменился длительным нисходящим.

Аналогичные примеры программной идентификации на изложенной основе всего множества фигур графического анализа приводятся в [2].

5. Выделение основных тенденций на финансовых рынках с автоматическим подбором параметров.

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

Рассматриваемая процедура выполняется для различных радиусов локализации экстремумов, которые подбираются на основе эксперимента с графиками финансовых рынков. Процесс подбора представляет собой итерационный процесс, который согласно эксперименту обладает свойством «сходимости». Данным свойством обладает как процесс локализации максимумов, так и процесс локализации минимумов. Под «сходимостью» понимается получение совпадающих результатов локализации одновременно всех экстремумов вторичной последовательности при некотором фиксированном наборе радиусов окрестности, по крайней мере, для четырех следующих друг за другом итераций.

На основании эксперимента в качестве радиуса локализации первичной последовательности экстремумов берется 1 (хотя могут использоваться и другие значения). Далее, задается начальный радиус вторичной последовательности, равный 1, и запускается итерационный процесс, условием остановки которого является «сходимость», в описанном выше смысле. Если в качестве радиуса первичной локализации взять 1, то процесс сходится для радиусов вторичной локализации, которые равны 22-25 или 27-31. Если в качестве радиуса первичной локализации взять 2, то процесс сходится для радиусов вторичной локализации 9-13 или 11-15. Экстремумы, локализуемые в обоих случаях, отражают наиболее важные ценовые спуски и подъемы, но в случае с большим радиусом первичной локализации пропускаются некоторые краткосрочные колебания.

Экспериментально подтверждено, что такой процесс позволяет выделить тренды на графиках финансовых рынков.

Итерационный алгоритм процесса локализации можно представить следующим образом:

Шаг 1. Задаем радиус локализации Eps, вычисляем все экстремумы первичной последовательности при заданном радиусе локализации.

Шаг 2. Назначаем найденную на Шаге 1 последовательность экстремумов в качестве входной (вторичной) последовательности. Присваиваем целочисленной переменной i значение 1. Вычисляем все экстремумы вторичной последовательности при радиусе локализации i. Помещаем их в объект CurrExtr. Значение счетчика Counter=0.

Шаг 3. i=i+1. Вычисляем все экстремумы вторичной последовательности при радиусе локализации i. Помещаем их в объект TempExtr. Если TempExtr=CurrExtr, то перейти к шагу 4, иначе - к шагу 5.

Шаг 4. Counter=Counter+1. Если Counter=3, то остановить процесс, иначе переход к шагу 3.

Шаг 5. Counter=0. Переход к шагу 3.

Фрагмент программной реализации алгоритма (Шаг 2- Шаг 5) представлен ниже:

///

 

/// Итерационный процесс локализации экстремумов

///

 

///

Тип экстремумов

 

///

Текущий контейнер экстермумов

 

///

Текущий ListBox

 

private void TrendSelection(ExtremumDescription Descr,ArrayList CurList,ListBox lbCur)

{

Extremums CurrExtr = null;

int i = 1;

int[] AdresIndex = null;

int[] CompareIndex = null;

int Counter = 0;

ArrayCalculation.Sort(((Extremums)CurList[lbCur.SelectedIndex - 1]).LocalExtremumsIndex, ref AdresIndex, ref CompareIndex);

CurrExtr = new Extremums(initialData, AdresIndex, Descr, i);

while (true)

{

i++;

Extremums TempExtr = null;

ArrayCalculation.Sort(((Extremums)CurList[lbCur.SelectedIndex - 1]).LocalExtremumsIndex, ref AdresIndex, ref CompareIndex);

TempExtr = new Extremums(initialData, AdresIndex, Descr, i);

if (TempExtr.LocalExtremums.Length == CurrExtr.LocalExtremums.Length)

{

CurrExtr = TempExtr;

Counter++;

if (Counter == 4)

break;

}

else

{

CurrExtr = TempExtr;

Counter = 0;

}

}

CurList.Add(CurrExtr);

string str = "";

for (int j = 0; j < lbCur.Items.Count; j++)

str += " ";

lbCur.Items.Add(str + " Подпоследовательность " + lbCur.Items.Count.ToString());

}

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

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

Приведем некоторые примеры выделения трендов. На рис. 4 приведено выделение опорных точек тренда на графике Евро/Доллар за период с 02.01.1998 по 01.11.2011. Радиусы локализации максимумов: первичный -1, вторичный, подобранный на основе автоматизированного итерационного процесса - 25. Радиусы локализации минимумов: первичный - 1, вторичный, подобранный на основе автоматизированного итерационного процесса - 25.


Рис. 4 Выделение тренда на графике Евро/Доллар за период с 02.01.1998 по 01.11.2011

На рис. 5 приведено выделение опорных точек тренда на графике Доллар/Йена за период с 02.01.1998 по 01.11.2011. Радиусы локализации максимумов: первичный - 1, вторичный, подобранный на основе автоматизированного итерационного процесса - 25. Радиусы локализации минимумов: первичный - 1, вторичный, подобранный на основе автоматизированного итерационного процесса - 27.


Рис. 5 Выделение тренда на графике Доллар/Йена за период с 02.01.1998 по 01.11.2011

Из рис. 4, 5 видно, что на графиках были локализованы все экстремумы, радиусы локализации которых подобраны программно на основе алгоритма, описанного выше, отражающие наиболее существенные точки роста и падения цены, что дает нам возможность построить алгоритм ценового прогноза.

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

6. Построение ценового прогноза.

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

Шаг 1. Если текущий экстремум есть максимум, то переходим к шагу 2, если минимум, - то к шагу 3.

Шаг 2. Проверяем, существуют ли два предыдущих минимума и максимум, которые чередуются. Если существуют, то переход к шагу 4, иначе - выход.

Шаг 3. Проверяем, существуют ли два предыдущих максимума и минимум, которые чередуются. Если существуют, то переход к шагу 4, иначе - выход.

Шаг 4. Если выбранные экстремумы представляют собой два понижающихся максимума и два понижающихся минимума, то делается прогноз о падении цены в будущем. Если выбранные экстремумы представляют собой два повышающихся максимума и два повышающихся минимума, то делается прогноз о росте цены в будущем. Если же максимумы - повышающиеся, а минимумы - понижающиеся, или наоборот, то прогноз о движении цены не делается до появления следующего экстремума.

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

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

Результаты применения алгоритма к финансовым инструментам приведены в таблице:

Таблица 1

Результаты прогнозирования движения цены

Финансовый инструмент

Общее количество сделок

Количество успешных сделок

Процент успешных сделок от общего числа

Евро/Доллар США

13

10

76,9%

Доллар США/Швейцарский франк

18

14

77,8%

Доллар США/Японская Йена

 

17

12

70%

Фунт стерлинг/Доллар США

 

 

10

7

70%

7. Заключение.

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

Список литературы 

1. Ромм Я.Е., Тренкеншу А.И. Выделение фигур графического анализа на рынке FOREX методом локализации экстремумов цен закрытия / Таганрог. госуд. педагогич. ин-т. - Таганрог, 2011. - ДЕП. в ВИНИТИ 04.03.2011, №106 - В2011. - 43с.

2. Ромм Я.Е., Тренкеншу А.И. Программное выделение и идентификация фигур графического анализа финансовых рынков на основе локализации экстремумов цен закрытия / Таганрог. госуд. педагогич. ин-т. - Таганрог, 2011. - ДЕП. в ВИНИТИ 19.07.2011, № 351-В2011. - 80 с.

3. Ромм Я.Е. Локализация и устойчивое вычисление нулей многочлена на основе сортировки. II // Кибернетика и системный анализ. - 2007.- № 2. - С. 161 - 174.

4. Ромм Я.Е. Метод вычисления нулей и экстремумов функций на основе сортировки с приложением к поиску и распознаванию. I // Кибернетика и системный анализ. - 2001. - №4. - С. 142 - 159.

5. Федоров А.В. Графический анализ финансовых рынков (профи-курс). Часть 2. Графические фигуры. - М.: Международная Академия Биржевой Торговли Форекс Клуб, 2008. - 74 с.

6. Шваргер Д. Технический анализ. Полный курс. - М.: Альпина Паблишер, 2001. - 768 с.

7. Andrew W.LO, Harry Mamaysky, Jiang Wang Foundations of Technical Analysis: Computational Algorithms, Statistical Inference and Empirical Implementation. The Journal of finance. Vol. LV, No. 4, August 2000.

Просмотров работы: 3705