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

Английский оригинал Перевод на русский

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

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

Tolsi 23.01.13 в 18:45

0

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

Tolsi 23.01.13 в 19:38

0

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

Tolsi 23.01.13 в 18:46

0

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

Tolsi 23.01.13 в 18:46

0

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

Tolsi 23.01.13 в 18:48

0

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

Tolsi 23.01.13 в 18:53

0

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

Tolsi 23.01.13 в 19:06

0

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

Tolsi 23.01.13 в 19:13

0

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

Tolsi 23.01.13 в 19:16

0

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

Tolsi 23.01.13 в 19:21

0

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

Tolsi 24.01.13 в 06:10

0

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

Tolsi 24.01.13 в 06:14

0

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

Tolsi 24.01.13 в 06:14

0

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

Tolsi 24.01.13 в 06:14

0

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

Tolsi 24.01.13 в 06:15

0

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

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

Tolsi 24.01.13 в 06:17

0

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

Tolsi 24.01.13 в 06:20

0

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

Tolsi 24.01.13 в 06:24

0

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

Tolsi 24.01.13 в 06:24

0

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

Tolsi 24.01.13 в 06:26

0

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

Tolsi 24.01.13 в 06:27

0

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

Tolsi 24.01.13 в 06:27

0

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

Tolsi 24.01.13 в 06:28

0

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

Tolsi 24.01.13 в 06:37

0

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

Tolsi 24.01.13 в 06:40

0

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

Tolsi 24.01.13 в 06:46

0

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

Tolsi 24.01.13 в 06:51

0

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

Tolsi 24.01.13 в 07:50

0

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

Tolsi 24.01.13 в 15:38

0

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

Tolsi 24.01.13 в 15:45

0

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

Tolsi 24.01.13 в 15:52

0

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

Tolsi 24.01.13 в 15:56

0

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

Tolsi 24.01.13 в 15:58

0

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

Tolsi 24.01.13 в 16:01

0

...

Tolsi 24.01.13 в 16:01

0

...

Tolsi 24.01.13 в 16:01

0

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

Tolsi 24.01.13 в 16:16

0

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

Tolsi 24.01.13 в 16:23

0

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

Tolsi 24.01.13 в 16:29

0

Ссылки по теме
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

Tolsi 24.01.13 в 16:30

0

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

Tolsi 24.01.13 в 16:35

0

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

Tolsi 24.01.13 в 16:37

0

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

Tolsi 24.01.13 в 16:39

0

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

Tolsi 24.01.13 в 16:42

0

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

Tolsi 24.01.13 в 16:51

0
Минутку...