У вас не стоит Flash Player
Настройки
#17569 - Tue Nov 30 2010 08:56 AM Ненужный пересчет индикатора при оптимизации
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Написал на API свой индикатор. Реализовал сначала "на кубиках", а за тем и в виде "внешнего скрипта" простую стратегию, включающую другие индикаторы.
Начал оптимизировать по параметрам от которых мой индикатор НЕ ЗАВИСИТ.
При этом, в отладчике вижу, что на каждом шаге оптимизации, выполняется пересчет моего индикатора. Зачем?! Его значения не изменятся, поскольку он никак не зависит от оптимизируемых параметров.

На каждом шаге оптимизации в начале Execute(...) значения
context.m_doublesCache.m_cache.Count == 0
Зачем чистить кэш на каждом шаге при оптимизации стратегий?! Это расточительство.
Так же непонятно почему:
context.IsOptimization == false

Поясните, пожалуйста, ситуацию.

context.GetData("мой индикатор"...) использую; памяти в настройках программы указал достаточное кол-во.
TSLab 1.1.15.0. Windows 7x64.

Наверх
#17604 - Wed Dec 01 2010 05:15 AM Re: Ненужный пересчет индикатора при оптимизации [Re: jhgjrht]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Продолжил терзать оптимизацию.
Реализовал в коде собственный кэш, проверил как оптимизируется система и опять все не так как надо smile
Вот часть лога программы:
04:43:52.63[14]DEBUG:Длительность работы IExternalScript.Execute(...): 00:00:00.1157755
04:43:52.63[14]INFO :Длительность работы IExternalScript.Execute(...): 00:00:00.1157755
04:43:52.63[14]DEBUG:Initialization is stopped.
04:45:18.57[Optimization Control]DEBUG:Длительность работы IExternalScript.Execute(...): 00:00:00.0070918
04:45:18.57[Optimization Control]INFO :Длительность работы IExternalScript.Execute(...): 00:00:00.0070918
04:45:19.63[7]DEBUG:Длительность работы IExternalScript.Execute(...): 00:00:00.0067871
04:45:19.63[7]INFO :Длительность работы IExternalScript.Execute(...): 00:00:00.0067871
04:45:20.73[4]DEBUG:Длительность работы IExternalScript.Execute(...): 00:00:00.0069621
04:45:20.73[4]INFO :Длительность работы IExternalScript.Execute(...): 00:00:00.0069621
04:45:21.87[7]DEBUG:Длительность работы IExternalScript.Execute(...): 00:00:00.0056902
04:45:21.87[7]INFO :Длительность работы IExternalScript.Execute(...): 00:00:00.0056902
04:45:22.87[14]DEBUG:Длительность работы IExternalScript.Execute(...): 00:00:00.0084375
04:45:22.87[14]INFO :Длительность работы IExternalScript.Execute(...): 00:00:00.0084375
04:45:23.89[14]DEBUG:Длительность работы IExternalScript.Execute(...): 00:00:00.0825523
04:45:23.89[14]INFO :Длительность работы IExternalScript.Execute(...): 00:00:00.0825523
04:45:24.82[14]DEBUG:Длительность работы IExternalScript.Execute(...): 00:00:00.0058166
04:45:24.82[14]INFO :Длительность работы IExternalScript.Execute(...): 00:00:00.0058166
04:45:25.79[14]DEBUG:Длительность работы IExternalScript.Execute(...): 00:00:00.0054922
04:45:25.79[14]INFO :Длительность работы IExternalScript.Execute(...): 00:00:00.0054922
04:45:26.71[14]DEBUG:Длительность работы IExternalScript.Execute(...): 00:00:00.0055155
04:45:26.71[14]INFO :Длительность работы IExternalScript.Execute(...): 00:00:00.0055155

Почему длительность работы процедуры внешнего (моего) скрипта менее 10 миллисекунд, а длительность шага оптимизации программы почти секунда?
Чем занимается программа оставшуюся часть секунды (99 процентов времени)? Ждет?
Это либо ошибка, либо существенная недоработка в TSLab.

Уважаемые, не хотите значительно ускорить оптимизацию стратегий (в данном простом случае почти на порядок)?

Наверх
#17614 - Wed Dec 01 2010 12:20 PM Re: Ненужный пересчет индикатора при оптимизации [Re: jhgjrht]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Слишком мало информации, чтобы можно было дать какой-то ответ. Не могли бы вы подробней описать, что вы делали. Возможно привести код.

Наверх
#17663 - Thu Dec 02 2010 08:08 AM Re: Ненужный пересчет индикатора при оптимизации [Re: Nektodron]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Пожалуйста:

Использовал скрипт "Hi_Lo", поставляемый вместе с программой. Сделал (скопировал из временных файлов,
генерируемых программой, немного отредактировал и скомпилировал) из него сборку для "внешнего скрипта"
и сравнил длительность оптимизации начального (на кубиках) и полученного скриптов.
Параметры и результаты:

Источник: 5 минутки индекса RTS текстовый файл с Финам
Количество потоков оптимизации: 1
баров: 106792
оптимизация по всем параметрам. Шагов: 130321


скрипт на кубиках: HiLoScript.xml
примерное время оптимизации: меньше 70 часов

внешний скрипт: HiLoApiScript.xml
примерное время оптимизации: больше 100 часов


Часть лога процесса оптимизации внешний скрипта:
07:50:26.72[Optimization Control]DEBUG:Start IExternalScript.Execute(...): 07:50:26.729
07:50:26.72[Optimization Control]INFO :Start IExternalScript.Execute(...): 07:50:26.729
07:50:29.13[Optimization Control]DEBUG:Finish IExternalScript.Execute(...): 07:50:29.131 Duration: 00:00:02.4024849
07:50:29.13[Optimization Control]INFO :Finish IExternalScript.Execute(...): 07:50:29.131 Duration: 00:00:02.4024849
07:50:30.21[7]DEBUG:Start IExternalScript.Execute(...): 07:50:30.210
07:50:30.21[7]INFO :Start IExternalScript.Execute(...): 07:50:30.210
07:50:31.94[7]DEBUG:Finish IExternalScript.Execute(...): 07:50:31.947 Duration: 00:00:01.7369472
07:50:31.94[7]INFO :Finish IExternalScript.Execute(...): 07:50:31.947 Duration: 00:00:01.7369472
07:50:33.07[9]DEBUG:Start IExternalScript.Execute(...): 07:50:33.075
07:50:33.07[9]INFO :Start IExternalScript.Execute(...): 07:50:33.075
07:50:35.24[9]DEBUG:Finish IExternalScript.Execute(...): 07:50:35.245 Duration: 00:00:02.1707495
07:50:35.24[9]INFO :Finish IExternalScript.Execute(...): 07:50:35.245 Duration: 00:00:02.1707495
07:50:36.37[9]DEBUG:Start IExternalScript.Execute(...): 07:50:36.376
07:50:36.37[9]INFO :Start IExternalScript.Execute(...): 07:50:36.376
07:50:38.91[9]DEBUG:Finish IExternalScript.Execute(...): 07:50:38.912 Duration: 00:00:02.5357628
07:50:38.91[9]INFO :Finish IExternalScript.Execute(...): 07:50:38.912 Duration: 00:00:02.5357628
07:50:39.99[9]DEBUG:Start IExternalScript.Execute(...): 07:50:39.991
07:50:39.99[9]INFO :Start IExternalScript.Execute(...): 07:50:39.991
07:50:41.52[9]DEBUG:Finish IExternalScript.Execute(...): 07:50:41.524 Duration: 00:00:01.5335921
07:50:41.52[9]INFO :Finish IExternalScript.Execute(...): 07:50:41.524 Duration: 00:00:01.5335921
07:50:42.64[9]DEBUG:Start IExternalScript.Execute(...): 07:50:42.643
07:50:42.64[9]INFO :Start IExternalScript.Execute(...): 07:50:42.643
07:50:45.20[9]DEBUG:Finish IExternalScript.Execute(...): 07:50:45.201 Duration: 00:00:02.5567721
07:50:45.20[9]INFO :Finish IExternalScript.Execute(...): 07:50:45.201 Duration: 00:00:02.5567721
07:50:46.34[9]DEBUG:Start IExternalScript.Execute(...): 07:50:46.349
07:50:46.34[9]INFO :Start IExternalScript.Execute(...): 07:50:46.349
07:50:48.25[9]DEBUG:Finish IExternalScript.Execute(...): 07:50:48.256 Duration: 00:00:01.9071163
07:50:48.25[9]INFO :Finish IExternalScript.Execute(...): 07:50:48.256 Duration: 00:00:01.9071163
07:50:49.39[9]DEBUG:Start IExternalScript.Execute(...): 07:50:49.390
07:50:49.39[9]INFO :Start IExternalScript.Execute(...): 07:50:49.390
07:50:52.09[9]DEBUG:Finish IExternalScript.Execute(...): 07:50:52.070 Duration: 00:00:02.6802526
07:50:52.09[9]INFO :Finish IExternalScript.Execute(...): 07:50:52.070 Duration: 00:00:02.6802526


баров: 3256
оптимизация по всем параметрам. Шагов: 130321


скрипт на кубиках: HiLoScript.xml
примерное время оптимизации: меньше 4 часов

внешний скрипт: HiLoApiScript.xml
примерное время оптимизации: больше 40 часов


Часть лога процесса оптимизации внешний скрипта:
07:54:11.74[Optimization Control]DEBUG:Finish IExternalScript.Execute(...): 07:54:11.748 Duration: 00:00:00.1154601
07:54:11.74[Optimization Control]INFO :Finish IExternalScript.Execute(...): 07:54:11.748 Duration: 00:00:00.1154601
07:54:12.77[7]DEBUG:Start IExternalScript.Execute(...): 07:54:12.778
07:54:12.77[7]INFO :Start IExternalScript.Execute(...): 07:54:12.778
07:54:12.81[7]DEBUG:Finish IExternalScript.Execute(...): 07:54:12.818 Duration: 00:00:00.0396271
07:54:12.81[7]INFO :Finish IExternalScript.Execute(...): 07:54:12.818 Duration: 00:00:00.0396271
07:54:13.84[7]DEBUG:Start IExternalScript.Execute(...): 07:54:13.848
07:54:13.84[7]INFO :Start IExternalScript.Execute(...): 07:54:13.848
07:54:13.94[7]DEBUG:Finish IExternalScript.Execute(...): 07:54:13.948 Duration: 00:00:00.1003444
07:54:13.94[7]INFO :Finish IExternalScript.Execute(...): 07:54:13.948 Duration: 00:00:00.1003444
07:54:14.99[9]DEBUG:Start IExternalScript.Execute(...): 07:54:14.991
07:54:14.99[9]INFO :Start IExternalScript.Execute(...): 07:54:14.991
07:54:15.10[9]DEBUG:Finish IExternalScript.Execute(...): 07:54:15.107 Duration: 00:00:00.1158139
07:54:15.10[9]INFO :Finish IExternalScript.Execute(...): 07:54:15.107 Duration: 00:00:00.1158139
07:54:16.19[9]DEBUG:Start IExternalScript.Execute(...): 07:54:16.196
07:54:16.19[9]INFO :Start IExternalScript.Execute(...): 07:54:16.196
07:54:16.23[9]DEBUG:Finish IExternalScript.Execute(...): 07:54:16.230 Duration: 00:00:00.0334618
07:54:16.23[9]INFO :Finish IExternalScript.Execute(...): 07:54:16.230 Duration: 00:00:00.0334618
07:54:17.29[9]DEBUG:Start IExternalScript.Execute(...): 07:54:17.292
07:54:17.29[9]INFO :Start IExternalScript.Execute(...): 07:54:17.292
07:54:17.39[9]DEBUG:Finish IExternalScript.Execute(...): 07:54:17.391 Duration: 00:00:00.0992769
07:54:17.39[9]INFO :Finish IExternalScript.Execute(...): 07:54:17.391 Duration: 00:00:00.0992769
07:54:18.48[7]DEBUG:Start IExternalScript.Execute(...): 07:54:18.480
07:54:18.48[7]INFO :Start IExternalScript.Execute(...): 07:54:18.480
07:54:18.64[7]DEBUG:Finish IExternalScript.Execute(...): 07:54:18.646 Duration: 00:00:00.1653905
07:54:18.64[7]INFO :Finish IExternalScript.Execute(...): 07:54:18.646 Duration: 00:00:00.1653905
07:54:19.81[4]DEBUG:Start IExternalScript.Execute(...): 07:54:19.814
07:54:19.81[4]INFO :Start IExternalScript.Execute(...): 07:54:19.814
07:54:19.84[4]DEBUG:Finish IExternalScript.Execute(...): 07:54:19.846 Duration: 00:00:00.0327801
07:54:19.84[4]INFO :Finish IExternalScript.Execute(...): 07:54:19.846 Duration: 00:00:00.0327801
07:54:20.94[4]DEBUG:Start IExternalScript.Execute(...): 07:54:20.941
07:54:20.94[4]INFO :Start IExternalScript.Execute(...): 07:54:20.941
07:54:21.03[4]DEBUG:Finish IExternalScript.Execute(...): 07:54:21.037 Duration: 00:00:00.0959643
07:54:21.03[4]INFO :Finish IExternalScript.Execute(...): 07:54:21.037 Duration: 00:00:00.0959643

