Добрый день, товарищи программисты и трейдеры, натыкался на статью Автоматическая оптимизация торгового робота в процессе реальной торговли там автооптимизатор был реализован при помощи второго терминала-тестера, я же решил написать автооптимизатор, без использования второго терминала и даже без внешних .dll библиотек.
И так, кратко о идее, в советник, через внешние переменные, задаются какие-то параметры для индикаторов, соответственно советник начинает торговать, если последующая закрытая сделка прибыльная, то параметры остаются, но если убыточная, то включается автооптимизатор, я его реализовал функцией, которая на вход принимает диапазон / диапазоны входных значений индикаторов, а на выходе возвращает параметры, которые за заданный период, показали наибольший прирост, период автооптимизации задаётся так
Теперь проблемы, с которыми я столкнулся в процессе
1. Язык mql4 поддерживает многомерные массивы максимум с 4мя измерениями, соответственно больше 4х параметров автооптимизировать не получится. К сожалению не работал плотно с .dll поэтому, решений этой проблемы пока не вижу, надеюсь на помощь опытных программистов .
2. Процесс перебора параметров реализован обычный в виде последовательного цикла, что при использовании пользовательских индикаторов / большом периоде авооптимизации / большом диапазоне параметров индикаторов занимает приличное время, по крайней мере, в тестере. Решение проблемы вижу в изменении вида поиска параметров, например, как в встроенном в MT4 оптимизаторе генетическом алгоритме или подобным, более рациональным видам поиска, надеюсь на помощь опытных программистов.
Спасибо за внимание, проект автооптимизатора, постоянно дорабатывается лично мною, но, как говориться, одна голова хорошо, а две......, поэтому решил узнать, мнение форумчан.
Оговорюсь, это моя первая тема на форуме, поэтому просьба строго не судить.
Если кому удобнее общаться по эл. почте, то вот моя bistreevseh@gmail.com
Либо, с теми, кто проживает в Санкт-Петербурге, готов лично встретиться, ибо, считаю личное общение, самым лучшим видом связи, об этом, прошу договариваться, также по эл. почте.
приветствую!
так получилось что мне тоже сейчас понадобилась оптимизация для своего нового проекта
подумываю чем проще выкрутиться - нейросетями, численной оптимизацией аля 80-ых годов или же новомодной генетикой
касательно Ваших вопросов:
1. еще давно-давно рекомендовали как поступать с многомерностью:
просто создаете одномерный массив, все элементы кладете в один ряд последовательно и индексируете координаты
как будто матрицу укладываем в один вектор только матрица многомерная
2. про методы оптимизации
простым перебором - слишком неэффективно, случайным поиском - очень тупо, нужен умный алгоритм
в моем проекте тоже имеется многомерность поэтому сейчас решаю что выбрать
раньше я немного освоился с библиотекой ALGLIB https://www.mql5.com/ru/code/11077
там есть целый подраздел "оптимизация" но как мне кажется это годится только для аналитических функций
а численной оптимизации в этой библиотеке я не нашел (может быть плохо искал?)
зато есть нейросети, это может помочь
альтернатива - библиотека FANN https://www.mql5.com/ru/articles/1574
ну и наконец - генетика - есть интересная разработка: https://www.mql5.com/ru/code/9729
сейчас я потихоньку вкуриваю все три вышеперечисленных источника и думаю что лучше и проще
с удовольствием пообщаюсь на тему оптимизации итп
имхо оптимизировать нужно не после убыточной сделки а по какому-то другому рыночному событию
потому что профит в конкретной сделке может быть отчасти случайным в конце концов
просто создаете одномерный массив, все элементы кладете в один ряд последовательно и индексируете координаты
как будто матрицу укладываем в один вектор только матрица многомерная
Ребят, ну вы даёте! Такими костыльными методами действовать, имея в наличии удобные способы организации данных в виде классов/структур... MQL4 ведь уже давно усовершенствован, если вы не в курсе
Ребят, ну вы даёте! Такими костыльными методами действовать, имея в наличии удобные способы организации данных в виде классов/структур... MQL4 ведь уже давно усовершенствован, если вы не в курсе
согласен это конечно варварский метод но зато в рамках С без ООП
пользуясь случаем хочу спросить: - Алексей, а Ваш могучий индикатор chartbuilder будет обновляться?
под новыми билдами текущая версия уже не компилируется
согласен это конечно варварский метод но зато в рамках С без ООП
пользуясь случаем хочу спросить: - Алексей, а Ваш могучий индикатор chartbuilder будет обновляться?
под новыми билдами текущая версия уже не компилируется
Так тут об ООП речь как бы и не идёт. Хранение данных в структурах - это всё в рамках С. Кроме того, там мы можем выделять память произвольного размера и использовать указатель на неё, собственно как и создаются многомерные динамические массивы. А вот в MQL нельзя создавать указатели на массивы. Так что тут задача изначально сложнее, чем в настоящих языках программирования. А вы предлагаете ещё больше усугубить её и работать каменным топором :) Ну т.е. в старом MQL4 так и приходилось работать каменным топором за неимением других орудий, но щас то зачем?
p.s. Chartbuilder уже в принципе готов, отлаживаю сейчас
Так тут об ООП речь как бы и не идёт. Хранение данных в структурах - это всё в рамках С. Кроме того, там мы можем выделять память произвольного размера и использовать указатель на неё, собственно как и создаются многомерные динамические массивы. А вот в MQL нельзя создавать указатели на массивы. Так что тут задача изначально сложнее, чем в настоящих языках программирования. А вы предлагаете ещё больше усугубить её и работать каменным топором :) Ну т.е. в старом MQL4 так и приходилось работать каменным топором за неимением других орудий, но щас то зачем?
p.s. Chartbuilder уже в принципе готов, отлаживаю сейчас
ну, я не профессиональный программист и даже не математик, а самоучка, удивлен что нельзя делать указатели на массивы, я вроде бы делал, или это уже получается автоматически в новой версии языка? возможно Вы дадите ссылку как правильно работать с мнргомерными массивами? я пока встречался с вариантом когда массив определялся как структура... про индикатор - отличная новость! думаю не я один жду этого обновления
Ну да, одномерный числовой массив помещается в структуру и затем создаются массивы вложенных друг в друга массивов структур.
struct T1 { int a[]; } struct T2 { T1 a[]; } struct T3 { T2 a[]; } struct T4 { T3 a[]; } T3 Array3; // массив с тремя измерениями T4 Array4; // массив с четырьмя измерениями
Это метод создания массива с фиксированным числом измерений. Если же требуется массив с произвольным числом измерений, то здесь уже потребуются методы ООП (рекурсивный класс и полиморфизм).
Ну да, одномерный числовой массив помещается в структуру и затем создаются массивы вложенных друг в друга массивов структур.
Это метод создания массива с фиксированным числом измерений. Если же требуется массив с произвольным числом измерений, то здесь уже потребуются методы ООП (рекурсивный класс и полиморфизм).
только адресация элементов получается уж очень неудобная
например MATRIX[j].Set(total,MODEL[j]) - чтобы просто присвоить значение - ужос
"рекурсивный класс и полиморфизм" - качественный вынос мозга
с перегрузкой функций еще как-то разобрался, а это что-то запредельное...
только адресация элементов получается уж очень неудобная
например MATRIX[j].Set(total,MODEL[j]) - чтобы просто присвоить значение - ужос
Ну можно всё сделать значительно удобней. Например для моего примера:
struct T1 { int a[]; void Set(int i, int V) { a[i]=V; } int Get(int i) { return a[i]; } }; struct T2 { T1 a[]; void Set(int i,int j, int V) { a[i].Set(j,V); } int Get(int i,int j) { return a[i].Get(j); } }; struct T3 { T2 a[]; void Set(int i,int j,int k, int V) { a[i].Set(j,k,V); } int Get(int i,int j,int k) { return a[i].Get(j,k); } }; T3 Array; // массив с тремя измерениями
И получим простой доступ к элементам: Array. Set(n1, n2, n3, value) и Array.Get(n1, n2, n3).
Можно сделать ещё удобней, перегрузив оператор [], и будет доступ как к обычным элементам массива. Правда только на чтение, ибо для записи требуется чтобы функция возвращала ссылку на элемент, а MQL не поддерживает это.
Ну можно всё сделать значительно удобней. Например для моего примера:
И получим простой доступ к элементам: Array. Set(n1, n2, n3, value) и Array.Get(n1, n2, n3).
Можно сделать ещё удобней, перегрузив оператор [], и будет доступ как к обычным элементам массива. Правда только на чтение, ибо для записи требуется чтобы функция возвращала ссылку на элемент, а MQL не поддерживает это.
ой спасибо! вот что значит профессиональное знание!
возьму на вооружение

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
И так, кратко о идее, в советник, через внешние переменные, задаются какие-то параметры для индикаторов, соответственно советник начинает торговать, если последующая закрытая сделка прибыльная, то параметры остаются, но если убыточная, то включается автооптимизатор, я его реализовал функцией, которая на вход принимает диапазон / диапазоны входных значений индикаторов, а на выходе возвращает параметры, которые за заданный период, показали наибольший прирост, период автооптимизации задаётся так
Теперь проблемы, с которыми я столкнулся в процессе
1. Язык mql4 поддерживает многомерные массивы максимум с 4мя измерениями, соответственно больше 4х параметров автооптимизировать не получится. К сожалению не работал плотно с .dll поэтому, решений этой проблемы пока не вижу, надеюсь на помощь опытных программистов .
2. Процесс перебора параметров реализован обычный в виде последовательного цикла, что при использовании пользовательских индикаторов / большом периоде авооптимизации / большом диапазоне параметров индикаторов занимает приличное время, по крайней мере, в тестере. Решение проблемы вижу в изменении вида поиска параметров, например, как в встроенном в MT4 оптимизаторе генетическом алгоритме или подобным, более рациональным видам поиска, надеюсь на помощь опытных программистов.
Спасибо за внимание, проект автооптимизатора, постоянно дорабатывается лично мною, но, как говориться, одна голова хорошо, а две......, поэтому решил узнать, мнение форумчан.
Оговорюсь, это моя первая тема на форуме, поэтому просьба строго не судить.
Если кому удобнее общаться по эл. почте, то вот моя bistreevseh@gmail.com
Либо, с теми, кто проживает в Санкт-Петербурге, готов лично встретиться, ибо, считаю личное общение, самым лучшим видом связи, об этом, прошу договариваться, также по эл. почте.