торговая стратегия на базе Волновой теории Эллиота - страница 67

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

Конечно же спору нет что хотелось бы получить более быстрый алгоритм расчёта особенно для тестов на истории, но с другой стороны данная методика не требует многомиллионных проходов на тестере, как это требуется для традиционной подгонке на исторических данных, которой любят пользоваться большинство пользователей МТ4, усердно при этом наседая на создателей этого продукта (дайте таблеток от жадности да ПОБООООООЛЬШЕ!!!);o). Необходимо осознавать, что один прогон эксперта, созданного по данной методике в плане применимости результатов заведомо будет превосходить оптимизированный на 1000000000000 прогонах эксперт, результаты которого его автор в состоянии дождаться ещё в этой жизни;o))). Я просто это говорю по своему опыту создания системы случайного угадывания, описание которой кстати говоря я приводил в этой же ветке в её начале. Оптимизация эксперта, построенного на методах матстатистики, заключается в основном в логической доработке алгоритма с минимумом параметров для подбора (при этом каждый из параметров также имеет сильно ограниченную область для варьирования), а не в поиске каких-то "оптимальных" значений разных осцилляторов и мувингов, а также каких-то коэффициентов найденных на глобальном максимуме в n-мерном пространстве, как это требуется при стандартной подгонке по истории. Имеющийся результат, приведённый в постах выше, был получен при проведении наверное не более полусотни полных прогонов алгоритма по имеющейся истории. После каждого прогона алгоритм дорабатывался и дорабатывался. И в текущий момент времени я продолжаю заниматься тем же самым. Делаю по 2-3 прогона в день, анализирую результаты и дорабатываю алгоритм. Ещё далеко не всё отлажено, но первый более-менее рабочий вариант я уже запустил на реале. Пока что сделок на нём не было. Эксперт поджидает когда евро надумает развернуться вниз.
 
solandr, в целях ускорения/оптимизации времени тестирования - использовали кастом индикатор или массивы, содержащие X,X^2, и так далее?
 
Кастом индикаторы не использую, так как я писал, что каждый его вызов пробивается в логе тестера. Я внёс индикатор уровней Мюррея в сам эксперт. Ну массивы, специально ускоряющие расчёт эксперта я пока что не придумывал. Честно говоря не знаю что можно в этом плане придумать. Просто информация о расчёте предыдущих баров (границы каналов) естественно хранится в массивах и повторно не пересчитывается на новом баре. Думаю, что из своего алгоритма я уже практически всё выжал в плане ускорения и быстрее его уже не смогу сделать. А вот насчёт массивов, содержащих, содержащих X,X^2 мне не совсем понятно. Насколько поиск значений по большому массиву X,X^2 может сократить время расчётов (возведения в квадрат)? У Вас есть расчётные сравнительные данные? Было бы интересно с ними ознакомиться.
 
То есть для вида Y=A*X+B на каждом новом баре для каждого нового канала ?

Сейчас стал смотреть и понял - можно оптимизировать советника. Выигрыш должен составить в (N+1)/2 , где N - максимальная длина канала (у Вас используется в текущей версии 300 - значит выигрыш должен быть в 150 раз).
 
Насколько я понял Вы предлагаете организовать кубический массивчик каждый ряд которого будет составлять неколько миллионов и в нём искать готовые ответы Y при 3х разных параметрах A,X,B? Или же я видимо не совсем понял идею?
 
Нет, я просто предлагаю делать расчет на каждом баре только один раз, а потом использовать это значение N раз (массив образуется, несомненно :))
 
Как такое возможно, если каналы у нас на каждом баре перемещаются немножко, меняя свои границы?
 
Заменить алгоритм полностью я не смог (надо все-таки серьезно ковырять), но смог в обычный алгоритм вставить кусочек оптмизированного. То есть, все предварительные вычисления для оптимизированного алгоритма выполняются, но канал вычисляется обычным образом. Вот лог:
2006.07.04 23:04:37 ChannelStDev3 GBPCHF,M15: Выполняем deinit()
2006.07.04 23:04:37 ChannelStDev3 GBPCHF,M15: Время обычного скрипта+оптимизация579 ms
2006.07.04 23:04:36 ChannelStDev3 GBPCHF,M15: a=-0.0001 b=2.2628 lastBar1 firstBar=105 StDev=0.001
2006.07.04 23:04:36 ChannelStDev3 GBPCHF,M15: Найдено 140 каналов, удовлетворяющих критерию, на протяжении 1000 баров
2006.07.04 23:04:36 ChannelStDev3 GBPCHF,M15: Они находятся в 1 сериях
2006.07.04 23:04:36 ChannelStDev3 GBPCHF,M15: initialized
2006.07.04 23:04:35 ChannelStDev3 GBPCHF,M15: loaded successfully
2006.07.04 23:04:28 ChannelStDev GBPCHF,M15: removed
2006.07.04 23:04:28 ChannelStDev GBPCHF,M15: deinitialized
2006.07.04 23:04:28 ChannelStDev GBPCHF,M15: Выполняем deinit()
2006.07.04 23:04:28 ChannelStDev GBPCHF,M15: Время обычного скрипта 547 ms
2006.07.04 23:04:27 ChannelStDev GBPCHF,M15: a=-0.0001 b=2.2628 lastBar1 firstBar=105 StDev=0.001
2006.07.04 23:04:27 ChannelStDev GBPCHF,M15: Найдено 140 каналов, удовлетворяющих критерию, на протяжении 1000 баров


Таким образом, время оптимизированного алгоритма должно составлять примерно (579-547)=32 миллисекунды. Грубо выигрыш равен 547/32=17 раз. Это конечно не в 500 раз, как я предполагал, нужно еще проверять. Возможно, я не учел несжимаемые по времени процедуры, которые отъедают больше времени, чем я предполагал. Завтра постараюсь проверить.
 
Померил отдельно два блока вычислений.
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: deinitialized
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: Выполняем deinit()
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: a=0.0071 b=146.7474 lastBar1 firstBar=50 StDev=0.1056
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: Найдено 820 каналов, удовлетворяющих критерию, на протяжении 1000 баров
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: Они находятся в 8 сериях
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: Время обычного алгоритма390 ms
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: Время оптимизированного алгоритма0 ms
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15: initialized
2006.07.05 14:34:15 ChannelStDev3 EURJPY,M15: loaded successfully


Осталось убедиться, что оптимизированный блок вычисляет правильно. Заодно выяснил,что работа с объектами отъедает значительное время(почти треть неоптимизированного варианта) - рисовать при бек-тесте нежелательно. Хотя
 
Заново сделал, с Print'ом

14:54:04 ChannelStDev3 EURJPY,M15: k=64 a=0.002 b=146.8379 sigma=-1370529.6008
14:54:04 ChannelStDev3 EURJPY,M15: k=63 a=0.0025 b=146.829 sigma=-1348950.2071
14:54:04 ChannelStDev3 EURJPY,M15: k=62 a=0.0029 b=146.8197 sigma=-1327370.2369
14:54:04 ChannelStDev3 EURJPY,M15: k=61 a=0.0033 b=146.8105 sigma=-1305795.8008
14:54:04 ChannelStDev3 EURJPY,M15: k=60 a=0.0038 b=146.8016 sigma=-1284233.323
14:54:04 ChannelStDev3 EURJPY,M15: k=59 a=0.0042 b=146.7921 sigma=-1262664.9732
14:54:04 ChannelStDev3 EURJPY,M15: k=58 a=0.0046 b=146.7844 sigma=-1241133.5221
14:54:04 ChannelStDev3 EURJPY,M15: k=57 a=0.005 b=146.7769 sigma=-1219610.1431
14:54:04 ChannelStDev3 EURJPY,M15: k=56 a=0.0055 b=146.7678 sigma=-1198064.4492
14:54:04 ChannelStDev3 EURJPY,M15: k=55 a=0.0058 b=146.7611 sigma=-1176563.0841
14:54:04 ChannelStDev3 EURJPY,M15: k=54 a=0.0062 b=146.754 sigma=-1155059.1345
14:54:04 ChannelStDev3 EURJPY,M15: k=53 a=0.0066 b=146.7469 sigma=-1133558.635
14:54:04 ChannelStDev3 EURJPY,M15: k=52 a=0.007 b=146.7398 sigma=-1112061.7881
14:54:04 ChannelStDev3 EURJPY,M15: k=51 a=0.0073 b=146.7342 sigma=-1090593.6002
14:54:04 ChannelStDev3 EURJPY,M15: k=50 a=0.0074 b=146.7327 sigma=-1069186.857
14:54:04 ChannelStDev3 EURJPY,M15: k=49 a=0.0074 b=146.733 sigma=-1047808.1245
14:54:04 ChannelStDev3 EURJPY,M15: k=48 a=0.0073 b=146.7346 sigma=-1026446.748
14:54:04 ChannelStDev3 EURJPY,M15: k=47 a=0.0069 b=146.7404 sigma=-1005141.2611
14:54:04 ChannelStDev3 EURJPY,M15: k=46 a=0.0064 b=146.7494 sigma=-983876.6836
14:54:04 ChannelStDev3 EURJPY,M15: Время оптимизированного алгоритма 31 ms
14:54:05 ChannelStDev3 EURJPY,M15: Время обычного алгоритма 875 ms
14:54:05 ChannelStDev3 EURJPY,M15: Они находятся в 6 сериях
14:54:05 ChannelStDev3 EURJPY,M15: Найдено 824 каналов, удовлетворяющих критерию, на протяжении 1000 баров
14:54:05 ChannelStDev3 EURJPY,M15: a=0.0064 b=146.7494 lastBar1 firstBar=46 StDev=0.1044
14:54:05 ChannelStDev3 EURJPY,M15: Выполняем deinit()
14:54:05 ChannelStDev3 EURJPY,M15: deinitialized
14:54:05 ChannelStDev3 EURJPY,M15: removed


Правда, с сигмой проблемы :)
Причина обращения: