MQL4 - automated forex trading   /  

Code Base

Code Base  Советники  МTC "Сombo" Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый код

Этот индикатор для
MetaTrader 4

Мобильный трейдинг!
Купите лицензию и торгуйте мобильно

Имя:
МTC "Сombo" [ en ]
Автор: Reshetov (27.02.2008 09:54)
Рейтинг: 9
Скачано: 6165
Скачать:
 Combo_Right.mq4 (4.6 Kb) View
Постановка задачи для данной МТС звучит так:

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

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

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

Для этой цели была спроектирована двуслойная нейронная сеть, состоящая
из двух перцептронов нижнего слоя и одного перцептрона в слое верхнем.
Выход нейросети имеет три состояния:

  1. Вход в рынок длинной позицией
  2. Вход в рынок короткой позицией
  3. Неопределенное состояние

Собственно третье состояние - это передача управления БТС, в то время, как в первых двух торговые сигналы выдаются нейросетью.

Обучение нейросети разделено на три этапа, на каждом из которых
обучается один перцептрон. И на любом этапе обязательно присутствует
оптимизированная БТС, чтобы перцептроны знали, на что она способна.

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

Но самый первый этап, предваряющий обучение НС, состоит в оптимизации БТС.

Чтобы не запутаться, номер этапа заносится во входной параметр МТС c
идентификатором - pass. А идентификаторы входных параметров,
соответствующих номеру этапа заканчиваются на число равное этому самому
номеру.

Итак, предварительная подготовка к оптимизации и обучению НС. В в
тестере в свойствах эксперта, вкладка "Тестирование" установим
начальный депозит $1000000 (так, чтобы не создать искуственного
маржинколла во время оптимизации), оптимизируемый параметр "Balance" и
включим генетический алгоритм.

Переходим во вкладку "Входные параметры" свойств советника.
Устанавливаем размер лота открываемых позиций, присвоив идентификатору
lots значение 1.

Оптимизацию будем проводить по модели: "По ценам открытия (Быстрый метод на сформировавшихся барах, только для советников с явным контролем открытия баров).", поскольку такой контроль в алгоритме МТС присутствует.

Первый этап оптимизации. Оптимизация БТС:

Входному параметру pass устанавливаем значение 1.
Оптимизируем только входные параметры соответствующие первому этапу,
все идентификаторы которых заканчиваются единичкой, а следовательно
устанавливаем только на них галочки, оптимизации, и удаляем галочки со
всех остальных параметров.

tp1 - тейкпрофит БТС. Оптимизируется значениями от 10 до 100 с шагом 1
sl1 - стоплосс БТС. Оптимизируется значениями от 10 до 100 с шагом 1
p1 - период осциллятора CCI, который применяется в БТС. Оптимизируется значениями от 3 до 100 с шагом 1

После оптимизации БТС получаем результаты:


Второй этап. Обучение перцептрона отвечающего за короткие позиции:

Входному параметру pass придаем значение 2, т.е. соответствующее номеру этапа.
Убираем галочки оптимизации, выставленные на предыдущем этапе. Сохраняем, на всякий случай входные параметры, полученные на предыдущем этапе в файл.

Устанавливаем галочки оптимизации для параметров второго этапа, т.е. идентификаторы которых заканчиваются двойкой:

x12, x22, x32, x42 - весовые коэффициенты перцептрона, распознающего короткие позиции. Оптимизируются значениями от 0 до 200 с шагом 1.
tp2 - тейкпрофит позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1
sl2 - стоплосс позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1
p2 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1.

Запустим обучение через оптимизацию ГА. По завершении получаем результаты:

Третий этап. Обучение перцептрона отвечающего за длинные позиции:

Входному параметру pass придаем значение 3, т.е. соответствующее номеру этапа.
Убираем галочки оптимизации, выставленные на предыдущем этапе.
Сохраняем, на всякий случай входные параметры, полученные на предыдущем
этапе в файл.

Устанавливаем галочки оптимизации для параметров второго этапа, т.е. идентификаторы которых заканчиваются тройкой:

x13, x23, x33, x43 - весовые коэффициенты перцептрона, распознающего длинные позиции. Оптимизируются значениями от 0 до 200 с шагом 1.
tp3 - тейкпрофит позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1
sl3 - стоплосс позиций, открываемых перцептроном. Оптимизируется значениями от 10 до 100 с шагом 1
p3 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1.

Запустим обучение через оптимизацию ГА. По завершении получаем результаты:



Завершающий четвертый этап. Обучение первого слоя, т.е. перцептрона, который находится в верхнем слое:

Входному параметру pass придаем значение 4, т.е. соответствующее номеру этапа.
Убираем галочки оптимизации, выставленные на предыдущем этапе.
Сохраняем, на всякий случай входные параметры, полученные на предыдущем
этапе в файл.

Устанавливаем галочки оптимизации для параметров второго этапа, т.е. идентификаторы которых заканчиваются четверкой:

x14, x24, x34, x44 - весовые коэффициенты перцептрона первого слоя. Оптимизируются значениями от 0 до 200 с шагом 1.
p4 - период значений разницы цен, который анализируется перцептроном. Оптимизируется значениями от 3 до 100 с шагом 1.

Запустим обучение через оптимизацию ГА. По завершении получаем результаты:


Все, нейронная сеть обучена.

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

P.S.

  • Размер начального депозита определяется как абсолютная просадка умноженная на два, т.е. с запасом прочности.
  • Советник в исходниках не оптимизирован
  • Если возникнет необходимость заменить встроенную БТС , алгоритмом другой торговой системы, то необходимо изменить содержимое функции basicTradingSystem()
  • Чтобы не вводить вручную начальные, конечные значения и размеры шагов оптимизации, можно взять готовый файл combo.set и поместив его в папку \tester MT4, загрузить в свойствах советника в тестере.

  • Переоптимизация советника выполняется в выходные, т.е. в субботу или (либо) в воскресенье, но только в том случае, если результаты предыдущей недели были убыточными. Наличие убытков говорит, что рынок изменился и необходима переоптимизация. Наличие прибыли, говорит о том, что МТС не нуждается в переоптимизации и достаточно хорошо распознает рыночные паттерны
К сожалению? в начальную, выложенную здесь версию исходников закралась досадная ошибка: одна из закрывающихся фигурных скобок стояла не на месте, из-за чего 4 этап обучался и интерпретировался не корректно. Просьба ко всем, кто скачал файл Combo.mq4 обновиться до версии Combo_Right.


42 комментария: 1 2 3 4 5   Авторизуйтесь или зарегистрируйтесь, чтобы добавить новый комментарий
zxc писал(а):
Valio писал(а):

Попробовал и я прилодить руку с сему чуду. Парился неделю, и в базовой версии и дорабытывал алгоритм и несколько своих функций в  basicTradingSystem вставлял - т.е. переделывал "базовую БТС" на языке автора. Результаты по прогону на истории - фантастические: прибылность  от 8 до  12, мат.ожидание около 1000,  но это правда с моим индюком. тестировал на 1Н по еврэ, отрезок около полугода. На след. месяц после - результат

"На след. месяц после - результат"   ???

Valio, так какой-же результат у Вас получается в форварде? Очень интересно!

Просто я тоже переделал этого советника, и поначалу прибыльность по евре при оптимизации за год (даже не за полгода, а за год) по Н1 зашкаливала за 18 (и выше)!!! А вот форварды оказались, мягко говоря, не очень...

Сейчас, после очередной доработки, прибыльность при оптимизации стала ниже (около 10), но зато теперь достойно держит форвард (более 3-х месяцев). В форварде на участке более 3-х месяцев прибыльность составляет более 2,5. Продолжаю заниматься, думаю может получиться очень интересный эксперт.

можете скинуть свой наработки по этой мтске
24.09.2008 16:24 zan
Здравствуйте. я новичок в мтсках. можете написать свой изменения в комбо.хотелось бы посмотреть. заранее спасибо.
23.09.2008 22:52 zan
Это при работе советника постоянным лотом. ММ я ему пока не прикручивал.
11.05.2008 14:17 zxc
Valio писал(а):

Попробовал и я прилодить руку с сему чуду. Парился неделю, и в базовой версии и дорабытывал алгоритм и несколько своих функций в  basicTradingSystem вставлял - т.е. переделывал "базовую БТС" на языке автора. Результаты по прогону на истории - фантастические: прибылность  от 8 до  12, мат.ожидание около 1000,  но это правда с моим индюком. тестировал на 1Н по еврэ, отрезок около полугода. На след. месяц после - результат

"На след. месяц после - результат"   ???

Valio, так какой-же результат у Вас получается в форварде? Очень интересно!

Просто я тоже переделал этого советника, и поначалу прибыльность по евре при оптимизации за год (даже не за полгода, а за год) по Н1 зашкаливала за 18 (и выше)!!! А вот форварды оказались, мягко говоря, не очень...

Сейчас, после очередной доработки, прибыльность при оптимизации стала ниже (около 10), но зато теперь достойно держит форвард (более 3-х месяцев). В форварде на участке более 3-х месяцев прибыльность составляет более 2,5. Продолжаю заниматься, думаю может получиться очень интересный эксперт.

