Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Использование Java и генетических алгоритмов для взрыва рынка
Tolsi
23.01.13 в 18:45
|
|
Проблема частного пенсионного фонда?
Tolsi
23.01.13 в 19:38
|
|
Я не могу говорить за вас, но...
Tolsi
23.01.13 в 18:46
|
|
Я знаю, что я буду писать приложение для биржи
Tolsi
23.01.13 в 18:46
|
|
Давай приложим бешеные усилия, сынок!
Tolsi
23.01.13 в 18:48
|
|
Выбор инструментов K.I.S.S. - давайте торговать акциями Дешёвая или бесплатная биржевая информация. Eжедневная volume-open-high-low-close информация. Быстрая реализация. Маленькие комиссии на транзакции. Много бирж имею API для торговли. Java - мой основной язык. Бесплатный. Большое количество open source библиотек.
Tolsi
23.01.13 в 18:53
|
|
Некоторые стили торговли Высокочастотная торговля Очень быстрые операции. Свинг-трейдинг Ожидание выгоды от удерживания акций от нескольких дней до нескольких недель. Дей-трейдинг Покупка и продажа акций в тот же торговый день, ожидание выгоды от движения цен в тот же день. Позиция Ожидание выгоды от изменений цены от нескольких дней до нескольких лет.
Tolsi
23.01.13 в 19:06
|
|
Как люди получают преимущество на бирже? Удача. Служебная информация. Чутьё. Поиск повторяющихся моделей на рынке. Манипулирование другими участниками. Качественный или быстрый источник информации. Быстрое исполнение.
Tolsi
23.01.13 в 19:13
|
|
Итак, для какого преимущества я попытаюсь написать приложение? Мне нравится "Поиск повторяющихся моделей на рынке" Модели?... Сигналы? Технический анализ! TA-Lib: Библиотека для технического анализа - Open-source API для C/C++, Java, Perl, Python и 100% управляемый .NET
Tolsi
23.01.13 в 19:16
|
|
Что такое технический анализ? Полосы Осцилляторы Скользящее среднее Японские свечи Торговые решения как реакции на эти сигналы Магия?
Tolsi
23.01.13 в 19:21
|
|
ОК, как я могу автоматизировать это? Преобразовывать информацию рынка в сигналы. Приложение реагирует на сигналы и решает, как торговать. Уточнение - связывание дискретного набора сигналов с дискретным набором торговых решений. Имитация сделки, основанной на этих решениях. Цель - увеличить выгоду, конечно же.
Tolsi
24.01.13 в 06:10
|
|
Это всё ведёт нас к... Оптимизации алгоритмов и/или машинному обучению! Искусственные нейронные сети Симуляция прожига? Групповое поведения (рой, клеточные автоматы) Генетическое программирование Генетические алгоритмы Поддержка векторных машин
Tolsi
24.01.13 в 06:14
|
|
Генетические алгоритмы Исходники: http://www.slideshare.net/kancho/genetic-algorithm-by-example (Nobal Niraula)
Tolsi
24.01.13 в 06:14
|
|
Генетические алгоритмы Исходники: http://www.slideshare.net/Mathijsje/genetic-algorithms-7276974 (Mathijs van Meerkerk)
Tolsi
24.01.13 в 06:14
|
|
Некоторые, возможно, знакомые примеры ГА ...
Tolsi
24.01.13 в 06:15
|
|
Watchmaker Framework для эволюционных вычислений
Open Source, Java, создана Dan Dyer. Предоставляет простые примеры и основанный на интерфейсах API.
Tolsi
24.01.13 в 06:17
|
|
Наша система Торговая информация Настройки Торговые решения ? Тестирование на основе исторических данных Обратная связь Генетический алгоритм
Tolsi
24.01.13 в 06:20
|
|
Сборка нашей системы воедино Получаем торговую информацию volume-open-high-low-close в CSV файлах, загрузка в БД. (скучно, не будем рассматривать) Генерация сигналов из торговой информации с TA-LIB. Реализация выбора торговых решений. Реакция на сигналы. Связь реакций с выборами. Проверка сделанного выбора.
Tolsi
24.01.13 в 06:24
|
|
Генерация сигнала
Tolsi
24.01.13 в 06:24
|
|
Реализация выбора торговых решений Какие решения? Как насчет ... Когда покупать? Сколько купить? Как долго держать? Прогнозируемая наименьшая цена (для покупки)? Прогнозируемая наибольшая цена (на продажу)? Цена, по которой я должен буду продать до конца периода владения (оппортунистическая продажа)?
Tolsi
24.01.13 в 06:26
|
|
Реализация выбора торговых решений
Tolsi
24.01.13 в 06:27
|
|
Реализация выбора торговых решений
Tolsi
24.01.13 в 06:27
|
|
Реализация выбора торговых решений Напомним, что количество вариантов выбора для каждого решения намеренно ограничен. Выбор значений, полученных из генератора "случайных" вещественных чисел, изменённых в соответствии с их различными требованиями.
Tolsi
24.01.13 в 06:28
|
|
Реакция на сигналы Каждый канал сигналов, один день за раз, в устройство, которое я назвал Порог. Каждый экземпляр Порога инициализируется "случайным" отсортированным массивом вещественных чисел, изменённым, чтобы охватить диапазон сигнала для его потребления. Этот этап инициализации получает количество бит и битовые границы. public Int findBin (двойной testVal)
Tolsi
24.01.13 в 06:37
|
|
Реакция на сигналы Пороги выбирает бит, основанный на уровене сигнала с помощью простой sigVal < binBoundary проверки. Индекс бита - это реакция. Вроде как A/D конвертер, если вы представите, что сигнал аналоговый, выбираемый ежедневно. Подкласс предоставляет память о предыдущих реакции, поэтому она реагирует как на текущий уровень сигнала, так и на изменение его с предыдущей реакции.
Tolsi
24.01.13 в 06:40
|
|
Итак, уже... Дневной набор данных volume-open-high-low-close становится Сигналами. Я выбрал 24 различных TA сигнала. Я определил 6 торговых решений: Покупать?, Сколько? Сколько держать? Предполагаемая наименьшая цена? Предполагаемая наибольшая цена? Время продавать (оппортунистическая продажа)? Для каждого решения, для каждого сигнала, экземпляр Порога будет реагировать.
Tolsi
24.01.13 в 06:46
|
|
Преобразование реакции в решения Каждый пороговый бит в каждом слое решении связан с одним из решений выбора. Связи устанавливаются "случайно" Выбираем тот, который получает большинство бит реакций. Победитель "получает всё". Обратите внимание, что некоторые связи могут воздержаться от голосования в целях эффективности. Связи разрушаются в порядке итерации.
Tolsi
24.01.13 в 06:51
|
|
Преобразование реакции в решения Теперь, чтобы стало веселее... Добавим комбинационные голосование каждого слоя. Некоторые 'случайно' выбранные биты скрещиваем операцией И с другими, затем "случайно" связываем с выборами данного слоя решения. Больше мнений смешаются.
Tolsi
24.01.13 в 07:50
|
|
Тестирование решений на основе исторических данных Правила, законы и вещи, которые стоит иметь в виду. Переводы с денежного счета проходят в T+3 дней. Избегайте проблему безбилетника: Купить X при Т продажи X в T, где T <T +3 Купить Y на T' с выручки от продажи X Нельзя продавать Y до T'+3 Если сделать это, то Федеральная резервная система требует, чтобы ваш брокер заморозил ваш счет в течение 90 дней
Tolsi
24.01.13 в 15:38
|
|
Тестирование решений на основе исторических данных Правила, законы и вещи, которые стоит иметь в виду. Избегайте торговлю внутри дня: Купить X на Т Продажа X позже T Если вы сделаете это более чем в 3 раза, в 5-дневный срок, вы попадёте под фильтр торговца внутри дня Правила FINRA требуют, чтобы такие трейдеры использовали маржинальный счет с мин. балансом $ 25K Во время тестирования: Разрешить спад(быть пессимистом при выборе цены) Рынок будет съедать высокие и низкие ставки.
Tolsi
24.01.13 в 15:45
|
|
Тестирование решений на основе исторических данных Основываясь на последних слайдах, я обычно ставлю minHoldDays=3 Передвигайтесь по сигналу данных, пытаясь создать торгов на основе рекомендаций машины и фактические рынке. Не забудьте пропустить первое максимальное количество "Lookback" дней, так как многие сигналы включают скользящие средние. Большие "покупки" производят смещения вверх, а «продажи» - вниз.
Tolsi
24.01.13 в 15:52
|
|
Тестирование решений на основе исторических данных Проверьте цены предложений купли и продажи на текущий день как вменяемую проверку. Продажа жадная - будем пытаться продать на максимуме(прогноз высокой цене, выбранной оппортунистической цене продажи) Любая позиция, где holdDays>= maxHoldDays сбрасывается в конце рабочего дня до цены смещения в сторону низких и близких.
Tolsi
24.01.13 в 15:56
|
|
Развитие кандидатов Обратите внимание, что в предыдущих слайдах упомянул "случайные" и "случайно" несколько раз. В этот раз ГА вступает в игру. Геном, массив[double6850] выступает в качестве параметров «случайности», для каждого кандидата.
Tolsi
24.01.13 в 15:58
|
|
Развитие кандидатов Торги, созданные на этапе обратного тестирования, будут использоваться для оценки отдельных кандидатов. GA выберет сильнейших кандидатов для спаривания, исходя из их оценки. ГА рекомбинирует (кроссовер) и мутирует (спонтанное изменение значений) спаривающиеся геномы.
Tolsi
24.01.13 в 16:01
|
|
...
Tolsi
24.01.13 в 16:01
|
|
...
Tolsi
24.01.13 в 16:01
|
|
Подробности Я упростил некоторые вещи для этой презентации Я предварительно проверил использующиеся торговые данные, для раскачки целесообразности торговли. Я не хочу ждать, пока она проходит через всю историю Nasdaq. Я проводил тестирование и эволюцию на множестве имеющихся данных. Затем я пробовал (тестирование без эволюции) лучших эволюционировавших кандидатов на нетестовых данных.
Tolsi
24.01.13 в 16:16
|
|
Прочие комментарии GA самая простая часть. Проектирование машины для работы с ним включает немного искусства. Сокращайте пространства решений, ограничивая выбор. Ex: Премодерируйте набор акций, сделайте дискретную выборку Предоставьте ГА много материала для изменения. Ex: Большой геном, несколько схем голосования. Как их получить? Я жестко указал в коде некоторые значения, которые могли бы быть частью генома.
Tolsi
24.01.13 в 16:23
|
|
Последние примечания Условие остановки ГА: Кол-во устоявшихся поколений Оценка - Я использую конечный остаток на счете (денежные средства + примерное количество открытых позиций) как оценку. Выбранная забил формула имеет решающее воздействие на выход вперед. Она обеспечивает "мотивацию" ГА на "развитие". Что происходит, когда вы пытаетесь оценивать как numGoodTrades / numBadTrades? Watchmaker поддерживает только положительные значения double значений оценки. Расчет прибыли и убытков включает налог на сделку (у моего целелевого брокера $ 2,50 за операцию)
Tolsi
24.01.13 в 16:29
|
|
Ссылки по теме 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
|
|
Результат - Демо вы не сможете увидеть (извините). Выберем 4 случайные акции из списка предварительно отобранных акций Nasdaq. Каждая модель начинает с балансом $ 2000. Развиваться и тестирования моделей на 20080101 через (сегодня - 45 торговых дней). Это в выборке данных. Условие остановки: завершение после 7 поколений без улучшений. Оставим лучшие 2 эволюционировавшие модели для каждой акцию, всего 8 из всех кандидатов. Проверим их на нетестовых данных (сегодня - 44 торговых дня) до Сегодня. Отобразим итоги торгов в топ-3 реальных тестах.
Tolsi
24.01.13 в 16:35
|
|
Результаты – Поговорим об эволюции... Запуск 1 Лучший счет / Число поколений Запуск 2 Да, результат в $, но так как это примерная информация, отнесёмся к ней с недоверием.
Tolsi
24.01.13 в 16:37
|
|
Результаты – Реальная информация Запуск 1 Запуск 2
Tolsi
24.01.13 в 16:39
|
|
Результаты – Обусуждение Эти 2 демки выполнялись около 5 минут каждая. Я убрал некоторые из моих настроек (количество акций, застой), чтобы уменьшить время выполнения. Графики показывают, что эволюция является изменчивым процессом, отчасти из-за моего использование агрессивных стратегий кроссовера и мутации и мой выбор не включать элитарность (лучшие представители должны превосходить своё поколение).
Tolsi
24.01.13 в 16:42
|
|
Результат - Выводы В среднем, я делаю около 3% в моделируемой торговле. Максимальный процент составлял около 10%, максимальные потери составили около 7%.Стандартное отклонение было около 4,5%. Таким образом, генерируются модели имею достаточную предсказательную силу. Справедливость этих результатов зависит от моей веры в то, что моё обратное тестирование разумно и не содержит ошибок. Нет гарантии, что полученные моделей будет продолжать работать, когда сталкиваются с новыми, вне выборки, данными. Я до сих пор только подкидываю монетку. Но, может быть, под углом.
Tolsi
24.01.13 в 16:51
|
|