"Новый нейронный" - проект Open Source движка нейронной сети для платформы MetaTrader 5. - страница 46
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
сразу вспомнился бородатый анекдот
сомневаюсь насчет "нулей" в момент рождения, кроме того считаю что ошибки-отклонения присутсвуют постоянноПеределал так что при создании объекта через конструктор с параметрами, в конце последовательности будет инициализироваться новая.
работать будет чуть медленее, зато постоянно уникальная последовательность.
При создании через через стандартный конструктор, нужно ещё вызвать Srand() и последовательность будет таже, крутиться по кругу.
Предлагаю рассмотреть библу виртуальных ордеров (эмулируется открытие/закрытие по рынку. команды почти такие же, как при реальной работе с ордерами).
Она пригодится, когда потребуется прогонять модель по историческим данным (вне тестера стратегий).
Чего забыл? Чего можно улучшить, добавить, изменить, доработать? - библа очень сырая.
Пока реализованы только операции типов buy-0 и sell-1.
Лекция 1 здесь https://www.mql5.com/ru/forum/4956/page23
Лекция 2 здесь https://www.mql5.com/ru/forum/4956/page34
Лекция 3 здесь https://www.mql5.com/ru/forum/4956/page36
Лекция 4. Применение организации зрительной коры мозга для преобразования временных рядов
Итак, наша задача это построить классифицирующую нейронную сеть для ценовых паттернов по принципу работы мозга. Эту сеть можно разделить на два модуля: модуль преобразования входной информации (цен) и классифицирующий модуль, который может быть построен по любому известному принципу (например, Support Vector Machine):
В предыдущей лекции я описал модель HMAX зрительной коры мозга как пример биологического преобразования информации. Большим недостатком этой модели является то что значения весов (рецептивыные поля) в ней не обучаются а просто взяты из биологических измерений нейронов мозга. Например, измерение рецептивных полей простых нейронов в V1 (S1) производится как показано на видео здесь https://www.youtube.com/watch?v=Cw5PKV9Rj3o (щелчки которые вы слышите это импульсы нейрона). В нашем случае временного ряда котировок, "рецептивные поля" нейронов преобразующих информацию заранее неизвестны. Поэтому нам нужно их самим найти. Например, первый слой преобразования цен (S1 слой) можно построить следующим образом, по аналогии с S1 слоем зрительной коры:
В данном примере, в нашем S1 слое 6 подслоёв, пронумерованных 0-5. Нейроны (кружки) одного и того же подслоя имеют одинаковые входные веса (рецептивные поля), условно показанные в прямоугольниках слева. Каждый подслой нейронов имеет своё собственное рецептивное поле. Мы заранее знаем что если существует подслой с рецептивым полем w_0,k где k=0..5 (направление "вверх"), то должен существовать подслой с рецептивным полем -w_0,k (направление "вниз"). Пусть слоя с положительным полем пронумерованы чёткими числами (0, 2, 4) и их отрицательные аналоги пронумерованы нечёткими цифрами (1, 3, 5). Кроме того, мы знаем что S1 подслоя должны иметь рецептивные поля разных размеров. Пусть размер поля увеличивается от подслоя 0 (и его отрицательного аналога 1) к подслою 4 (и его отрицательного аналога 5). На входы всех нейронов одной и той же колонки подяются одни и теже цены (например, на входы нейронов первой колонки подяются цены x_0...x_5). На входы нейронов следующей колонки подяются цены сдвинутые на 1 бар (x_1...x_6), и т.д. Итак, наш S1 слой состоит из нейронов с рецептивными полями разных направлений (вверх, вниз), размеров, и положений по времени.
Обучение входных весов нейронов слоя S1 производится только для одной колонки нейронов из разных подслоёв, причём не важно какой. Потом все веса копираются для оставшихся нейронов в каждом подлсою. Обучение происходит без учителя путём подачи разных ценовых паттернов на входы S1 слоя и изменения весов по какому-то правилу. Существует множество правил правил само-обучения весов нейронов, хорошо описанных здесь:
Miller, K. D., and MacKay, D. J. C. (1994). The role of constraints in Hebbian learning. Neural Computat., 6, 100-126.
Первое правило само-обучения нейронов было постулировано Хеббом в 1949 году (https://en.wikipedia.org/wiki/Hebbian_theory). Это правило гласит: "Если нейрон получает входной сигнал от другого нейрона и оба являются высоко активными, то вес между нейронами должен быть усилен". Математически, оно записывается так
dw_i = mu*x_i*y,
где dw_i - приращение веса w_i, x_i - значение на i-м входе, y - выход нейрона, mu - скорость обучения. Мы будем использовать правило Оджи (Oja rule, https://en.wikipedia.org/wiki/Oja's_rule), которое относится к классу competitive learning rules:
dw_i = mu*y*(x_i - y*w_i/a),
где dw_i - приращение веса w_i, x_i - цена на i-м входе, y - выход нейрона расчитываемый как y = SUM(w_i*x_i, i=0..m-1), mu - скорость обучения, а - параметер (сумма квадратов весов SUM(w_i^2,i=0..m-1) стремится к a). Преимуществом этого правила является то что оно автоматически находит веса как принципиальные собственные вектора ценовых котировок. То есть, правило Оджи воспроизводит Метод Главных Компонент (PCA). Это совпадает с биологическими предпосылками, согласно которым рецептивые поля S1 слоя зрительной коры представляют собой принципиальные собственные вектора зрительной информации. Прикреплённый C++ код автоматически обучает веса 32-х S1 подслоёв с EURUSD M5 котировками на входе, mu=1, a=1. Эти веса как функции входа показаны внизу
Веса первых двух подслоёв (0 и 1) показаны красным цветом. У них только два ненулевых значения: -0.707 и +0.707. Веса подслоёв 2 и 3 показаны оранжевым цветом. У них 4 ненулевых значения. И т.д.
Для пользования прикреплённым кодом, нужно установить библиотеки Boost и CImg http://cimg.sourceforge.net/. До более высоких слоёв (C1, S2, C2) я пока не дашёл и скорей всего долго не дойду. Те кто читал мои предыдущие лекции должен понять принцип работы всех слоёв HMAX и закончить модуль преобразования ценовых котировок. В следующей (последней) лекции я поговорю о SparseNets.
Предлагаю рассмотреть библу виртуальных ордеров (эмулируется открытие/закрытие по рынку. команды почти такие же, как при реальной работе с ордерами).
Она пригодится, когда потребуется прогонять модель по историческим данным (вне тестера стратегий).
Чего забыл? Чего можно улучшить, добавить, изменить, доработать? - библа очень сырая.
Пока реализованы только операции типов buy-0 и sell-1.
Спасибо за библиотеку. Можно краткую инструкцию как ней пользоваться?
Собственно, и нечего особо рассказывать.
Перед каждым прогоном по истории, что бы очистилась история ордеров, нужно вызвать:
а далее, в соответствии с торговой стратегией, вызывать нужные команды:
Спред фиксированный, задается при инициализации. Для плавающего спреда придётся добавлять соответствующий функционал. По мне, так он нафиг не нужен - просто задавать максимально возможный спред по инструменту и все дела.
Собственно, и нечего особо рассказывать.
Перед каждым прогоном по истории, что бы очистилась история ордеров, нужно вызвать:
а далее, в соответствии с торговой стратегией, вызывать нужные команды:
Спред фиксированный, задается при инициализации. Для плавающего спреда придётся добавлять соответствующий функционал. По мне, так он нафиг не нужен - просто задавать максимально возможный спред по инструменту и все дела.
Извините, но я похоже не рассчитал свои силы. Сейчас у меня практически нет возможности заниматься проектом.
И хотя желание поучаствовать огромное, у меня тупо не хватает времени и сил, что очень жаль.
Смогу присоединиться после сдачи экзаменов (середина декабря). Кстати один из курсов напрямую связан с нейросетями.
Кстати. А целевых функций то две. Для логистической регрессии и простой регрессии.
Классификация один из случаев логистической регрессии.
Целевая функция для логистической регрессии:
И для обычной:
правда производные у них похожи. Может поэтому про разграничение обычно умалчивают.
Первая используется при выходном сигмоидном слое в задачах классификации.
Вторая при выходном линейном в задачах прогнозирования.
Извините, но я похоже не рассчитал свои силы. Сейчас у меня практически нет возможности заниматься проектом.
И хотя желание поучаствовать огромное, у меня тупо не хватает времени и сил, что очень жаль.
Смогу присоединиться после сдачи экзаменов (середина декабря). Кстати один из курсов напрямую связан с нейросетями.