11.05.2008 14:05 zxc

Попробовал и я прилодить руку с сему чуду. Парился неделю, и в базовой версии и дорабытывал алгоритм и несколько своих функций в  basicTradingSystem вставлял - т.е. переделывал "базовую БТС" на языке автора. Результаты по прогону на истории - фантастические: прибылность  от 8 до  12, мат.ожидание около 1000,  но это правда с моим индюком. тестировал на 1Н по еврэ, отрезок около полугода. На след. месяц после - результат

08.05.2008 03:03 Valio

Переделанный мной combo из еле прибыльного советника, который давал +4000 с 10000 при динамическом лоте и 10% риска сделал 260000 с 1000 после оптимизации.

Правда я сделал упор на другое -- мой советник пытается с помощью нейронок обрезать убыточные ставки и работает только если есть сигнал с БТС.

Кстати, народ, советник под часовые тики, поставил точную модель, все 8 лет торгует по минутам, однако качество n\a что бы это значило???

05.04.2008 20:14 TheXpert
TheXpert писал(а):
Ugar писал(а):

Теперь посмотрим на "персептрон". Что это...?

Да просто быстрый стохастик с периодом p2. То есть сравниваем цены на расстоянии p2 и не вдаёмся в то что происходило в промежутках.

А весовые Х это попытки трактования значений этого стохастика.

Ну что мы получаем после оптимизации. p2=89 или около того, а это почти 4 суток. И мы не вдаёмся в то что происходило внутри. Мы всего то сравниваем разницу цен открытия на расстоянии 89 свечек. При попытке уменшить p2 до разумных размеров, например 3-10, получаем гарантированно убыточные результаты. И действительно это похоже на истину. Ведь одного стохастика маловато для прибыльной работы.

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

Резюме: Ну почти невероятно судить о движении цены в течении нескольких часов по четырём разницам цен с интервалом в 4 суток и не вдаваясь в то что происходило в эти промежутки. ИМХО результат пальцем в небо. В данном советнике работают 2 стохастика (2 слоя) фильтруя по &. Но это всё равно что принимать решение не по одной монетке, а по двум при совпадении орлов или решек. Это уменьшит количество решений, но не увеличит процент угадываний.

Можно попробовать по этой схеме реализовать персептрон уменьшив период до 2-3, а количство сегментов увеличить с 4 до 50.  Но такой зверь тестеру не по зубам.


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

Это всего лишь показательный пример того, как можно оптимизировать стратегии. Это не панацея.

Насчет 50 сегментов -- все реализуемо, только естественно, необходимо поменять подход, на MQL5 все легко и без проблем реализуемо даже с классическим нелинейным персептроном, не говоря уже про то, что реализовано в данном советнике.

Кроме того, в данном варианте советник НЕ обрезает количество ставок, он пытается торговать ВСЕГДА при отсутствии открытых лотов. Но принципы данного МТС это уже отдельный разгово

Если бы стохастик подбирался для БТС они бы работали одновременно и болжны быть включены по и\или. А в данной реализации БТС начинает работать только в в случае если персептрон молчит, вернее если 1 и 2 слои имеют противоположные значения.

Я пробовал убрать БТС  и запретить открываться когда слои не дружат что бы оценить работу чистого персептрона. Результат пальцем в небо. Как известно стохастик лучше работает по тренду чем против. По этому попробовал по & включить трендовый индикатор. Результаты значительно улучшились, но всё же слишком много случайности как показали вэк тесты.

Чес слово, ничего не имею против персептронов. Иначе небылоб меня тут. Но уже мозги дымятся. Пробовал по такой же реатизации разные индикаторы и даже комбинации из 6 персептронов 5 индюков и суммирующий. Результат немного лучше, но и этому я денег не доверю.

Может действительно нужно увеличивать количество сегментов? Слишком грубо работает 4х сегментный. Попробую...

Может кто имеет по больше знаний в персептронах и подскажет чё? А лучше пример кода на мыло или здесь.

05.04.2008 19:11 Ugar
Ugar писал(а):

Теперь посмотрим на "персептрон". Что это...?

Да просто быстрый стохастик с периодом p2. То есть сравниваем цены на расстоянии p2 и не вдаёмся в то что происходило в промежутках.

А весовые Х это попытки трактования значений этого стохастика.

Ну что мы получаем после оптимизации. p2=89 или около того, а это почти 4 суток. И мы не вдаёмся в то что происходило внутри. Мы всего то сравниваем разницу цен открытия на расстоянии 89 свечек. При попытке уменшить p2 до разумных размеров, например 3-10, получаем гарантированно убыточные результаты. И действительно это похоже на истину. Ведь одного стохастика маловато для прибыльной работы.

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

Резюме: Ну почти невероятно судить о движении цены в течении нескольких часов по четырём разницам цен с интервалом в 4 суток и не вдаваясь в то что происходило в эти промежутки. ИМХО результат пальцем в небо. В данном советнике работают 2 стохастика (2 слоя) фильтруя по &. Но это всё равно что принимать решение не по одной монетке, а по двум при совпадении орлов или решек. Это уменьшит количество решений, но не увеличит процент угадываний.

Можно попробовать по этой схеме реализовать персептрон уменьшив период до 2-3, а количство сегментов увеличить с 4 до 50.  Но такой зверь тестеру не по зубам.


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

Это всего лишь показательный пример того, как можно оптимизировать стратегии. Это не панацея.

Насчет 50 сегментов -- все реализуемо, только естественно, необходимо поменять подход, на MQL5 все легко и без проблем реализуемо даже с классическим нелинейным персептроном, не говоря уже про то, что реализовано в данном советнике.

Кроме того, в данном варианте советник НЕ обрезает количество ставок, он пытается торговать ВСЕГДА при отсутствии открытых лотов. Но принципы данного МТС это уже отдельный разговор.

05.04.2008 16:26 TheXpert

Чёт вааще бред какойта ИМХО.

sl и tp в диаппазоне 100 писов. Ну к примеру ленивая пара EUR 100 пипсов проходит от пары часов до пары суток. Значит работаем на часах.

То есть нам нужен прогноз на 3-4 часа принормальной активность и 24-48 часов при ленивом рынке.

Теперь посмотрим на "персептрон". Что это...?

double a1 = Close[0] - Open[p2];
double a2 = Open[p2] - Open[p2 * 2];
double a3 = Open[p2 * 2] - Open[p2 * 3];
double a4 = Open[p2 * 3] - Open[p2 * 4];
Да просто быстрый стохастик с периодом p2. То есть сравниваем цены на расстоянии p2 и не вдаёмся в то что происходило в промежутках.

А весовые Х это попытки трактования значений этого стохастика.

Ну что мы получаем после оптимизации. p2=89 или около того, а это почти 4 суток. И мы не вдаёмся в то что происходило внутри. Мы всего то сравниваем разницу цен открытия на расстоянии 89 свечек. При попытке уменшить p2 до разумных размеров, например 3-10, получаем гарантированно убыточные результаты. И действительно это похоже на истину. Ведь одного стохастика маловато для прибыльной работы.

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

Резюме: Ну почти невероятно судить о движении цены в течении нескольких часов по четырём разницам цен с интервалом в 4 суток и не вдаваясь в то что происходило в эти промежутки. ИМХО результат пальцем в небо. В данном советнике работают 2 стохастика (2 слоя) фильтруя по &. Но это всё равно что принимать решение не по одной монетке, а по двум при совпадении орлов или решек. Это уменьшит количество решений, но не увеличит процент угадываний.

Можно попробовать по этой схеме реализовать персептрон уменьшив период до 2-3, а количство сегментов увеличить с 4 до 50.  Но такой зверь тестеру не по зубам.

05.04.2008 00:17 Ugar
TheXpert писал(а):

Вся логика находится внутри супервизора, он физически не может отдать сразу два противоположных сигнала. Впрочем, не суть.

if (pass == 2) {
 
написать
 
if (pass >= 2) {

Вся логика внутри супервизора не может, потому что всецело зависит от переменной pass.

Прежде чем вы напишите свой эксперт предлагаю подумать над слудующими вопросами. Предположим Вы реализуете работу всего эксперта только через if (pass >= 2) { , но при этом доступ ко второму перцептрону оставите в виде if (pass == 3) { , что получится при обращении к процедуре супервизор? Если pass=1 - то перцептроны будут отключены, и будет работать только БТС. Если pass=2 - то будет работать перцептрон 1 + БТС. Если pass=3 - то будет работать перцептрон 2 + БТС, до 1-го перцептрона просто недойдёт, потому что установлены выходы из процедуры Supervisor()  по return( , либо при сигнале от перцептрона, либо при обработке БТС - всё равно выход. Если же при такой реализации установить pass=4 или более - то будет работать ТОЛЬКО перцептрон 1 + БТС, всё по тем же вышеописанным причинам.

Если же реализовать также и if (pass >= 3) { , то по тем же вышеописаным причинам при pass=4 или более  - будет работать ТОЛЬКО перцептрон 2 + БТС. До первого просто доходить не будет, потому что return(  первой проверки обязательно сработает. Такая запись будет просто некорректной.

02.04.2008 20:46 Kadet