Произведены следующие доработки:
  • обновлена сервисная библиотека: добавлен метод-расширение по расчету стандартного отклонения данных коллекции. Имеется расчет в двух режимах: отклонение от среднего значения в обе стороны (как при расчете коэффициента Шарпа) и отклонение от среднего значения только в сторону ниже среднего значения (как при расчете коэффициента Сортино). Можно было бы использовать отличную библиотеку математических расчетов для C#, но это потребует добавления дополнительных DLL в папку Handlers, поэтому был добавлен самописный метод, чтобы не превращать использование кубика в процедуру с дополнительными сложностями.
  • добавлена настройка "Вывод в оптимизацию: PeriodsData". При установленной опции в оптимизацию выводятся параметры на основании тестов каждого временного периода:
    • процент положительных периодов из общего числа протестированных периодов,
    • средняя доходность в пунктах и процентах,
    • максимальная просадка в пунктах и процентах,
    • среднее кол-во сделок,
    • уточненный коэффициент MAR,
    • стандартное отклонение доходности по периодам,
    • стандартное отклонение доходности по периодам в "отрицательную сторону" (сторону ниже среднего значения выборки),
    • коэффициент риска (по сути коэф. Шарпа, рассчитанный на основании данных каждого тестового периода),
    • просадка кривой доходности, то есть не так просадка, что считает платформа, а именно просадка доходности без учета начального депо - характеризует свойство системы "терять" накопленную доходность, рассчитывает на основании стандартного отклонения только в область отрицательных значений



      Просадки и доходности по периодам считаются корректно в независимости от указания начального депо, расчет использует фактическое начальное депо, требуемое для открытие необходимого кол-ва сделок на каждом из тестируемых периодов. В настоящее время в качестве периодов используются только года. Данные переходных между периодами сделок не учитываются, то есть параметры перформанса стратегии с текущим набором параметров считаются по фактически совершенным в течение тестируемого интервала сделкам, в связи с чем рекомендуется для теста использовать кубик CloseEveryPeriod чтобы учитывать внутри периода "цельные" сделки, то есть которые и открылись и закрылись внутри периода.



      В данном случае есть еще один положительный момент, выражающий в том, что все периоды будут протестированы независимо друг от друга, каждый со своими сделками без переноса сделок на другой период, в общем случае данный тест является одним из видов кросс-валидации на разных периодах, когда параметры подбираются на одном периоде и тестируются на другом.
  • добавлена настройка "Настройки PeriodsData: Вывод PL за каждый период". При установленной опции в оптимизацию будут выведены данные по PL за каждый период. По умолчанию опция снята. При снятой опции "Вывод в оптимизацию: PeriodsData" данная настройка не имеет значения - данные не выводится.
  • добавлена настройка "Настройки PeriodsData: Вывод PL% за каждый период". При установленной опции в оптимизацию будут выведены данные по PL% за каждый период. По умолчанию опция снята. При снятой опции "Вывод в оптимизацию: PeriodsData" данная настройка не имеет значения - данные не выводится.
  • добавлена настройка "Настройки PeriodsData: Вывод MaxDD за каждый период". При установленной опции в оптимизацию будут выведены данные по MaxDD за каждый период. По умолчанию опция снята. При снятой опции "Вывод в оптимизацию: PeriodsData" данная настройка не имеет значения - данные не выводится.
  • добавлена настройка "Настройки PeriodsData: Вывод MaxDD% за каждый период". При установленной опции в оптимизацию будут выведены данные по MaxDD% за каждый период. По умолчанию опция снята. При снятой опции "Вывод в оптимизацию: PeriodsData" данная настройка не имеет значения - данные не выводится.
  • добавлена настройка "Настройки PeriodsData: Вывод кол-ва сделок за каждый период". При установленной опции в оптимизацию будут выведены данные по количеству сделок за каждый период. По умолчанию опция снята. Примечание: здесь необходимо помнить, что в каждом периоде учитываются только те сделки, которые были открыты и закрыты внутри данного периода, переходные сделки не учитываются. Полное описание данного момента приведено в описании настройки "Вывод в оптимизацию: PeriodsData". При снятой опции "Вывод в оптимизацию: PeriodsData" данная настройка не имеет значения - данные не выводится.

    Пример вывода детальных параметров по периодам:


Примечания:
===========
  • При включении каждой настройки по выводу данных в оптимизацию следует ожидать увеличения общего времени оптимизации в силу присутствия намного бОльшего кол-ва расчетов. Где можно было оптимизировать расчеты - это сделано, использованы, в том числе, рекомендации документации платформы ТСЛаб. На тестах загрузка процессора ровная в пределах 100% с небольшими просадками, то есть явных огрехов в оптимизации использования ресурсов не имеется, но при появлении новых мыслей в код будут вноситься изменения и дополнения.


Attachments
Общие параметры периодов.jpg (1003 downloads)
Детальные параметры по периодам.jpg (996 downloads)
Закрытие сделок в конце периода.jpg (992 downloads)
Test. CloseEveryPeriod.zip (69 downloads)
gaaStatData_PeriodStatistic.zip (71 downloads)
gaaCommon_ServiceLib.zip (65 downloads)



Отредактировано AleksandrGanov (Tue Apr 06 2021 06:08 PM)