Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 120
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Правильно подобранная функция для оценки качества модели очень важна, ведь что ищем и пытаемся максимизировать, то в конце и получим. Если использовать точность модели - можно легко скатиться в локальный максимум в котором модель всегда возвращает класс с наибольшим числом примеров. Для обучающих данных с несбалансированными классами лучше использовать F-score или Cohen's Kappa. Но даже с ними у меня были проблемы, ведь рост цены за бар может быть разным, и даже имея положительную оценку, можно оказаться в минус - число выигрышных сделок будет больше чем проигрышных, но при этом несколько проигрышных сделок могут иметь большие, невосполнимые потери. Симуляция торговли, и оценка модели по результатам торговли это правильное решение, я с вами согласен, недавно тоже начал так делать. Нужна прибыльность с маленькой просадкой - значит оценка модели должна использовать эти понятия.
MO мне кажется не очень хороший выбор, ведь не учитывается просадка, которая важна. Из тех функция для оценки советников что есть в MT5 мне больше всего нравятся Recovery Factor и Sharpe ratio.
Recovery Factor - итоговый профит поделить на максимальную за всё время просадку. Довольно просто, но эффективно.
Sharpe Ratio - в интернете много описаний словами ,но формул не особо много нашёл. Есть такой код для MT4, я думаю стоит перенести его в R и попробовать.
параметр riskFreeYearlyIncome - годовая прибыль для безрискового вложения (вклад в банк), в примере это 1%. Sharpe Ratio учитывает насколько стратегия лучше чем такое вложение.
double seconds = double(OrderCloseTime() - OrderOpenTime()) - сколько была открыта сделка по времени в секундах. Для торговли на барах - это соответственно сколько секунд в баре.
1) Правильно подобранная функция для оценки качества модели очень важна, ведь что ищем и пытаемся максимизировать, то в конце и получим.
2) Но даже с ними у меня были проблемы, ведь рост цены за бар может быть разным, и даже имея положительную оценку, можно оказаться в минус - число выигрышных сделок будет больше чем проигрышных, но при этом несколько проигрышных сделок могут иметь большие, невосполнимые потери.
3) Симуляция торговли, и оценка модели по результатам торговли это правильное решение, я с вами согласен, недавно тоже начал так делать. Нужна прибыльность с маленькой просадкой - значит оценка модели должна использовать эти понятия.
4)
MO мне кажется не очень хороший выбор, ведь не учитывается просадка, которая важна. Из тех функция для оценки советников что есть в MT5 мне больше всего нравятся Recovery Factor и Sharpe ratio.
Recovery Factor - итоговый профит поделить на максимальную за всё время просадку. Довольно просто, но эффективно.
Sharpe Ratio - в интернете много описаний словами ,но формул не особо много нашёл. Есть такой код для MT4, я думаю стоит перенести его в R и попробовать.
1) Абсолютно
2) точно.
3) да, помогает избавиться от starting-point bias в оценке.
4) ФВ это и есть recovery factor. Я его вообще уважаю сильно. Запилю его в функцию оценки, это легко.
По Шарпу. Все просто! Объясняю.
а) Получили вы вектор исходов сделок в пунктах, так?
б) Надо симулировать торговлю с РЕИНВЕСТИРОВАНИЕМ и вектор пунктов преобразовать в вектор процентных приращений депозита. Пример. начинаем со 100 000 долларов. Торгуем лотом 0.1 получили 0.001 (десять пунктов). Это 10 долларов в пересчет на лот. Значит, это значение превращается в 10 / 100 000. И так далее с учетом роста или прадения лотности.
в) По полученному вектору процентных приращений считаем: среднее, ст.отклонение.
г) вводим некий безрисковый доход в год (3%) - число условное число, небольшое.
д) нужно либо перевести ваши сделки в среднегодовой доход, либо безрисковый доход в год разложить на среднюю доходность на сделку. Сделали.
е) (ваша средняя доходность на сделку (на период) - безриск.доходность) / ст.отклонение
Кода на R пока нет у меня. Но написать такую функцию не должно быть сложно.
На фин.рынках переобучается все! Даже то, что говорят не переобучается, там переобучается.
Робастная лин.регрессия переобучается в меньшей степени, но дает такое хреновое качество обучения, что и эксптраполируется на новые данные хреново.
Ваша идея классифицировать приросты цены с самого начала встречала у меня чисто эмоциональное неприятие. Если мы предсказываем тренды, то смотрим на ЗЗ и понятно: вот один класс, а вот другой класс. Если посмотреть на график приростов цены, то это хаотичное дерганье вокруг нуля. Где здесь явно видные классы?
Это чисто эмоции,которым я придаю в статистике большое значение - все должно быть наглядно иочевидно без математики.
Кроме этого для приростов цены на финансовых рынках много лет разрабатывался и довольно хорошо работает аппарат ARIMA-ARCH. В этой опере даже есть модели учитывающие Херста. Чем лучше классификация?
Классификация - это паттерны - "голова и плечи", поиск которых мы автоматизировали и которые предсказывают ясно видимый глазу класс. С помощью классификации мы находим паттерн (в виде дерева, например) и говорим: "после этого паттерна будет рост. Если мы правильно сформулировали целевую переменную, то так и будет. Вот ЗЗ не правильная целевая переменная. Здесь была высказана идея предсказывать будущий рост в 100 пипсов. Такая целевая переменная мне кажется гораздо более правильно.
Вывод. Начинать надо с целевой переменной, как всегда цель - это наше все, ложные цели ведут в болото
Ваша идея классифицировать приросты цены с самого начала встречала у меня чисто эмоциональное неприятие. Если мы предсказываем тренды, то смотрим на ЗЗ и понятно: вот один класс, а вот другой класс. Если посмотреть на график приростов цены, то это хаотичное дерганье вокруг нуля. Где здесь явно видные классы?
Это чисто эмоции,которым я придаю в статистике большое значение - все должно быть наглядно иочевидно без математики.
Кроме этого для приростов цены на финансовых рынках много лет разрабатывался и довольно хорошо работает аппарат ARIMA-ARCH. В этой опере даже есть модели учитывающие Херста. Чем лучше классификация?
Классификация - это паттерны - "голова и плечи", поиск которых мы автоматизировали и которые предсказывают ясно видимый глазу класс. С помощью классификации мы находим паттерн (в виде дерева, например) и говорим: "после этого паттерна будет рост. Если мы правильно сформулировали целевую переменную, то так и будет. Вот ЗЗ не правильная целевая переменная. Здесь была высказана идея предсказывать будущий рост в 100 пипсов. Такая целевая переменная мне кажется гораздо более правильно.
Вывод. Начинать надо с целевой переменной, как всегда цель - это наше все, ложные цели ведут в болото
Я не знаю, что в этом эмоционально не верно. Это один из вариантов. Цвет свечи это еще называется.
Напомню, что регрессионная и классификационная задачи были пристрелкой перед этапом построения прибыльной системы.
Дальше, я пришел к тому, что прогнозирую не просто знак прироста, а прирост с большим модулем. То есть, вход в бай только там, где система предсказывает сильный рост, а не просто рост. Также с селл. Формально, машина учится регрессии. А потом я интерпретирую ее выход как сильный рост, сильное падение, болтание в канале.
Вот это и есть очень близко к тому, чтобы предсказывать будущий рост в 100 пипсов. Только мне самому не понятно, как вы видите формализацию такой целевки. Что значит рост, а если перед ростом было падение на 90 пунктов, а если этот рост достигается только через неделю?
У меня на горизонте 9 часов сильный рост это где-то 20 пунктов. После 9 часов сделка закрывается.
И по факту я сейчас вообще не прогнозирую класс (рост / падение / болтание / сильный рост). Я по факту строю систему, чья оценка на этапе обучения меряется мат.ожиданием торговли. То есть, классификационная точность может быть низкой (53% у меня), но попадание в верное направление дает чуть больший прирост, чем не попадание. Чувствуете разницу в постановке задачи? Точность классификации коррелирует но не полностью совпадает с прибыльностью торговли.
Кстати, фактор восстановления как функция оценки качества модели тоже однобок. Я могу получить 10 сделок и 1 из них убыточную, или 500 сделок и 10 убыточных. Во втором случае ФВ может быть ниже, а прибыль в 50 раз выше.
Как вариант, можно взять суммарный профит и вычесть из него макс.просадку. Тут хотя бы профит будет максимизироваться.
Или традиционный фактор прибыльности: общая прибыль / общий убыток.
Во втором случае ФВ может быть ниже, а прибыль в 50 раз выше.
Всё дело в риске на который вы хотите пойти. Например есть два сигнала: первый приносит 100% прибыли в год при максимальной просадке в 10%. Второй сигнал - приносит 300% прибыли в год при просадке в 40%. Так-то по прибыли второй сигнал лидирует.
Но если посчитать ФВ, то лидером будет первый сигнал, и это правильно, потому что можно просто увеличить размер сделок (в лотах) первого сигнала в четыре раза, что даст такую-же просадку как у второго сигнала, но с большей прибылью. Или если не хочется рисковать большим процентом от баланса на счету, то можно уменьшить размер лотов второго сигнала в 4 раза, что даст риск в желаемых 10% от баланса, но и профит будет тоже меньше по сравнению с первым сигналом
То есть план торговли по стратегии может быть таким: Определить валк-форвардом максимально возможную просадку при торговле по стратегии; посчитать во сколько раз эта просадка больше/меньше допустимого вами значения для баланса на счёте; рассчитать размер лота так чтобы эти числа сошлись.
Использование ФВ подразумевает что вы перед началом торговли рассчитаете все риски и определите подходящий размер лота. Чем меньшую просадку имеет стратегия при торговле - тем больший размер сделок вы можете использовать.
Или традиционный фактор прибыльности: общая прибыль / общий убыток.
ИМХО, более приемлемым является:
критерий_оценки_ТС = сумма_прибыльных_сделок / (сумма_прибыльных_сделок + сумма_убыточных_сделок)
при условии трейдинга фиксированным лотом.
В таком случае, если критерий выше значения 0.5, то ТС показала итоговый профит, в противном случае - убыток.
Преимущество критерия в том, что он жёстко нормирован и его значение не может выйти за пределы диапазона от 0 до 1.0 включительно.
Просадки, даже несмотря на итоговый профит ТС оказывают своё негативное влияние на значение этого критерия, т.е. учитываются им как отрицательный фактор.
ИМХО, более приемлемым является:
критерий_оценки_ТС = сумма_прибыльных_сделок / (сумма_прибыльных_сделок + сумма_убыточных_сделок)
при условии трейдинга фиксированным лотом.
В таком случае, если критерий выше значения 0.5, то ТС показала итоговый профит, в противном случае - убыток.
Преимущество критерия в том, что он жёстко нормирован и его значение не может выйти за пределы диапазона от 0 до 1.0 включительно.
Просадки, даже несмотря на итоговый профит ТС оказывают своё негативное влияние на значение этого критерия, т.е. учитываются им как отрицательный фактор.
ИМХО, более приемлемым является:
критерий_оценки_ТС = сумма_прибыльных_сделок / (сумма_прибыльных_сделок + сумма_убыточных_сделок)
при условии трейдинга фиксированным лотом.
В таком случае, если критерий выше значения 0.5, то ТС показала итоговый профит, в противном случае - убыток.
Преимущество критерия в том, что он жёстко нормирован и его значение не может выйти за пределы диапазона от 0 до 1.0 включительно.
Просадки, даже несмотря на итоговый профит ТС оказывают своё негативное влияние на значение этого критерия, т.е. учитываются им как отрицательный фактор.