Скачать MetaTrader 5

Советники: Классификатор на основе k-ближайших соседей.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаешь C++? MQL5 очень схож с ним, убедись в этом сам!
MetaQuotes Software Corp.
Модератор
181100
MetaQuotes Software Corp. 2009.01.06 07:05 

Классификатор на основе k-ближайших соседей.:

В данном эксперте рассмотрен пример использования классификатора. Может быть применён к любой другой стратегии.

Author: Артём

bobby
129
bobby 2009.01.07 00:22  

Hi StatBars, thanks for sharing this code. This is one of the most impressive EA that I've seen, you have done an excellent job. I've made some optimization after few hours. The results are here.

MQL4 Comments
16319
MQL4 Comments 2009.01.07 14:52  

+) Интересный подход.

Артём
16
Артём 2009.01.07 18:40  
FION:

+) Интересный подход.

Да, мне тоже понравилось когда прочитал в книжке, кстати удивлён был почему у всех на слуху были сети, коды всевозможных сетей на мкл есть, а такой простой и в тоже время эфективной k-NN нету...

MQL4 Comments
16319
MQL4 Comments 2009.01.07 23:27  

Оч. интересно. Неплох на Out-of-Sample, имеет неплохой начальный импульс после "обучения". Вообщем отличная пища для размышления и стапель для дальнейших эксперементов. Спасибо.

Evgeniy Uvarov
184
Evgeniy Uvarov 2009.01.08 10:55  
Galaxy:

Оч. интересно. Неплох на Out-of-Sample, имеет неплохой начальный импульс после "обучения". Вообщем отличная пища для размышления и стапель для дальнейших эксперементов. Спасибо.


Присоединяюсь!

После своих экспериментов отпишу, конечно,если лучше станет:-)

MQL4 Comments
16319
MQL4 Comments 2009.01.08 11:59  
StatBars:

Да, мне тоже понравилось когда прочитал в книжке, кстати удивлён был почему у всех на слуху были сети, коды всевозможных сетей на мкл есть, а такой простой и в тоже время эфективной k-NN нету...

Структура весьма чуствительна к точности работы основного фильтра, имею введу MACD, схема формирования векторов для классификатора не совсем ясна. Можете дать ссылочку на литературу?

ViDan888
152
ViDan888 2009.01.08 15:14  

Присоеденяюсь...

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

ViDan888
152
ViDan888 2009.01.08 15:33  

...в инете кое что нарыл, но в основном теория http://www.intuit.ru/department/database/datamining/10/datamining_10.html

...так, для общего понимания.

Артём
16
Артём 2009.01.08 18:44  
FION:
StatBars:

Да, мне тоже понравилось когда прочитал в книжке, кстати удивлён был почему у всех на слуху были сети, коды всевозможных сетей на мкл есть, а такой простой и в тоже время эфективной k-NN нету...

Структура весьма чуствительна к точности работы основного фильтра, имею введу MACD, схема формирования векторов для классификатора не совсем ясна. Можете дать ссылочку на литературу?

Вот ссылка. Но основной источник, а точнее то что по ссылке я увидел позднее, это Хайкин С. «Нейронные сети: полный курс»(Методы Обучения).

Что неонятно в формировании векторов? Как именно это происходит в этом эксперте или общие принципы?

Если общие то лучше в литературе прочитать...
По поводу MACD - для примера я взял обычную стратегию, где входы по пикам, выход по противиположному сигналу либо TP SL.

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

Теперь у нас есть база векторов, где все вектора помечены 0/1, координаты этого вектора отношения мувингов.

Теперь заново бежим по истории, уже когда флажок Base=false.

Как только MACD даёт сигнал на покупку заполняем вектор также как и раньше в том же порядке и т.д.

вот фрагмент

veсtor[0]=iMA(Symbol(),Period(),89,0,0,5,1)/iMA(Symbol(),Period(),144,0,0,5,1);
veсtor[1]=iMA(Symbol(),Period(),144,0,0,5,1)/iMA(Symbol(),Period(),233,0,0,5,1);
veсtor[2]=iMA(Symbol(),Period(),21,0,0,5,1)/iMA(Symbol(),Period(),89,0,0,5,1);
veсtor[3]=iMA(Symbol(),Period(),55,0,0,5,1)/iMA(Symbol(),Period(),89,0,0,5,1);
veсtor[4]=iMA(Symbol(),Period(),2,0,0,5,1)/iMA(Symbol(),Period(),55,0,0,5,1);

После чего Этот вектор который, как видите, не имеет метки 0/1 посылаем в базу для определения его метки(его класса).

Prob_win=Euclidean_Metric(base_buy,veсtor,numbers_of_vectors_buy);

base_buy - база векторов buy позиций, я специально разделил короткие и длинные позиции, нельзя мешать всё в кучу.

veсtor - текущий вектор

numbers_of_vectors_buy - количество векторов в базе

Функция возвращает вероятность принадлежности этого вектора к классу 1(выигрышной).

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

Артём
16
Артём 2009.01.08 19:03  

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

Просто данный брались однообразные( все координаты примерно в одном интервале) поэтому нет...

1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий