Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 3466

 
Ivan Butko #:

Вот есть правило "если, то". 

Если цена ниже и если там что-то ещё - отрисовка линии до нового экстремума. 


Как это можно трактовать "по-разному"?

так и торговать на словах просто - "покупай дёшево, продавай дорого" :-)

что такое экстремум ? почему вот эта пипка считается экстремумом, а вот соседняя уже нет..а какая-то за ними вообще встречный

число способов определять абстрактный экстремум, ограничивается лишь фантазией. Стандарта зигзага, общей практики и эталонной реализации нет (и быть не может). В кодебейз тьма вариантов, с разнообразными параметрами (и конечно ошибками)

размечать данные зигзагом довольно опасно - вполне может выйти что у каждого чуть но отличается, в разных прогонах по разному, может зависеть от момента старта и шумов, и в Python и MQL тоже не идентично

 
Aleksey Vyazmikin #:

Здравствуйте. Почему не пробовать прогнозировать ожидание тренда

Мне кажется прогнозировать будущее - это полумера. 

Нужно учиться вовремя выходить из позиции. 

И плата за ошибку - короткий убыток. 

То есть, обучаем входить и обучаем выходить. 

Просто так прогноз тренда - это сесть в одну сторону и не дождаться его отработки. 


 
Maxim Kuznetsov #:


что такое экстремум ? 

Ты прикидываешься или что?


Экстре́мум (лат. extremum — крайнее) в математике — максимальное или минимальное значение функции на заданном множестве. Точка, в которой достигается экстремум, называется точкой экстремума


Maxim Kuznetsov #:

 почему вот эта пипка считается экстремумом, а вот соседняя уже нет..а какая-то за ними вообще встречный

А почему сегодня вторник, а завтра уже нет?

 
Ivan Butko #:

Мне кажется прогнозировать будущее - это полумера. 

надо прогнозировать

Ivan Butko #:

Нужно учиться вовремя выходить из позиции. 
И плата за ошибку - короткий убыток. 

это тоже прогноз

 
Maxim Dmitrievsky #:

Насколько понял, нужно найти такие режимы рынка, в которых эта ТС работает хорошо. Например, режимы можно определять по волатильности.

В последней статье предложил кластеризацию по волатильности и потом выбор лучших кластеров для торговли. Если не читали, может будет полезной.


Пробегался по этой статье. Почитаю еще раз, спасибо!


Задача стоит не совсем в том, чтобы найти режимы рынка, при которых стратегия работает хорошо, а определить для режима набор параметров для стратегии, которые будут работать хорошо.

Я же что делаю - прогоняю сотню бектестов на одном и том же отрезке времени с разными настройками. Потом сгоняю это всё в один датафрейм и тренирую модель. Для модели комбинация настроек торговой стратегии - это такая же фича, как и остальные рыночные фичи типа волатильности или, скажем, перевеса в trades balance. Таким образом модель учится понимать какие параметры для стратегии при каких рыночных фичах могут быть прибыльными. То есть, X для модели выглядит примерно так: [volatility_short, volatility_long, rsi, trade_imbalamce, strategy_param1, strategy_param2]. А y - это знак того, что заработали за минуту. Так как ордера отсылаются до 10ти штук в секунду, за минуту можно наторговать достаточно, чтобы понять как отрабатывают параметры. В датафрейме, в который мы сгрузили всё это дело, дублируются рыночые фичи столько раз, сколько есть уникальных комбинаций параметров стратегии. То есть, в датафрейме не просто результаты торговли за весь бектест, а поминутные данные:

X:[volatility_short, volatility_long, rsi, trade_imbalamce, strategy_param1, strategy_param2], y:[step_profit]


Получили модель. Теперь, запустив бектестер или живую торговлю, мы можем каждую минуту циклом проходиться по модели, передавая ей текущий набор фич и доступные комбинации параметров для торговой стратегии, пока не найдем такую комбинацию параметров, при которой модель видит высокую вероятность прибыльной торговли.

То есть, гипотеза заключается в том, что для разных режимов рынка есть разный набор параметров, при которых торговая система будет прибыльна и еще в том, что можно научить модель МЛ находить для разных режимов подходящий набор параметров.


Aleksey Vyazmikin #:

Здравствуйте. Почему не пробовать прогнозировать ожидание тренда? Или просто детектировать его, раз столь активная торговля? Или трендом считается сильное движение внутри минутного бара?

Не совсем понятно, какими предикторами вы описываете эти наборы параметров? Или у Вас мультиклассификатор?

Можете использовать квантование перед сохранением данных, что позволит перейти на тип данных uchar .

Попробуйте CatBoost - умеет работать с большими объёмами данных.

В целом идея не только от тренда убежать, а подобрать параметры для текущего режима рынка, имеющие высокую вероятность прибыльности на обученных данных. Как описал выше, при обучении модели, комбинации параметров так же являются фичами при тренировке модели. Перед новым рандуом торговли мы спрашиваем у модели - рыночные фичи вот такие, а комбинаций параметров у нас, к примеру, 100. Вот, уважаемая модель, каждый из наборов параметров торговой стратегии по отдельности - у какого из них высокие шансы быть прибыльным при текущих рыночных фичах?


Почитаю Вашу статью про квантование. Я использовал децили, но при переходе на реальные величины точность предсказаний резко возросла. Я так понял, что для деревьев нормализация данных не так важна, а вот гранулярность данных сильно терялась при использовании децилий.


CatBoost попробую, спасибо. Просто у меня бектестер и код для живой торговли написаны на Numba в Питоне и пользоваться обученными моделями в sklearn там не получается. Для этого я нашел способ экспорта модели случайного леса в набор листов и диктов, что позволило использовать натренированную модель под Нумбой. Изучу, возможно ли такое или подобное с CatBoost.

По поводу размера данных - я имел в виду, что данные для бектеста слишком много весят и прогнать бектест на сотне другой параметров на годе HFT данных (среди которых все апдейты книги и трейды) занимает много места и времени.

 
mytarmailS #:

надо прогнозировать

это тоже прогноз

Да

В этом и суть: прогнозируем тренд - входим. Цена начинает кривляться, прогнозируем выход (HOLD) - выходим, хрен с этим трендом, поищем другой. 

Трейдеры так и поступают: прогнозирует тренд/импульс. Заходит. Цена начинает кривляться как-то, да так, что трейдеру не нравится свой вход. Он прогнозирует 50 на 50 или "не пойму, что происходит". И такой "ну нафик, лучше я выйду". Плата - небольшой минус или небольшой плюс. 

Он не прогнозирует "обратный сигнал". Ему именно не нравится реализация тренда/импульса. 


Вот так и нужно: прогнозируем вход, прогнозируем продолжение тренда, прогнозируем выход/либо обратный вход. 

 
Arty G #:

Я же что делаю - прогоняю сотню бектестов на одном и том же отрезке времени с разными настройками. Потом сгоняю это всё в один датафрейм и тренирую модель. Для модели комбинация настроек торговой стратегии - это такая же фича

Ты делаешь это немного кустарно..

Ты проганяешь через модель множество настроек ТС (много датасетов) и модель дает вероятность лучшых настроек ТС верно?

Те на каждом новом баре ты создаешь огромное количество датасетов.


Думаю лучше взять алгоритм регресии с многими выходами, где выходы будут готовые параметры для ТС.


У тебя схма такая : много датасетов + модель с одним выходом

А лучше : один датасет + модель с многими выходами


пример

https://stackoverflow.com/questions/57704609/multi-target-regression-using-scikit-learn

 
Ivan Butko #:

Да

В этом и суть: прогнозируем тренд - входим. Цена начинает кривляться, прогнозируем выход (HOLD) - выходим, хрен с этим трендом, поищем другой. 

Трейдеры так и поступают: прогнозирует тренд/импульс. Заходит. Цена начинает кривляться как-то, да так, что трейдеру не нравится свой вход. Он прогнозирует 50 на 50 или "не пойму, что происходит". И такой "ну нафик, лучше я выйду". Плата - небольшой минус или небольшой плюс. 

Он не прогнозирует "обратный сигнал". Ему именно не нравится реализация тренда/импульса. 


Вот так и нужно: прогнозируем вход, прогнозируем продолжение тренда, прогнозируем выход/либо обратный вход. 

да, в идеале все так

 
mytarmailS #:

Ты делаешь это немного кустарно..

Ты проганяешь через модель множество настроек ТС (много датасетов) и модель дает вероятность лучшых настроек ТС верно?

Те на каждом новом баре ты создаешь огромное количество датасетов.


Думаю лучше взять алгоритм регресии с многими выходами, где выходы будут готовые параметры для ТС.


У тебя схма такая : много датасетов + модель с одним выходом

А лучше : один датасет + модель с многими выходами


пример

https://stackoverflow.com/questions/57704609/multi-target-regression-using-scikit-learn


Ну чуть избыточно как-будто получается, да. Каждый новый бар порождает кол-во новых строк равных тестируемым параметрам для стратегии. Факторы - рыночные фичи + параметры ТС, выход - бинарный выход где бар будет либо прибыльным, либо убыточным.

Модель регресси, которая бы на выходе выдавала параметры для стратегии должна быть как-то обучена выдавать такие значения параметров, которые дадут положительный профит. То есть, профит должен быть использован как предиктор. Получается, тренируем multi-out модель, для которой X будет содержать рыночные фичи и либо абсолютный профит от торговлу внутри минутного бара, либо просто знак профита, а y - это параметры стратегии. Затем, при торговле на вход ей подаем фичи и желаемый профит или знак профита, чтобы она регресснула нам параметры для такой комбинации фич и профита?

 
Arty G #:


Пробегался по этой статье. Почитаю еще раз, спасибо!


Задача стоит не совсем в том, чтобы найти режимы рынка, при которых стратегия работает хорошо, а определить для режима набор параметров для стратегии, которые будут работать хорошо.

Я же что делаю - прогоняю сотню бектестов на одном и том же отрезке времени с разными настройками. Потом сгоняю это всё в один датафрейм и тренирую модель. Для модели комбинация настроек торговой стратегии - это такая же фича, как и остальные рыночные фичи типа волатильности или, скажем, перевеса в trades balance. Таким образом модель учится понимать какие параметры для стратегии при каких рыночных фичах могут быть прибыльными. То есть, X для модели выглядит примерно так: [volatility_short, volatility_long, rsi, trade_imbalamce, strategy_param1, strategy_param2]. А y - это знак того, что заработали за минуту. Так как ордера отсылаются до 10ти штук в секунду, за минуту можно наторговать достаточно, чтобы понять как отрабатывают параметры. В датафрейме, в который мы сгрузили всё это дело, дублируются рыночые фичи столько раз, сколько есть уникальных комбинаций параметров стратегии. То есть, в датафрейме не просто результаты торговли за весь бектест, а поминутные данные:

X:[volatility_short, volatility_long, rsi, trade_imbalamce, strategy_param1, strategy_param2], y:[step_profit]


Получили модель. Теперь, запустив бектестер или живую торговлю, мы можем каждую минуту циклом проходиться по модели, передавая ей текущий набор фич и доступные комбинации параметров для торговой стратегии, пока не найдем такую комбинацию параметров, при которой модель видит высокую вероятность прибыльной торговли.

То есть, гипотеза заключается в том, что для разных режимов рынка есть разный набор параметров, при которых торговая система будет прибыльна и еще в том, что можно научить модель МЛ находить для разных режимов подходящий набор параметров.

Ну получается, что сначала нужно определить режимы, а потом сделать все то же самое что вы делаете для каждого из них, исключая данные из других режимов :)

Причина обращения: