Yes there are a lot of information.
I want to say what i am doing in this case.
I am openning this link https://www.mql5.com/en/forum every time (refreshing for example) to see new posts and to open link "New posts".
Besides this link https://www.mql5.com/go?link=https://www.forex-tsd.src/search is helping a lot to find something.
Hi niewdigital,
Thanks! Not only that, but there's also a thread search.
Even more, if there are some threads that contain copies of PDF eBooks, you can use Acrobat Pro to read the eBooks to you. If you don't have Acrobat Pro there are a number of free utilities that will also do the job.
Once you get used to the digitized voices, it's not bad at all.
moneyline
And there is some chat somewhere which we used one month ago.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Введение
Перед началом изучения данной статьи, рекомендую ознакомиться с первой статьей из серии: "Разработка самоадаптирующегося алгоритма (Часть I): Поиск базовой закономерности". Это не обязательное условие, основная суть будет понятна, но так будет интереснее.
В предыдущей статье "Разработка самоадаптирующегося алгоритма (Часть I): Поиск базовой закономерности", была найдена простая закономерность и разработан очень простой алгоритм, эксплуатирующий эту закономерность. Но алгоритм не имеет гибкой структуры, и ждать от него каких - то выдающихся результатов не имеет смысла, работает и хорошо.
Нужно существенно доработать алгоритм, чтобы он стал более гибким и корректировал свои параметры работы, в зависимости от ситуации на рынке, так удастся добиться лучших результатов и большей стабильности.
Анализ недостатков
Начать разработку нового алгоритма нужно с анализа недостатков предыдущей версии. Я выделил следующие недостатки:
Упрощенный алгоритм работы
Модернизация
Робот был разработан в 2016 году, и создавался под MetaTrader 4, поэтому код прикреплю в конце для этого терминала.
В процессе разработки, нужно устранить все выявленные недостатки, поэтому всю разработку поделю на пункты.
Алгоритм первой версии становился стабильнее с увеличением числа свечей в окне для анализа или с увеличением порогового процента перевеса падающих или растущих свечей. Приходилось идти на компромисс и устанавливать больше размер выборки для анализа или больший процент перевеса преобладающих свечей. Тесты показали, что настроить оптимальный процент перевеса можно практически на любом числе свечей, но для каждого большего числа свечей он должен уменьшаться.
При фиксированном пороговом проценте, с увеличением числа свечей в окне анализа, уменьшается вероятность появления такой комбинации. Поэтому максимальное значение свечей в окне для анализа можно устанавливать любым, оно практически не влияет на результат просто по тому что вероятность встретить такую комбинацию стремительно падает. Для того, чтобы сигналов на начало серии было больше, нужно с увеличение числа свечей в выборке, снижать пороговый процент перевеса так, чтобы вероятность появления комбинации оставалась примерно одинаковая.
Сделано допущение, что вероятность появления заданного процента перевеса, на заданном числе свечей, можно посчитать при помощи комбинаторики.
,
где
Вероятность события P нужно умножать на 2 по тому что P посчитано для случая, когда больше свечей одного направления падающих или растущих. Нас интересует общая вероятность, не важно какого направления. Умножать вероятность на 2 не нужно только, если число падающих свечей = числу растущих.
Для примера посчитаем вероятность наступления события, когда из 30 свечей 24 свечи одного направления и 6 другого. Для этого я сделал таблицу, ка на рисунке 1 ниже.
Рисунок 1. Таблица вероятностей
24 свечи одного направления из 30, соответствует 80% перевеса. Вероятность появления такой комбинации 0.11%. Теперь сравню по таблице, какой процент перевеса должен быль для 100 свечей в выборке, чтобы ее вероятность появления была 0,11%. Для 100 свечей такой вероятности появления комбинаций не встречается. Есть вероятность появления 0.172% и 0.091%. Выберу более редкий вариант и он соответствует соотношению одного типа свечей к другому, как 66/34, или 66% свечей одного направления.
Ясно, что комбинации для 30 свечей с 75% перевесом падающих или растущих свечей будет встречаться также часто как комбинация из 100 свечей с 66% перевесом. Зависимость процента перевеса от числа свечей, нелинейная, поэтому для корректировки процента, с увеличением числа свечей, нужно применить нелинейную функцию. Я разработал такую функцию:
Где
Посмотрим на графике рисунка 2, как уменьшается процент перевеса (при статичной вероятности выпадения комбинации) с ростом числа свечей по методу комбинаторики и насколько подходящая получилась разработанная функция.
Рисунок 2.
На рисунке 2 фиолетовым цветом показан график уменьшения процента перевеса, при увеличении числа свечей в выборке и фиксированной вероятности появления такой комбинации. Красным цветом показан график разработанной функции уменьшения процента перевеса, от числа свечей в выборке. Видно, что обе функции нелинейные, но разработанная функция затухает медленнее. Это сделано специально, по тому что чем больше свечей в выборке, тем больше в серии может открыться позиций при возврате к 50% в. Больше позиций, значит больше нагрузка на депозит и больше просадки.
Специально сделано так, чтобы на большем числе свечей сигнал появлялся реже и только если процент перевеса действительно высокий для данного числа свечей.
Чтобы повысить качество сигнала, выборка не должна состоять из жестко фиксированного числа свечей. Мы видим перевес растущих свечей 65% на 30 свечах, но много это или мало? Если на 100 свечах тоже есть какой - то перевес растущих свечей то этот факт должен делать сигнал сильнее, если же там нет перевеса или наоборот, есть перевес падающих свечей, то сигнал нужно ослабить. Я разработал 2 механизма усиления или ослабления сигнала.
В первой версии алгоритма, была проблема: когда начиналась серия, робот открывал позиции на каждой свече. Такой подход не сильно эффективен и приводит к большим просадкам, повышает требования к депозиту. Часто встречались ситуации, когда позиции открывались, а процент перевеса в выборке продолжал расти или падал недостаточно быстро. Это неучтенный фактор и он приводил к потере стабильности. Нужно учесть данный фактор и за счет этого увеличить стабильность алгоритма.
Были разработаны 2 меры, уменьшающие число позиций в серии.
Эти 2 пункта можно использовать как совместно, так и раздельно. Они снижают уровень прибыльности, но значительно увеличиваю стабильность, а это для меня важнее прибыли. На один неучтенный фактор стало меньше и соответственно удалось повысить стабильность работы.
Рисунок 4
На рисунке 4 сверху позиции открываются без ограничений, на рисунке снизу, с использованием алгоритма из пункта (б). Видно, что позиций открылось меньше, сравнительные результаты по данной сделке занесены в таблицу ниже.
По таблице видно, что максимальная просадка упала, но упала и доходность. Самое важное, что число позиций сократилось в 1.91 раза, что в итоге положительно повлияет на стабильность алгоритма в моменты, когда параметры рынка будут отклоняться от своих типичных значений.
Были разработаны и другие методы уменьшения числа позиций в серии и они описаны в техническом задании, я показал те, которые мне кажутся самыми эффективными.
В первой версии алгоритма (добавить ссылку на место), было введено понятие прибыль на лот. Это значение устанавливалось в валюте депозита для размера лота равного единице. Далее считалось число лотов по открытым позициям серии и значение из настроек умножалось на текущий суммарный лот по открытым позициям серии. Например в настройках установлено закрыть серию позиций, когда прибыль станет больше 15$ на лот. Сейчас открыто 11 позиций по 0.01 лоту, значит общая позиция 0.01*11=0.11. Далее прибыль на лот, умножается на полученное число лотов 15$*0.11=1.65$. Если общая прибыль по открытым позициям достигнет 1.65$, серию позиций нужно завершить.
Задавать фиксированное значение прибыли на лот в валюте депозита не самое эффективное решение. Когда волатильность по инструменту падает, риск пропустить правильную точку закрытия растет. И наоборот, когда волатильность растет, робот недополучает прибыль. В итоге во время оптимизации получается усредненное значение прибыли на лот, которое работает не достаточно эффективно.
Самым простым решением будет сделать, чтобы параметр прибыль на лот, корректировался от текущей волатильности. Чем больше волатильность, тем больше прибыли на лот и наоборот. Сейчас я уже могу сказать, что использовать усредненную волатильность тоже не идеальное решение, но это лучше, чем фиксированное значение.
Так получается еще одна маленькая функция самоадаптации, параметр настраивается не жестко, а задается зависимость от текущего состояния рынка. Известно, что прибыль в серии прямо зависит от размера свечей и нужно использовать эту зависимость для увеличения стабильности.
Я отказался от контроля прибыли в валюте депозита, по тому, что цена пункта не постоянна для валютных пар типа USD/XXX и меняется от текущего значения цены. Прибыль будет контролироваться в пунктах. Для этого нужно взять текущее значение индикатора ATR (в пунктах) и умножить на значение из настроек "Koef_multi_ATR". Получилось число пунктов для закрытии в прибыль. Далее для каждой позиции считается сколько прошло пунктов от цены открытия до текущего значения и находится среднее значение для всех позиций. Полученное среднее значение сравнивается с числом пунктов для закрытия в прибыль. Если среднее число пунктов больше или равно числу пунктов для закрытия, то серия завершается, если нет, то на следующей свече процедура повторяется.
Текущая прибыль должна контролироваться или на каждом тике или через таймер, чтобы не нагружать лишними вычислениями. Для системы подобного рода, проверять прибыль 1 раз в секунду, нормально.
Предыдущая версия робота, умела одновременно торговать на 10 торговых инструментах. Этого мало и приходилось запускать одновременно несколько копий робота. Новая версия одновременно может торговать на 28 торговых инструментах, это сделано для лучшего контроля торговли.
Как я писал выше (вставить ссылку на то, где написано), сигналы начала серий на разных инструментах немного коррелируют и это приводит к синхронизации просадок по разным инструментам, увеличений требования к депозиту и снижению относительной доходности.
В идеале нужно, чтобы корреляция между сигналами начала серии на разных торговых инструментах была отрицательной. То есть большая текущая просадка на одном инструменте, должна совпадать с маленькими прибыльными сделками по любым другим торговым инструментам. Запрещать одновременное открытие серий больше, чем по одному инструменту тоже не лучшее решение, по тому что снижается общая прибыльность.
Корреляция сигналов на начало новой серии возникает из-за того, что одна из валют может начать падать или расти по отношению к другим. Сразу на нескольких валютных парах может возникнуть сигнал на продажу или покупку этой валюты, по отношению к другим валютам, нужно защититься от такой ситуации.
Чтобы корреляция между сигналами открытия серий на разных инструментах была как можно меньше, нужно разбить валютные пары на отдельные валюты, и считать что открываются позиции по отдельным валютам. Если открыта позиция Sell по EURUSD, то данная позиция делится на позицию Sell по EUR и Buy по USD. Перед началом каждой новой серии, нужно проверять, есть позиции по валютам входящим в пару или нет. Если есть позиция Sell по EUR, то нужно запретить начало любой серии, где будет требоваться продать EUR. Но не нужно запрещать сигналы, в которых нужно купить EUR.
Рисунок 5
Пример, как делить валюты на пары, показан на рисунке 5. Ниже, на рисунке 6, схематично показано, какие позиции можно открывать, если открыта позиция Buy EURUSD. Для остальных вариантов работает все аналогично.
Рисунок 6.
Используя такой подход, уже не обязательно ограничивать максимальное число инструментов для одновременного открытия позиций, но функцию в настройках я оставил.
Во второй версии алгоритма я отказался от автоматического рефинансирования, поэтому лот не будет меняться при изменении размера депозита. Я делал этого робота для реальной торговли и мне не нужна эта функция. Но разработал другую функцию коррекции лота. прибыль и убыток у такого алгоритма зависят от размера свечей или от волатильности. Логично попробовать сделать график доходности максимально ровным, без провалов и всплесков.
Для стабилизации графика доходности, нужно менять размер лота от текущей волатильности. Чем она больше, тем меньше нужно использовать лот, чем меньше волатильность, тем больше можно устанавливать лот. Лот будет меняться пропорционально текущей волатильности. Для этого в настройках будет задаваться значение нормального лота и нормальной волатильности.
Для расчета текущего лота, нужно взять текущее значение ATR и поделить его на "Norm_ATR" из настроек. Затем "Lot" из настроек нужно поделить на полученный коэффициент. Полученное значение округлить до правильного. Так лот будет уменьшаться, при росте размера свечей и график доходности будет максимально стабилен.
После начала серии, волатильность может измениться, поэтому я предусмотрел 2 варианта работы. В первом, лот определяется до начала серии и стабилен, пока серия не завершится.
Во втором варианте лот меняется от текущей волатильности после начала серии. Но тогда при расчете текущей прибыли, размер позиции будет влиять на суммарную прибыль в валюте депозита и результаты могут как улучшиться, так и ухудшиться. Функция будет экспериментальной, если понравится как работает, то в следующей версии можно модифицировать.
Тесты
В статье описаны не все разработанные модификации и режимы работы, только основные и самые интересные. Реализовано значительно больше, чем написано и все режимы можно комбинировать между собой. К статье приложу техническое задание на алгоритм, в нем расписано все подробно.
Тесты проведу на тех же валютных парах, что использовал для тестирования первой версии алгоритма, чтобы наглядно сравнить, что получилось. Как и первая версия, этот алгоритм работает по закрытию свечей, поэтому тестировать можно спокойно в режиме "контрольные точки". Внутри свечи он только контролирует текущую прибыль и следит, чтобы текущие средства не опустились ниже порогового значения, установленного в настройках. Тесты, как и раньше буду проводить с завышенным спредом и для GBPUSD установлю спред 40.
Рисунок 7. GBPUSD 2000.01.01 - 2020.12.08 статичный лот
На рисунке 7 показан тест GBPUSD для таймфрейма H1, за период почти 21 год с 2000.01.01 по 2020.12.08. Оптимизацию я делал в 2017 году, когда использовал этого робота для реальной торговли и сейчас не проводил дополнительной оптимизации, просто взял настройки того времени. Тут используется множественная выборка из диапазона. Диапазон анализа 68-200 свечей и используется 15 выборок.
Если первая версия алгоритма проходила тест только с 2001 года, то вторя версия уже спокойно проходит тест с 2000 года. По сравнению с первой версией алгоритма (вставить ссылку на картинку), в 3 раза увеличилось число позиций, и в 1.9 раза увеличилась прибыль. Профит фактор уменьшился с 7.5 до 2.74, но все еще остается на достойном уровне. Сигналы на начало серии генерируются чаще, а средне число позиций в серии уменьшилось. Наверное можно подобрать настройки и лучше, но я взял те, что использовал для торговли.
Ранее была разработана функция коррекции лота от текущего значения ATR. На рисунке 8 проведен тот-же тест, что и для рисунка 7, но с динамическим лотом, зависящим от волатильности. Так ка для 3000$ использовался лот 0.01, то для корректной работы алгоритма коррекции размера лота, я увеличил депозит до 30 000$ и соответственно поднял лот до 0.1.
Рисунок 8. GBPUSD 2000.01.01 - 2020.12.08 динамический лот, зависящий от ATR
Как видно на рисунке 8, график доходности стал значительно более линейный, как и предполагалось во время разработки. При этом доходность немного упала, а максимальная просадка немного выросла. Режим получился интересный и пригодится для получения максимально прогнозируемой доходности с высокими значениями коэффициента Шарпа.
Нужно проверить, насколько стабильны параметры, которые я использовал для тестов выше. Для этого запущу тест на GBPUSD тайм фрейме M15 с теми же настройками, что использовал на H1. Так как на меньших таймфремах значительно больше неравномерность волатильности, то нужно немного снизить коэффициент прибыли. Так как я знаю, почему это нужно делать, то этот параметр можно было сделать самоадаптирущимся, но в этой версии робота этого нет, корректирую вручную.
Для снижения рисков, можно ограничить максимальное число позиций. которое может открывать робот в одной серии. Это