init() при оптимизации - страница 3

 
lna01:
lna01:
А я уже начал думать, не написать ли статью по оптимизации многострадального MACD Sample.mq4 по критерию Прибыль/Просадка :)

Ну в общем я это сделал :). В смысле набросал на коленке код, записывающий данные тестирования в файл, по окончании оптимизации читающий данные, сортирующий их по отношению Прибыль/Просадка и снова записывающий в тот же файл. Для разнообразия правда взял для опытов не MACD Sample а Moving Average. Вроде это нормально работает. 100 проходов оптимизации на 52890 барах по ценам открытия заняли у меня около 36 секунд, как в полном варианте, так и с закомментированными блоками, содержащими операции с файлами и глобальными переменными. Засекал правда вручную, но ясно, что разницы большой нет. Думаю с оптимизацией по читаемым из файла параметрам проблем тоже быть не должно, всё можно сделать аналогично. Советника прилагаю, но прошу не очень ругаться на стиль, неинтеллектульный способ перебора параметров, отсутствие комментариев и много ещё за что мне в этом коде совестно :) - просто хотел по быстрому проверить идею. При запуске нужно установить оптимизацию по параметру Counter от 1 до 100 с шагом 1. Что либо ещё делать с параметрами не советую :). Разве что досконально разобравшись в коде, но тогда и менять их и ни к чему уже будет.

Да, интересно, но как правильно сделать перебор параметров, при их количестве больше двух - нужно же проверить и TakeProfit и StopLoss и TrailingStop и  т. д.
 
Gull:
Да, интересно, но как правильно сделать перебор параметров, при их количестве больше двух - нужно же проверить и TakeProfit и StopLoss и TrailingStop и т. д.
Я думаю при большом числе параметров замахиваться на полный перебор не стоит. Можно например случайным образом выбирать значения из заданных диапазонов.
 
Gull:
lna01:
lna01:
А я уже начал думать, не написать ли статью по оптимизации многострадального MACD Sample.mq4 по критерию Прибыль/Просадка :)

Ну в общем я это сделал :). В смысле набросал на коленке код, записывающий данные тестирования в файл, по окончании оптимизации читающий данные, сортирующий их по отношению Прибыль/Просадка и снова записывающий в тот же файл. Для разнообразия правда взял для опытов не MACD Sample а Moving Average. Вроде это нормально работает. 100 проходов оптимизации на 52890 барах по ценам открытия заняли у меня около 36 секунд, как в полном варианте, так и с закомментированными блоками, содержащими операции с файлами и глобальными переменными. Засекал правда вручную, но ясно, что разницы большой нет. Думаю с оптимизацией по читаемым из файла параметрам проблем тоже быть не должно, всё можно сделать аналогично. Советника прилагаю, но прошу не очень ругаться на стиль, неинтеллектульный способ перебора параметров, отсутствие комментариев и много ещё за что мне в этом коде совестно :) - просто хотел по быстрому проверить идею. При запуске нужно установить оптимизацию по параметру Counter от 1 до 100 с шагом 1. Что либо ещё делать с параметрами не советую :). Разве что досконально разобравшись в коде, но тогда и менять их и ни к чему уже будет.

Да, интересно, но как правильно сделать перебор параметров, при их количестве больше двух - нужно же проверить и TakeProfit и StopLoss и TrailingStop и т. д.

Посмотри советник, который я выложил https://c.mql5.com/mql4/forum/2007/09/NeuroMA_MMM.mq4
 
lna01:
Gull:
Да, интересно, но как правильно сделать перебор параметров, при их количестве больше двух - нужно же проверить и TakeProfit и StopLoss и TrailingStop и  т. д.
Я думаю при большом числе параметров замахиваться на полный перебор не стоит. Можно например случайным образом выбирать значения из заданных диапазонов.


Если параметров 3-5, то не так уж это и много (если не раздувать количество их вариантов), а случайную выборку все равно нужно как-то организовать правильно,  чтобы чего-то не пропустить, а это даже сложнее. А хотелось бы иметь возможность интегрировать такую оптимизацию в любой советник с разумным числом параметров.
 
Vinin:
Gull:

lna01:

lna01:
А я уже начал думать, не написать ли статью по оптимизации многострадального MACD Sample.mq4 по критерию Прибыль/Просадка :)

Ну в общем я это сделал :). В смысле набросал на коленке код, записывающий данные тестирования в файл, по окончании оптимизации читающий данные, сортирующий их по отношению Прибыль/Просадка и снова записывающий в тот же файл. Для разнообразия правда взял для опытов не MACD Sample а Moving Average. Вроде это нормально работает. 100 проходов оптимизации на 52890 барах по ценам открытия заняли у меня около 36 секунд, как в полном варианте, так и с закомментированными блоками, содержащими операции с файлами и глобальными переменными. Засекал правда вручную, но ясно, что разницы большой нет. Думаю с оптимизацией по читаемым из файла параметрам проблем тоже быть не должно, всё можно сделать аналогично. Советника прилагаю, но прошу не очень ругаться на стиль, неинтеллектульный способ перебора параметров, отсутствие комментариев и много ещё за что мне в этом коде совестно :) - просто хотел по быстрому проверить идею. При запуске нужно установить оптимизацию по параметру Counter от 1 до 100 с шагом 1. Что либо ещё делать с параметрами не советую :). Разве что досконально разобравшись в коде, но тогда и менять их и ни к чему уже будет.

Да, интересно, но как правильно сделать перебор параметров, при их количестве больше двух - нужно же проверить и TakeProfit и StopLoss и TrailingStop и  т. д.

Посмотри советник, который я выложил https://c.mql5.com/mql4/forum/2007/09/NeuroMA_MMM.mq4

Просмотрел, спасибо. Оптимизация глобальных переменных по Criterion. Но, на мой взгляд - сложновато, да и при переборе с одним индексом не подойдет. По-моему должно быть по-проще - чем проще - тем надежнее.
 
Gull:

Если параметров 3-5, то не так уж это и много (если не раздувать количество их вариантов), а случайную выборку все равно нужно как-то организовать правильно, чтобы чего-то не пропустить, а это даже сложнее. А хотелось бы иметь возможность интегрировать такую оптимизацию в любой советник с разумным числом параметров.

Ну тогда вложенные циклы, что ещё. По сути множество наборов значений параметров будет многомерным (по числу параметров) массивом с общим размером равным произведению размеров измерений (то есть для полного перебора максимальному значению счётчика тестирований).

 

P.S. В смысле текущие значения индексов запоминать в файле или глобальных переменных. C запоминанием код будет проще. Но скорее всего не быстрее. В принципе можно и через / и % но там уже будет по идее как бы лестница диапазонов параметров. Пусть есть текущие значения индексов i, j, k и их диапазоны I, J, K. Тогда имеем

i = (Counter-1) % I

j = (Counter-1) / I % J

k = (Counter-1) / I / J

Ну и дальше симметрично можно достраивать.