Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Продавай продукты прямо в MetaTrader. Миллионы трейдеров ждут этого!
Forex Trader
114255
Forex Trader 2007.06.08 05:34 
При оптимизации советника столкнулся с проблеммой.
Допустим есть условие, при выполнении которого открывается ордер.
Если a1[n]>b1[m] и a2[n]<b2[m], тогда бай.
Если a1[n]<b1[m] и a2[n]>b2[m], тогда сел.
При этом n всегда должно быть больше m.

При прогоне в оптимизаторе со значениями n=1...100, m=1..100 получается 100000 циклов. Но если бы оптимизатору можно было бы указать, что при n<m набор данных не тестировать, то количество циклов уменьшилось бы в два раза, что при оптимизации без использования генетического алгоритма существенно сократило время.

Собственно вопрос - такая возможность в МТ присутствует? Если да, то как ей пользоваться? Если нет, то возможна ли её реализация в будующем?
Forex Trader
114255
Forex Trader 2007.06.08 09:22  
Задавайте в советнике цикл n=1...100, m=n+1...1000
Forex Trader
114255
Forex Trader 2007.06.08 12:51  
Если((a1[n]>b1[m]&&a2[n]<b2[m])||(n>m)) тогда бай
Если((a1[n]<b1[m]&&a2[n]>b2[m])||(n>m)) тогда сел
Forex Trader
114255
Forex Trader 2007.06.08 13:07  
Можно в начале функции start() написать

if (n<m) return (0); оптимизатор просто быстро сделает этот прогон
Forex Trader
114255
Forex Trader 2007.06.09 00:03  
Задавайте в советнике цикл n=1...100, m=n+1...1000

Если((a1[n]>b1[m]&&a2[n]<b2[m])||(n>m)) тогда бай
Если((a1[n]<b1[m]&&a2[n]>b2[m])||(n>m)) тогда сел

Мы наверно немного друг друга не поняли.

Можно в начале функции start() написать

if (n<m) return (0); оптимизатор просто быстро сделает этот прогон

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

Например, в С++ есть операторы оказывающие воздействие не на действие программы, а на действие самого компилятора. Есть ли в MQLе возможность написать указания для тестера стратегий?
Пример:

extern int n=0;
extern int m=0;

...

int tester ()      //Встроенная функция типа init() и deinit()
   {
   if (n<m) break; //Прерывает работу тестера на данном наборе данных и переходит к следующему.
   return(0);
   }



Такой именно функции конечно же нету, но есть ли возможность реализации чего-то подобного?

Forex Trader
114255
Forex Trader 2007.06.09 00:12  
Ваш случай только один множества возможных. Вспомните пример про сороконожку-что делает ее пятая правая нога, когда пятнадцатая левая опущена , а девятая правая в воздухе. Если Вам лень (или сложно) запрограммировать в советнике Ваше никчемное (на взгляд других пользователей MetaTrader 4) условие в советнике, то неужели Магомет должен подойти к Вам лично?
Forex Trader
114255
Forex Trader 2007.06.09 00:59  
1. Могу конечно ошибаться, но это будет полезно для большенства советников, которые работают с трендовой и сигнальной линиями, а таких не мало.
2. Запрограммировать условие мне не лень и я об этом написал выше, что использую этот способ.
3. Я абсолютно не требую "Магомет должен подойти к Вам лично". Я спросил есть ли такая возможность в МТ, потому что не очень хорошо знаком с возможностями MQL.
4. Мне конечно далеко до профессионального программиста, но насколько я представляю, реализовать эту возможность не очень сложно, на имеющейся базе. К тому же большинство используемых функций уже существуют.
5. Я не знаю кто вы такой товарищ Rosh, только вижу, что ваш ник выделен цветом, но мне кажется вы немного предвзято отнеслись к этому вопросу и немного не вежлево.

С уважением, Дмитрий.

З.Ы. Если честно, то я немного не понял пример с сороконожкой. :)
И на всякий случай для "новеньких" - вопрос не о работе советника, а о работе тестера стратегий.

"возможность реализации чего-то подобного?" - имеется ввиду текущие возможности тестера и MQL, а не написание новых функций для МТ программистами Metaquotes.
Forex Trader
114255
Forex Trader 2007.06.09 05:35  
Поддерживаю, мысль очень интересная - сделать в тестере условие, при котором во время оптимизации можно исключать ненужные прогоны.
Forex Trader
114255
Forex Trader 2007.06.10 10:02  

Мы наверно немного друг друга не поняли.

Можно в начале функции start() написать

if (n<m) return (0); оптимизатор просто быстро сделает этот прогон

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

Например, в С++ есть операторы оказывающие воздействие не на действие программы, а на действие самого компилятора. Есть ли в MQLе возможность написать указания для тестера стратегий?
Пример:

extern int n=0;
extern int m=0;

...

int tester ()      //Встроенная функция типа init() и deinit()
   {
   if (n<m) break; //Прерывает работу тестера на данном наборе данных и переходит к следующему.
   return(0);
   }



Такой именно функции конечно же нету, но есть ли возможность реализации чего-то подобного?




Идею понял (не сразу увидел), но не знаю насколько это востребовано и реализуемо на данный момент. Вчера провел замеры на своем компьютере (Celeron-2000 768 Mb ОЗУ), пустой прогон по Open Price на 60 000 баров занял около секунды. Конечно, при прогонах на миллионах баров это может вылиться в десяток/другой секунд на каждом пустом прогоне, просто я никогда этого не делал и не задумывался о такой необходимости. Возможно, бывают такие стратегии, оптимизация которых требует прохождения дырявых(ячеистых) множеств параметров. То есть , без этого , возможно, в некоторых случаях не обойтись. Разработчики MQL4 могут сказать более точно о возможности появления такой функции.
Forex Trader
114255
Forex Trader 2007.06.10 19:12  
Спасибо за ответ и извините за замечания. :)

Вставил в начале эксперта строчку
if (AccountBalance()>1) return (0);

Билд 206, тестирование - все тики, ТФ - D1, период - 01.01.03-01.06.07, Cel D 3.06 - 1Gb ОЗУ
20 циклов - 1мин 7 сек.

Итого если "левых" циклов 1000, то теряем почти 1 час.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий