Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Алексей же писал зависимость эту, а потом визуализировал.
Вам на каждом вызове FF нужно только сохранять ее значение в массив. Вот этот массив и надо визуализировать, что Алексей и делал.
И там для каждой итерации будет отлично видно, какое значение было у FF. И как разивалось все в динамике.
Может оказаться, что R сильнее в начале, но потом Ваш ГА разогревается и начинает отрываться. Или же сначала у Вас отрыв, а потом одинаковая скорость разрешения задачи.
Именно на таких графиках делаются сравнения алгоритмов. А не на одном значении.
Алексей по этой причине делал сотни тысяч итераций, потому что кому надо, посмотрит на графике результат для 20К, а кому-то интересно, на какой итерации решение на 50% происходит.
В общем, график очень информативен и необходим для сравнения оптимизационных алгоритмов. Но если не сделаете, сам сделаю, конечно. Т.к. без этого никуда.
Если есть время, напишите мне функцию для визуализации из числа новых библиотек МТ, встрою в ФФ - сама будет рисовать при её вызове. А заодно может и ALGLIBовскую библу посмотрите, добавим её тесты для сравнения.
Не уверен, что Вы правильно описываете то, о чем говорите. Наверное нужно не каждое значение вызванной ФФ рисовать, а только по мере увеличения?
Если есть время, напишите мне функцию для визуализации из числа новых библиотек МТ, встрою в ФФ - сама будет рисовать при её вызове.
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 ¶m []) export
{
// ...
SaveResult(ffVolue);
return (double(ffVolue));
}
Повторю вопрос:
Не уверен, что Вы правильно описываете то, о чем говорите. Наверное нужно не каждое значение вызванной ФФ рисовать, а только по мере увеличения?
Если выводить на граф каждую точку то получится так же, как в МТ5 при оптимизации - облако точек сходящееся к максимуму. Но у Бурнакова мы видим кривую линию, просто линию, значит он выводил на граф не то, что хотите Вы.
Не уверен, что Вы правильно описываете то, о чем говорите. Наверное нужно не каждое значение вызванной ФФ рисовать, а только по мере увеличения?
Именно это и вывожу в коде.
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", исправлена ошибка - вызывалась отсутствующая в библиотеке функция.
Почитал немного тему, я правильно понял задачу? -
Есть вектор букв "а,б,в,г,д,е,ё,.." , и нужно их перебором собрать фразу "мама мыла раму" (длинна фразы допустим N), подбирая каждую букву. Фразу, естественно, оптимизатор не знает, но может подать набор из N букв в фитнесс функцию чтоб узнать некую оценку этого набора.
Если да, то это очень плохой эксперимент, слабо связанный с оптимизацией, и тем более слабо с форексом.
Генетика, и большинство других алгоримов работают по принципу градиентного спуска. А ваша задача скорее отностися к перебору дискретных вариантов.
Хотите знать какой отличный алгоритм подойдёт для решения? Просто перебирать подряд каждую букву,
ааааааааааааааааааа
баааааааааааааааааа
ваааааааааааааааааа
гаааааааааааааааааа
итд.
Если в ключе 50 символа, то фраза из 1000 символов будет подобрана за 50*1000 попыток в худшем случае. В среднем: за 25000 попыток. И не нужно никакой генетики. Генетика будет очень сильно лажать в таком эксперименте, потому что градиентный спуск, её основа, тут будет бесполезен.
Крч такой любой алгоритм который победит в этом соревновании, будет бесполезен на форексе.
Если хотите серьёзно проверить свой оптимизатор, то возьмите такую функцию и найдите её минимум: http://www.sfu.ca/~ssurjano/rastr.html
Почитал немного тему
Ну вот, всё очень просто. Тестируйте, пожалуйста.
Крч такой любой алгоритм который победит в этом соревновании, будет бесполезен на форексе.
Если хотите серьёзно проверить свой оптимизатор, то возьмите такую функцию и найдите её минимум: http://www.sfu.ca/~ssurjano/rastr.html
Похоже Вы очень далеки от алгоритмов оптимизации вообще и га в частности... Очень.
Я перестал баловаться такими простыми функциями как по ссылке лет 5 назад, на этапе настройки своего алгоритма...
Скажу Вам так... Функцию, которая имеет гладкое поле (имеет производную в любой точке) может победить не особо напрягаясь ЛЮБОЙ алгоритм оптимизации. Это очень просто прощупывать непрерывную поверхность. Подобные простые функции пригодны лишь на первоначальной настройке алгоритма для выявления слабых и сильных сторон, но не более того (потому что на зашумлённых функциях проблематично делать настройку).
А вот функции имеющие ступени, долгие горизонтальные поверхности (когда ФФ не меняет значение в большом диапазоне параметров), нелинейные и рубленые, со множеством острых пиков, и тем более вообще не имеющие НИКАКОЙ зависимости между параметрами (фактически это просто шум, это поиск иголки на околоземной орбите) - с таким функциями справится может далеко не каждый алгоритм, но генетические алгоритмы одни из не многих, которые могут это делать, остальным необходимо наличие плавных спусков. Такие функции как раз и представляют собой результаты работы советников на финансовых рынках, когда изменение параметров приводит к скачкообразным изменениям ФФ, Пользователю только кажется, что полученные значения параметров лежат рядом и формируют "холмы", на самом деле это разные точки многомерной поверхности но поставленные рядом на плоскости.
Таким образом, алгоритм, победивший подобные хаотичные функции, справится с любым типом функций. В этом можете легко убедится самостоятельно. Для этого протестируйте прилагаемые алгоритмы на тестовых задачах, а так же испытайте свой алгоритм. Можете создать свою ФФ из примеров по Вашей ссылке, только потрудитесь сделать ФФ не 1-й 2-мя переменными как Вы предлагаете, "если хотите серъёзно проверить", а десятки, сотни, тысячи переменных, а потом сравните результаты своего алгоритма с представленными в этой ветке... Только не пропадайте потом, потому что Ваш алгоритм будет в общей таблице тестовой, если не боитесь находится на последней строчке.