Еще есть подозрение (не проверял), что несмотря на ограничение числа потоков оптимизации, программа все равно использует несколько потоков для оптимизации скрипта на кубиках.


Attachments
code.rar (52 downloads)


Наверх
#17679 - Thu Dec 02 2010 03:03 PM Re: Ненужный пересчет индикатора при оптимизации [Re: jhgjrht]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
оптимизация на кубиках никак не отличается.
Я взял ваши скрипты, историю 8400 баров, 1 поток, выставил 3 параметра 6859 проходов. В каждом тесте дожидался появления 1%.

скрипт на API из code4.cs - остаток 39мин
скрипт на API из code4.cs с убраными сообщениями в лог - остаток 34мин
скрипт на кубиках - остаток 32мин
скрипт на API из OptimizationTest.dll - остаток 1 час 45мин


Отсюда выводы:
не зачем сравнивать скрипты откомплированные с отладочной информацией и без. Вывод в лог любой отладочной информации по определению съедает время.

Наверх
#17736 - Fri Dec 03 2010 06:13 AM Re: Ненужный пересчет индикатора при оптимизации [Re: Nektodron]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Не могу с Вами согласиться.
У меня разница в оценочной длительности процедуры оптимизации между сборками скомпилированными с:
-отладочной информацией (pdb-only) и записью в лог;
-отладочной информацией (pdb-only) без записи в лог (включая запуск/останов секундомера);
-без отладочной информации и записи в лог;
в пределах погрешности измерений.

Скрипты, реализующие одинаковую стратегию "на кубиках" и с использованием "внешнего скрипта" оптимизируются с различной производительностью. Первый процентов на 25 быстрее (% зависит от условий).

Почему у Вас время оптимизации стратегии из OptimizationTest.dll и из скомпилированного code4.cs я не знаю (возможно свойства для скрипта заданы различные?). Хотелось бы узнать.

Уверен, что причину по которой скрипт на кубиках оптимизируется быстрее чем скрипт из "внешнего скрипта" можно выяснить проведя простой эксперимент:
Указать в свойствах для обоих этих скриптов "Макс. баров" = небольшое значение, например, 5 и выполнить оптимизацию.
Разница будет видна невооруженным взглядом.
Скрипт "на кубиках" будет выбрасывать результаты пачками, а внешний - с методичностью метронома, по строчке раз в секунду. Итоговое время оптимизации этих скриптов, конечно же, будет существенно различаться.
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх
#17737 - Fri Dec 03 2010 06:14 AM Re: Ненужный пересчет индикатора при оптимизации [Re: jhgjrht]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Да, спасибо за внимание к моему вопросу!
smile
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх
#17745 - Fri Dec 03 2010 11:55 AM Re: Ненужный пересчет индикатора при оптимизации [Re: jhgjrht]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Originally Posted By: jhgjrht

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

Попробуйте убрать секундомер и отключить вывод в лог.

Наверх
#17746 - Fri Dec 03 2010 11:58 AM Re: Ненужный пересчет индикатора при оптимизации [Re: jhgjrht]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Originally Posted By: jhgjrht

Почему у Вас время оптимизации стратегии из OptimizationTest.dll и из скомпилированного code4.cs я не знаю (возможно свойства для скрипта заданы различные?). Хотелось бы узнать.

Все очень просто, у меня в программе галка "Отладка скриптов" отключен, соответственно TSLab все компилит с максимальной оптимизацией. Вы же компилировали в какой-либо среде с включенной отладочной информацией и без оптимизации. Отсюда разница в исполнении почти в 4 раза.

Наверх
#17789 - Sat Dec 04 2010 08:36 AM Re: Ненужный пересчет индикатора при оптимизации [Re: Nektodron]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Компилировал в Microsoft Visual Studio 2010. Оптимизация включена, отладочная информация выключена, вывод сообщений в лог и секундомер закомментированы. Тем не менее, скрипт с "внешним модулем" и dll в виде его наполнения оптимизируется значительно медленнее, чем скрипт на кубиках или скрипт в виде *.cs.
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх
#17830 - Mon Dec 06 2010 11:07 AM Re: Ненужный пересчет индикатора при оптимизации [Re: jhgjrht]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
Ну очень странно, компилятор TSLab использует обычный, встроенный в NET. Никаких там оптимизаций дополнительных нет.

Наверх


Moderator:  ViL, sar