Как загрузить готовую торговую стратегию

Логика и правила торговой стратегии хранятся в 2 файлах:

BelkaMiner

1. Сет-файл MT4/5 (файл с расширением .set) используется для сохранения и восстановления конкретных настроек эксперта (значений параметров).
2. BelkaMiner config file представляет собой текстовый файл, содержащий результаты кластеризации и машинного обучения. Он находится в директории ‘Common\Files‘.

Таким образом, чтобы протестировать/установить готовую стратегию, вам нужно загрузить ее сет-файл в терминал MT4/5 и скопировать соответствующий файл конфигурации в каталог ‘Common\Files‘.

BelkaMiner EA

Файл -> Каталог данных -> Подняться выше до ‘Terminal’-> Common\Files


Как майнить собственную торговую стратегию (+ примеры)

В настоящее время есть 2 метода:
A) Clustering (Unsupervised)
B) Neural Network (Supervised)


А) Метод кластеризации (Обучение без учителя)

Многомерная статистическая процедура, выполняющая сбор данных, содержащих информацию о выборке объектов, и затем упорядочивающая объекты в сравнительно однородные группы. Советник группирует набор точек входа (набор данных) таким образом, что точки в одной группе (называемой кластером) больше похожи друг на друга, чем на точки в других группах (кластерах). Затем мы тестируем каждый кластер и пытаемся найти прибыльные с хорошей производительностью. Мы предполагаем, что точки в прибыльных кластерах обладают определенными свойствами, которые делают их прибыльными. Задача кластеризации относится к статистической обработке, а также к широкому классу задач обучения без учителя.
Обучение без учителя (самообучение, спонтанное обучение, англ. Unsupervised learning) — один из способов машинного обучения, при котором испытуемая система спонтанно обучается выполнять поставленную задачу без вмешательства со стороны экспериментатора. Подробнее о Unsupervised Learning->

Belkaglazer EA

Алгоритм поиска робастной стратегии используя ‘Метод кластеризации (без учителя)’ может выглядеть следующим образом:

I. Основные правила

1) Настройка параметров. Не настраивайте одновременно 2 или более параметров. Оптимизируйте только один параметр за раз, потому что каждый параметр имеет собственный смысл, логику и особенности.

2) Используйте принцип бритвы Оккама на каждом этапе: «Чем проще, тем лучше». «Не следует привлекать новые сущности без крайней на то необходимости». Чем проще ваша стратегия, тем вероятнее, что она будет успешной.

3) Разделите исторические данные на in-sample период, используемый для настройки параметров, дата майнинга, и out-of-sample период, используемый для оценки производительности. Не прикасайтесь к out-of-sample до самого конца создания стратегии! Тест OOS должен быть запущен только один раз. Если он провалится, нужно начинать все заново. Не пытайтесь что-то подстроить, чтобы пройти тест ООС. Это правило может помочь немного снизить риск подгонки под кривую. Но помните, out-of-sample — это не панацея.
*Рынок изменчив. Торговые условия, участники рынка, их методы и алгоритмы постоянно меняются. Поэтому я предпочитаю оптимизировать стратегии на новейших данных, помещая OOS данные раньше, чем данные IS. Я не говорю, что это правильный или неправильный путь, так как в таких вопросах нет единой истины. Но, на мой взгляд, если мы будем использовать данные 10-летней давности, то у нас будет меньше шансов создать надежную стратегию, которая может быть успешной сегодня. Конечно, я знаю, что этот способ увеличивает риск подгонки под кривую; я беру на себя этот риск.

4) Отключите спред (установите его на минимально возможное значение), комиссионные и любые торговые расходы! Потому что на этом этапе они могут помешать вам увидеть реальную картину — работает ли ваша основная идея или нет. Если вы этого не сделаете, вы можете выбросить отличную стратегию или идею на самом начальном этапе разработки.

5) Не используйте программное обеспечение TDS2 или любые другие медленные и точные методы тестирования на первых этапах разработки. Достаточно использовать быстрый методы «Open prices only» или «1-minute OHLC». Это правило сэкономит вам много времени.

II. Создание ‘white box’ модели

1) На данном этапе нам необходимо построить базовую стратегию. Базовая стратегия представляет собой простую «white box» модель (‘white box’ модель — это система, в которой доступна вся необходимая информация), основанную на булевой логике и понятных правилах, которая дает нам много трейдов (не менее 3000-5000) с очень маленьким, но «стабильным» средним трейдом (EP/ME/EV). Алгоритм должен обладать «эджем«, который может быть слишком мал для прямой торговли (не может покрыть спред, комиссию, после учета расходов стратегия становится убыточной), и может быть виден только в том случае, если торговые расходы выключены. Это не имеет значения. Цель — много сделок и стабильный рост без учета затрат — кривая эквити не должна выглядеть как случайное блуждание.

Почему мы должны использовать базовую стратегию. IMHO (По моему скромному мнению)
Рынок - это нестационарный процесс. Многие трейдеры этого не учитывают. Что такое нестационарность?
Нестационарность означает, что стат. свойства процесса, генерирующего временные ряды, меняются во времени.
Нестационарные данные непредсказуемы и не могут быть смоделированы или предсказаны.

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

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

Что такое хорошая торговая стратегия? На мой взгляд, есть только один правильный ответ. Это стратегия, 
которая может превратить нестационарный рыночный процесс в квазистационарный (вероятностные 
характеристики и стат. свойства которого медленно изменяются во времени) путем фильтрации рынка:

Нестационарность: Рыночные данные (цены, приращиения, индикаторы...) ---> Стратегия ---> 
Квазистационарность: Сделки (PF, средний трейд...)

Только после этого преобразования мы можем использовать различные стат. методы, включая дата майнинг. 
Попытка использовать ML/DM с необработанными нестационарными рыночными данными потерпит неудачу, 
без шансов (разбитый микроскоп). Вот почему нам нужно использовать базовую стратегию. Стратегия должна 
иметь «эдж», то есть она должна трансформировать нестационарный рыночный процесс в квазистационарный
(растущая кривая роста с me = avg и stdev = volatility).

2) Переключите советник в режим ‘BackTesting & Trading‘ и выключите машинное обучение (Use_Machine_Learning=false).

3) Выберите валютную пару и тип стратегии. В настоящее время советник позволяет использовать 3 типа: Reversal, Breakout, и Momentum.

4) Начальные значения основных параметров должны быть подобраны таким образом, чтобы Ваша базовая стратегия имела небольшой торговый «эдж» и генерировала большое количество сделок (не менее 3000-5000). Например, Вы не можете получить много сделок с высоким PCh-периодом или длинным «тайм-стопом». Поэтому это заставит Вас уменьшить их до минимально возможного значения. Вы можете изменить их после кластеризации (в разумных пределах, конечно).

5) Выполните бэктест базовой стратегии без учета торговых издержек.

*Если вы используете TDS2 и помещаете данные in-sample раньше, чем данные out-of-sample, то сдвиньте дату начала, чтобы избежать проблем с историческими данными, например, 2004/01/01 вместо 2003/06/01.

В моем примере я буду майнить разворотную стратегию на EURUSD, таймфрейм M5.
Я использую MT4 и MT5 с тиковыми данными от Dukascopy (ask&bid).
Данные разбиты на IS (2010-2020) и OOS (2003-2009).

Я выбрал значения таким образом, что базовая стратегия генерирует около 9000 трейдов
со стабильной кривой без учета торговых издержек:

BelkaMiner

Кривая МТ4 без торговых издержек:

BelkaMiner

Кривая МТ4 с торговыми издержками:

BelkaMiner

III. Кластеризация

1) Переключите советник в режим ‘Machine Learning‘, выберите Clustering (Unsupervised) технику и включите машинное обучение (Use_Machine_Learning=true).

2) Выберите метрики, которые вы хотите использовать. Я рекомендую кластеризацию в два этапа. На первом этапе я рекомендую выбрать все метрики.
*Я использую эти метрики во многих своих стратегиях/системах уже более 10 лет; я думаю, что они робастны и позволяют создавать робастные стратегии. Поэтому выбор основан на моем опыте. Конечно, в будущем я добавлю новые.
**Параметры EMA_Period, Momentum_Bars и Hurst_Bars не связаны с базовыми правилами (PA_Bars и т.д.). Они используются для вычисления входных переменных.

3) Установите понятное имя для файла конфигурации.

BelkaMiner

4) Укажите требуемое количество кластеров и информацию, которую вы хотите сохранить в файле конфигурации (‘SavePointsOnly‘ рекомендуется). Оставьте остальные параметры по умолчанию. Оптимальное количество кластеров зависит от размера набора данных (количество точек/векторов).

Так как у меня достаточно сделок, я буду использовать 50 кластеров.

BelkaMiner

5) Запустите бэктест, переключитесь на вкладку ‘Журнал‘ и подождите немного.

BelkaMiner

6) Переходите к следующему этапу если кластеризация прошла успешно и данные сохранены в файл.

IV. Выбор кластеров, создание ‘BlackBox’ модели

1) На данном этапе мы тестируем каждый кластер и пытаемся найти прибыльные с хорошей производительностью. Мы предполагаем, что точки в прибыльных кластерах обладают определенными свойствами, которые делают их прибыльными. Однако прибыльный кластер может быть случайным. Мы ничего не знаем о его работе. В науке, вычислениях и машиностроении «black box» — это устройство, система или объект, который можно рассматривать с точки зрения его входов и выходов, не зная о его внутренней работе. Вот почему нам нужен тест ООS.

BelkaMiner

Я рекомендую тестировать кластеры на МТ5, это намного быстрее.

2) Переключите советник в режим ‘BackTesting & Trading‘ и выберите самый быстрый метод классификации — ‘Euclidean Distance‘.

BelkaMiner

3) Для тестирования кластеров на покупку, оптимизируйте пареметр ‘ClusterNumberForOptToBuy‘ от 0 до N-1. Перед оптимизацией обязательно очистите ClusterNumber(s)ToBuy и ClusterNumber(s)ToSell.

BelkaMiner

4) Выберите номера кластеров на покупку:

a) Отсортируйте результаты оптимизации по среднему трейду (математическое ожидание);

b) Выбирайте кластеры с хорошей производительностью (средний трейд, много точек/сделок, фактор восстановления);

c) Не выбирайте кластеры с небольшим количеством точек (менее 30);

d) Не выбирайте много кластеров, 2-6 достаточно;

e) Допустимо тестировать каждый кластер по отдельности (только на IS!);

f) Если нет хороших кластеров, это означает, что кластеризация потерпела неудачу или ваша базовая стратегия слишком плоха.

Я выбрал 4 кластера: 34,48,27,46.

5) Сделайте то же самое для кластеров на продажу.

6) Заполните параметры ClusterNumber(s)ToBuy/Sell выбранными номерами разделенными запятой.

BelkaMiner

7) Включите торговые расходы и запустите бэктест за in-sample период, не трогайте OOS!

Выглядит хорошо:

BelkaMiner

V. Оптимизация базовой стратегии

1) При необходимости оптимизируйте основные параметры стратегии. Не настраивайте сразу 2 или более параметров, оптимизируйте только один параметр за раз, потому что каждый параметр имеет свое значение, логику и особенности. Подробнее: Анализ Параметров Модели ->

2) При необходимости добавьте сложные правила выхода.

Я увеличил PCh period, SL (потому что это возвратная стратегия), и StopBar:

BelkaMiner

VI. Обучение Нейросети (Перцептрона)

Я рекомендую использовать МТ5, это намного быстрее.

1) На этом этапе мы обучаем перцептрон классифицировать номер кластеров, а затем сохраняем его конфигурацию в файл.
*Значения параметров, содержащиеся в файле набора, не влияют на обучение NN, так как обучающие данные берутся из Config-файла.

Сначала попробуйте обучить его с настройками по умолчанию:

BelkaMiner

2) Установите Classifier=Saved Neural Network и запустите бэктест. Перейдите на вкладку ‘Журнал‘ и подождите некоторое время.

BelkaMiner

BelkaMiner

Обратите внимание на точность, она должна быть не менее 97-98%. Невероятно, но после обучения нейросеть сможет торговать, используя необработанные данные!

BelkaMining

3) Если обучение не удается, попробуйте увеличить количество рестартов или добавить скрытый слой.

4) Обучение NN не является обязательным, вы можете использовать классификатор ‘Euclidean Distance‘. Но нейронная сеть сможет лучше идентифицировать номер кластера на неизвестных и сырых данных (другими словами, на реальных данных).

VII. Out of Sample Тест

1) Выполните out-of-sample тест с комиссией, реальным спредом, проскальзыванием.

Dukascopy данные (2003-2020):

BelkaMiner

Чтобы убедиться, что я не подогнал стратегию под Dukascopy, 
я провожу тесты, используя другие исторические данные.

FXDD данные (2005-2020):

BelkaMiner

Alpari данные (2000-2020):

BelkaMiner

2) Если тест потерпел неудачу, начните все сначала. Не пытайтесь ничего подкрутить, чтобы пройти OOS.

3) IMHO, из-за низкой точности входов, стратегия на основе ML всегда будет выглядеть как будто бы эдж смешан с белым шумом. Это повлияет на значение ПФ. Однако есть и преимущество: сделки трейдеров, использующих один и тот же эдж, будут существенно отличаться. Поэтому я не думаю, что белый шум является проблемой.

PS. Созданная стратегия (Revergy[Reversal][CL][1.001]_EURUSD_M5) может быть найдена в Google shared folder.

PSS. Как я упоминал выше, я рекомендую кластеризацию в два этапа, чтобы исключить неиспользуемые входные переменные. На первом этапе выберите все входные переменные. Затем протестируйте выбранные кластеры, оптимизируя параметр MeanInsteadOfValue от 0 до 6 (количество используемых метрик). Затем сравните производительность прохода 0 с проходами 1-6. Если производительность растет или падает немного, это означает, что кластер не использует эту входную переменную, и мы должны отключить ее и выполнить кластеризацию снова (шаг 2).

*Для более простого описания, эта стратегия была создана в один этап.


B) Нейронная сеть (Обучение с учителем)

Советник обучает перцептрон, используя необработанные данные без кластеризации. Обучение с учителем — один из способов машинного обучения, в ходе которого испытуемая система принудительно обучается с помощью примеров, содержащих пары «известный вход — известный выход». Подробнее о Supervised Learning->

Этот метод менее робаст и несет в себе экстремальный риск чрезмерной подгонки!

BelkaMiner EA

Алгоритм майнинга стратегии используя метод ‘Neural Network (Обучение с учителем)’ может выглядеть следующим образом:

I. Основные правила

II. Создание ‘white box’ модели

В этом примере я буду использовать настройки советника по умолчанию (Default_EURUSD_M5) в качестве базовой стратегии.
Исторические данные разделены на IS (2010-2018) и два OOS периода (2003-2009, 2019-2020). 

Базовая стратегия генерирует около 8000 сделок со стабильной кривой роста без учета торговых издержек: 

BelkaMiner

III. Обучение Нейросети (Перцептрона), создание ‘BlackBox’ модели

Я настоятельно рекомендую использовать МТ5, он намного быстрее.

На данном этапе мы обучаем перцептрон отфильтровывать убыточные сделки. Тренировочные данные состоят из пар Входов (метрики, входные переменные) и соответствующих Выходов (PnL=Profit and Loss).

1) Переключите советник в режим Machine Learning, выберите технику Neural Network (Supervised), включите Machine Learning (Use_Machine_Learning=true), установите WhatToSave=SavePoints & TrainPerceptron и Classifier=Saved Neural Network.

2) Выберите метрики (входные переменные), которые вы хотите использовать.

В моем примере отключение 5-UseIntradayVolatility_Measure увеличивает точность на обучающем наборе.

3) Установите понятное имя для файла конфигурации.

4) Настройте перцептрон. Для этой задачи я рекомендую использовать скрытый слой с 20-30 нейронами.

BelkaMiner

5) Запустите бэктест, переключитесь на вкладку ‘Журнал. Обучение может занять очень много времени!

BelkaMiner

Обратите внимание на точность, она должна быть не менее 60-70%. Например, 70% означает, что нейронная сеть правильно предсказывает результат (PnL) 70% трейдов. Прогнозирование результата сделок- сложная задача, поэтому точность не превысит 80%.

6) Переключите советник в режим ‘BackTesting & Trading‘.

7) Настройте параметр ProbabilityOfProfit%. Он работает как фильтр (чем больше вы его затягиваете, тем выше производительность, и тем меньше сделок), поэтому вы можете оптимизировать его от 60 до 100 и выбрать нужное значение.

Я установил его на 70%

8) Если вам нужно переучить перцептрон, установите Classifier=Neural Network и запустите бэктест. Затем установите параметр обратно в Saved Neural Network.

*Вы можете вручную добавить точки входа, взятые у разных брокеров, скопировав данные в раздел [Points and Cluster Numbers] файла конфигурации. Это позволит Вам увеличить размер набора данных для обучения и получить наилучший результат.

IV. Out of Sample Тест

1) Выполните out-of-sample тест с комиссией, реальным спредом, проскальзыванием.

Dukascopy данные (2003-2020):

BelkaMiner

Dukascopy данные (2010-2020), ProbabilityOfProfit%=80:

BelkaMiner

2) Если он не пройден, начните все сначала. Не пытайтесь ничего настроить, чтобы пройти OOS тест.

Как видно, моя стратегия показывает смешанные результаты. Она потерпела неудачу в первом OOS (2003-2009) и прошла второй OOS тест (2019-2020).

PS. Созданная стратегия (RevergyNN[Reversal][NN][1.001]_EURUSD_M5) может быть найдена в Google shared folder.