Bond:
Примерная структура работы системы. Что можно добавить? Что можно оптимизировать?
Сложно сказать. Картинка мне напоминает архитектурный чертеж высотки с многоуровневой стоянкой.
Не выделен самый главный процесс - анализатор окончания. При оптимизации можно параллелить ограниченное количество прогонов, так как если мы используем генетический алгоритм подбора параметров, то след итерация зависит от предыдущей. Есть в принципе разные численные методы для разбиения на кластеры искомых значений функций, но все равно степень параллелизма там крайне низкая.
Bond:
Примерная структура работы системы. Что можно добавить? Что можно оптимизировать?
Сложно сказать. Картинка мне напоминает архитектурный чертеж высотки с многоуровневой стоянкой.
Не выделен самый главный процесс - анализатор окончания. При оптимизации можно параллелить ограниченное количество прогонов, так как если мы используем генетический алгоритм подбора параметров, то след итерация зависит от предыдущей. Есть в принципе разные численные методы для разбиения на кластеры искомых значений функций, но все равно степень параллелизма там крайне низкая.
Хороший чертеж на мой взгляд. Довольно просторная парковка! Отличный ландшафтный дизайн! 😀
Это всего лишь концепция. Чего от нее можно ждать)
К сожалению о генетике пока даже речь не идет. Оптимтзация будет производиться методом перебора(
Многомерные. Тут и генетика, и рой частиц,и дифференциальная эволюция и много другое, в том числе и параллельное.
Пользоваться просто. Есть оптимизируемый вектор, есть целевая функция.
Спасибо большое за информацию! Хорошо, когда уже есть наработки.
Но там столько всего... Как бы во всем это не запутаться. Вы использовали что-нибудь? Что стоит поюзать, а что хлам?
Многомерные. Тут и генетика, и рой частиц,и дифференциальная эволюция и много другое, в том числе и параллельное.
Пользоваться просто. Есть оптимизируемый вектор, есть целевая функция.
Спасибо большое за информацию! Хорошо, когда уже есть наработки.
Но там столько всего... Как бы во всем это не запутаться. Вы использовали что-нибудь? Что стоит поюзать, а что хлам?
Нужно качать swarmOps.
Пользоваться не сложно. Есть базовый класс - Problem, от него наследуемся, и реализуем, что там нужно. Можно посмотреть, там примеров Problems много.
Самое главное - целевая функция Fitness. В нее нужно запихнуть сам процесс тестирования , и вернуть величину по которой хотим оптимизировать: ProfitFactor или еще чего. Ну а, соответственно, параметры передавать в стратегию нужно.
Ну а дальше смотрим, опять же, пример - Test CurveFitting, какой нить, и делаем так же.
Я использовал PSO - particle swarm optimization, и все было круто, хотя авторы, кажется, рекомендовали генетический алгоритм. Там он должен быть где-то.
Ну а еще на википедии много инфы про всевозможные алгоритмы оптимизации.
Пользоваться не сложно. Есть базовый класс - Problem, от него наследуемся, и реализуем, что там нужно. Можно посмотреть, там примеров Problems много.
Самое главное - целевая функция Fitness. В нее нужно запихнуть сам процесс тестирования , и вернуть величину по которой хотим оптимизировать: ProfitFactor или еще чего. Ну а, соответственно, параметры передавать в стратегию нужно.
Ну а дальше смотрим, опять же, пример - Test CurveFitting, какой нить, и делаем так же.
Я использовал PSO - particle swarm optimization, и все было круто, хотя авторы, кажется, рекомендовали генетический алгоритм. Там он должен быть где-то.
Ну а еще на википедии много инфы про всевозможные алгоритмы оптимизации.
Спасибо за рекомендации! Разнообразия много. Может с вашего опытного взгляда подскажете с чего начать? Я для начала планировал итерационный тестировщик сделать. Или стоит сразу пробовать с генетики?
Пользоваться не сложно. Есть базовый класс - Problem, от него наследуемся, и реализуем, что там нужно. Можно посмотреть, там примеров Problems много.
Самое главное - целевая функция Fitness. В нее нужно запихнуть сам процесс тестирования , и вернуть величину по которой хотим оптимизировать: ProfitFactor или еще чего. Ну а, соответственно, параметры передавать в стратегию нужно.
Ну а дальше смотрим, опять же, пример - Test CurveFitting, какой нить, и делаем так же.
Я использовал PSO - particle swarm optimization, и все было круто, хотя авторы, кажется, рекомендовали генетический алгоритм. Там он должен быть где-то.
Ну а еще на википедии много инфы про всевозможные алгоритмы оптимизации.
Спасибо за рекомендации! Разнообразия много. Может с вашего опытного взгляда подскажете с чего начать? Я для начала планировал итерационный тестировщик сделать. Или стоит сразу пробовать с генетики?
Тут же от задач зависит, и от масштабов вычислений.
Итерационный, кстати, вещь очень нужная. Особенно полезно было бы, например, делать прогон с большим шагом, а потом уже иметь возможность уменьшить шаг для какого-то определенного диапазона значений для каких-параметров. Если к этому прикрутить еще какую-либо визуализацию, то такой research-tool будет, имхо, полезнее самого навороченного генетического супер-искателя максимального PnL.
Я бы начал с обычного перебора по сетки в 90% его достаточно для ответа на вопрос о дееспособности стратегии..ну а уж "оптимальные" параметры можно искать после этого:)
P.S. есть возможность подключиться к вашему проекту каким-нибудь образом?
Андрей Шабанов:
Я бы начал с обычного перебора по сетки в 90% его достаточно для ответа на вопрос о дееспособности стратегии..ну а уж "оптимальные" параметры можно искать после этого:)
P.S. есть возможность подключиться к вашему проекту каким-нибудь образом?
Добрый день, Андрей!
Да, конечно, можно. Мой скайп bond_algotrade. Присоединяйтесь. Все что будет сделано - сделано нами и для нас!
В данный момент завершается основная работа над "Анализатором". Спасибо большое Бухарину Ивану за помощь в реализации класса BackgroundWorker!
Примерный план действий на данный момент такой:
Доделать и оптимизировать "Анализатор"
Разобраться с промежуточным "Хранилищем стратегий". Определиться с сериализацией и десериализацией данных хранилища. Что и как там хранить.
Работа над "Оптимизатором". Сохранение промежуточных данных в "Хранилище стратегий", их сортировка и структуризация. Оптимизация итерационного механизма. Работа над производительностью и многопоточностью.
И в конце уже создание торгового "Робота" с заявками, транзакциями, переавторизациями и переподключениями и т.д.
Любая помощь приветствуется! Проект открытый и предназначен для создания инфраструктуры для анализа, оптимизации и торговли.
Bond:
Хорошая новость! Вышла первая версия Анализатора)
Возможности:
Отрисовывает исторические данные,
Строит индикаторы,
Показывает процесс отрисовки и тестирования стратегий,
Можно выбирать свои таймфреймы и временные диапазоны тестирования,
Ведет логирование,
Отображает в процессе тестирования сделки на графиках.
Спасибо, начал разбираться и тестировать.
НО...
При проверке на данных по RIZ3, закачанных Гидрой из Финама (это я на всякий случай, хотя источник данных тут явно не причем) я наблюдаю следующее:
график и индикаторы рисует, то есть с данными вроде бы работает верно
но сделок не совершено ни одной (стратегия та же, что в исходниках - пока ничего не менял, хотел сначала заставить сам софт работать)
а в логах 900 ошибок одинаковых, мол, заявка не была принята по причине нехватки денег: надо 142 тысячи с чем-то, а у вас НОЛЬ
Вот скрин прикрепляю.
Там видно сразу две проблемы:
первая самая очевидная - в тестовом кошельке (счете, портфеле) не указана изначальная сумма.
вторая менее очевидная, но все же... если на счету у меня будет меньше, чем "цена" RI в проверяемый момент, то я не смогу совершить сделку даже в том случае, если бы в реальности у меня хватило денег на ГО даже нескольких контрактов. Ведь фактически можно с 15 тысячами рублей торговать одним контрактом RIZ3 сейчас, а программа не даст ни одного контракта купить, пока в кошельке не будет 140-150 тысяч.
Вопросы по обеим вышеописанным проблемам:
как быть, что делать, где копать и в чем я не прав (если не прав)???
В C# коде не профи поэтому особо не помогу, есть ряд идей по поводу адаптивного поиска, то есть «тестирование» на первом этапе не идёт в полном виде с учётом бид-аск разницы, комиссии проскальзываний и прочих давлеющих факторов, а ищется некий фактор валидности закономерности данной ТС при данных параметрах, такое вычисление делается очень быстро и оно очень сильно коррелирует с детальным тестированием, другими словами, такое фаст-вычисление для разряженного пространства параметров даст «разметку», те места которые показали наличие закономерности «пробить» тем же алгоритмом но уже с меньшим шагом в пространстве параметров, 2-3 итерации такой процедуры даст «маску» в параметрическом пространстве(ПП), для тестирования уже «классическим» путём, перебором генетикой и тп. Это в сотни раз быстрее с потерями за пределами 2х сигм валидных вариантов, причем эти патери скорее шум. Такое маскирование ПП можно настраивать в зависимости от например погога и тп. Одно можно сказать что профитные кластера в ПП будут топологически совпадать как если бы вычисления делать детальным тестером, отличия будут только в отрицательную сторону из за издержек. Можно ещё ускорить есть это вычисление сделать выборочным по какому нибуть стохастическому алгоритму.
Думаю никто здесь не будет оспаривать то, что «выбросы» эффективности стратегии в ПП это наверняка полная лажа, используя выше предложенный фэйк можно упустить массу таких выбросов, но вероятность их работоспособности минимальна.
По поводу стартового капитала - уже нашел ответ.
Надо в коде сразу после строки
var portfolio = new Portfolio ;
вписать еще одну строку:
portfolio.BeginValue = 300000; // Это мы, допустим, начинаем с тремя сотнями тысяч в кошельке
А вот как тестер научить понимать, что для покупки одного контракта можно не иметь все 142-143 тысячи???
То есть как ему передать, что это фьючерс а не акция и у фьючерсов свои законы???
ДОБАВЛЕНО ПОЗЖЕ:
Поскольку вопрос остался, но вопрос явно не по программе уважаемого BOND, а по самому S#.API - то вынес вопрос в отдельную ветку.
А за Analyzer - большое спасибо!!!
SavosRU:
А вот как тестер научить понимать, что для покупки одного контракта можно не иметь все 142-143 тысячи???
То есть как ему передать, что это фьючерс а не акция и у фьючерсов свои законы???
Не дождался ответа. В том числе и в расхваленном чате техподдержки на сервере TFS 😑 ...
Методом ненаучного тыка нашел решение. Делюсь, если кому интересно.
Сначала скриншот результатов - реально вплоть до 10 тысяч на счету (и ниже!) можно еще в тестере купить один контракт RI, если сумма ГО + комиссия не превышает размер оставшихся средств:
Теперь что надо было сделать для этого...
В коде при создании тестового инструмента надо было дописать две строчки, которые на нижеприведенном листинге имеют номера 9 и 10:
```csharp
//Создаем тестовый инструмент, на котором будет производится тестирование
var security = new Security
{
Id = "RIZ3@FORTS",
Code = "RIZ3",
Name = "RTS-12.13",
MinStepSize = 10,
MinStepPrice = (decimal) 6.50506,
MarginBuy = (decimal) 7615.44,
MarginSell = (decimal) 7615.44,
ExchangeBoard = ExchangeBoard.Forts,
};
Разумеется, кому-то для тестирования не нужно указывать размер ГО с точностью до копейки. Ради Бога - можно просто 7620 указать.
Но это в любом случае в двадцать раз меньше, чем пытается использовать тестер без такой поправки кода.
Ну и, конечно, у каждого фьючерса при тестировании нужно указывать его собственный размер ГО - это, надеюсь, многие и сами понимают 😀
**ДОБАВЛЕНО:**
Кстати, в реальном роботе, который будет работать с QUIK (с другими коннекторами не знаю, не проверял) для того, чтобы он тоже корректно мог работать с ГО (вдруг надо будет кому-то) после стандартного создания трейдера надо еще добавить вот такие строчки:
```csharp
if (!_trader.SecuritiesTable.Columns.Contains(DdeSecurityColumns.MarginBuy))
{
_trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MarginBuy);
}
if (!_trader.SecuritiesTable.Columns.Contains(DdeSecurityColumns.MarginSell))
{
_trader.SecuritiesTable.Columns.Add(DdeSecurityColumns.MarginSell);
}
В этом случае программа будет прямо из Квика получать корректные данные по требуемому Гарантийному Обеспечению для каждого выбранного инструмента.
Спасибо за исследование! Я до этого еще не добрался. Довожу до ума Оптимизатор и Анализатор. Сериализация и десериализация многомерных массивов массивов объектов меня убивает... Но уже почти допилил.
От родного логировпния S# я отказался. Написал свое. Под себя.
Переделал полностью график Эквити, а если быть точнее тоже от него отказался и написал свой))) Оказалось он еруеду какую-то считает. Не то что нужно.
Вообще приложения притерпели значительные изменения. Не гарантирую, что все выложу, но интересными вещами конечно поделюсь)
П.С. Программа заточена под работу со свечами. С тиками работает на много медленнее. Если вообще работает) Советую скачать мои свечки из хранилища.
С данными проблем нет: и Гидра качает, и Велслаб и свои наработки.
Если будет новая версия Анализатора и/или оптимизатора, которые пожелаете сделать публичными - с удовольствием приму участие в тестировании.
Особо, конечно, интересует, что за "ерунду" рисует график эквити в этой версии, что пришлось переписывать полностью самому???
SavosRU:
С данными проблем нет: и Гидра качает, и Велслаб и свои наработки.
Если будет новая версия Анализатора и/или оптимизатора, которые пожелаете сделать публичными - с удовольствием приму участие в тестировании.
Особо, конечно, интересует, что за "ерунду" рисует график эквити в этой версии, что пришлось переписывать полностью самому???
Bond:
Доброго времени суток!
Задался мыслью, а как собственно проводить тестирование? Взять один большой диапазон и загнать его в Оптимизатор? А если ошибка какая появится или некорректное значение выпадет будет обидно, когда на вторые сутки тестирование встанет и все данные пропадут. ...
Если я правильно понял суть вопроса, то это смотря какой алгоритм, линейный или динамический. Если линейный то можно распараллелить, если какой либо динамический(например генетический) когда ход тестирования имеет обратную связь со своими же результатами в прошлый момент времени, то тогда нельзя(в общем случае). Но никто не мешает кэшировать состояние во время хода тестирование с определённым интервалом, из которого можно будет восстановиться если произойдёт сбой.
Bond:
Андрей, вы вроде подкованы в математике. Работали с оптимизацией методом Монте-Карло? Поиск глабальных экстремумов методом имитации отжига?
Пытаюсь разобраться с какой степенью при каждой новой выборке уменьшать диапазон разброса случайных величин. Так сказать как определить "сходимость" к экстремуму. Опять же какое распределение случайных величин использовать? Нормальное?
Как посчитать погрешность расчета?
Если получится два близких по значению экстремума, но на большом расстоянии друг от друга? Какой брать для следующей итерации? И т.д. и т.п.
По сути этот метод урезанная генетика)
И да, я его запилю на базе Оптимизаторов) Сокращу время расчетов и увеличу число переменных в массиве данных)
Буду признателен за помощь!)
Знаю про такой, теоретически способ элегантный и интересный, но сам не реализовывал руками чтобы вникнуть в тонкости. Поэтому не буду умничать на эту тему.
По поводу распределения думаю что нормальное, стартовое МО такое чтобы «прыгало» по всему диапазону в начале, температура падает по экспоненте и пропорционально ей и целевому функционалу рандомное смещение.
Если экстремумов несколько, наверняка стоит исследовать их по отдельность, а не выбирать самый самый.
Да, Монте Карло и «генетика» одного рода методы поиска экстремумов функционалов, «шаг» тестирования в параметрическом пространстве пропорционален «ошибке», при приближении к минимуму ошибки происходит уплотнение сетки, то есть более детальный поиск вблизи экстремума, поэтому и градиентный спуск тоже родственник, хотя предпосылки совсем другие. В общем суть этих методов это адаптивная плотность тестирования пропорционально близости к экстремуму.
Bond:
Андрей, вот мой скайп: bond_algotrade Добавляйтесь! С удовольствием с вами пообщаюсь! Вот собственно методика на которой я решил остановиться:
www.math.spbu.ru/user/gran/sb1/sakal.pdf
Если поможете, в долгу не останусь)
Проводя оптимизацию появилась идея сделать таблицу распределения удачных стратегий и не удачных по каждому параметру в отдельности.
Приветствую.
Уважаемый, если вам уж так нравится дразнить народ своими тестами на своей софтине, то извольте обосновать научность ваших действий, которая предполагает фальсифицируемость результата вычислений коллегами, вы ведь не будете спорить что красивую экселевскую табличку может нарисовать каждый, я например даже в экселе могу ещё и графики делать, могу рассказать как))))
Заметьте я уже не прошу у вас код всего проекта и готов сам попытаться ваш старый код поразбивать, точнее не поразбивать а просто проверить те ли значения выдают при таких параметрах ваша сборка.
Предоставьте данные на которых тестировали, стратегию и результаты на конкретных параметрах, если они совпадут хотя бы частично с некоторыми случайно выбранными из таблиц, то получите зачёт и одобрение, если нет то думаю всем понятно что тогда.
Уж извините но я на Форекс форумах насмотрелся тестерных граалей и нефальсифициреемых вбросов экспоненциальных эквити. Результат должен быть хотя бы выборочно проверен, иначе это разводняк.
Не ставьте пожалуйста под сомнение собственную репутацию и парней из S# которые вас так ценят.
Уважаемый, если вам уж так нравится дразнить народ своими тестами на своей софтине, то извольте обосновать научность ваших действий, которая предполагает фальсифицируемость результата вычислений коллегами, вы ведь не будете спорить что красивую экселевскую табличку может нарисовать каждый, я например даже в экселе могу ещё и графики делать, могу рассказать как))))
Я никого не дразню. Просто разобрал итоговую матрицу протестированных стратегий и заполнил таблицу по группам параметров. Получил интересный результат, который можно использовать при исследовании стратегии. Пока нигде не видел такой статистики. По поводу фальсификации) Я никому ничего доказать не пытаюсь)
Можно ли тоже самое получить используя версию 2.0, выложенную в открытую? Что в ней поменялось кроме этих новомодных «генетических стохастических» примочек?
Ваша ссылка не работает. Такую статистику можно получить только при оптимизации и исследовании пространства стратегий. "Анализатор" тестирует только одну стратегию. Строит по ней графики, ведет логирование и считает Профит.
В текущей версии "Анализатора" можно сформировать большую итоговую статистическую таблицу по результатам исследования, сортировать ее и пересчитывать параметры, строить графики. Также появилась вышеуказанная таблица, оптимизирован интерфейс для удобства исследований и т.д.
Оптимизируют у меня два приложения тестер-оптимизатор "МонтеКарло"(старая версия) и тестер-оптимизатор "Исследователь"(последняя версия с исследованием экстремумов).
Выложенный в общий доступ "Анализатор" - это моя первая базовая версия. Она рабочая. Но производительность не оптимизирована. Также кучи плюх нет. Но она реальная, ее можно разобрать на кучу примеров. Как выводить индикаторы и сделки, как работать с историей, как тестировать и т.д.
Заметьте я уже не прошу у вас код всего проекта и готов сам попытаться ваш старый код поразбивать, точнее не поразбивать а просто проверить те ли значения выдают при таких параметрах ваша сборка.
У меня не стоит задача проверять свои результаты. Пока самостоятельно справляюсь с тестированием кода.
Предоставьте данные на которых тестировали, стратегию и результаты на конкретных параметрах, если они совпадут хотя бы частично с некоторыми случайно выбранными из таблиц, то получите зачёт и одобрение, если нет то думаю всем понятно что тогда.
Без комментариев)
Уж извините но я на Форекс форумах насмотрелся тестерных граалей и нефальсифициреемых вбросов экспоненциальных эквити. Результат должен быть хотя бы выборочно проверен, иначе это разводняк.
Вот если бы я вам это продал, а там оказались Экселевские таблицы, то ваши возмущения были бы обоснованы, а так извините)
Не ставьте пожалуйста под сомнение собственную репутацию и парней из S# которые вас так ценят.
"Я никому ничего доказать не пытаюсь)"
Кстати, по поводу ПО. Все приложения я пишу исключительно для себя, для реальной торговли, а не для околорыночной.
Если Вас действительно так заинтересовали мои приложения и вы хотите их приобрести, то пишите мне в Скайп, ник bond_algotrade. Рассмотрим варианты, в том числе с исходным кодом.😎
Комментарии (32)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Сложно сказать. Картинка мне напоминает архитектурный чертеж высотки с многоуровневой стоянкой.
Не выделен самый главный процесс - анализатор окончания. При оптимизации можно параллелить ограниченное количество прогонов, так как если мы используем генетический алгоритм подбора параметров, то след итерация зависит от предыдущей. Есть в принципе разные численные методы для разбиения на кластеры искомых значений функций, но все равно степень параллелизма там крайне низкая.
Хороший чертеж на мой взгляд. Довольно просторная парковка! Отличный ландшафтный дизайн! 😀
Это всего лишь концепция. Чего от нее можно ждать) К сожалению о генетике пока даже речь не идет. Оптимтзация будет производиться методом перебора(
Могу порекомендовать оптимизаторы ХОП!
Многомерные. Тут и генетика, и рой частиц,и дифференциальная эволюция и много другое, в том числе и параллельное.
Пользоваться просто. Есть оптимизируемый вектор, есть целевая функция.
Спасибо большое за информацию! Хорошо, когда уже есть наработки. Но там столько всего... Как бы во всем это не запутаться. Вы использовали что-нибудь? Что стоит поюзать, а что хлам?
Нужно качать swarmOps.
Пользоваться не сложно. Есть базовый класс - Problem, от него наследуемся, и реализуем, что там нужно. Можно посмотреть, там примеров Problems много.
Самое главное - целевая функция Fitness. В нее нужно запихнуть сам процесс тестирования , и вернуть величину по которой хотим оптимизировать: ProfitFactor или еще чего. Ну а, соответственно, параметры передавать в стратегию нужно.
Ну а дальше смотрим, опять же, пример - Test CurveFitting, какой нить, и делаем так же.
Я использовал PSO - particle swarm optimization, и все было круто, хотя авторы, кажется, рекомендовали генетический алгоритм. Там он должен быть где-то.
Ну а еще на википедии много инфы про всевозможные алгоритмы оптимизации.
Спасибо за рекомендации! Разнообразия много. Может с вашего опытного взгляда подскажете с чего начать? Я для начала планировал итерационный тестировщик сделать. Или стоит сразу пробовать с генетики?
Спасибо за рекомендации! Разнообразия много. Может с вашего опытного взгляда подскажете с чего начать? Я для начала планировал итерационный тестировщик сделать. Или стоит сразу пробовать с генетики?
Тут же от задач зависит, и от масштабов вычислений.
Итерационный, кстати, вещь очень нужная. Особенно полезно было бы, например, делать прогон с большим шагом, а потом уже иметь возможность уменьшить шаг для какого-то определенного диапазона значений для каких-параметров. Если к этому прикрутить еще какую-либо визуализацию, то такой research-tool будет, имхо, полезнее самого навороченного генетического супер-искателя максимального PnL.
Я бы начал с обычного перебора по сетки в 90% его достаточно для ответа на вопрос о дееспособности стратегии..ну а уж "оптимальные" параметры можно искать после этого:) P.S. есть возможность подключиться к вашему проекту каким-нибудь образом?
Добрый день, Андрей! Да, конечно, можно. Мой скайп bond_algotrade. Присоединяйтесь. Все что будет сделано - сделано нами и для нас! В данный момент завершается основная работа над "Анализатором". Спасибо большое Бухарину Ивану за помощь в реализации класса BackgroundWorker! Примерный план действий на данный момент такой:
Спасибо, начал разбираться и тестировать. НО... При проверке на данных по RIZ3, закачанных Гидрой из Финама (это я на всякий случай, хотя источник данных тут явно не причем) я наблюдаю следующее:
Вот скрин прикрепляю.
Там видно сразу две проблемы:
Вопросы по обеим вышеописанным проблемам: как быть, что делать, где копать и в чем я не прав (если не прав)???
Если свечи в минутах, то у меня не улетают сделки вот так:
Сделки передаю так:
Для других видов свечей (VolumeCandle, TickCandle, и тп) этот код не пойдет.
Великолепное начинание! Спасибо Алексей.
В C# коде не профи поэтому особо не помогу, есть ряд идей по поводу адаптивного поиска, то есть «тестирование» на первом этапе не идёт в полном виде с учётом бид-аск разницы, комиссии проскальзываний и прочих давлеющих факторов, а ищется некий фактор валидности закономерности данной ТС при данных параметрах, такое вычисление делается очень быстро и оно очень сильно коррелирует с детальным тестированием, другими словами, такое фаст-вычисление для разряженного пространства параметров даст «разметку», те места которые показали наличие закономерности «пробить» тем же алгоритмом но уже с меньшим шагом в пространстве параметров, 2-3 итерации такой процедуры даст «маску» в параметрическом пространстве(ПП), для тестирования уже «классическим» путём, перебором генетикой и тп. Это в сотни раз быстрее с потерями за пределами 2х сигм валидных вариантов, причем эти патери скорее шум. Такое маскирование ПП можно настраивать в зависимости от например погога и тп. Одно можно сказать что профитные кластера в ПП будут топологически совпадать как если бы вычисления делать детальным тестером, отличия будут только в отрицательную сторону из за издержек. Можно ещё ускорить есть это вычисление сделать выборочным по какому нибуть стохастическому алгоритму.
Думаю никто здесь не будет оспаривать то, что «выбросы» эффективности стратегии в ПП это наверняка полная лажа, используя выше предложенный фэйк можно упустить массу таких выбросов, но вероятность их работоспособности минимальна.
По поводу стартового капитала - уже нашел ответ. Надо в коде сразу после строки var portfolio = new Portfolio ; вписать еще одну строку: portfolio.BeginValue = 300000; // Это мы, допустим, начинаем с тремя сотнями тысяч в кошельке
А вот как тестер научить понимать, что для покупки одного контракта можно не иметь все 142-143 тысячи??? То есть как ему передать, что это фьючерс а не акция и у фьючерсов свои законы???
ДОБАВЛЕНО ПОЗЖЕ: Поскольку вопрос остался, но вопрос явно не по программе уважаемого BOND, а по самому S#.API - то вынес вопрос в отдельную ветку. А за Analyzer - большое спасибо!!!
Не дождался ответа. В том числе и в расхваленном чате техподдержки на сервере TFS 😑 ...
Методом ненаучного тыка нашел решение. Делюсь, если кому интересно. Сначала скриншот результатов - реально вплоть до 10 тысяч на счету (и ниже!) можно еще в тестере купить один контракт RI, если сумма ГО + комиссия не превышает размер оставшихся средств:
Теперь что надо было сделать для этого... В коде при создании тестового инструмента надо было дописать две строчки, которые на нижеприведенном листинге имеют номера 9 и 10: ```csharp //Создаем тестовый инструмент, на котором будет производится тестирование var security = new Security { Id = "RIZ3@FORTS", Code = "RIZ3", Name = "RTS-12.13", MinStepSize = 10, MinStepPrice = (decimal) 6.50506, MarginBuy = (decimal) 7615.44, MarginSell = (decimal) 7615.44, ExchangeBoard = ExchangeBoard.Forts, };
В этом случае программа будет прямо из Квика получать корректные данные по требуемому Гарантийному Обеспечению для каждого выбранного инструмента.
Спасибо за исследование! Я до этого еще не добрался. Довожу до ума Оптимизатор и Анализатор. Сериализация и десериализация многомерных массивов массивов объектов меня убивает... Но уже почти допилил. От родного логировпния S# я отказался. Написал свое. Под себя. Переделал полностью график Эквити, а если быть точнее тоже от него отказался и написал свой))) Оказалось он еруеду какую-то считает. Не то что нужно. Вообще приложения притерпели значительные изменения. Не гарантирую, что все выложу, но интересными вещами конечно поделюсь)
П.С. Программа заточена под работу со свечами. С тиками работает на много медленнее. Если вообще работает) Советую скачать мои свечки из хранилища.
С данными проблем нет: и Гидра качает, и Велслаб и свои наработки. Если будет новая версия Анализатора и/или оптимизатора, которые пожелаете сделать публичными - с удовольствием приму участие в тестировании. Особо, конечно, интересует, что за "ерунду" рисует график эквити в этой версии, что пришлось переписывать полностью самому???
http://stocksharp.com/forum/4152/Mutnaia-statistika/
В приложении базовая версия Оптимизатора!
Обзорная статья
Если я правильно понял суть вопроса, то это смотря какой алгоритм, линейный или динамический. Если линейный то можно распараллелить, если какой либо динамический(например генетический) когда ход тестирования имеет обратную связь со своими же результатами в прошлый момент времени, то тогда нельзя(в общем случае). Но никто не мешает кэшировать состояние во время хода тестирование с определённым интервалом, из которого можно будет восстановиться если произойдёт сбой.
Знаю про такой, теоретически способ элегантный и интересный, но сам не реализовывал руками чтобы вникнуть в тонкости. Поэтому не буду умничать на эту тему.
По поводу распределения думаю что нормальное, стартовое МО такое чтобы «прыгало» по всему диапазону в начале, температура падает по экспоненте и пропорционально ей и целевому функционалу рандомное смещение.
Если экстремумов несколько, наверняка стоит исследовать их по отдельность, а не выбирать самый самый.
Да, Монте Карло и «генетика» одного рода методы поиска экстремумов функционалов, «шаг» тестирования в параметрическом пространстве пропорционален «ошибке», при приближении к минимуму ошибки происходит уплотнение сетки, то есть более детальный поиск вблизи экстремума, поэтому и градиентный спуск тоже родственник, хотя предпосылки совсем другие. В общем суть этих методов это адаптивная плотность тестирования пропорционально близости к экстремуму.
Добавил.
Приветствую.
Уважаемый, если вам уж так нравится дразнить народ своими тестами на своей софтине, то извольте обосновать научность ваших действий, которая предполагает фальсифицируемость результата вычислений коллегами, вы ведь не будете спорить что красивую экселевскую табличку может нарисовать каждый, я например даже в экселе могу ещё и графики делать, могу рассказать как))))
Можно ли тоже самое получить используя версию 2.0, выложенную в открытую? Что в ней поменялось кроме этих новомодных «генетических стохастических» примочек?
Заметьте я уже не прошу у вас код всего проекта и готов сам попытаться ваш старый код поразбивать, точнее не поразбивать а просто проверить те ли значения выдают при таких параметрах ваша сборка.
Предоставьте данные на которых тестировали, стратегию и результаты на конкретных параметрах, если они совпадут хотя бы частично с некоторыми случайно выбранными из таблиц, то получите зачёт и одобрение, если нет то думаю всем понятно что тогда.
Уж извините но я на Форекс форумах насмотрелся тестерных граалей и нефальсифициреемых вбросов экспоненциальных эквити. Результат должен быть хотя бы выборочно проверен, иначе это разводняк.
Не ставьте пожалуйста под сомнение собственную репутацию и парней из S# которые вас так ценят.
Кстати, по поводу ПО. Все приложения я пишу исключительно для себя, для реальной торговли, а не для околорыночной. Если Вас действительно так заинтересовали мои приложения и вы хотите их приобрести, то пишите мне в Скайп, ник bond_algotrade. Рассмотрим варианты, в том числе с исходным кодом.😎
Скайпом и соцсетями не пользуюсь, это убийство времени.
Интерес к вашему продукту, уже перегорел. Хороша ложка к обеду.