Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Понравилась статья? Поделись ею с друзьями!
Сергей Таболин
539
Сергей Таболин 2016.07.08 15:39 

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

Для иллюстрации приведу пример.

Есть советник со следующими входными параметрами:

input int      periodMA1         = 7;           // Период скользящих
input int      periodMA2         = 9;           // Период скользящих
input bool     use_stoch         = true;        // Подтверждать открытие ордера по стохастику?
input ENUM_MA_METHOD ma_method   = MODE_SMA;    // Тип сглаживания
input ENUM_STO_PRICE price_field = STO_LOWHIGH  // Способ расчета стохастика

Если запустить оптимизацию, то получим результат такого вида:

 

Как видно из 8-ми проходов значащими оказались только пять, а три - бесполезные. Тоесть, приблизительно 37% времени оптимизация проводила бесполезные проходы!

Я обратился в поддержку с предложением избавится от этих ненужных проходов оптимизации.

В моём видении это можно сделать добавив inputBLOC - inputEND 

input       int            periodMA1   = 7;           // Период скользящих
input       int            periodMA2   = 9;           // Период скользящих
inputBLOC   bool           use_stoch   = true;        // Подтверждать открытие ордера по стохастику?
  input     ENUM_MA_METHOD ma_method   = MODE_SMA;    // Тип сглаживания
  input     ENUM_STO_PRICE price_field = STO_LOWHIGH  // Способ расчета стохастика
inputEND

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

А если в советнике встречается несколько блоков, то ускорение оптимизации может достигать 80% !!! 

К сожалению, в поддержке эта идея не вызвала должного интереса. Мне предложили использовать и INIT_PARAMETERS_INCORRECT и фреймы и MD5 Cloud Decryptor , но это всё не то...

Уважаемые, как вы относитесь к этой идее? Нужна ли она вам, или она нужна только мне? )))

Я думаю, если вы поддержите это нововведение, то и разработчики, может быть, обратят на это внимание... 

George Merts
3526
George Merts 2016.07.08 18:01  

А почему INIT_PARAMETERS_INCORRECT - это "не то" ?

Я всегда использую это значение, чтобы исключить вот подобные проходы. У меня иногда, действительно, экономия получается больше половины.  Насколько я понимаю, при этом - проходов не проводится, и экономится ресурсы компьютера (или облака, если оптимизация через облако).

Добавление вот этой самой inputBLOC - вполне себе эквивалентно добавлению в функции Init() раздела, который будет анализировать входные параметры, и возвращать соответствующий результат.

Сергей Таболин
539
Сергей Таболин 2016.07.08 18:30  

Потому, что если выходить по use_stoch = false; то (в примере) пятого прохода тоже не будет... а должен быть )))

К тому же use_stoch = false - это допустимое значение. 

Stanislav Korotky
17333
Stanislav Korotky 2016.07.09 21:32  
Техподдержка все правильно говорит в данном случае: возвращайте INIT_PARAMETERS_INCORRECT при недопустимых сочетаниях параметров. Очевидно, что в вашем случае анализировать нужно не только один флаг стохастика.
Andrey Khatimlianskii
55846
Andrey Khatimlianskii 2016.07.10 16:09  
Stanislav Korotky:
Техподдержка все правильно говорит в данном случае: возвращайте INIT_PARAMETERS_INCORRECT при недопустимых сочетаниях параметров. Очевидно, что в вашем случае анализировать нужно не только один флаг стохастика.
Все равно останется минимум один ненужный проход на каждый такой набор — когда стохастик отключен и все его параметры по умолчанию. А остальные можно пропустить, конечно.
Сергей Таболин
539
Сергей Таболин 2016.07.10 19:13  

Хорошо. Ну подскажите КАК организовать такой выход, если подобных сочетаний несколько?

Например:

input int      periodMA1         = 7;           // Период скользящих
input int      periodMA2         = 9;           // Период скользящих
input bool     use_stoch         = true;        // Подтверждать открытие ордера по стохастику?
input ENUM_MA_METHOD ma_method   = MODE_SMA;    // Тип сглаживания
input ENUM_STO_PRICE price_field = STO_LOWHIGH  // Способ расчета стохастика
input bool     use_kooff         = true;        // Проверять большие свечи?
input double   kooff             = 3.0;         // Коффициент определения большой свечи

По параметрам use_stoch и use_kooff .....

Dmitry Fedoseev
42634
Dmitry Fedoseev 2016.07.11 04:40  
Stanislav Korotky:
Техподдержка все правильно говорит в данном случае: возвращайте INIT_PARAMETERS_INCORRECT при недопустимых сочетаниях параметров. Очевидно, что в вашем случае анализировать нужно не только один флаг стохастика.

Нет. INIT_PARAMETERS_INCORRECT это, например, если период быстрой МА больше периода медленной. Здесь другой случай. 

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

Хорошая идей в общем, еще бы, что бы панелька открывалась. Поставил основному параметры группы true - открылась панелька, поставил false - закрылась. 

Сергей Таболин
539
Сергей Таболин 2016.07.11 10:56  
Dmitry Fedoseev:

Хорошая идей в общем, еще бы, что бы панелька открывалась. Поставил основному параметры группы true - открылась панелька, поставил false - закрылась. 

Достаточно будет активны-неактивны...
Stanislav Korotky
17333
Stanislav Korotky 2016.07.11 11:54  
Dmitry Fedoseev:

Нет. INIT_PARAMETERS_INCORRECT это, например, если период быстрой МА больше периода медленной. Здесь другой случай. 

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

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

Предложенный способ выкрутиться - вполне рабочий. Какие проблемы с пропуском кучи проходов? При чем тут исходные значения, назначаемые пользователем? Тестер будет перебирать заданные диапазоны. Как правильно написал komposter, с отключенным стохастиком остнется по одному проходу для каждого сочетния прочих параметров (не считая нерабочие параметры стохастика), но они не будут лишними (тут komposter ошибся).

Nikolay Khrushchev
19163
Nikolay Khrushchev 2016.07.11 12:09  

int OnInit() {
   if(use_stoch && price_field!=STO_LOWHIGH) return(INIT_PARAMETERS_INCORRECT);
   }

в этом был вопрос?
Dmitry Fedoseev
42634
Dmitry Fedoseev 2016.07.11 13:34  
Stanislav Korotky:

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

Предложенный способ выкрутиться - вполне рабочий. Какие проблемы с пропуском кучи проходов? При чем тут исходные значения, назначаемые пользователем? Тестер будет перебирать заданные диапазоны. Как правильно написал komposter, с отключенным стохастиком остнется по одному проходу для каждого сочетния прочих параметров (не считая нерабочие параметры стохастика), но они не будут лишними (тут komposter ошибся).

Написал же почему это другой случай. 

Здесь дело не в неправильных значениях, а в том, что оптимизируются параметры, которые нет смысла оптимизировать. 

Допустим, у стохастика стоят параметры отличающиеся от дефолтных, выключаешь стохастик и все, все проходы будут пропускаться.   

/ /1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий