В прошлом топике [1] мы разобрались с тем, что и как подавать на входы нейросети (НС). Теперь надо как-то сказать НС — «Горшочек, вари», предварительно рассказав, что конкретно и как именно надо «варить». Мыслей, в общем, нет никаких. Потому, давайте обратимся к классикам — Саймону Хайкину [2,c.33]:
Вот так вот, сразу и на первых страницах — «не могут обеспечить готовые решения», необходимо интегрировать в сложные ситемы", «относительно простые задачи, часть из которых может решаться НС». Книга конечно старая, но и наш MLP (Multilayer perceptron) в составе scikit-learn новизной не отличается. Этому MLP еще и простую, да конкретную задачу подавай, и вокруг него «сложную систему» городи. Как-то энтузиазма поубавилось.
Ладно, коли на вход нашего MLP уже подается временной ряд, пусть он нам определяет, хотя бы приблизительно, моменты входа в Лонг. А мы потом его проверим, и уточним эти моменты.
Теперь нашу НС надо как-то научить находить Лонг — показать НС как правильно и как неправильно. А мы сами-то знаем как правильно? Учителя фиговы. Это с кошечками-собачками хорошо — показывай себе, и пусть учится.
А давайте что-нибудь предположим, назовем какие-то входы в Лонг правильными, а остальные неправильными. Если мы предположили какую-нибудь ерунду, то НС просто ничему разумному не научится, и при дальнейшей проверке это быстро выяснится. А что-то предположить нам поможет интернет.
Кстати, это свойство НС, отличать фантазии от действительных закономерностей, уже вполне можно использовать для проверки каких-либо наших педположений о поведении рынка. Надо только рассказать о них НС, и она скажет, есть там что-то, с чем следует работать, или выкинуть это и забыть.
Однако, обратимся к интернету. Несколько лет назад наш коллега по несчастью занимался методами Машинного обучения (МО) с целью победить рынок. Он строил массу предикторов, подавал их на входы различных систем МО, и обучал по разметке Зиг-Зага. А что, неплохая идея, входы — лучше не придумаешь.
Вообще, если на минимуме Зиг-Зага загородить правую часть графика, как-то сомнительно, что вообще можно что-то сказать о дальнейшем движении. Да, и по ходу пьесы этот минимум будет постоянно перемещаться. Да и наш коллега долго и упорно менял предикторы и системы МО, потом все реже, реже, и вообще пропал из поля зрения. А на истории, конечно, Зиг-Заг — лепота.
Давайте сдвинем точку входа в Лонг немного вправо от минимума Зиг-Зага, где цена уже начала расти. Мы получим некую U-образную кривую цены, на которой НС хотя бы cможет построить линию регрессии. Не говорю, что это хорошая идея, но мы с помощью НС попробуем ее проверить. Что получим? — понятия не имею, я это делаю по ходу написания материала.
Разметку правильных входов для обучения можно сделать по Зиг-Загу, установив какой нибудь разумный порог от его минимума.
А разметку неправильных входов кто сделает? Опять обращаемся к [2,c.60].
Вначале о грустном. Не понимая теорию нейросетей (НС) у вас вряд ли получится построить на ней ТС. Поэтому лучше для начала почитать теорию, например, Хайкин Саймон. «Нейронные сети. Полный курс». Книга уже достаточно старая и в ней нет новомодных веяний, но она дает базовые представления о НС.
И второе, мы будем далее для построения систем использовать пакет scikit-learn для Python. рекомендую ознакомиться. Есть и более продвинутые пакеты, скажем, TensorFlow и др., но их использовать мы не будем, и ограничимся более простым scikit-learn.
Теперь о том, чего здесь не будет. Здесь не будет теории НС, разве эпизодически и оч кратко. Здесь не будет описания пакетов Python, работы с графикой и пр. Обо всем этом вы можете прочесть в интернете, книгах, и документации Python.
В топике мы будем обсуждать только применение НС к ТС и их построению.
Так как тема достаточно велика, в один топик не влезет, сегодня мы займемся самыми общими вопросами. Следующая часть будет недели через две, раньше не получается.
Даже не знаю как, то ли инвестирование, то ли бизнес. Начнем с инвестирования.
Захотели мы открыть небольшой бизнес, купили на 2 млн. оборудования, арендовали помещение, наняли персонал. Сели считать.
Пусть аренда, зарплата персонала, эксплуатационные расходы, налоги и пр. полностью окупаются за счет деятельности фирмы.Мы все хорошо организовали, и на фирме все хорошо управляется и без нас.Мы ни на что не претендуем, хотим только получать пассивный доход.
Срок окупаемости оборудования 2 года, стало быть, если не считать копейки, ежемесячно мы должны получать 100 тыс./месяц или 1 млн в год.
Срок службы оборудования при интенсивной эксплуатации — 5 лет. Потом надо будет все выбросить и купить новое оборудование, т.е., для инвестиций на следующие 5 лет надо опять затратить 2 млн. Стало быть, горизонт планирования д.б. 5 лет.
За 5 лет мы получим 5 млн, наша годовая прибыль с инвестиционного проекта будет 30%. Хорошо, пусть даже немного меньше 30%, мы не жадные.
Заметим, что мы занимались пассивным инвестированием, просто вложив деньги и основательно побегав все организовывая.
Теперь вопрос, если рассматривать инвестирование как бизнес, стоит ли заниматься таким бизнесом, если годовая прибыль меньше 25-30%?
Вы когда нибудь слышали о демоне Максвелла? Уже из школьного курса известно, что при некоторой температуре энергии молекул газа распределяются в соответствии с распределением Максвелла. Среди них всегда есть и очень горячие (с высокой энергией), и очень холодные (с низкой энергией). Если в сосуде с газом просверлить дырочку, поставить туда заслонку и попросить демона Максвелла открывать заслонку, когда извне к ней подлетает высокоэнергетическая молекула, и, открывая заслонку, выпускать из сосуда молекулы с низкой энергией, то газ в сосуде будет нагреваться.
В итоге нам не нужно никакой энергии для нагревания газа, а открытие заслонки дело нехитрое. Надо на досуге к чайнику такую штуку прикрутить.
Вы скажете, что это нереализуемо, и сто раз доказано что это невозможно. Однако это уже сотни лет успешно работает, но не с газом.)
Немного усложним задачу. Пусть в наш сосуд поступает струйка тепленького газа. Молекулы газа многократно сталкиваясь между собой обмениваются энергией с газом в сосуде. Опять сверлим дырочку, и демон Максвелла выпускает из сосуда через задвижку низкоэнергетические молекулы. Энергия будет отбираться у молекул поступающего газа, и газ в сосуде будет неизбежно разогреваться.
Пока нет никаких ассоциаций? Тогда подскажу — таким устройством является биржа.
Трейдер приходит на биржу с деньгами (энергией), многократно сталкивается с другими участниками, обмениваясь с ними деньгами (энергией). Приобретает или теряет энергию (деньги), и если его энергия (деньги) становится меньше некоторого порога, демон Максвелла услужливо открывает ему заслонку, и товарищ покидает сосуд (биржу). Биржа при этом, естественно, разогревается и количество энергии (денег) на ней увеличивается.
Если вам кто нибудь скажет, что на случайном блуждании (СБ) нельзя зарабатывать, бросьте в него камень. Как говорил Паниковский — это жалкие ничтожные люди. На СБ можно зарабатывать с результатами не хуже, чем на реальном рынке. У СБ, по сравнению с реальным рынком, только один недостаток — за игры с СБ никто деньги платить не будет.
А если бы платили? Никто бы ничего не заметил. По прежнему 95% СБ-трейдеров сливало бы депозиты, а 5% регулярно выигрывало и считало бы себя Гуру. По прежнему на графики наносились бы каббалистические знаки и индикаторы, угадывались бы направления движения, каналы, и линии поддержки/сопротивления. Все так же начинающие трейдеры искали Учителя для обучения, а аналитики предсказывали будущее. И, ровным счетом, абсолютно ничего бы не поменялось. Может только АГ заметил бы подвох, но тоже не сразу, а только через несколько месяцев, а, может, и через год-другой. Но, легко сделать, чтобы и АГ остался в неведении.)
Однако, прежде чем играть на СБ, нам необходима стратегия и тестер. Ими мы и займемся.
Для начала стратегия: нам нужны три функции
— одна для пошагового слежения за рыночными котировками и определения момента входа в сделку — DealEntryAnalysis(i) и пусть на ее выходе будет: 0-если сделки нет, 1 — необходим вход в лонг, и -1 — необходим вход в шорт. i — номер отсчета массива котировок.
— вторая для сопровождения сделки лонг — DealControlL(i), отвечающая за контроль и закрытие сделки.
— и третья, для сопровождения сделки шорт — DealControlS(i).
Теперь у нас все готово для разработки тестера стратегий, а это всего лишь цикл while() последовательно перебирающий котировки.
Вот наша стратегия уже в тестере:
while i < Ie: deal_type = DealEntryAnalysis(i) if deal_type == 1: j, rep = DealControlL(i) deals_report.append(rep) i = j+1 continue elif deal_type == -1: j, rep = DealControlS(i) deals_report.append(rep) i = j+1 continue i = i+1