Использование Нейронных сетей в трейдинге.

 

Уважаемые господа трейдеры! В последнее время немного стихли страсти вокруг использования нейросетей в

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

с вопросами, разочаровался (руками проще) или временно отошел в сторону и тех, кто имеет некоторые (а может и очень хорошие)

результаты и спокойно работает и совершенствует свою систему.. Однако появляются новые страждущие с

желанием преуспеть и вопросами. Многое уже обсуждалось, но может быть у опытных нейро-трейдеров появились

новые мысли?

Я интересуюсь неросетями недавно и поднакопил некоторые вопросы.. Хотелось бы услышать мнение людей у которых получается..

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

1. Какую задачу поставить перед НС? Думаю что задача классификации (т.е. разделение моментов на рынке на классы

"покупать", "продавать", "оставаться вне рынка") наиболее перспективная в плане получения хороших результатов в торговле.

2. Как эту задачу сформулировать? Я вижу два пути.

а. Первый - это научить сеть самостоятельно определять наиболее благоприятные

моменты на рынке. Заходить в рынок в момент наибольшей вероятности проведения профитного трейда.

В этом случае сеть будет анализировать рынок постоянно (например при открытии каждого нового бара) и определять

пора или не пора.. Какой тогда должна быть обучающая выборка? Ясно что в ней должны присутствовать

входные значения (значения цены или индикаторов) с каждого бара выборки и каждому бару должно быть присвоено

желаемое выходное значение. КАКОЕ? Это вопрос вопросов! Так в программе Neural Networks 4 от STATISTICA желательно

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

какому то классу.. например 1, 0 или -1... или даже текстом "продавать" "вне рынка" "покупать"

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

и распределяться в диапазоне от (например) -1, что означает 100% продавать! до 1 - 100% покупать, а 0 тогда будет

"не знаю" или "вне рынка". Т.е. каждый бар должен иметь набор входных данных и выходное значение (например) 0.8745

что будет означать что на покупку дается 87 шансов из 100.

Ну и конечно как такие выходящие значения найти? Использовать ЗигЗаг? И между вершинами Зиг-Зага каждому бару

высчитывать свои "шансы"?

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

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

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

И опять.. выходная выборка (дизаер) должна быть дискретной или с промежуточными значениями?

3. Входящие значения. Предлагают не брать значения индикаторов как таковые.. Думаю, что это ошибочное мнение.

Индикаторы "заглядывают" в историю каждый на свою глубину и под своим углом и уже исходя из этого несут

важную информацию для НС Если взять набор значений индикаторов то входящий вектор напоминает некий "штрих код" рынка

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

значений индикаторов (для предоставления сети информации о направлении движения цены). Какие еще есть

варианты и ГЛАВНОЕ - КАКОЙ ПРАВИЛЬНЫЙ? Я пробовал брать расчет угла Фи комплексного числа (Угол Фи - геометрическая

интерпретация комплексного числа) по Клоту, но на эксперементах в NeuroSolution по сравнению с набором

значений индикаторов получалось гораздо хуже. Что скажет экспертное сообщество? ;-)

4. Нормализация входных значений. Смысл процедуры понятен. Не понятно как его правильно осуществлять. Поясню.. Нормализация -

это приведение значений к единому диапазону. Для этого нужно найти максимальное значение на выборке и минимальное.

Отлично. На какую глубину будем искать? Предположим у нас в выборке 100 значений индикатора. нам нужно нормализовать

75-е значение. Где будем искать минимум и максимум? На 74 предидущих? или 50 предидущих? или на всех 100 (т.е. заглянем

в будущее?) Тут надобна определенность.. так как при классификации каждый бар должен обсчитываться независимо и по

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

строго определенную единую глубину (например всегда 100 бар назад или 500 или величиной с обучающую выборку).

5. Случайная пересортировка входящей выборки. Би ор нот ту би! Мнения расходятся.. Теория гласит, что дело в задачах

классификации полезное. А как на самом деле? Кто пробовал? Есть мнения?

6. И наконец последний вопрос по поводу тренировки сети. Кто-нибудь использует C.V. (кросс валидейшен) выборку?

А нужно ли? А действительно она помогает предотвратить перетренированность сети? И вообще как бороться с этой

подлой перетренерованностью? Ведь всю малину портит! Как на обучающих выборках бывает все красиво! А на Out of

Sample - ерунда..

Лично я использую для изучения вопроса полезности НС в трейдинге NeuroSolution 5 DE. Хорошая гибкая программа.

Есть возможность генерить результат в виде DLL.

Весьма навороченная.. (тока не понятно как в ней после обучения и оптимизации найти какие значения из входной выборки

полезны, а какие программа исключила как вредные или ненужные).

Прошу не проходить мимо. Критикуйте! Предлагайте! Делитесь мыслями!

 
Конечно много букав, но хотя бы посмотрите по ссылкам под вашим постом, всё-таки тема не нова.
 
читайте================================>хайкина=========================> :О)
 
PraVedNiK >>:
читайте================================>хайкина=========================> :О)

Уже нашел! Обязательно почитаю.

 
sayfuji >>:
Конечно много букав, но хотя бы посмотрите по ссылкам под вашим постом, всё-таки тема не нова.

Много букав мне не трудно.. По ссылкам все перечитано.. тому времени уже.. полагаете что тема исчерпана полность?

 

полагаете что тема исчерпана полность? 

Никак нет. Наоборот даже, копать и копать, лопату бы побольше и времени мешок.


 
alexish писал(а) >>

4. Нормализация входных значений. Смысл процедуры понятен. Не понятно как его правильно осуществлять. Поясню.. Нормализация -

это приведение значений к единому диапазону. Для этого нужно найти максимальное значение на выборке и минимальное.

Отлично. На какую глубину будем искать? Предположим у нас в выборке 100 значений индикатора. нам нужно нормализовать

75-е значение. Где будем искать минимум и максимум? На 74 предидущих? или 50 предидущих? или на всех 100 (т.е. заглянем

в будущее?) Тут надобна определенность.. так как при классификации каждый бар должен обсчитываться независимо и по

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

строго определенную единую глубину (например всегда 100 бар назад или 500 или величиной с обучающую выборку). - ищите универсальный метод, и почитайте статьи на спец. сайтах по нейросетям.

5. Случайная пересортировка входящей выборки.- не существенный момент

6. И наконец последний вопрос по поводу тренировки сети. Кто-нибудь использует C.V. (кросс валидейшен) выборку?

А нужно ли? А действительно она помогает предотвратить перетренированность сети? И вообще как бороться с этой

подлой перетренерованностью? Ведь всю малину портит! Как на обучающих выборках бывает все красиво! А на Out of

Sample - ерунда.. - В любом случае всё решает тестовая выборка.

Ерунда на OOS: 1.Не репрезентативная выборка 2. Не стационарные данные 3. Некорректная предобработка, возможно и ещё некоторые моменты...

Лично я использую для изучения вопроса полезности НС в трейдинге NeuroSolution 5 DE. Хорошая гибкая программа.

Есть возможность генерить результат в виде DLL.

Весьма навороченная.. (тока не понятно как в ней после обучения и оптимизации найти какие значения из входной выборки

полезны, а какие программа исключила как вредные или ненужные).

Прошу не проходить мимо. Критикуйте! Предлагайте! Делитесь мыслями!

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

 
alexish писал(а) >>

1. Какую задачу поставить перед НС? Думаю что задача классификации (т.е. разделение моментов на рынке на классы

"покупать", "продавать", "оставаться вне рынка") наиболее перспективная в плане получения хороших результатов в торговле.

Да, это так. Причём, состояние "вне рынка" как правило связано с расширением спреда, всё остальное НС отслеживает и должна эксплуатировать в свою пользу. Поэтому, для НС является актуальным классификация только по признаку "покупать", "продавать", а уже в самой ТС выставляется "запрет-разрешение" на торговлю в зависимости от текущей величины комиссии ДЦ.

2. Как эту задачу сформулировать? Я вижу два пути.

а. Первый - это научить сеть самостоятельно определять наиболее благоприятные моменты на рынке.

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

И опять.. выходная выборка (дизаер) должна быть дискретной или с промежуточными значениями?

Правильно - максимально облегчить задачу решаемую НС, для этого нужно определить оптимальную ТС (для конкретных условий) самостоятельно и скармливать в качестве входных данных уже препарированный временной ряд, т.е. не каждый бар, а вероятные ключевые точки, и уже только после этого можно ожидать от НС адекватного решения по вхождению-выхождению с рынка. Именно она будет решать является ли предложенная вами критическая точка таковой или всё же нет.

Что касается ответа на вопрос о дискретности выходных значений НС, то он не очевиден и зависит в первую очередь от закона распределения амплитуд приращений котира "нарезанного" входным сигналом НС. Если распределение близко к симметричному, тогда можно ограничиться дискретным выходом +/-1 (покупка/продажа), если же распределение не симметрично, то необходимо помимо знака учитывать его амплитуду (вероятность).

