Почти год назад, 23 сентября 2015, я задумался:
А может все-таки построить робот?
Останавливал скепсис по отношению к торговым роботам-баблорубам и кажущаяся неподъемность задачи — все-таки с МТС я достаточно плотно знаком давно и не поверхностно. Также не внушали оптимизма практически нулевой опыт в программировании и полное незнание с чего начать и что делать с роботом на торговом терминале.
Год прошел. Я что-то узнал и что-то сделал из того что мог и что было возможно на моем уровне развития.
Программистом за этот год я так и не стал, потому что все мои знания в программировании на MQL4 были подчинены очень узкой задаче и за ее пределами я просто плаваю. А программист — это человек, который может закодировать любую корректно поставленную задачу.
Все что изучал и усвоил я — это то, что нужно было на очередном шаге при реализации очередных функций. Но индикаторные роботы я теперь могу строгать почти не задумываясь. И очень быстро.
Баблоруб я тоже не сделал. Как ни крути, машина которая сама по себе делает деньги в невообразимых количествах и в любых условиях без человеческого участия у меня не получается. Если уж совсем будет невмочь, куплю у какого нибудь гения за пару десятков баксов его суперприбыльное изделие. Благо продаются они на каждом интернет углу. И по словам авторов деньги рубят в невообразимом количестве. Странно только, что продаются так дешево.
Что сделал? Сделал машинку, которой я могу поручить выполнить за меня на рынке заданные действия при реализации заданных условий, а сам в это время могу заняться любыми другими делами. Т.е. потратив год я купил себе свободное время — самый ценный из невосполнимых ресурсов нашего мира.
Сегодня я сказал себе стоп. Год назад я перестал работать над системой индикаторов, осознав, что дальше на этом уровне делать нечего. Сегодня я прекращаю работать над роботом. Если кто-то считает что нужно сделать больше, дорога открыта.
Алгоритмы опубликованы, все действия и ходы записаны и расписаны, за исключением нюансов конкретной реализации и исходных кодов. Это пока отдавать жалко. 15 лет жизни все-таки.
Пока что подожду, может в моем близком окружении найдется человек, который продолжит эту работу на новом уровне, с применением нейросетей к тому базису, на котором сейчас работает робот.
Параметры настройки робота.
Финальная версия робота отличается от предыдущих и по механизму и по значениям параметров настроек и может нарушить привычный режим работы трейдера вследствие необходимости привыкания к новому типу задания параметров трендов и новым обозначениям. Из-за этого могут возникать технические ошибки.
Кроме того, параметров стало намного больше. Поэтому обновления до текущей версии будут высланы только тем пользователям, кто решится на переход к этой несколько громоздкой конструкции.
В финальной версии по сути реализован своего рода модульный конструктор, с помощью которого можно собирать практически любую конфигурацию торгового робота, подходящую для текущей ситуации на рынке по любому конкретному торговому инструменту.
В дополнение к уже имеющимся возможностям организовано взаимодействие отдельных копий робота, действующих на различных инструментах, в единую систему, позволяющую реализовать блокировку работы всех копий роботов при достижении параметром эквити целей профита, стоп-лосс или максимально допустимого убытка убытка по торговому счету.
Кроме этого в финальной версии реализованы следующие функции:
— задание уровня начального баланса торгового счета для очередного торгового цикла (начало цикла определяется трейдером);
— задание уровня допустимой абсолютной просадки по счету для очередного торгового цикла;
— задание единого для всех копий роботов уровня целей прибыли для выхода по эквити;
— задание единого для всех копий роботов уровня стоп-лосс для выхода по эквити;
— задание единого для всех копий робота размера трейлинг стопа по эквити, после достижения которого роботы устанавливают скользящий безубыточный уровень выхода из рынка по совокупной прибыли всех открытых позиций; — возможность выбора уровня безопасной торговли при определении торговых рисков;
— и другие.
Гибкость работы возросла, но и требования к пониманию своих действий и аккуратности в работе со значениями параметров роботов тоже повысились.
Кроме того, за счет изменения типов переменных и режимов их обработки из настроек робота устранены избыточные комбинации задаваемых характеристик трендов, что сокращает время оптимизации, если для настройки робота будет использоваться оптимизатор стратегий.
Список параметров и их назначение.
При сбрасывании робота на график торгуемого инструмента появляется диалоговое окно для настройки параметров.
Позиции открываются в направлении движения рынка определяемом условиями фильтрации входов по параметрам принимаемых во внимание трендов.
Позиции закрываются по достижению цели, стопом, трейлинг-стопом или по реверсу, т.е. при формировании условий для торговли в противоположном направлении, а также по развороту локального тренда, если задан соответствующий режим приоритета. Также позиции закрываются по параметрам эквити торгового счета.
Назначение параметров следующее.
1.Группа фильтрации сигналов по параметрам трендов.
FiltrIDayTrendLevel — целое число от 0 до 2. При значении параметра 0 данный тренд при открытии позиций в расчет не принимается. При значении параметра 1 для открытия позиции принимаются во внимание только сигналы в направлении тренда. Значение параметра больше 1 блокирует открытие сделок в направлении тренда если волна четвертого уровня графика М1 больше/меньше границы канала волатильности на диаграмме волн (назначение — предотвратить вход в рынок в зоне возможного окончания импульса (свинга)). Сделки в противоположном направлении открываются без ограничений.
FiltrDailyTrendLevel — целое число от 0 до 2. При значении параметра 0 данный тренд при открытии позиций в расчет не принимается. При значении параметра 1 для открытия позиции принимаются во внимание только сигналы в направлении тренда. Значение параметра больше 1 блокирует открытие сделок в направлении тренда если волна четвертого уровня графика М5 больше/меньше границы канала волатильности на диаграмме волн (назначение — предотвратить вход в рынок в зоне возможного окончания импульса (свинга)). Сделки в противоположном направлении открываются без ограничений.
FiltrLocalTrendLevel — целое число от 0 до 2. При значении параметра 0 данный тренд при открытии позиций в расчет не принимается. При значении параметра 1 для открытия позиции принимаются во внимание только сигналы в направлении тренда. Значение параметра больше 1 блокирует открытие сделок в направлении тренда если волна четвертого уровня графика М15 больше/меньше границы канала
стандартной волатильности — пунктирный канал на диаграмме волн (назначение — предотвратить вход в рынок в зоне возможного окончания импульса (свинга)). Сделки в противоположном направлении открываются без ограничений.
FiltrShortTrendLevel — целое число от 0 до 2. При значении параметра 0 данный тренд при открытии позиций в расчет не принимается. При значении параметра 1 для открытия позиции принимаются во внимание только сигналы в направлении тренда. Значение параметра больше 1 блокирует открытие сделок в направлении тренда если волна четвертого уровня графика Н1 больше/меньше границы канала волатильности на диаграмме волн (назначение — предотвратить вход в рынок в зоне возможного окончания импульса (свинга)). Сделки в противоположном направлении открываются без ограничений.
FiltrMediumTrendLevel — целое число от 0 до 2. При значении параметра 0 данный тренд при открытии позиций в расчет не принимается. При значении параметра 1 для открытия позиции принимаются во внимание только сигналы в направлении тренда. Значение параметра больше 1 блокирует открытие сделок в направлении тренда если волна четвертого уровня графика Н4 больше/меньше границы канала волатильности на диаграмме волн (назначение — предотвратить вход в рынок в зоне возможного окончания импульса (свинга)). Сделки в противоположном направлении открываются без ограничений.
В данной версии признаки краткосрочного и среднесрочного тренда при активных режимах по умолчанию объединяются по
ИЛИ(OR), т.е. сделки разрешены, если при прочих положительных условиях хотя бы один из двух старших трендов допускает торговлю в данном направлении.
MajorTrendsANDMode — при параметре
true объединение признаков краткосрочного и среднесрочного тренда переключается из режима логического
ИЛИ(OR) в режим логического
И(AND).
2. Параметр приоритета локального тренда.
TheLocalTrendPriorityMode — при параметре
true в советнике задается режим приоритета локального тренда. В этом режиме независимо от значений параметра
FiltrLocalTrend всегда учитывается направление движения в рамках локального тренда. Открытие позиций против направления локального тренда блокируется. Позиции открываются в направлении движения рынка по локальному тренду с дополнительными условиями фильтрации входов по параметрам остальных трендов.
Закрытие позиций строго по параметрам локального тренда вне зависимости от направлений движения рынка по остальным трендам. а также по достижению цели, стопом, трейлинг-стопом и режимами закрытия по эквити.
3. Группа настройки вспомогательных режимов.
Long — торгуем/не торгуем лонг.
Short — торгуем/не торгуем шорт.
OnlyOpen — при значении параметра
true позиции только открываются и сопровождаются адаптивным или ручным трейлинг-стопом. Закрытие позиций происходит только по достижению уровней ордеров стоп-лосс и тейк-профит, а также трейдером вручную.
CloseManualPosByExpert — при значении параметра
true эксперт получает возможность закрытия позиций, ранее открытых или открываемых вручную. Пользоваться с осторожностью и только при отсутствии сделок против тренда, торгуемого роботом, поскольку такие позиции будут сразу же закрыты.
SwitchToSignalSUMM — при значении
true для формирования торгового сигнала используется не пересечение нулевой линии волной второго уровня графика М1, а пересечение нулевой линии суммой всех волн графика М1. Использование режима в некоторых случаях улучшает статистику сделок в отсутствие фильтрации по внутридневному и/или дневному трендам… Использовать после предварительного тестирования.
TheAddSignalsMode — при значении
true для формирования торгового сигнала кроме пересечения нулевой линии волной второго уровня графика М1 в направлении торговли используется также разворот волны второго уровня выше/ниже нулевой линии в направлении торговли.Использование режима целесообразно на сильных тренда, когда на откате волна второго уровня не заходит за нулевую линию.
4. Группа настройки параметров риска.
LotsForManualMM — размер лота для торговли фиксированным объемом без
AutoMM.
AutoMM — параметр выбора режима автоматического определения размера (объема) позиции, значение
true соответствует автоматическому определению размера позиции, значение
false — ручной выбор размера позиции, задаваемый параметром
LotsForManualMM.
RiskPercForTradeAutoMM — процент риска на сделку при
AutoMM=true. Если заданный или рассчитанный размер лота меньше допустимого в торговом терминале, то в советнике автоматически устанавливается минимально допустимый размер лота.
MaxNumberOrdersInMarket — максимальное количество ордеров в рынке по инструменту, открываемых советником.
TotalRiskLimitPerc — максимальный общий риск в процентах по всему портфелю торгуемых инструментов.
TrailingStopAdaptive — включение/выключение режима адаптивного трейлинг-стопа. Адаптивный трейлинг-стоп включается на режиме коррекционного движения по локальному тренду краткосрочному или среднесрочному тренда в порядке убывания приоритета локальный-краткосрочный-среднесрочный.Если какой-либо из трендов не учитывается при открытии сделок, то адаптивный трейлинг-стоп по его параметрам также не включается.
TrailingStopManualSize — размер трейлинг-стопа, задаваемого вручную. Активен, если
TrailingStopAdaptive выключен. При значении 0 — ручной трейлинг-стоп отсутствует. Если значение больше 0, но меньше минимально допустимого в торговом терминале, то устанавливается минимально допустимое + 5пп.
AggressiveMode — включение адаптивного мультипликатора риска. В режиме агрессивной торговли, если волна четвертого уровня графика М15 находится внутри границ канала стандартной волатильности на интервале направленного локального тренда (пунктирный канал на диаграмме волн), то количество разрешенных к открытию сделок и риск на каждую сделку удваиваются.
LeverageLimits — задается предельный размер кредитного плеча, в рамках которого советник может открывать позиции. Если заданный размер кредитного плеча больше плеча, предоставленного брокером, то действуют ограничения по кредитному плечу брокера. Например, плечо у брокера 1:500, а вы можете установить 1:25 и советники не будут открывать новые позиции, если набран объем, соответствующий кредитному плечу 1:25. Это впрочем не препятствует ручной догрузке счета.
TheInitialStopsShutDownMode — при значении параметра
true не устанавливает начальные значения ордеров стоп-лосс и тейк-профит по открываемым позициям. Кому это может понадобится не знаю. Попросили — сделал.
TheHftCloseMode — при значении параметра
true закрывает позиции по инструменту при броске цен против позиции на величину волатильности часового тренда в пределах минуты, а также устанавливает адаптивный трейлинг-стоп при аналогичном броске цен в сторону открытой позиции. Используется для аварийного выхода из рынка при резком росте волатильности, чаще всего вследствие сильной реакции на новости.
TheInvVolatilityBlock — при значении параметра
true блокирует открытие новых позиций в случае аномального поведения рынка, когда волатильность часового тренда превышает волатильность по дневному тренду. Действующие позиции в это время уже обычно защищены режимом
TheHftCloseMode. Рекомендуется использовать совместно с параметром
TheHftCloseMode.
5. Группа настройки параметров торгового счета.
Заполнять не обязательно, если не используется уровень безопасной торговли, отличный от нулевого.
TheInitialAccountBalance — начальный баланс торгового счета.
AllowedAbsoluteDrawdownLevel -допустимый уровень абсолютной просадки, устанавливаемый
SafeTradingModeLevel — уровень безопасной торговли, задается в целых числах от 0 до 2:
0 — процентный риск считается от баланса торгового счета;
1 — процентный риск считается от рискового капитала, равного разнице баланса торгового счета и допустимого уровня абсолютной просадки;
2 и более — процентный риск считается от рискового капитала, равного разнице баланса торгового счета и допустимого уровня абсолютной просадки плюс размер плавающей прибыли относительно начального значения баланса торгового счета, взятой с ее знаком.
6. Группа параметров по коллективной работе роботов с эквити.
Данные параметры рекомендуется задавать на одном из пула роботов, торгующих на счете. Иначе при различных цифрах закрытие позиций будет производится по наименьшему из заданных значений выхода с прибыль. и по наибольшему из заданных значений выхода с убытком.
EquityProfitTarget — уровень целевого профита по эквити в единицах баланса торгового счета. Если ноль, то не включается. При достижении заданного уровня все открытые позиции закрываются, а работа пула роботов блокируется до задания нового уровня целей.
EquityStopLoss — уровень допускаемого плавающего убытка по эквити в единицах баланса торгового счета. При достижении заданного уровня все открытые позиции закрываются, а работа пула роботов блокируется до задания нового уровня.
TrailingStopEquitySizePerc — трейлинг прибыли по эквити. Задается в процентах. В момент запуска робота вычисляется порог включения трейлинга, равный стартовому значению эквити с добавлением размера трейлинга. При достижении порога включается режим слежения и трейлинг-стоп подтягивается вслед за ростом эквити. При развороте рынков и достижении уровня трейлинг-стопа все открытые позиции закрываются по рынку, но работа роботов не блокируется.
7. Мэджик-идентификатор.
Magic — мэджик-идентификатор обеспечивает возможность настройки различных копий роботов для одновременной работы на одном инструменте с разными конфигурациями параметров для различных типов торгуемых трендов. Значение по умолчанию 112358. Селекция позиций при их обработке экспертом производится по символу и мэджик-идентификатору. При желании трейдер может задавать свои значения идентификатора для работы различных версий советника с различными параметрами.
Замечания общего характера
Торгуя с помощью робота можно учитывать направление трендов старших уровней иерархии — краткосрочного, среднесрочного, долгосрочного и основного.
Если в результате анализа рынка мы решили, что тренды старших уровней иерархии утянут рынок вверх, или наоборот вниз, то можно настроить параметры торгуемого тренда, краткосрочного или среднесрочного, или выбрать режимы только лонг, или только шорт, предусмотренные в настройках робота.
Следует отметить, что выбор режима только лонг, или только шорт вместо направления соответствующего старшего тренда не блокирует закрытие позиций при реверсе трендов младших уровней иерархии. Это может ухудшать результаты работы.
Вот и все.
Мои извинения, если кого-то раздражали мои публикации на ресурсе по данной теме. Писал для себя, чтобы поставить точку над очередными проблемами. Цель этой публикации точно такая же - убедить собственный мозг, что работа закончена и можно об этом больше не думать.
И это не злорадство к Николаю.
Наоборот с большим уважением к его уму и настойчивости.
Просто рынок это страшнейшая штука и он ломает почти каждого.
forex-light, где вы увидели, что меня сломал рынок.
Те кто начинал со мной в одно время и сломан, давно ушли с горизонта.
Что касается индикаторов, я сделал намного больше и лучше, чем я хотел. Причем сам еще всех плюсов не обнаружил. Другие обнаруживают и подсказывают.
Относительно робота я сделал почти то, что хотел. И результат лучше, чем я ожидал в начале пути, но все-таки немного не такой по форме и содержанию, как я ожидал и планировал. Получился не автомат, а полуавтомат.
Желаю вам удачи Николай. Всегда с интересом читаю все ваши посты.
Sergey Pavlov, опять двадцать пять, стейтмент, эквити. Не бывает таких наборов параметров, которые работаю всегда и все время. Каждый инструмент и каждая ситуация уникальна. Каждое утро я задаю настройки на день по каждому инструменты, и при необходимости меняю их.
Бывают случаи, когда некоторые комбинации работают очень длительное время и достаточно хорошо. Но толку от этого ноль. Потому что никто не знает, когда эта работа прекратится, через 5 лет или через 5 минут. Второе намного более вероятно.
Если вам нужен робот, который работает всегда и сам знает что делать, то это не ко мне. Их нет у меня. Пройдитесь по рекламе. Как я уже писал, на каждом углу пачками продают. С распрекрасными тестами и стейтментами. И почти задаром, особенно учитывая прибыльность. Я ничего не продаю...
Если вам недостаточно тех тестов, которые я уже публиковал на смартлабе (тег SWT-робот), то вас ни в чем не убедят и несколько новых. Да я в общем-то и не ставлю цели кого-нибудь в чем-нибудь убеждать.
100 лет Вас читаю
lexlex, спасибо.
P.S. Я столько еще не прожил. :)
Григорий, прибыль у меня есть всегда. По крайней мере последние 8 лет.
Торгую не всегда. Только когда скучно и/или деньги нужны. Тяжелая это работа. Закончив работу над роботом решил немного поторговать на этой неделе. У Герчика.
Спреды понравились. Почти нулевые. Комиссия не нравится, все время забываю, что ее тоже нужно отбить. При скальпинге это иногда путает.
За два дня на пиво заработал.
Чёрный кот, не уперся, а сделал.
Да и стратегия рабочая. Одна из немногих.
«если в системе больше двух параметров то это уже подгон»
А оно вон как вышло