Готовый перевод Using Java and Genetic Algorithms to Beat the Market / Использование Java и генетических алгоритмов для взрыва рынка: Текст презентации

Внимание! Этот перевод, возможно, ещё не готов, так как модераторы установили для него статус «перевод редактируется»

Использование Java и генетических алгоритмов для взрыва рынка

Проблема частного пенсионного фонда?

Я не могу говорить за вас, но...

Я знаю, что я буду писать приложение для биржи

Давай приложим бешеные усилия, сынок!

Выбор инструментов
K.I.S.S. - давайте торговать акциями
Дешёвая или бесплатная биржевая информация. Eжедневная volume-open-high-low-close информация.
Быстрая реализация.
Маленькие комиссии на транзакции.
Много бирж имею API для торговли.
Java - мой основной язык.
Бесплатный.
Большое количество open source библиотек.

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

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

Итак, для какого преимущества я попытаюсь написать приложение?
Мне нравится "Поиск повторяющихся моделей на рынке"
Модели?... Сигналы?
Технический анализ!
TA-Lib: Библиотека для технического анализа - Open-source API для C/C++, Java, Perl, Python и 100% управляемый .NET

Что такое технический анализ?
Полосы
Осцилляторы
Скользящее среднее
Японские свечи
Торговые решения как реакции на эти сигналы
Магия?

ОК, как я могу автоматизировать это?
Преобразовывать информацию рынка в сигналы.
Приложение реагирует на сигналы и решает, как торговать.
Уточнение - связывание дискретного набора сигналов с дискретным набором торговых решений.
Имитация сделки, основанной на этих решениях.
Цель - увеличить выгоду, конечно же.

Это всё ведёт нас к... Оптимизации алгоритмов и/или машинному обучению!
Искусственные нейронные сети
Симуляция прожига?
Групповое поведения (рой, клеточные автоматы)
Генетическое программирование
Генетические алгоритмы
Поддержка векторных машин

Генетические алгоритмы
Исходники: http://www.slideshare.net/kancho/genetic-algorithm-by-example (Nobal Niraula)

Генетические алгоритмы
Исходники: http://www.slideshare.net/Mathijsje/genetic-algorithms-7276974 (Mathijs van Meerkerk)

Некоторые, возможно, знакомые примеры ГА ...

Watchmaker Framework для эволюционных вычислений

Open Source, Java, создана Dan Dyer.
Предоставляет простые примеры и основанный на интерфейсах API.

Наша система
Торговая информация
Настройки
Торговые решения
?
Тестирование на основе исторических данных
Обратная связь
Генетический алгоритм

Сборка нашей системы воедино
Получаем торговую информацию volume-open-high-low-close в CSV файлах, загрузка в БД. (скучно, не будем рассматривать)
Генерация сигналов из торговой информации с TA-LIB.
Реализация выбора торговых решений.
Реакция на сигналы.
Связь реакций с выборами.
Проверка сделанного выбора.

Генерация сигнала

Реализация выбора торговых решений
Какие решения? Как насчет ...
Когда покупать?
Сколько купить?
Как долго держать?
Прогнозируемая наименьшая цена (для покупки)?
Прогнозируемая наибольшая цена (на продажу)?
Цена, по которой я должен буду продать до конца периода владения (оппортунистическая продажа)?

Реализация выбора торговых решений

Реализация выбора торговых решений

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

Реакция на сигналы
Каждый канал сигналов, один день за раз, в устройство, которое я назвал Порог.
Каждый экземпляр Порога инициализируется "случайным" отсортированным массивом вещественных чисел, изменённым, чтобы охватить диапазон сигнала для его потребления.
Этот этап инициализации получает количество бит и битовые границы.
public Int findBin (двойной testVal)

Реакция на сигналы
Пороги выбирает бит, основанный на уровене сигнала с помощью простой sigVal < binBoundary проверки.
Индекс бита - это реакция.
Вроде как A/D конвертер, если вы представите, что сигнал аналоговый, выбираемый ежедневно.
Подкласс предоставляет память о предыдущих реакции, поэтому она реагирует как на текущий уровень сигнала, так и на изменение его с предыдущей реакции.

Итак, уже...
Дневной набор данных volume-open-high-low-close становится Сигналами.
Я выбрал 24 различных TA сигнала.
Я определил 6 торговых решений: Покупать?, Сколько? Сколько держать? Предполагаемая наименьшая цена? Предполагаемая наибольшая цена? Время продавать (оппортунистическая продажа)?
Для каждого решения, для каждого сигнала, экземпляр Порога будет реагировать.

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

Преобразование реакции в решения
Теперь, чтобы стало веселее...
Добавим комбинационные голосование каждого слоя.
Некоторые 'случайно' выбранные биты скрещиваем операцией И с другими, затем "случайно" связываем с выборами данного слоя решения.
Больше мнений смешаются.

Тестирование решений на основе исторических данных
Правила, законы и вещи, которые стоит иметь в виду.
Переводы с денежного счета проходят в T+3 дней.
Избегайте проблему безбилетника:
Купить X при Т продажи X в T, где T <T +3
Купить Y на T' с выручки от продажи X
Нельзя продавать Y до T'+3
Если сделать это, то Федеральная резервная система требует, чтобы ваш брокер заморозил ваш счет в течение 90 дней

Тестирование решений на основе исторических данных
Правила, законы и вещи, которые стоит иметь в виду.
Избегайте торговлю внутри дня:
Купить X на Т
Продажа X позже T
Если вы сделаете это более чем в 3 раза, в 5-дневный срок, вы попадёте под фильтр торговца внутри дня
Правила FINRA требуют, чтобы такие трейдеры использовали маржинальный счет с мин. балансом $ 25K
Во время тестирования:
Разрешить спад(быть пессимистом при выборе цены)
Рынок будет съедать высокие и низкие ставки.

Тестирование решений на основе исторических данных
Основываясь на последних слайдах, я обычно ставлю minHoldDays=3
Передвигайтесь по сигналу данных, пытаясь создать торгов на основе рекомендаций машины и фактические рынке.
Не забудьте пропустить первое максимальное количество "Lookback" дней, так как многие сигналы включают скользящие средние.
Большие "покупки" производят смещения вверх, а «продажи» - вниз.

Тестирование решений на основе исторических данных
Проверьте цены предложений купли и продажи на текущий день как вменяемую проверку.
Продажа жадная - будем пытаться продать на максимуме(прогноз высокой цене, выбранной оппортунистической цене продажи)
Любая позиция, где holdDays>= maxHoldDays сбрасывается в конце рабочего дня до цены смещения в сторону низких и близких.

Развитие кандидатов
Обратите внимание, что в предыдущих слайдах упомянул "случайные" и "случайно" несколько раз.
В этот раз ГА вступает в игру.
Геном, массив[double6850] выступает в качестве параметров «случайности», для каждого кандидата.

Развитие кандидатов
Торги, созданные на этапе обратного тестирования, будут использоваться для оценки отдельных кандидатов.
GA выберет сильнейших кандидатов для спаривания, исходя из их оценки.
ГА рекомбинирует (кроссовер) и мутирует (спонтанное изменение значений) спаривающиеся геномы.

...

...

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

Прочие комментарии
GA самая простая часть.
Проектирование машины для работы с ним включает немного искусства.
Сокращайте пространства решений, ограничивая выбор.
Ex: Премодерируйте набор акций, сделайте дискретную выборку
Предоставьте ГА много материала для изменения.
Ex: Большой геном, несколько схем голосования.
Как их получить?
Я жестко указал в коде некоторые значения, которые могли бы быть частью генома.

Последние примечания
Условие остановки ГА: Кол-во устоявшихся поколений
Оценка - Я использую конечный остаток на счете (денежные средства + примерное количество открытых позиций) как оценку.
Выбранная забил формула имеет решающее воздействие на выход вперед. Она обеспечивает "мотивацию" ГА на "развитие".
Что происходит, когда вы пытаетесь оценивать как numGoodTrades / numBadTrades?
Watchmaker поддерживает только положительные значения double значений оценки.
Расчет прибыли и убытков включает налог на сделку (у моего целелевого брокера $ 2,50 за операцию)

Ссылки по теме
http://watchmaker.uncommons.org/
http://www.eoddata.com/
http://ta-lib.org/
http://www.slideshare.net/kancho/genetic-algorithm-by-example
http://www.slideshare.net/Mathijsje/genetic-algorithms-7276974

Результат - Демо вы не сможете увидеть (извините).
Выберем 4 случайные акции из списка предварительно отобранных акций Nasdaq.
Каждая модель начинает с балансом $ 2000.
Развиваться и тестирования моделей на 20080101 через (сегодня - 45 торговых дней). Это в выборке данных.
Условие остановки: завершение после 7 поколений без улучшений.
Оставим лучшие 2 эволюционировавшие модели для каждой акцию, всего 8 из всех кандидатов.
Проверим их на нетестовых данных (сегодня - 44 торговых дня) до Сегодня.
Отобразим итоги торгов в топ-3 реальных тестах.

Результаты – Поговорим об эволюции...
Запуск 1
Лучший счет / Число поколений
Запуск 2
Да, результат в $, но так как это примерная информация, отнесёмся к ней с недоверием.

Результаты – Реальная информация
Запуск 1
Запуск 2

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

Результат - Выводы
В среднем, я делаю около 3% в моделируемой торговле. Максимальный процент составлял около 10%, максимальные потери составили около 7%.Стандартное отклонение было около 4,5%.
Таким образом, генерируются модели имею достаточную предсказательную силу.
Справедливость этих результатов зависит от моей веры в то, что моё обратное тестирование разумно и не содержит ошибок.
Нет гарантии, что полученные моделей будет продолжать работать, когда сталкиваются с новыми, вне выборки, данными. Я до сих пор только подкидываю монетку. Но, может быть, под углом.

Внимание! Этот перевод, возможно, ещё не готов.
Его статус: перевод редактируется

Переведено на Нотабеноиде
http://notabenoid.org/book/36863/132479

Переводчики: Tolsi

Настройки

Готово:

100.00% КП = 1.0