Прогнозирование фондового рынка с использованием нейронных сетей. Нейронные сети на бирже


нейронные сети

Чудодейственность этой штуки, в отдельных СМИ и выступлениях  людей декларируется, чуть ли не как откровение « избранных».

 Вместе с тем, впервые материалы этого блока программ, были описаны к широкому применению (читай популяризированы) в России лет десять назад, под эксклюзивной продажей Statistica*)  кафедрой тогда еще экономико-статистического института в Москве.

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

 При этом подается это чуть ли не как божественное откровение ( что дед, не может въехать, что у телевизионного пульта нет провода ). 

Ну, дети, как говориться, путь ими и останутся, но у меня вопросы к продвинутым специалистам и пользователям этого метода: 

  1. В то « далекое » время, как я вспоминаю, основной проблемой программы был не счетный модуль вычисления, по  сути, мало чем отличающийся от методологии множественной регрессии, а преобразователь (компилятор) ввода анализируемых данных. 
  2. Если, к примеру, мы отталкивается от МТ4, генерирующей поток анализируемых данных, то есть ли готовый или сколько стоит написание компилятора на вход блока  Statistica раздела «  нейронные сети » 
  3. Очевидно, что расчетный модель программы – универсален и собственно говоря, ему « по барабану », что анализировать и опять же вопрос сводиться к « написанию компиляторов. И в этой связи вопрос, кто и где пишет подобные вещи и сколько это может стоить... 
  4. Трудно предположить, что только  StatSoft сделал это на уровне простых юзеров и какие из известных и доступных программ,  вычисляют потоки входных данных по методологии нейронных сетей...?! 
  5. Я понимаю, что 10 лет = это очень большой срок ( для того кто понимает ), и что в « идеологии » расчетов ( счетный блок программы ) были внесены серьезные изменения, но хотелось бы  услышать именно о преобразователях ввода и источниках переменных данных вода ...

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

smart-lab.ru

Какая польза трейдеру от нейронных сетей

Не так давно на рынке появились форекс-роботы, в которых используются нейронные сети. Эта новинка быстро привлекла к себе внимание и стала предметом обсуждения и споров.

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

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

Торговля на рынке с помощью робота Форекс

Что такое нейронные сети на Форексе

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

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

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

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

Важно! Успешное использование нейронных сетей на Форексе возможно лишь в том случае, если предыдущие результаты каким-либо образом влияют на будущие показатели. Именно на этом основан принцип работы нейронных сетей.

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

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

Торговля на рынке и роботы Форекс

Заблуждения о нейронных сетях

Обычно у любой новинки для трейдинга на Форексе сразу появляются ярые сторонники, считающие ее «золотым ключиком», легко открывающим дверцу к беззаботной и прибыльной торговле. Но у любой системы есть и недостатки.

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

Рассмотрим основные заблуждения о нейронных сетях:

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

2. «Можно использовать бесконечное число обучающих алгоритмов». Неверно, существуют ограничения. Во время работы программы нередко случаются остановки из-за ошибок внутри тренировочного сета. Это может привести к неточностям в прогнозировании, что в свою очередь ухудшает результаты торговли и может привести к крупным убыткам.

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

4. «Система не нуждается в перенастройке». Это ложное утверждение. Вносить изменения рано или поздно все равно придется. Ведь на валютном рынке иногда происходят неожиданные события, не всегда поддающиеся логическим объяснениям.

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

Торговля при помощи робота Форекс

Достоинства и недостатки нейронных сетей

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

Плюсы:

  • Форекс-робот с нейронными сетями может работать одновременно с несколькими информационными потоками и выдавать на их основе единый готовый результат.
  • Высокая точность прогнозирования будущего на основе ретроспективы (событий в прошлом).
  • В процессе работы робот комбинирует технический и фундаментальный анализ. Это может предоставить очень точные сигналы для входа в сделку.

Минусы:

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

Начать торговлю на Форекс

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

Но тот, кто детально изучит методику программы и полноценно освоит ее, сможет значительно увеличить свою прибыль.

portal.gerchikco.com

Прогнозирование фондового рынка с использованием нейронных сетей / Хабр

image

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

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

Рассмотрим на практике применение метода прогнозирования с помощью нейронных сетей. Для примера возьмём данные индекса ММВБ в период с 01.10.2008 по 03.04.2009. Задача состоит в том, что на основе представленной статистической информации необходимо сделать прогноз на 10 дней. Как видно из графика (рис.1), с 01.10.08 по 28.10.08 индекс ММВБ «просел» примерно на 534 пункта. После чего последовал рост до максимальной отметки в 871 пункт. Далее, некоторое время, рынок находился в боковом тренде, затем наметилась восходящая тенденция. В данном примере будем строить прогноз для одной переменной (остальные аналогично), но для того, чтобы выбрать ту из четырех переменных, которая наиболее сильно поможет спрогнозировать остальные, построим корреляционную матрицу.

image

Итак, построив матрицу парных корреляций (табл.1), делаем вывод о том, что переменная LOW наиболее сильно коррелирует с остальными. Займёмся прогнозом данной переменной.

image

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

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

В результате идентификации процесса построения сетей мы получили следующие результаты: выбранные сети, как можно заметить, имеют различные конфигурации (табл.2).

image

В результате обучения была найдена нейронная сеть, соответствующая модели 7 (рис.2) с хорошей производительностью (регрессионное отношение: 0,253628, ошибка: 0,003302). Нетрудно заметить, что производительность сетей с архитектурой Радиально Базисной Функции (РБФ) в среднем хуже производительности сетей с архитектурой Многослойно персептрона. Во многом это объясняется тем, что сети с архитектурой РБФ плохо экстраполируют данные (это связано с насыщением элементов скрытой структуры). Для оценки правдоподобности модели 7 построим гистограмму частот (рис.3). Данная гистограмма является самой симметричной по сравнению с другими моделями. Это подтверждает стандартные предположения о нормальности остатков. Следовательно, модель 7 больше всего подходит для данного временного ряда.

image

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

image

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

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

Список использованной литературы:

1. Э.А.Вуколов. Основы статистического анализа. Издательство «Форум», Москва 2008г. 2. В. Боровников. STATISTICA: искусство анализа данных на компьютере. 2003г. 3. Недосекин А.О. Нечетко-множественный анализ риска фондовых инвестиций. Изд. Сезам, 2002г. Ранее статья публиковалась в материалах 3-ей региональной научной конференции ВолгГТУ в 2009 году (Том 3).

habr.com

Применение нейронных сетей в трейдинге на Форекс

нейронные сети форекс

В данном материале мы расскажем про нейронные сети в трейдинге, их плюсы и минусы, а также затронем тему их применения на рынке Форекс.

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

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

Суть нейронных сетей

Применение нейронных сетей на рынке Форекс даёт возможность изъять из нескольких потоков данных один результат.

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

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

Преимущества нейронных сетей

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

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

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

Недостатки нейронных сетей

применение нейронных сетей в трейдинге

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

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

Нейронные сети не работают?

Существует определённая категория трейдеров Форекс, которые убеждены, что нейросети попросту не работают.

Нейронные сети уже давно успешно применяются во всех сферах деятельности человека. Также её используют для прогнозирования.

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

Однако на практике нейронная сеть прогнозирует с точностью не более 50-60%. Иными словами, это как угадывать цифры с одного до двух.

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

Заключение

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

Отметим, что новичкам в трейдинге лезть в нейронные сети Форекс не имеет смысла. Главное самим научиться прибыльно торговать, и после определённого результата пробовать создавать нейросеть.

academyfx.ru

Робот с нейронной сетью на QLua

Многие слышали о том, что есть некие загадочные нейросети, которые могут успешно торговать на бирже. В этой статье я пролью немого света на этот вопрос. Мы создадим простейшего робота, который будет торговать на основе нейросетей. Сначала расскажу о том, что же это такое нейронные сети и с чем их едят.  Для этого немного отвлечемся от темы биржи и глянем в сторону искусственного интеллекта.  Согласно википедии, «Искусственный интеллект (ИИ, англ. Artificial intelligence, AI) — наука и технология создания интеллектуальных машин, особенно интеллектуальных компьютерных программ. ИИ связан со сходной задачей использования компьютеров для понимания человеческого интеллекта, но не обязательно ограничивается биологически правдоподобными методами» (цитата:http://ru.wikipedia.org/wiki/%C8%F1%EA%F3%F1%F1%F2%E2%E5%ED%ED%FB%E9_%E8%ED%F2%E5%EB%EB%E5%EA%F2) Другое ИИ определение звучит так: «это область исследований, направленная на создание компьютеров, которые будут выполнять такие функции, которые, в настоящее время, человек выполняет лучше» (Цитата: В. Н. Бондарев, Ф. Г. (2002). Искусственный интеллект. Севастопаль: СевНТУ.) В общем, простыми словами можно сказать, что искусственный интеллект – это попытка создать компьютеры (компьютерные программы), которые бы мыслили как человек. Для чего это надо? Дело в том, что человеческий мозг многие задачи выполняет гораздо лучше компьютеров. Хотя уже сейчас созданы программы, которые с успехом выполняют некоторые из этих задач, например, распознавание звуков, графических образов, обработка абстрактных знаний.  Теперь вернемся к бирже. Прочитав об искусственном интеллекте, вы наверняка подумали, что хорошо бы иметь такого робота, который бы торговал как профессиональный трейдер, постоянно подстраиваясь под быстро меняющийся рынок. Не секрет, что многие механические торговые системы могут прибыльно торговать только на каком-то одном временном периоде, а потом от них уже мало пользы. Иными словами, нам нужен механизм, который мог бы сам выдумывать торговые стратегии, находить закономерности и способный самообучаться. Такие системы сейчас разрабатываются, правда, не для биржи, а для других целей, и этим занимаются целые институты  с бюджетом в миллионы долларов. Но пусть вас это не пугает. В былые времена тоже только очень умные ученые добывали знания, которыми сейчас может воспользоваться любой школьник. Так что нам никто не мешает, используя известные методики создания искусственного интеллекта, написать что-то свое, простое. Итак, возвращаемся к нейронным сетям. Пришло самое время приоткрыть завесу тайны и сказать, что же это такое. Нейрон – это нервная клетка, из которых состоит наш мозг, а так же другие органы нервной системы – спинной мозг, ганглии  (нервные узлы) и так далее. Каждый нейронсостоит из дендритов, сомы и аксонов:  Робот с нейронной сетью на QLuaДендриты — это ветвеобразные отростки, обеспечивающие сбор информации от других нейронов или рецепторов. Тело нервной клетки называется сома. В ней происходят сложные биохимические процессы, благодаря которым идут различные нелинейные преобразования сигналов. Аксон — это отросток нейрона, по которому выходной сигнал поступает на дендриты. Он разделяется на множество волокон. Место соединения аксонов с дендритом называется синапс. В настоящее время созданы различные математические модели нейронов. Одна из них – это суммирование входных сигналов, помноженных на весовые коэффициенты. Выходной сигнал – это результат такого вычисления. Часто выходной сигнал преобразуется путем передаточной функции, самая простая из них – пороговая. Если результат превысил некий порог срабатывания, то на выходе 1, иначе 0. Совокупность таки моделей нейронов, называемых искусственными нейронами – это искусственная нейронная сеть (ИНС), или, иначе, нейросеть. В настоящее время ИНС могут выполнять следующие задачи:
  • Компьютерное зрение (распознавание образов, в том числе и человеческих лиц, а так же дактилоскопия; распознавание текста).
  • Распознавание звуков.
  • Анализ числовых последовательностей, прогнозы.
  • Ассоциативная память.
  • Анализ данных, кластеризация (автоматическая классификация объектов по признакам).
Замечательная способность нейронных сетей состоит в том, что они способны обучаться. Суть обучения состоит в том, что весовые коэффициенты, на которые умножаются входные сигналы в процесса расчета, изменяются по определенному в процессе подачи на вход нейросети сигнала. Обучение бывает с учителем и без учителя. В первом случае после подачи входного сигнала значение на выходе сравнивается с желаемым и при необходимости корректируются весовые коэффициенты. При обучении без учителя нейросеть сама определяет закономерности во входных данных. У нас будет нейросеть обучаться с учителем. Роль «учителя» будет выполнять изменения цены после совершения сделки. Если цена меняется в нашем направлении – все нормально. Если в противоположном – нейросеть надо учить. Входные данные – это котировки трех последних свечей (open, close, high, low). Таким образом, у нейросети всего 12 входов. Состоит наша нейросеть для простоты всего из одного нейрона (как правило, многослойные нейросети гораздо хуже обрабатывают биржевые котировки, проверил на собственном опыте). Вот процедура обучения, написанная на qlua:
--обучение нейрона --t — желаемая реакция нейрона, y — текущая реакция нейронаfunction study(y)       t=-y --желаемая реакция, она полностью противоположна текущей (вместо покупки надо продавать, вместо продажи покупать)     dty=t-y;       local N=getNumCandles(«Price»)       local t,n,i=getCandlesByIndex(«Price», 0, N-4, 4)       base_price=t[0].close     for v=0,2,1 do             neuron[v*4+1]=neuron[v*4+1]+mu*dty*t[v+1].open / base_price             neuron[v*4+2]=neuron[v*4+2]+mu*dty*t[v+1].low / base_price             neuron[v*4+3]=neuron[v*4+3]+mu*dty*t[v+1].high / base_price             neuron[v*4+4]=neuron[v*4+4]+mu*dty*t[v+1].close / base_price           endend
Наш нейрон – это просто массив коэффициентов. В начале работы программы он инициируется случайными числами:
function main()       for v=1,12,1 do neuron[v]=math.random()-0.5 end --инициализируем веса нейрона       while is_run do             sleep(2000)             robot()       endend
Выходные данные нашего нейрона 1 (если надо покупать) или -1, если надо продавать. Рассчитывает нейрон функция get_signal:
--Функция определяет сигнал путем расчета нейрона --возвращает 1 если надо покупать и -1 если продаватьfunction get_signal()       local N=getNumCandles(«Price»)       t,n,i=getCandlesByIndex(«Price», 0, N-4, 4)       res=0       base_price=t[0].close       for v=0,2,1 do             res=res+neuron[v*4+1]*t[v+1].open / base_price             res=res+neuron[v*4+2]*t[v+1].low / base_price             res=res+neuron[v*4+3]*t[v+1].high / base_price             res=res+neuron[v*4+4]*t[v+1].close / base_price       end       if res>=0 then             return 1       else             return -1       endend
Все остальные блоки робота примерно такие же, как и в моих предыдущих статьях, описывать их не буду, полный текст робота см. приложение 1. Остановлюсь лишь подробно на параметрах:
--Параметры: p_classcode=«TQBR» --Код класса p_seccode=«LKOH» --Код инструмента p_account=«L01-00000F00» --Код счета p_clientcode=«52134» --Клиенткий код p_firmid=«MC0058900000»  --код фирмы p_count=2 --Размер позиции p_spread=3 --Проскальзывание mu=0.1 --коэффициент обучения p_study_level=1; --Уровень изменения цен, при котором происходит обучение нейрона p_file = io.open(«D:\\1\\userlog.txt», «w»)  — тут надо указать путь к файлу лога
Параметры p_classcode, p_seccode, p_account, p_clientcode, p_firmid – это настройик выбранного финансового инструмента и брокерского счета. p_count – количество лот, которыми торгуем. p_spread – размер проскальзывания, mu – коэффициент обучения,  им мы регулируем скорость обучения. Сделаем коэффициенты больше – робот будет обучаться быстрее, но тогда мы рискуем «перелететь» момент максимального обучения и переучить нейросеть. p_study_level – уровень изменения (в валюте инструмента) цен, при котором вызывается процедура обучения, если цена пошла не в ту сторону. p_file – имя файла лога, в который будет писаться протокол работы робота, в том числе и изменение коэффициентов. На этом все, удачной торговли.  robostroy.ru/community/article.aspx?id=769

smart-lab.ru

Как работают нейронные сети на Форекс? Стоит ли использовать их в своей деятельности?

Главная • Обучение

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

Что собой представляют нейронные сети? Как они функционируют?

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

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

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

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

Топ-5 заблуждений о нейронных сетях в трейдинге

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

  1. «Программа для трейдинга полностью соответствует модели человеческого мозга и функционирует подобно ему». Ученые всего мира на протяжении сотен лет пытаются понять загадку уникального органа. Однако они до сих пор не имеют четкого и достоверного представления о человеческом мозге. Это исключает возможность создания электронной копии, применения её в целях совершенствования торгового дела. На самом деле нейронные сети финансовых рынков являются лишь приблизительной моделью, но вовсе не соответствуют структуре мозга.
  2. «Возможно использование бесконечного числа обучающих алгоритмов». Применение торговых систем ограничено некоторыми условиями. Во время работы с программой нередко случаются остановки. Они связаны с появлением ошибок внутри тренировочного сета. Следствием такой проблемы может оказаться возникновение неточностей в прогнозировании. Всё это приводит к ухудшению торговых результатов, а в итоге грозит крупными потерями личных средств. Работа программы достаточно сложна и на данный момент вовсе не совершенна. Поэтому на разработку нельзя всецело полагаться.
  3. «Большой объём вводимых данных не является обязательным условием». Для процесса контролируемого обучения необходимо, по меньшей мере, два информационных сета. Первый должен составляться на основе входных данных с ожидаемыми моделями исходных, а второй – только на базе имеющихся сведений. Оба сета предполагают маркировку – паттерны с рядом неизвестных. Таким образом, мы можем заключить, что от количества и качества вводимых данных напрямую зависит результат. Поэтому работать с инновационной разработкой сможет далеко не каждый.
  4. «Систему не нужно перенастраивать». Даже в случае идеальной настройки через время может потребоваться внесение дополнительных изменений. Финансовый рынок – весьма изменчивая структура, которая порой начинает функционировать совершенно непредвиденным образом. Рабочей сети в этом случае необходима динамическая оптимизация, с которой автоматическая программа пока не справляется.
  5. «Использовать машину вовсе не трудно». Именно так полагают новички, которые только планируют начать деятельность на основе нейронных сетей. Однако после нескольких попыток выясняется, что торговля посредством инновационной разработки – сложное занятие, требующее от дельца хорошей осведомленности в математически формулах и основах программирования. Без этих знаний будет весьма трудно заниматься какой-либо настройкой системы и получать выгоду от взаимодействия с ней.

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

  1. Alpari
  2. nas-broker

Положительные и отрицательные стороны

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

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

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

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

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

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

На сегодняшний момент существует огромное количество автоматических торговых систем, однако среди них не найти «Грааль», который предоставляет возможность регулярно и легко зарабатывать. У каждой разработки присутствуют негативные аспекты, с которыми приходится смириться. Тот, кто будет в силах детально изучить методику функционирования программы и полноценно освоит её, сможет увеличивать свою прибыль намного быстрее остальных.

  1. Alpari

analytics.news

[ В закладки ] Зоопарк архитектур нейронных сетей. Часть 1

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

Поэтому я решил составить шпаргалку по таким архитектурам. Большинство из них — нейронные сети, но некоторые — звери иной породы. Хотя все эти архитектуры подаются как новейшие и уникальные, когда я изобразил их структуру, внутренние связи стали намного понятнее.

У изображения нейросетей в виде графов есть один недостаток: граф не покажет, как сеть работает. Например, вариационный автоэнкодер (variational autoencoders, VAE) выглядит в точности как простой автоэнкодер (AE), в то время как процесс обучения у этих нейросетей совершенно разный. Сценарии использования различаются еще сильнее: в VAE на вход подается шум, из которого они получают новый вектор, в то время как AE просто находят для входных данных ближайший соответствующий вектор из тех, что они “помнят”. Добавлю еще, что этот обзор не имеет цели объяснить работу каждой из топологий изнутри (но это будет темой одной из следующих статей).

Следует отметить, что не все (хотя и большинство) из используемых здесь сокращений общеприняты. Под RNN иногда понимают рекурсивные нейронные сети (recursive neural networks), но обычно эта аббревиатура означает рекуррентную нейронную сеть (recurrent neural network). Но и это еще не все: во многих источниках вы встретите RNN как обозначение для любой рекуррентной архитектуры, включая LSTM, GRU и даже двунапраленные варианты. Иногда похожая путаница происходит с AE: VAE, DAE и им подобные могут называть просто AE. Многие сокращения содержат разное количество N в конце: можно сказать “сверточная нейронная сеть” — CNN (Convolutional Neural Network), а можно и просто “сверточная сеть” — CN.

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

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

Сети прямого распространения (Feed forward neural networks, FF or FFNN) и перцептроны (perceptrons, P) очень просты — они передают информацию от входа к выходу. Считается, что у нейронных сетей есть слои, каждый из которых состоит из входных, скрытых или выходных нейронов. Нейроны одного слоя между собой не связаны, при этом каждый нейрон этого слоя связан с каждым нейроном соседнего слоя. Простейшая мало-мальски рабочая сеть состоит из двух входных и одного выходного нейрона и может моделировать логический вентиль — базовый элемент цифровой схемы, выполняющий элементарную логическую операцию. FFNN обычно обучают методом обратного распространения ошибки, подавая модели на вход пары входных и ожидаемых выходных данных. Под ошибкой обычно понимаются различные степени отклонения выходных данных от исходных (например, среднеквадратичное отклонение или сумма модулей разностей). При условии, что сеть обладает достаточным количеством скрытых нейронов, теоретически она всегда сможет установить связь между входными и выходными данными. На практике использование сетей прямого распространения ограничено, и чаще они используются совместно с другими сетями.

Rosenblatt, Frank. “The perceptron: a probabilistic model for information storage and organization in the brain.” Psychological review 65.6 (1958): 386.

» Original Paper PDF

Сети радиально-базисных функций (radial basis function, RBF) — это FFNN с радиально-базисной функцией в качестве функции активации. Больше здесь нечего добавить. Мы не хотим сказать, что она не используется, но большинство FFNN с другими функциями активации обычно не выделяют в отдельные группы.

Broomhead, David S., and David Lowe. Radial basis functions, multi-variable functional interpolation and adaptive networks. No. RSRE-MEMO-4148. ROYAL SIGNALS AND RADAR ESTABLISHMENT MALVERN (UNITED KINGDOM), 1988.

» Original Paper PDF

Нейронная сеть Хопфилда — полносвязная сеть (каждый нейрон соединен с каждым), где каждый нейрон выступает во всех трех ипостасях. Каждый нейрон служит входным до обучения, скрытым во время него и выходным после. Матрица весов подбирается таким образом, чтобы все «запомненные» вектора являлись бы для нее собственными. Однажды обученная одному или нескольким образам система будет сходиться к одному из известных ей образов, потому что только одно из этих состояний является стационарным. Отметим, что это не обязательно соответствует желаемому состоянию (к сожалению, у нас не волшебный черный ящик). Система стабилизируется только частично из-за того, что общая “энергия” или “температура” сети во время обучения постепенно понижается. Каждый нейрон обладает порогом активации, соизмеримым с этой температурой, и если сумма входных данных превысит этот порог, нейрон может переходить в одно из двух состояний (обычно -1 или 1, иногда 0 или 1). Узлы сети могут обновляться параллельно, но чаще всего это происходит последовательно. В последнем случае генерируется случайная последовательность, которая определяет порядок, в котором нейроны будут обновлять свое состояние. Когда каждый из нейронов обновился и их состояние больше не изменяется, сеть приходит в стационарное состояние. Такие сети часто называют ассоциативной памятью, так как они сходятся с состоянию, наиболее близкому к заданному: как человек, видя половину картинки, может дорисовать недостающую половину, так и нейронная сеть, получая на входе наполовину зашумленную картинку, достраивает ее до целой.

Hopfield, John J. “Neural networks and physical systems with emergent collective computational abilities.” Proceedings of the national academy of sciences 79.8 (1982): 2554-2558.

» Original Paper PDF

Цепи Маркова (Markov Chains, MC или discrete time Markov Chain, DTMC) — своего рода предшественники машин Больцмана (BM) и сетей Хопфилда (HN). В цепях Маркова мы задаем вероятности перехода из текущего состояния в соседние. Кроме того, это цепи не имеют памяти: последующее состояние зависит только от текущего и не зависит от всех прошлых состояний. Хотя цепь Маркова нельзя назвать нейронной сетью, она близка к ним и формирует теоретическую основу для BM и HN. Цепи Маркова также не всегда являются полносвязными.

Hayes, Brian. “First links in the Markov chain.” American Scientist 101.2 (2013): 252.

» Original Paper PDF

Машины Больцмана (Boltzmann machines, BM) во многом похожи на сети Хопфилда, но в них некоторые нейроны помечены как входные, а некоторые остаются скрытыми. Входные нейроны становятся выходными, когда все нейроны в сети обновляют свои состояния. Сначала весовые коэффициенты присваиваются случайным образом, затем происходит обучение методом обратного распространения, или в последнее время все чаще с помощью алгоритма contrastive divergence (когда градиент вычисляется при помощи марковской цепи). BM — стохастическая нейронная сеть, так как в обучении задействована цепь Маркова. Процесс обучения и работы здесь почти такой же, как в сети Хопфилда: нейронам присваивают определенные начальные состояния, а затем цепь начинает свободно функционировать. В процессе работы нейроны могут принимать любое состояние, и мы постоянно перемещаемся между входными и скрытыми нейронами. Активация регулируется значением общей температуры, при понижении которой сокращается и энергия нейронов. Сокращение энергии вызывает стабилизацию нейронов. Таким образом, если температура задана верно, система достигает равновесия.

Hinton, Geoffrey E., and Terrence J. Sejnowski. “Learning and releaming in Boltzmann machines.” Parallel distributed processing: Explorations in the microstructure of cognition 1 (1986): 282-317.

» Original Paper PDF

Ограниченная машина Больцмана (Restricted Boltzmann machine, RBM), как ни удивительно, очень похожа на обычную машину Больцмана. Основное отличие RBM от BM в том, что они ограничены, и следовательно, более удобны в использовании. В них каждый нейрон не связан с каждым, а только каждая группа нейронов соединена с другими группами. Входные нейроны не связаны между собой, нет соединений и между скрытыми нейронами. RBM можно обучать так же, как и FFPN, за небольшим отличием: вместо передачи данных вперед и последующего обратного распространения ошибки, данные передаются вперед и назад (к первому слою), а затем применяется прямое и обратное распространение (forward-and-back propagation).

Smolensky, Paul. Information processing in dynamical systems: Foundations of harmony theory. No. CU-CS-321-86. COLORADO UNIV AT BOULDER DEPT OF COMPUTER SCIENCE, 1986.

» Original Paper PDF

Автоэнкодеры (Autoencoders, AE) — нечто подобное FFNN, это скорее другой способ использования FFNN, чем принципиально новая архитектура. Основная идея автоэнкодеров — автоматическое кодирование (как при сжатии, а не при шифровании) информации, отсюда и название. Сеть напоминает по форме песочные часы, так как скрытый слой меньше, чем входной и выходной; к тому же она симметрична относительно средних слоев (одного или двух, в зависимости от четности/нечетности общего количества слоев). Самый маленьких слой почти всегда средний, в нем информация максимально сжата. Все, что расположено до середины — кодирующая часть, выше середины — декодирующая, а в середине (вы не поверите) — код. AE обучают методом обратного распространения ошибки, подавая входные данные и задавая ошибку равной разницу между входом и выходом. AE можно построить симметричными и с точки зрения весов, выставляя кодирующие веса равными декодирующим.

Bourlard, Hervé, and Yves Kamp. “Auto-association by multilayer perceptrons and singular value decomposition.” Biological cybernetics 59.4-5 (1988): 291-294.

» Original Paper PDF

Разреженный автоэнкодер (Sparse autoencoder, AE) — в некоторой степени антипод AE. Вместо того чтобы обучать сеть представлять блоки информации на меньшем “пространстве”, мы кодируем информацию так, чтобы она занимала больше места. И вместо того чтобы заставлять систему сходиться в центре, а затем обратно расширяться до исходного размера, мы, наоборот, увеличиваем средние слои. Сети этого типа могут применяться для извлечения множества маленьких деталей из набора данных. Если бы мы стали обучать SAE тем же методом, что и AE, мы получили бы в большинстве случаев абсолютно бесполезную сеть, где на выходе получается ровно то же, что и на входе. Чтобы этого избежать, мы вместо входных данных выдаем на выходе входные данные плюс штраф за количество активированных нейронов в скрытом слое. Это в какой-то мере напоминает биологическую нейронную сеть (spiking neural network), в которой не все нейроны постоянно находятся в возбужденном состоянии.

Marc’Aurelio Ranzato, Christopher Poultney, Sumit Chopra, and Yann LeCun. “Efficient learning of sparse representations with an energy-based model.” Proceedings of NIPS. 2007.

» Original Paper PDF

Архитектура вариационных автоэнкодеров (VAE) такая же, как и у обычных, но обучают их другому — приблизительному вероятностному распределению входных образцов. Это в какой-то степени возвращение к истокам, так как VAE немножко ближе к машинам Больцмана. Тем не менее, они опираются на Байесовскую математику касательно вероятностных суждений и независимости, которые интуитивно понятны, но требуют сложных вычислений. Базовый принцип можно сформулировать так: принимать в расчет степень влияния одного события на другое. Если в одном месте происходит определенное событие, а другое событие случается где-то еще, то эти события вовсе не обязательно связаны. Если они не связаны, то распространение ошибки должно это учитывать. Это полезный подход, так как нейронные сети — своего рода огромные графы, и иногда бывает полезно исключить влияние одних нейронов на другие, проваливаясь в нижние слои.

Kingma, Diederik P., and Max Welling. “Auto-encoding variational bayes.” arXiv preprint arXiv:1312.6114 (2013).

» Original Paper PDF

Шумоподавляющие (помехоустойчивые) автоэнкодеры (Denoising autoencoders, DAE) — это такое AE, которым на подаем на вход не просто данные, а данные с шумом (например, делая картинку более зернистой). Тем не менее, ошибку мы вычисляем прежним методом, сравнивая выходной образец с оригиналом без шума. Таким образом, сеть запоминает не мелкие детали, а крупные черты, так как запоминание небольших деталей, постоянно меняющихся из-за шума, часто не приводит никуда.

Vincent, Pascal, et al. “Extracting and composing robust features with denoising autoencoders.” Proceedings of the 25th international conference on Machine learning. ACM, 2008.

» Original Paper PDF

Глубокие сети доверия (Deep belief networks, DBN) — сети, представляющие собой композицию нескольких RBM или VAE. Такие сети показали себя эффективно обучаемыми одна за другой, когда каждая сеть должна научиться кодировать предыдущую. Этот метод также называют “жадное обучение”, он заключается в принятии оптимального на данный момент решение, чтобы получить подходящий, но, возможно, не оптимальный результат. DBN могут обучаться методами contrastive divergence или обратным распространением ошибки и учатся представлять данные в виде вероятностной модели, в точности как RBM или VAE. Однажды обученную и приведенную к стационарному состоянию модель можно использовать для генерации новых данных.

Bengio, Yoshua, et al. “Greedy layer-wise training of deep networks.” Advances in neural information processing systems 19 (2007): 153.

» Original Paper PDF

Свёрточные нейронные сети (convolutional neural networks, CNN) и глубокие свёрточные нейронные сети (deep convolutional neural networks, DCNN) кардинально отличаются от других сетей. Они используются в основном для обработки изображений, иногда для аудио и других видов входных данных. Типичным способом применения CNN является классификация изображений: если на вход подается изображение кошки, сеть выдаст «кошка», если картинка собаки — «собака». Такие сети обычно используют «сканер», не обрабатывающий все данные за один раз. Например, если у вас есть изображение 200х200, вы захотите строить слой сети из 40 тысяч узлов. Вместо это сеть считает квадрат размера 20х20 (обычно из левого верхнего угла), затем сдвинется на 1 пиксель и считает новый квадрат, и т.д. Заметьте, что мы не разбиваем изображение на квадраты, а скорее ползем по нему. Эти входные данные затем передаются через свёрточные слои, в которых не все узлы соединены между собой. Вместо этого каждый узел соединен только со своими ближайшими соседями. Эти слои имеют свойство сжиматься с глубиной, причём обычно они уменьшаются на какой-нибудь из делителей количества входных данных (например, 20 узлов в следующем слое превратятся в 10, в следующем — в 5), часто используются степени двойки. Кроме сверточных слоев есть также так называемые слои объединения (pooling layers). Объединение — это способ уменьшить размерность получаемых данных, например, из квадрата 2х2 выбирается и передается наиболее красный пиксель. На практике к концу CNN прикрепляют FFNN для дальнейшей обработки данных. Такие сети называются глубокими (DCNN), но названия их обычно взаимозаменяемы.

LeCun, Yann, et al. “Gradient-based learning applied to document recognition.” Proceedings of the IEEE 86.11 (1998): 2278-2324.

» Original Paper PDF

Развёртывающие нейронные сети (deconvolutional networks, DN), также называемые обратными графическими сетями, — это свёрточные нейронные сети наоборот. Представьте, что вы передаёте сети слово “кошка” и обучаете ее генерировать картинки кошек путем сравнения получаемых картинок с реальными изображениями кошек. DNN тоже можно объединять с FFNN. Стоит заметить, что в большинстве случаев сети передаётся не строка, а бинарный классифицирующий вектор: например, — это кошка, — собака, а — и кошка, и собака. Вместо слоев объединения, которые часто встречаются в CNN, здесь присутствуют аналогичные обратные операции, обычно интерполяцию или экстраполяцию.

Zeiler, Matthew D., et al. “Deconvolutional networks.” Computer Vision and Pattern Recognition (CVPR), 2010 IEEE Conference on. IEEE, 2010.

» Original Paper PDF

Читать продолжение.

О, а приходите к нам работать? :)wunderfund.io — молодой фонд, который занимается высокочастотной алготорговлей. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки.

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

Присоединяйтесь к нашей команде: wunderfund.io

habr.com


Смотрите также

.