MetaTrader 5 Strategy Tester! - страница 66

 
fxsaber:

Алексей же писал зависимость эту, а потом визуализировал.

Вам на каждом вызове FF нужно только сохранять ее значение в массив. Вот этот массив и надо визуализировать, что Алексей и делал.

И там для каждой итерации будет отлично видно, какое значение было у FF. И как разивалось все в динамике.

Может оказаться, что R сильнее в начале, но потом Ваш ГА разогревается и начинает отрываться. Или же сначала у Вас отрыв, а потом одинаковая скорость разрешения задачи.

Именно на таких графиках делаются сравнения алгоритмов. А не на одном значении.

Алексей по этой причине делал сотни тысяч итераций, потому что кому надо, посмотрит на графике результат для 20К, а кому-то интересно, на какой итерации решение на 50% происходит.

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

Если есть время, напишите мне функцию для визуализации из числа новых библиотек МТ, встрою в ФФ - сама будет рисовать при её вызове. А заодно может и ALGLIBовскую библу посмотрите, добавим её тесты для сравнения.

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

 
Andrey Dik:

Если есть время, напишите мне функцию для визуализации из числа новых библиотек МТ, встрою в ФФ - сама будет рисовать при её вызове.

double Result[]; // Данные для графика

void SaveResult( const double Res )
{
  static double BestRes = -DBL_MAX;
  
  if (Res > BestRes)
    BestRes = Res;
    
  const int Size = ArraySize(Result);
  
  ArrayResize(Result, Size + 1, 1000000);
  
  Result[Size] = BestRes;
  
  return;
}

double FF (double &param []) export
{
// ...

  SaveResult(ffVolue);
  
  return (double(ffVolue));
}
Это так же просто, как и визуализация через GraphPlot. Но только у разработчиков там баг - не может выводить больше данных, чем пикселей в ширину. В новом билде поправят, тогда можно будет сразу выводить. А пока массив можно скидывать в файл через
FileSave("Data.csv", Result);
И визуализировать, где удобней.
 
fxsaber:

Повторю вопрос:

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

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

 
Andrey Dik:

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

Именно это и вывожу в коде.
 
fxsaber:
Именно это и вывожу в коде.
Хорошо. Добавлю сохранение значений ФФ в файл - по каждому обращению и по лучшим значениям, в 2 отдельных файла.
 

A) Что бы протестировать штатный алгоритм оптимизации нужно:

1. Выбрать исходник библиотеки из трех представленных ФФ "FFtext*" (или написать свою ФФ по примеру этих файлов). Скомпилировать, полученный файл библиотеки переименовать в ff.ex5

2. Скомпилировать исходник скрипта "AO from MQ source creator (script).mq5", запустить, скрипт прочитает библиотеку полученную в п.1, определит параметры, и сгенерирует исходный файл эксперта "AO from MQ (expert).mq5" и файл настроек к нему "AO from MQ (parameters).set". Таким образом мы получаем очень быстро и легко тестовый советник для оптимизации ФФ, которую мы создали в п.1

3. Открыть в оптимизаторе полученный в п.2 советник, зайти во вкладку "Параметры" и загрузить файл настроек полученный в п.2

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

 

B) Что бы протестировать  алгоритм оптимизации от Joo (или любой другой) нужно:

1. Проделать то же, что и в A) п.1

2. Скомпилировать скрипт  "AO runner (script).mq5".

3. Сделать копию файла "Joo AO lib.ex5", копию переименовать в "ao.ex5". Или создать свой алгоритм оптимизации, скомпилировать и назвать полученный файл "ao.ex5".

4. Опционально подключится к серверу MetaQuotes, Логин: "4533571",  Инвестор: "exej4axl". Для тех, у кого алгоритм оптимизации своего изготовления - подключаться к счету 4533571 не нужно.

5. Запустить оптимизацию и дождаться результата. 

 

Ну вот, всё очень просто. Тестируйте, пожалуйста. 

Скрипт для теста кастомных алгоритмов оптимизации вызывает в конце теста функцию сохранения всех промежуточных и лучших результатов из ФФ в файл. Любители строить графики будут довольны. ))  

 

Добавлено.

Заменён файл  "AO from MQ source creator (script).mq5", исправлена ошибка - вызывалась отсутствующая в библиотеке функция. 

Распределенные вычисления в сети MQL5 Cloud Network
Распределенные вычисления в сети MQL5 Cloud Network
  • cloud.mql5.com
Заработать деньги, продавая мощности своего компьютера для сети распределенных вычислений MQL5 Cloud Network
 

Почитал немного тему, я правильно понял задачу? -

Есть вектор букв "а,б,в,г,д,е,ё,.." , и нужно их перебором собрать фразу "мама мыла раму" (длинна фразы допустим N), подбирая каждую букву. Фразу, естественно, оптимизатор не знает, но может подать набор из N букв в фитнесс функцию чтоб узнать некую оценку этого набора.

Если да, то это очень плохой эксперимент, слабо связанный с оптимизацией, и тем более слабо с форексом.


Генетика, и большинство других алгоримов работают по принципу градиентного спуска. А ваша задача скорее отностися к перебору дискретных вариантов.
Хотите знать какой отличный алгоритм подойдёт для решения? Просто перебирать подряд каждую букву, 
ааааааааааааааааааа
баааааааааааааааааа
ваааааааааааааааааа
гаааааааааааааааааа
итд.

Если в ключе 50 символа, то фраза из 1000 символов будет подобрана за 50*1000 попыток в худшем случае. В среднем: за 25000 попыток. И не нужно никакой генетики. Генетика будет очень сильно лажать в таком эксперименте, потому что градиентный спуск, её основа, тут будет бесполезен.
Крч такой любой алгоритм который победит в этом соревновании, будет бесполезен на форексе.

 

Если хотите серьёзно проверить свой оптимизатор, то возьмите такую функцию и найдите её минимум: http://www.sfu.ca/~ssurjano/rastr.html

Rastrigin Function
  • www.sfu.ca
Dimensions: d The Rastrigin function has several local minima. It is highly multimodal, but locations of the minima are regularly distributed. It is shown in the plot above in its two-dimensional form. Input Domain: The function is usually evaluated on the hypercube xi ∈ [-5.12, 5.12], for all i = 1, …, d. Global Minimum: Code: References...
 
Dr.Trader:

Почитал немного тему

Вы слишком немного почитали. Школьный алгоритм обсуждался несколько страниц назад с Алексеем.
 
Andrey Dik:

Ну вот, всё очень просто. Тестируйте, пожалуйста. 

Освобожусь, поделюсь тестами у себя.
 
Dr.Trader:

Крч такой любой алгоритм который победит в этом соревновании, будет бесполезен на форексе.

Если хотите серьёзно проверить свой оптимизатор, то возьмите такую функцию и найдите её минимум: http://www.sfu.ca/~ssurjano/rastr.html

Похоже Вы очень далеки от алгоритмов оптимизации вообще и га в частности... Очень.

Я перестал баловаться такими простыми функциями как по ссылке лет 5 назад, на этапе настройки своего алгоритма...

Скажу Вам так... Функцию, которая имеет гладкое поле (имеет производную в любой точке) может победить не особо напрягаясь ЛЮБОЙ алгоритм оптимизации. Это очень просто прощупывать непрерывную поверхность. Подобные простые функции пригодны лишь на первоначальной настройке алгоритма для выявления слабых и сильных сторон, но не более того (потому что на зашумлённых функциях проблематично делать настройку).

А вот функции имеющие ступени, долгие горизонтальные поверхности (когда ФФ не меняет значение в большом диапазоне параметров), нелинейные и рубленые, со множеством острых пиков, и тем более вообще не имеющие НИКАКОЙ зависимости между параметрами (фактически это просто шум, это поиск иголки на околоземной орбите) - с таким функциями справится может далеко не каждый алгоритм, но генетические алгоритмы одни из не многих, которые могут это делать, остальным необходимо наличие плавных спусков. Такие функции как раз и представляют собой результаты работы советников на финансовых рынках, когда изменение параметров приводит к скачкообразным изменениям ФФ, Пользователю только кажется, что полученные значения параметров лежат рядом и формируют "холмы", на самом деле это разные точки многомерной поверхности но поставленные рядом на плоскости.

Таким образом, алгоритм, победивший подобные хаотичные функции, справится с любым типом функций. В этом можете легко убедится самостоятельно. Для этого протестируйте прилагаемые алгоритмы на тестовых задачах, а так же испытайте свой алгоритм. Можете создать свою ФФ из примеров по Вашей ссылке, только потрудитесь сделать ФФ не 1-й 2-мя переменными как Вы предлагаете, "если хотите серъёзно проверить", а десятки, сотни, тысячи переменных, а потом сравните результаты своего алгоритма с представленными в этой ветке... Только не пропадайте потом, потому что Ваш алгоритм будет в общей таблице тестовой, если не боитесь находится на последней строчке.