-
Atom
18.10.2013


-



Спасибо:


< 1 2 3 4  >
Kazai Mazai

Фотография
Дата: 28.10.2013
Ответить


Bond Перейти
Цитата:

Нужно качать swarmOps.

Пользоваться не сложно. Есть базовый класс - Problem, от него наследуемся, и реализуем, что там нужно. Можно посмотреть, там примеров Problems много.

Самое главное - целевая функция Fitness. В нее нужно запихнуть сам процесс тестирования , и вернуть величину по которой хотим оптимизировать: ProfitFactor или еще чего. Ну а, соответственно, параметры передавать в стратегию нужно.

Ну а дальше смотрим, опять же, пример - Test CurveFitting, какой нить, и делаем так же.

Я использовал PSO - particle swarm optimization, и все было круто, хотя авторы, кажется, рекомендовали генетический алгоритм. Там он должен быть где-то.

Ну а еще на википедии много инфы про всевозможные алгоритмы оптимизации.



Спасибо за рекомендации! Разнообразия много. Может с вашего опытного взгляда подскажете с чего начать? Я для начала планировал итерационный тестировщик сделать. Или стоит сразу пробовать с генетики?


Тут же от задач зависит, и от масштабов вычислений.

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


Спасибо: Bond

Bond

Фотография
Дата: 06.11.2013
Ответить


-
Analyzer (1).rar 4 MB (252)
Спасибо: Андрей Гунинский SavosRU Aleksey24

Иван З.

Фотография
Дата: 06.11.2013
Ответить


Если свечи в минутах, то у меня не улетают сделки вот так:
Код
        private void DrawTrade(IEnumerable<MyTrade> trade)
        {
            this.GuiAsync(
                () =>
                CandleChart.ProcessValues(
                    TimeSpan.FromMinutes(SelectedTimeFrame).GetCandleBounds(trade.Last().Trade.Time).Min,
                    new Dictionary<IChartElement, object>
                        {
                            {_tradeElement, trade.Last()},
                        }));
        }

Сделки передаю так:
Код
_trader.NewMyTrades += DrawTrade;

Для других видов свечей (VolumeCandle, TickCandle, и тп) этот код не пойдет.
Спасибо: Bond

Андрей Гунинский

Фотография
Дата: 08.11.2013
Ответить


Великолепное начинание! Спасибо Алексей.

В C# коде не профи поэтому особо не помогу, есть ряд идей по поводу адаптивного поиска, то есть «тестирование» на первом этапе не идёт в полном виде с учётом бид-аск разницы, комиссии проскальзываний и прочих давлеющих факторов, а ищется некий фактор валидности закономерности данной ТС при данных параметрах, такое вычисление делается очень быстро и оно очень сильно коррелирует с детальным тестированием, другими словами, такое фаст-вычисление для разряженного пространства параметров даст «разметку», те места которые показали наличие закономерности «пробить» тем же алгоритмом но уже с меньшим шагом в пространстве параметров, 2-3 итерации такой процедуры даст «маску» в параметрическом пространстве(ПП), для тестирования уже «классическим» путём, перебором генетикой и тп. Это в сотни раз быстрее с потерями за пределами 2х сигм валидных вариантов, причем эти патери скорее шум. Такое маскирование ПП можно настраивать в зависимости от например погога и тп. Одно можно сказать что профитные кластера в ПП будут топологически совпадать как если бы вычисления делать детальным тестером, отличия будут только в отрицательную сторону из за издержек. Можно ещё ускорить есть это вычисление сделать выборочным по какому нибуть стохастическому алгоритму.

Думаю никто здесь не будет оспаривать то, что «выбросы» эффективности стратегии в ПП это наверняка полная лажа, используя выше предложенный фэйк можно упустить массу таких выбросов, но вероятность их работоспособности минимальна.
Спасибо: Bond

Bond

Фотография
Дата: 11.11.2013
Ответить


-
Спасибо:

SavosRU

Фотография
Дата: 18.11.2013
Ответить


Bond Перейти
Хорошая новость! Вышла первая версия Анализатора)
Возможности:
- Отрисовывает исторические данные,
- Строит индикаторы,
- Показывает процесс отрисовки и тестирования стратегий,
- Можно выбирать свои таймфреймы и временные диапазоны тестирования,
- Ведет логирование,
- Отображает в процессе тестирования сделки на графиках.


Спасибо, начал разбираться и тестировать.
НО...
При проверке на данных по RIZ3, закачанных Гидрой из Финама (это я на всякий случай, хотя источник данных тут явно не причем) я наблюдаю следующее:
- график и индикаторы рисует, то есть с данными вроде бы работает верно
- но сделок не совершено ни одной (стратегия та же, что в исходниках - пока ничего не менял, хотел сначала заставить сам софт работать)
- а в логах 900 ошибок одинаковых, мол, заявка не была принята по причине нехватки денег: надо 142 тысячи с чем-то, а у вас НОЛЬ

Вот скрин прикрепляю.
Analyzer_v.1.0 - нет денег на тестируемом счету
Там видно сразу две проблемы:
- первая самая очевидная - в тестовом кошельке (счете, портфеле) не указана изначальная сумма.
- вторая менее очевидная, но все же... если на счету у меня будет меньше, чем "цена" RI в проверяемый момент, то я не смогу совершить сделку даже в том случае, если бы в реальности у меня хватило денег на ГО даже нескольких контрактов. Ведь фактически можно с 15 тысячами рублей торговать одним контрактом RIZ3 сейчас, а программа не даст ни одного контракта купить, пока в кошельке не будет 140-150 тысяч.

Вопросы по обеим вышеописанным проблемам:
как быть, что делать, где копать и в чем я не прав (если не прав)???
Спасибо:

SavosRU

Фотография
Дата: 18.11.2013
Ответить


По поводу стартового капитала - уже нашел ответ.
Надо в коде сразу после строки
var portfolio = new Portfolio {Name = "test"};
вписать еще одну строку:
portfolio.BeginValue = 300000; // Это мы, допустим, начинаем с тремя сотнями тысяч в кошельке

А вот как тестер научить понимать, что для покупки одного контракта можно не иметь все 142-143 тысячи???
То есть как ему передать, что это фьючерс а не акция и у фьючерсов свои законы???

ДОБАВЛЕНО ПОЗЖЕ:
Поскольку вопрос остался, но вопрос явно не по программе уважаемого BOND, а по самому S#.API - то вынес вопрос в отдельную ветку.
А за Analyzer - большое спасибо!!!
Спасибо:

SavosRU

Фотография
Дата: 19.11.2013
Ответить


SavosRU Перейти

А вот как тестер научить понимать, что для покупки одного контракта можно не иметь все 142-143 тысячи???
То есть как ему передать, что это фьючерс а не акция и у фьючерсов свои законы???


Не дождался ответа. В том числе и в расхваленном чате техподдержки на сервере TFS [bored] ...

Методом ненаучного тыка нашел решение. Делюсь, если кому интересно.
Сначала скриншот результатов - реально вплоть до 10 тысяч на счету (и ниже!) можно еще в тестере купить один контракт RI, если сумма ГО + комиссия не превышает размер оставшихся средств:
Фьючерсы в тестере торгуются не за их стоимость по графику, а за установленный размер ГО (как и должно быть)

Теперь что надо было сделать для этого...
В коде при создании тестового инструмента надо было дописать две строчки, которые на нижеприведенном листинге имеют номера 9 и 10:
Код
//Создаем тестовый инструмент, на котором будет производится тестирование
        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 указать.
Но это в любом случае в двадцать раз меньше, чем пытается использовать тестер без такой поправки кода.
Ну и, конечно, у каждого фьючерса при тестировании нужно указывать его собственный размер ГО - это, надеюсь, многие и сами понимают [biggrin]


ДОБАВЛЕНО:
Кстати, в реальном роботе, который будет работать с QUIK (с другими коннекторами не знаю, не проверял) для того, чтобы он тоже корректно мог работать с ГО (вдруг надо будет кому-то) после стандартного создания трейдера надо еще добавить вот такие строчки:

Код
        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);
        }   


В этом случае программа будет прямо из Квика получать корректные данные по требуемому Гарантийному Обеспечению для каждого выбранного инструмента.
Спасибо: wkj

Bond

Фотография
Дата: 19.11.2013
Ответить


Спасибо за исследование! Я до этого еще не добрался. Довожу до ума Оптимизатор и Анализатор. Сериализация и десериализация многомерных массивов массивов объектов меня убивает... Но уже почти допилил.
От родного логировпния S# я отказался. Написал свое. Под себя.
Переделал полностью график Эквити, а если быть точнее тоже от него отказался и написал свой))) Оказалось он еруеду какую-то считает. Не то что нужно.
Вообще приложения притерпели значительные изменения. Не гарантирую, что все выложу, но интересными вещами конечно поделюсь)

П.С. Программа заточена под работу со свечами. С тиками работает на много медленнее. Если вообще работает) Советую скачать мои свечки из хранилища.
Спасибо:

SavosRU

Фотография
Дата: 19.11.2013
Ответить


С данными проблем нет: и Гидра качает, и Велслаб и свои наработки.
Если будет новая версия Анализатора и/или оптимизатора, которые пожелаете сделать публичными - с удовольствием приму участие в тестировании.
Особо, конечно, интересует, что за "ерунду" рисует график эквити в этой версии, что пришлось переписывать полностью самому???
Спасибо:
< 1 2 3 4  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy