"Новый нейронный" - проект Open Source движка нейронной сети для платформы MetaTrader 5. - страница 12
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Было бы что кодировать. Мы тут пока сами админа проекта ждем, с которым обсудим план реализации.
Ваще как вариант можно зарегаться на том же сорсфорже и начинать...
Но лучше таки наверное подождать, пока Метаквоты поднимут нужное окружение.
Кстати неплохо бы подумать про распараллеливание. Только я понятия не имею как его можно реализовать.
Кстати неплохо бы подумать про распараллеливание. Только я понятия не имею как его можно реализовать.
Андрей, я проверил твой посыл насчёт рекурсии, ты прав рекурсия работает в 1,5 раза медленнее и ограничена по глубине, так что циклы победили однозначно.
Насчёт распараллеливания не парься, пока не будет API для графического проца всё это яйца выеденного не стоит, нейросети слишком простые задачи чтоб их паралеллить между ядрами (вызов потока сотни тактов).
ЗЫ Pазве что MQ таки даст нужное API хотя бы для нейросетей, но для этого нужна формализация универсальной сети, чем мы собственно тут и занимаемся. Tак что сначало проэкт, а потом долбить в дверь дайте API для GPU.
К предлагаемому на стр.5 коду вот намалювал пояснительную картинку:
жёлтые это связываемые ячейки памяти(вернее если быть точным это одна и таже ячейка памяти просто имеющая ссылку на разные объекты памяти),
остальные, ассоциации объектов памяти, красные next, зелёные prev, синие side.
направление стрелки указывает направление передачи указателя.
нулевая ячека памяти оператора задержки используется как ячейка памяти выхода.
Память связывается в обратном порядке, тк у одного входа есть только один выход (откуда он получает данные) но не наоборот.
ЗЫ Ну наверно интуитивно понятно что кружочки это входы, квадратики веса, треугольники оператор задержки (нулевая ячейка оператора Z выход нейрона).
ЗЗЫ Всё схема окончательная больше менять не буду :о)
1. имха, самое основное это специализация на трейдинг и здесь важна систематизация предобработки входных данных. На входы должны подаваться сигналы элменентарных прайс-экшенов, как в виде дискретных сигналов (например, пробой определенного экстремума, или изменение цены за время более некоторого порога), так и непрерывные (например, расстояние между 2мя машками или изменение цены за какое-то время). НС конечно может и сама получить из непрерывных дискретные обучаясь, но тогда это уйдет в блек-бокс, а это не всегда нужно. В общем, для входов нужен отдельный класс, где виртуальным методом будет определено вычисление прайс-экшена и чтобы пользователи могли выбирать из уже написанных, или писать сами.
2. стандартный советник по сути есть так же работа с элементарными прайс-экшен сигналами и булева алгебра с ними (и/или/не). Поэтому стандартный советник так же может быть описан в виде НС определенной топологии и настройкой весов. Возможно неплохой вариант - автоматический конвертер стандартных советников в НС (сложновато такое сделать :)), или по карайней мере дать возможность проектирования НС с применением шаблонов булевой логики. Для того, чтобы дать отправную точку для построения логичной с т.з. торговли НС, а не просто набор слоев с какой-то топологией.
А так же добавление к построенной НС элементов булевой алгебры. К примеру, построили НС и есть желание проверить влияение на него простого фильтра, к примеру торгуем бай, только когда цена выше МА200 и селл наоборот. Можно конечно ввести новый вход и заново тренировать сеть и т.д. А можно просто добавить этот фильтр в виде булевой логики и проверить как он влияет на результат.
Т.е. речь о том, чтобы комбинировать интуитивно понятную человеку булеву логику и НС на разных этапах проектирования ТС.
3. логично сделать возможность зафиксировать некоторые связи чтобы они не учавствовали в последующем обучении. Т.е. есть костяк системы который не должен часто перестраиваться, а есть более часто адаптируемая часть. Переобучать все веса - это увеличение подгонки.
4. неплохо, чтобы неизменный костяк из п.3 мог выделяться автоматически. Т.е. к примеру имеем тестовый участок. Он делится на N частей. НС обучается последовательно на каждом, но так чтобы оставалась часть НС которая зафиксирована (не переобучается на каждом участке).
Т.е. смысл в том, чтобы строить робастные НС, которые требуют минимум подстройки под текущий рынок.
5. целевой ф-цией обучения д.б. не отдельные успехи в прогнозировании (сделки), а характеристика кривой эквити. Профит-фактор например, или задаваемый пользователем
6. для всго этого и реализации других возможностей нужен визуальный интерфейс проектирования НС
чисто для начала можно рассмотреть какую-нибудь опен-сурсе объектно-ориентированную модель типа http://www.basegroup.ru/library/analysis/neural/fastneuralnet/
Что имеет смысл сделать по аналогии, какие недостатки учитывая специфику трейдинга и MQL5. Ну или более продвинутую модель с открытыми кодами, чтобы не изобретать велосипед с колеса :)
1. имха, самое основное это специализация на трейдинг и здесь важна систематизация предобработки входных данных. На входы должны подаваться сигналы элменентарных прайс-экшенов, как в виде дискретных сигналов (например, пробой определенного экстремума, или изменение цены за время более некоторого порога), так и непрерывные (например, расстояние между 2мя машками или изменение цены за какое-то время). НС конечно может и сама получить из непрерывных дискретные обучаясь, но тогда это уйдет в блек-бокс, а это не всегда нужно. В общем, для входов нужен отдельный класс, где виртуальным методом будет определено вычисление прайс-экшена и чтобы пользователи могли выбирать из уже написанных, или писать сами.
Угу, писал про это. Правда немного в другом ключе. Можете привести небольшой простенький примерчик, как будет выглядеть прайс экшен вход?
А так же добавление к построенной НС элементов булевой алгебры. К примеру, построили НС и есть желание проверить влияение на него простого фильтра, к примеру торгуем бай, только когда цена выше МА200 и селл наоборот. Можно конечно ввести новый вход и заново тренировать сеть и т.д. А можно просто добавить этот фильтр в виде булевой логики и проверить как он влияет на результат.
А зачем это вводить в сеть? Это и без сети легко и просто проверяется...
Т.е. речь о том, чтобы комбинировать интуитивно понятную человеку булеву логику и НС на разных этапах проектирования ТС.
А зачем тогда НС? Имхо, НС в любом случае надо рассматривать как черный ящик, преобразующий входы в выходы.
3. логично сделать возможность зафиксировать некоторые связи чтобы они не участвовали в последующем обучении. Т.е. есть костяк системы который не должен часто перестраиваться, а есть более часто адаптируемая часть. Переобучать все веса - это увеличение подгонки.
А по какому принципу? Ну топологию можно поменять(хе :) ). Можно количество уменьшить. Но обучать только вручную выбранные синапсы...
4. неплохо, чтобы неизменный костяк из п.3 мог выделяться автоматически. Т.е. к примеру имеем тестовый участок. Он делится на N частей. НС обучается последовательно на каждом, но так чтобы оставалась часть НС которая зафиксирована (не переобучается на каждом участке).
Да просто проверять работу на склейке. Такими махинациями все равно подгонку не уберешь.
Т.е. смысл в том, чтобы строить робастные НС, которые требуют минимум подстройки под текущий рынок.
5. целевой ф-цией обучения д.б. не отдельные успехи в прогнозировании (сделки), а характеристика кривой эквити. Профит-фактор например, или задаваемый пользователем
Так не получится. Не любые входы можно переложить в стратегию. Все-таки НС от ТС отделена, они вообще независимы. Но это можно сделать на уровне формирования входов\выходов обучающей выборки.
_________________________________
Или тогда вообще надо по-другому ставить цели.
Угу, писал про это. Правда немного в другом ключе. Можете привести небольшой простенький примерчик, как будет выглядеть прайс экшен вход?
bool F1(int period){
if (High[0]>iHighest(NULL,0,MODE_HIGH,period,1)) return(true); else return(false);
}
double F2(int ma1P,int ma2P){
return(iMA(.. ma1P ...)-iMA(...ma2P....));
}
А зачем это вводить в сеть? Это и без сети легко и просто проверяется...
А зачем тогда НС? Имхо, НС в любом случае надо рассматривать как черный ящик, преобразующий входы в выходы.
совместить НС и обычную логику. НС может решать только часть задачи трейдинга к примеру фильтрация и результат ее работы будет либо можно торговать бай, либо селл либо нефига не торгуем. Но точку входа и выхода, а так же другие фильтры могут содержаться в стандартной булевой логике. Как обучить нужную нам НС, если без булевой части она и не должна работать(давать профит или прогнозировать изменение цен)? Т.е. каждый шаг обучения НС должен содержать и запуск алгоритма на булеовй логике.
А по какому принципу? Ну топологию можно поменять(хе :) ). Можно количество уменьшить. Но обучать только вручную выбранные синапсы...
Вот есть к примеру НС, которая неплохо выявляет тренд/флет. Можно же ее использовать в разных проектах и к примеру добавлять к другим НС. Но не ререобучать ее каждый раз, когда необходимо их обучать.
Да просто проверять работу на склейке. Такими махинациями все равно подгонку не уберешь.
я думаю что только так и получится для НС :)
Все-таки НС от ТС отделена, они вообще независимы. Но это можно сделать на уровне формирования входов\выходов обучающей выборки.
а почему их нельзя объединить? Тогда НС будет решать только часть задач, но обучаться в составе всей системы. И вообще, объединить процесс оптимизации стратегии и обучения НС которая является частью ее, ведь это по сути одно и тоже. Т.е. например, при каждом прогоне тестера происходит обучение НС на тестевой выборке. Конечно, это имеет смысл если НС не является самостоятельным прогонзистом))) цены, а только частью общей логики системы
Нет. Так не пойдет.
Разговор в таком ключе это демагогия. Мы вообще можем говорить про разные вещи, не понимая друг друга и называя их примерно одинаково.