3. Входящие значения.

Ответил выше.

4. Нормализация входных значений.

Нормализация необходима для корректной работы НС.

Правильно так провести эту процедуру, чтобы добиться отображения всего диапазона принимаемых значений на входе/входах НС в область +/-1 с равномерным (полкообразным) распределением. Сделать это можно воздействуя на входной вектор гиперболическим тангенсом и затем тем или иным саособом выравнивая распределение (необязательно).

5. Случайная пересортировка входящей выборки. Би ор нот ту би! Мнения расходятся..

Процедура бесполезная!

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

6. И вообще как бороться с этой подлой перетренерованностью?

Существует однозначная связь между минимальной длиной обучающей выборки P, числом настраиваемых в НС весов W и размерностью входа d: P>4*(W^2)/d

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

Лично я использую для изучения вопроса полезности НС в трейдинге NeuroSolution 5 DE. Хорошая гибкая программа.

Весьма навороченная..

Плохо!

Нужно писать код НС сразу под MQL. Это единственный способ избежать море подводных камней и сэкономить время и силы.

 
Neutron >>:


1.

Правильно - максимально облегчить задачу решаемую НС, для этого нужно определить оптимальную ТС (для конкретных условий) самостоятельно и скармливать в качестве входных данных уже препарированный временной ряд, т.е. не каждый бар, а вероятные ключевые точки, и уже только после этого можно ожидать от НС адекватного решения по вхождению-выхождению с рынка. Именно она будет решать является ли предложенная вами критическая точка таковой или всё же нет.


2.

Плохо!

Нужно писать код НС сразу под MQL. Это единственный способ избежать море подводных камней и сэкономить время и силы.


1. Облегчая задачу, не потеряйте данные. Самое главное это не кормить сеть одинаковыми по сути данными. Лучше подумайте нестандартно, что такого может влиять на цену и как это представить в виде данных для нейросети.


2. НЕ НАДО ПИСАТЬ КОД НС под MQL. Потратите много времени и нервов и работать всё будет очень медленно. Лучше изучите как подключается длл к MT4 и напишите свою нейронную сеть к примеру на C с использованием пакета FANN. Это поможет избежать множества проблем, в том числе переносимости кода на новый MQL5 терминал.

 
Neutron писал(а) >>

Правильно так провести эту процедуру, чтобы добиться отображения всего диапазона принимаемых значений на входе/входах НС в область +/-1 с равномерным (полкообразным) распределением. Сделать это можно воздействуя на входной вектор гиперболическим тангенсом и затем тем или иным саособом выравнивая распределение (необязательно).

Существует однозначная связь между минимальной длиной обучающей выборки P, числом настраиваемых в НС весов W и размерностью входа d: P>4*(W^2)/d

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

Плохо!

Нужно писать код НС сразу под MQL. Это единственный способ избежать море подводных камней и сэкономить время и силы.

Сигмоидальная функция сама по себе разве не выравнивает распределение... Моё мнение при предобработке важнее решить проблему стационарности данных.

Вот кстати формулу которую Вы привели, у меня получается W=420, d=14, сл-но P>50400 - не кажется ли Вам что немного большеватая выборка получается?

По-моему опыту(небольшому) и статьям число примеров в выборке не зависит так как Вы предлагаете...

 
alexish писал(а) >> Лично я использую для изучения вопроса полезности НС в трейдинге NeuroSolution 5 DE.

Вообще, прежде чем применять такие специфические и достаточно сложные программы, по идее нужно проконсультироваться с разработчиками данного ПО о целесообразности его применения в данной области, а именно на финрынках. Так вот, если с ними всё-таки проконсультироваться, то они скажут, что NeuroSolution не предназначен для применения на финрынках и порекомендуют другую программу. NeuroSolution предназначен для решения общих задач, а применение нейросетей на финрынках имеет ряд специфических особенностей, которые не учтены в данном ПО. Может быть NeuroSolution и можно как-то прикрутить к финрынкам, но это достаточно сложно и подсилу большим специалистам в области нейросетей+трейдерам в одном лице, которые чётко понимают какой результат и главное как его получить от нейросетей. Отсюда у вас возникают все проблемы, которые вы перечислили выше - постановка задачи, нормализация данных, перетренировка и прочее.....

Причина обращения: